Regle Iptables

Merci pour ta réponse. Les utilisateurs non pas le pouvoirs de modifier leur route, il non pas de droit administrateur sur leur poste.

guigui69

Si les utilisateurs ne peuvent modifier la route par défaut et si le filtrage sortant ne peut être effectué par le routeur de secours, alors c’est cohérent de le faire sur la machine proxy.

Par exemple, au lieu d’une règle qui autorise tout de $lan vers $lan :

# autoriser le trafic établi et lié
iptables -A FORWARD -i $lan -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT

# autoriser les connexions sortantes HTTPS
iptables -A FORWARD -i $lan -o $lan -m state --state NEW -s 172.16.0.0/16 -p tcp --dport 443 -j ACCEPT

et ainsi de suite pour les autres connexions sortantes à autoriser.

Voici mon code:


#!/bin/bash
#script de configuration iptables
#16-05-2009



wan="eth1"
lan="eth0"
serveur1="172.16.0.19"
serveur2="172.16.0.252"
pcadmin1="172.16.0.91"
pcadmin2=$(/usr/bin/host pan-por03.panidor.org | cut -d" " -f4)

# Refuse les rénses aux broadcasts.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Refuse le routage des paquets source.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Refuse les redirections ICMP.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Active la protection contre les erreurs ICMP.
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Log les paquets spoofé le routage des paquets source et la redirection des paquets.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# Active la protection TCP syn cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#activation du routeur####
echo "1" > /proc/sys/net/ipv4/ip_forward


# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

#Remise à ero

iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

iptables -A POSTROUTING -t nat -o $wan -j MASQUERADE
######################## LAN ##################################
#### Autoriser les connexions deja etablis ou renouvellé#####
#### qui traverse le pare-feu #################################
iptables -A FORWARD -i $wan -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $lan -o $wan -m state --state ESTABLISHED,RELATED -j ACCEPT

######################## PARTIE SERVEUR #######################
#### Autorise protocole UDP pour le dns, Serveur 1 et 2 #######
iptables -A FORWARD -p udp --dport 53 -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -i $lan -o $wan -s $serveur2 -m state --state NEW -j ACCEPT
#### Autorise protocole TCP pour serveur 1 (pop3,smtp,dns)et 2(dns) ####
iptables -A FORWARD -p tcp --dport 53 -i $lan -o $wan -s $serveur2 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dport 110,25,53 -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT
#### Autorise LAN Ã aire de l'https ####
iptables -A FORWARD -p tcp --dport 443 -i $lan -o $wan -m state --state NEW -j ACCEPT
iptables -A FORWARD -p ICMP -i $lan -o $wan -m state --state NEW -j ACCEPT
## Autorisation des pcadmin 1 et 2 en tcp udp 47 (gre)
iptables -A FORWARD -p tcp  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp  -i $lan -o $wan -s $pcadmin2 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp  -i $lan -o $wan -s $pcadmin2 -m state --state NEW -j ACCEPT

iptables -A FORWARD  -p 47  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT


############ LAN => FW ###################
#### redirection du port 80 qui rentre par l'interface lan vers le port dansgaurdian ####
iptables -t nat -A PREROUTING -i $lan -p tcp --dport 80 -j REDIRECT --to-ports 8080
#### Autorise le SSH du lan vers FW ####
iptables -A INPUT -p tcp --dport ssh -i $lan -m state --state NEW -j ACCEPT
#### Autorise le LAN a rentrer sur le port 8080 et donnéa rénse sur le 80
iptables -A INPUT -p tcp --dport 8080 -i $lan -m state --state NEW -j ACCEPT




#########
### FW ##
#########
###############################################################
##### Autorise les connexion dè etablished ou renouvellé###
#####             en  input /output                  ####
###############################################################
iptables -A INPUT -i $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $wan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $wan -m state --state ESTABLISHED,RELATED -j ACCEPT
###################### interface local ########################
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
############### Autoriser le FW interroger DNS WAN ################
iptables -A OUTPUT -o $wan -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $wan -p tcp --dport 53 -m state --state NEW -j ACCEPT

