Le fichier dans lequel les modifications de votre pare-feu Netfilter
ont lieu s'appelle /etc/sysconfig/iptables
(sous RedHat ou Debian) ou /etc/conf.d/local.start
(sous Gentoo). Lorsque vous avez modifiez vos règles, n'oubliez pas
de les sauvegardez et d'activer le pare-feu avec les commandes suivantes:
/etc/init.d/iptables save
/etc/init.d/iptables restart |
# Permettre le ``forwarding''
et le changement dynamique d'adresses:
echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_dynaddr |
# On vide les règles:
iptables -F # Suppression des règles une à une: iptables -X # On fait pointer les règles sur DROP: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # On vide des règles pour ``nat'' et ``mangle'': iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X |
# la passerelle peut émettre dans
tous les sens:
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # le réseau est supposé sûr: iptables -A INPUT -i eth0 -j ACCEPT iptables -A OUTPUT -o eth0 -j ACCEPT |
# établissement du NAT:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |
Nous allons donc faire en sorte que toutes les connexions nouvelles,
établies et associées à une connexion déjà établie qui entrent par
eth0 (réseau local) et qui veulent sortir
par ppp0 (vers l'internet) puissent passer.
Nous allons aussi permettre que toutes les connexions établies ou
associées à une connexion déjà établie qui entrent par ppp0
et veulent aller vers eth0 puissent passer.
# toute connexion sortant du LAN
vers internet= acceptée:
iptables -A FORWARD -i eth0 -o ppp0 -m state -state NEW, ESTALISHED,RELATED -j ACCCEPT # seules les connexions établies ou en relation = acceptées (d'internet vers LAN): iptables -A FORWARD -i ppp0 -o eth0 -m state -state ESTABLISHED,RELATED -j ACCEPT |
En résumé, à ce stade, les machines du réseau local accèdent à la
passerelle. De la passerelle, vous accéderz au réseau LAN. De l'internet,
nul n'accède à la passerelle (DROP en INPUT
sur ppp0). En outre, depuis l'internet,
il n'est possible d'accéder aux hôtes du LAN que via des connexions
déjà établies et dont ils sont clients. Autrement dit, aucun serveur
du réseau local n'est accessible depuis l'internet.
Lecture du suivi des connexions.
Avant d'ouvrir des ports, nous pouvons déjà apprendre comment décoder
les messages de suivi de connexions (conntrack). Le fichier-clé
est /proc/ip_conntrack. Il contient
des informations analogues à celles-ci:
tcp 6 14 CLOSE_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1102 dport=80 src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1102 [ASSURED] use=1 tcp 6 431991 ESTABLISHED src=192.168.0.10 dst=213.186.35.33 sport=1103 dport=80 src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1103 [ASSURED] use=1 tcp 6 73 TIME_WAIT src=192.168.0.10 dst=213.186.35.33 sport=1104 dport=80 src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1104 [ASSURED] use=1 tcp 6 82 SYN_SENT src=192.168.0.10 dst=213.186.35.33 sport=1105 dport=80 [UNREPLIED] src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1105 use=1 tcp 6 51 CLOSE_WAIT src=192.168.0.10 dst=213.186.35.33 sport=1106 dport=80 src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1106 [ASSURED] use=1 |
Supposons que vous souhaitiez installer un serveur DNS sur votre passerelle, un SMTP (pour envoyer du courrier depuis le LAN sans se préoccuper des disponibilités du SMTP du FAI) et un accès SSH afin d'administrer à distante votre serveur depuis l'internet. Que devez-vous ajouter comme règles?
S'il faut que votre serveur réponde aux requêtes DNS, il est nécessaire
d'ouvrir une voie UDP (voir /etc/services).
Votre serveur envoie une requête UDP à destination du port 53 d'un
serveur DNS et attend une réponse sur un port supérieur à 1025 (en
provenance de 53).
# Autoriser des requêtes DNS
locales:
iptables -A OUTPUT -o ppp0 -p udp -sport 1024: -dport 53 -m state -state \ ! INVALID -j ACCEPT iptables -A INPUT -i ppp0 -p udp -sport 53 -dport 1024: -m state -state \ RELATED,ESTABLISHED -j ACCEPT |
A présent, concernant le serveur SMTP, nous savons qu'il écoute sur
le port 25 et utilise TCP:
# Autoriser des envois SMTP
locaux:
iptables -A OUTPUT -o ppp0 -p tcp -sport 1024: -dport 25 -m state -state \ ! INVALID -j ACCEPT iptables -A INPUT -i ppp0 -p tcp -sport 25 -dport 1024: -m state -state \ RELATED,ESTABLISHED -j ACCEPT |
# Autoriser l'accès SSH depuis l'internet:
iptables -A INPUT -p tcp -dport ssh -i ppp0 -j ACCEPT iptables -A OUTPUT -p tcp -sport ssh -o ppp0 -j ACCEPT |
/etc/init.d/iptables save
|
/etc/init.d/iptables start
|
Pour verrouiller le parefeu de sorte à ce que plus rien ne passe:
/etc/init.d/iptables panic
|