# On autorise toutes les connexions du routeur vers le LAN
#iptables -A INPUT -i br0 -m state --state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o br0 -m state --state NEW,ESTABLISHED -j ACCEPT
La logique et la facilité de lecture voudraient qu’on écrive en premier la règle qui accepte les paquets dans la direction aller (état NEW). Tu l’as fait partout ailleurs sauf ici.
Et pourquoi avoir commenté ces règles ?
# Autoriser ICMP
Ces règles ICMP ne sont pas spécifiques au trafic du routeur vers le LAN. Elles mériteraient une section à part.
############ Du routeur Serveur-Debian vers l'extérieur #############################
# Dansguardian (tcp/? 8080)
Le routeur a besoin de se connecter à un serveur Dansguardian qui est accessible par eth0, côté extérieur ?
Même question pour le proxy squid, CUPS, NUT et RPC plus bas.
# dhcp (udp 67:68)
iptables -A OUTPUT -p udp --dport 67:68 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 67:68 -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
Je suppose que ces règles servent pour la communication entre le client DHCP sur eth0 de la machine et le serveur DHCP de la box. DHCP est un peu particulier.
D’une part le port 67 est le port serveur et 68 est le port client, donc il faut plutôt écrire --dport 67 --sport 68
et vice versa.
D’autre part certains paquets envoyés par un client DHCP sont diffusés avec l’adresse source indéfinie 0.0.0.0 et/ou l’adresse destination de broadcast limité 255.255.255.255. Les paquets de réponse du serveur émis avec des adresses unicast n’auront donc pas l’état ESTABLISHED mais NEW également. De manière générale le suivi de connexion de netfilter ne fonctionne qu’avec les adresses unicast, pas avec les communications utilisant le broadcast ou le multicast. Comme l’état INVALID n’existe pas en UDP, et l’état RELATED ne peux exister en UDP qu’avec un “assistant” de suivi de connexion (conntrack helper) pour le protocole applicatif considéré (qui n’existe pas pour DHCP), les paquets DHCP sont forcément dans l’état NEW ou ESTABLISHED et il est inutile de tester cet état.
Tes règles fonctionnent, mais des règles plus propres seraient donc :
iptables -A OUTPUT -p udp --dport 67 --sport 68 -o eth0 -j ACCEPT
iptables -A INPUT -p udp --sport 67 --dport 68 -i eth0 -j ACCEPT
Dernier détail : compte tenu du rôle particulier du protocole DHCP, le client peut émettre et recevoir les paquets directement sur l’interface sans passer par la couche IP (puisqu’elle n’est pas forcément encore configurée), et ceux-ci ne sont donc pas soumis aux règles iptables. Bref, tout ça pour rien.
iptables -A INPUT -p tcp sport 53 -i eth0 -m state --state ESTABLISHED -j ACCEPT
Faute de frappe à sport.
Certaines requêtes DNS particulières peuvent aussi utiliser TCP, sur le même port 53.
# netbios (tcp/udp 137-138-139)
En parlant de broadcast et de conntrack helper, il y en a justement un qui sait gérer : celui pour le protocole Netbios Name Service (UDP/138), le module nf_conntrack_netbios_ns. Utile seulement si on utilise la résolution de nom Netbios.
# cups (tcp/udp:631)
iptables -A OUTPUT -p tcp --dport 631 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 631 -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --dport 631 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 631 -i eth0 -m state --state ESTABLISHED -j ACCEPT
Les règles dans INPUT doivent contenir --sport pour accepter les paquets retour. Sinon, c’est comme si elles acceptaient les paquets entrants à destination d’un serveur CUPS qui tournerait sur le routeur.
iptables -A OUTPUT -p udp --dport 25 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
Inutile. Le protocole SMTP n’utilise que le transport TCP, pas UDP. Par contre il peut utiliser d’autres ports : 465 (SMTP/SSL) et 587 (submission, sous-ensemble de SMTP pour l’envoi de courriel par les clients).
# On autorise toutes les connexions du LAN vers le routeur
Note que ces règles peuvent être combinées avec celles pour les connexions en sens inverse, juste en complétant les états.
# Autoriser l'accès au serveur Samba (
iptables -A INPUT -p udp --dport 137 -i br0 -j ACCEPT
iptables -A OUTPUT -p udp --
Incomplet, et inutile puisque les règles précédentes autorisent déjà toutes les connexions du LAN vers le routeur.
# Accès SSH depuis le net (tcp:2222)
iptables -A INPUT -p tcp --dport 2222 -i etho -j ACCEPT
iptables -A OUTPUT -p tcp --sport 2222 -o eth0 -j ACCEPT
Ces règles ne devraient pas être dans la section “du LAN vers le routeur”.
# Toutes les connexions qui sortent du LAN vers le Net sont acceptées
iptables -A FORWARD -i br0 -o eth0 -m state --state NEW, ESTABLISHED, RELATED -j ACCEPT
Il ne faut pas d’espace après les virgules.
Il manque la règles pour accepter les paquets dans le sens retour.
iptables -A FORWARD -p icmp -i br0-o eth0 --icmp-type echo-request -m state --state NEW -j ACCEPT
iptables -A FORWARD -p icmp -i eth0-o br0 --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT
Espace manquant entre br0 et -o.
# Cupsd (accès imprimante partagée en wifi sur le LAN depuis n'importe quel poste du LAN)
iptables -A FORWARD -p tcp --dport 631 -i br0 -o eth0 -m --state NEW, ESTABLISHED, RELATED -j ACCEPT(autorisé à sortir)
Il manque la règle pour accepter les paquets dans le sens retour.
Mais inutile puisque les règles précédentes acceptent toutes les connexions du LAN vers l’extérieur.