############### Autoriser le FW interroger DNS LAN ################
iptables -A OUTPUT -o $lan -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $lan -p tcp --dport 53 -m state --state NEW -j ACCEPT

############### Autoriser le FW interroger web ################
iptables -A OUTPUT -o $wan -p tcp --dport 80 -m state --state NEW -j ACCEPT


###############################################################
######################    FTP    ##############################
###############################################################
#################### Active Module ############################
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
####################### FW => WAN ############################
iptables -A OUTPUT -o $wan -p tcp --dport 21 -m state --state NEW -j ACCEPT
################## ftp du LAN vers WAN #######################
iptables -A FORWARD -p tcp -i $lan --sport 1024:65535 --dport 21 -o $wan -m state --state NEW -j ACCEPT

############################################################################
####################PARTIE BASCULE ROUTEUR SECOUR###########################
############################################################################

# désactivation de l'envoi des ICMP redirect
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/$lan/send_redirects
### Modification de l'adresse source
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o $lan -j  SNAT --to-source   172.16.0.254
# autoriser le trafic établi et lié
iptables -A FORWARD -i $lan -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
############################ LAN ==> NET secour####################
##Autorise https
iptables -A FORWARD -p tcp --dport 443 -i $lan -o $lan -s 172.16.0.0/16 -m state --state NEW  -j ACCEPT
#### Autorise protocole UDP pour le dns, Serveur 1 et 2 #######
iptables -A FORWARD -p udp --dport 53 -i $lan -o $lan -s $serveur1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -i $lan -o $lan -s $serveur2 -m state --state NEW -j ACCEPT
#### Autorise protocole TCP pour serveur 1 (pop3,smtp,dns)et 2(dns) ####
iptables -A FORWARD -p tcp --dport 53 -i $lan -o $lan -s $serveur2 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dport 110,25,53 -i $lan -o $lan -s $serveur1 -m state --state NEW -j ACCEPT
####################### FTP ############################
iptables -A OUTPUT -o $lan  -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp -i $lan --sport 1024:65535 --dport 21 -o $lan -m state --state NEW -j ACCEPT
################# LE WEB sur le FW ########################################
iptables -A OUTPUT -o $lan -p tcp --dport 80 -m state --state NEW -j ACCEPT
###########################################################################

guigui69

Ça m’a l’air bon. De toute façon il faut tester en vrai que ce qui doit passer passe et ce qui ne doit pas passer ne passe pas.

Bonjour à tous,

Je revient vers vous. Mon script marche :smiley: mais il me manque un élément

depuis mon pare-feu je voudrait monter (mount) un répertoire réseau.

//srv******/p**** /media/p*****/  cifs  iocharset=utf8,dom=***********,password=**********,username=*********** 0       0

Quel port je doit ouvrir sur mon pare-feu pour autoriser le mount. quel port 137,138, 139, 445 ?

Merci

guigui69

je revient sur mon topic (j’ai pas eu le temps de me remettre dessus)

les commande pour autoriser la connexion du pare-feu à mon serveur windows sont:


FW-PROXY:~# iptables -A OUTPUT -i $lan -o $lan -p tcp --dport 139 -j ACCEPT
FW-PROXY:~# iptables -A OUTPUT -i $lan -o $lan -p tcp --dport 445 -j ACCEPT
FW-PROXY:~# iptables -A OUTPUT -i $lan -o $lan -p udp --dport 137 -j ACCEPT
FW-PROXY:~# iptables -A OUTPUT -i $lan -o $lan -p udp --dport 138 -j ACCEPT

Est-je ouvert trop de port ?

Merci

guigui69

Bonjour à tous,

je revient vers vous pour une petite aide dans mon script iptables

Voici mon script actuelle:

#!/bin/bash
#script de configuration iptables
#16-05-2009



wan="eth1"
lan="eth0"
serveur1="172.16.0.19"
serveur2="172.16.0.252"
intranet="172.16.0.31"
pcadmin1="172.16.0.91"
pcadmin2=$(/usr/bin/host pan-por03.panidor.org | cut -d" " -f4)

# Refuse les rénses aux broadcasts.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Refuse le routage des paquets source.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Refuse les redirections ICMP.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Active la protection contre les erreurs ICMP.
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Log les paquets spoofé le routage des paquets source et la redirection des paquets.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# Active la protection TCP syn cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#activation du routeur####
echo "1" > /proc/sys/net/ipv4/ip_forward


# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

#Remise à ero

iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

iptables -A POSTROUTING -t nat -o $wan -j MASQUERADE
######################## LAN ##################################
#### Autoriser les connexions deja etablis ou renouvellé#####
#### qui traverse le pare-feu #################################
iptables -A FORWARD -i $wan -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $lan -o $wan -m state --state ESTABLISHED,RELATED -j ACCEPT

######################## PARTIE SERVEUR #######################
#### Autorise protocole UDP pour le dns, Serveur 1 et 2 #######
iptables -A FORWARD -p udp --dport 53 -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -i $lan -o $wan -s $serveur2 -m state --state NEW -j ACCEPT
#### Autorise protocole TCP pour serveur 1 (pop3,smtp,dns)et 2(dns) ####
iptables -A FORWARD -p tcp --dport 53 -i $lan -o $wan -s $serveur2 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dport 110,25,53 -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT
#### Autorise LAN Ã aire de l'https ####
iptables -A FORWARD -p tcp --dport 443 -i $lan -o $wan -m state --state NEW -j ACCEPT
iptables -A FORWARD -p ICMP -i $lan -o $wan -m state --state NEW -j ACCEPT
## Autorisation des pcadmin 1 et 2 en tcp udp 47 (gre)
iptables -A FORWARD -p tcp  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp  -i $lan -o $wan -s $pcadmin2 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp  -i $lan -o $wan -s $pcadmin2 -m state --state NEW -j ACCEPT


########## Autorisation du routage pour HARDIS################

iptables -A FORWARD -p ALL  -i $lan -o $lan -s 172.16.0.0/16 -d 172.16.0.175 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p ALL  -i $lan -o $lan -s 192.168.208.0/255.255.240.0 -d 172.16.0.0/255.255.0.0 -m state --state NEW -j ACCEPT

iptables -A FORWARD -p ALL  -i $lan -o $lan -s 172.16.0.0/16 -d 192.168.208.0/255.255.240.0 -m state --state NEW -j ACCEPT

#iptables -A INPUT -p ALL  -i $lan  -d 192.168.208.0/255.255.240.0  -m state --state NEW -j ACCEPT

############################################################################################################

iptables -A FORWARD -p tcp  -i $lan -o $wan -s $intranet -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp  -i $lan -o $wan -s $intranet -m state --state NEW -j ACCEPT

iptables -A FORWARD  -p 47  -i $lan -o $wan -s $pcadmin1 -m state --state NEW -j ACCEPT


#iptables -A FORWARD -p tcp  -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT
#iptables -A FORWARD -p udp  -i $lan -o $wan -s $serveur1 -m state --state NEW -j ACCEPT


############ LAN => FW ###################
#### redirection du port 80 qui rentre par l'interface lan vers le port dansgaurdian ####
iptables -t nat -A PREROUTING -i $lan -p tcp --dport 80 -j REDIRECT --to-ports 8080
#### Autorise le SSH du lan vers FW ####
iptables -A INPUT -p tcp --dport ssh -i $lan -m state --state NEW -j ACCEPT
#### Autorise le LAN a rentrer sur le port 8080 et donnéa rénse sur le 80
iptables -A INPUT -p tcp --dport 8080 -i $lan -m state --state NEW -j ACCEPT
############iptables -A OUTPUT -p tcp --sport 80 -o $lan -m state --state NEW -j ACCEPT



#########
### FW ##
#########
###############################################################
##### Autorise les connexion dè etablished ou renouvellé###
#####             en  input /output                  ####
###############################################################
iptables -A INPUT -i $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $wan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $wan -m state --state ESTABLISHED,RELATED -j ACCEPT
###################### interface local ########################
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
############### Autoriser le FW interroger DNS WAN ################
iptables -A OUTPUT -o $wan -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $wan -p tcp --dport 53 -m state --state NEW -j ACCEPT

############### Autoriser le FW interroger DNS LAN ################
iptables -A OUTPUT -o $lan -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $lan -p tcp --dport 53 -m state --state NEW -j ACCEPT

############### Autoriser le FW interroger web ################
iptables -A OUTPUT -o $wan -p tcp --dport 80 -m state --state NEW -j ACCEPT

##############PING ################
iptables -A OUTPUT -o $wan -p icmp -j ACCEPT
###############################################################
######################    FTP    ##############################
###############################################################
#################### Active Module ############################
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
####################### FW => WAN ############################
iptables -A OUTPUT -o $wan -p tcp --dport 21 -m state --state NEW -j ACCEPT
################## ftp du LAN vers WAN #######################
iptables -A FORWARD -p tcp -i $lan --sport 1024:65535 --dport 21 -o $wan -m state --state NEW -j ACCEPT

l’ensemble de mes potes on la passerelle de se FW par defaut.
J’ai rajouter une “route” sur le parefeu linux

reseau 192.168.208.0
masque 255.255.240.0
passerelle 172.16.0.175

Quel commande je doit rajouter a mon script iptable pour autoriser la communication pour l’ensemble des protocole entre le lan et le réseau de notre prestataire (la route rajouté)

j’ai essayer ceci mais cela bloque:

########## Autorisation du routage pour HARDIS################

iptables -A FORWARD -p ALL  -i $lan -o $lan -s 172.16.0.0/16 -d 172.16.0.175 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p ALL  -i $lan -o $lan -s 192.168.208.0/255.255.240.0 -d 172.16.0.0/255.255.0.0 -m state --state NEW -j ACCEPT

############################################################################################################

Le ping passe correctement, mais la connexion à l’application non.

Pour que cela fonctionne je doit mettre :
iptables -t filter -P FORWARD ACCEPT

Il doit me manquer un petit parametre mais je ne voit pas quoi.

Merci d’avance pour votre aide

guigui69

La règle

est inutile pour deux raisons :

  • 172.16.0.175 est dans le même réseau que 172.16.0.0/16, donc les postes vont lui envoyer directement les paquets destinés à cette adresse, sans passer par le pare-feu ;
  • les paquets destinés à 192.168.208.0/20 sont seulement transmis à 172.16.0.175 mais n’ont pas 172.16.0.175 comme adresse de destination.

Plus généralement les paquets transitant par un routeur ne contiennent pas l’adresse de ce routeur donc il faut filtrer sur le préfixe de destination 192.168.208.0/20, pas sur l’adresse du routeur, comme le fait la troisième règle :

Ceci dit, dans la mesure où ce trafic est interne au LAN et pourrait aussi bien ne pas passer par le firewall, l’utilité de filtrer sur les adresses est discutable.

D’autre part, ces règles ne traitent que les paquets dans l’état NEW.

Nénamoins, je soupçonne une situation de routage asymétrique, ce qui change la situation vis-à-vis du suivi de connexion :

  • à l’aller, le chemin est poste du LAN 172.16.0.0/16 -> pare-feu -> routeur 172.16.0.175 -> destination finale dans 192.168.208.0/20
  • au retour, le chemin est machine dans 192.168.208.0/20 -> routeur 172.16.0.175 -> poste du LAN 172.16.0.0/16
    Le routeur 172.16.0.175 a une route directe vers 172.16.0.0/16, donc il n’a aucune raison de transmettre les paquets au pare-feu comme à l’aller.

Or le routage asymétrique pose un problème avec le suivi de connexion, car le pare-feu ne voit les paquets que dans un sens. Pour le ping ce n’est pas gênant car il n’y a qu’un paquet de requête dans l’état NEW. Par contre pour une connexion TCP le pare-feu ne voit pas le paquet SYN/ACK renvoyé par le serveur en réponse au SYN du client, donc le paquet suivant ACK du client sera considéré comme INVALID et ne sera pas accepté.

Note : normalement, en tant que routeur le pare-feu devrait envoyer des messages ICMP “redirect” pour dire aux postes du LAN d’envoyer les paquets destinés à 192.168.208.0/20 directement via 172.16.0.175. Mais il semble que Linux ne le fait pas quand il fait du NAT (en fait ils sont émis mais éliminés dans la table NAT), ce qui est le cas de ton pare-feu, et encore aurait-il fallu que ces messages ICMP ne soient pas bloqués et soient acceptés par les postes (cf. accept_redirect, secure_redirect).

Contournements possibles :

  • Eliminer le routage asymétrique en forçant le routeur 172.16.0.175 à router les paquets destinés à 172.16.0.0/16 via le pare-feu. Et ajouter les états ESTABLISHED et RELATED aux règles.

  • Accepter les paquets entrant et sortant par l’interface $lan quel que soit leur état.

  • Ne pas faire le suivi de connexion des paquets entrant par $lan de source 172.16.0.0/16 et de destination 192.168.208.0/20, et accepter ces paquets avec les règles suivantes :

iptables -t raw -A PREROUTING -i $lan -s 172.16.0.0/16 -d 192.168.208.0/20 -j NOTRACK iptables -A FORWARD -i $lan -o $lan -s 172.16.0.0/16 -d 192.168.208.0/20 -m state --state UNTRACKED -j ACCEPT

Merci pour ces réponses,

ca confirme ce que je pensait mais j’étais pas sur :frowning:

Après ce n’ai pas obliger de passé par le firewall. C’ est un réseau lan vers un autre réseau lan à travers un tunnel.

Justement le but n’est pas de le faire passer par le tunnel ,c’est juste que mes postes client point sur le firewall en passerelle je lui est indiqué la route pour rejoindre ce réseau.

[quote]
ce qui est le cas de ton pare-feu, et encore aurait-il fallu que ces messages ICMP ne soient pas bloqués et soient acceptés par les postes (cf. accept_redirect, secure_redirect).[/quote]

Concernant mes règle ICMP, j’ai commis une erreur ?

Concernant tes propositions, la quelle me conseilles tu?
Car si il est possible d’éviter de passer par le pare-feu pour joindre ce réseau je suis d’accord.

Je te remercie pour ton aide.

guigui69

Heu, et par où alors ? Tu voulais dire “par le pare-feu” ?

Il n’est pas toujours simple d’avoir plusieurs routeurs vers des destinations différentes dans un LAN contenant des postes classiques n’ayant habituellement qu’une route par défaut. La méthode conceptuellement la plus simple est que chaque poste ait les routes qui vont bien pour chaque destination. Comment y parvenir, c’est une autre histoire. En configuration statique, il faut modifier les paramètres de chaque poste pour y ajouter les routes statiques. En DHCP, il faudrait une option transmise par le DHCP annonçant ces routes, à condition qu’une telle option existe et que les clients en tiennent compte. A voir. Il y aussi l’annonce des routes par un protocole de routage comme RIPv2, mais cela suppose que chaque poste du LAN soit équipé d’un démon de routage pour créer les routes dynamiques annoncées.

Les règles iptables acceptent les paquets sortants RELATED, donc c’est bon. Je vois que tu as désactivé accept_redirect sur le pare-feu ; c’est normal pour un routeur (je crois même que c’est la valeur fonctionnelle par défaut avec ip_forward=1) mais si tu as fait pareil sur les postes, alors l’envoi d’ICMP redirect par le routeur sera sans effet. De toute façon, comme je l’ai écrit le NAT empêche l’émission de ces ICMP. Peut-être qu’on peut l’éviter en les marquant avec NOTRACK, il faudrait que je teste.

EDIT : NOTRACK est sans effet, la table nat bouffe les ICMP redirect quand même.

Merci pour ton aide,

je regarde actuellement du coté du DHCP pour l’instant j’ai indiqué une route statique sur le poste concernée.