IpTables - Mémento : protocoles et ports à ouvrir
Construction de base de la Règle IpTable
La règle IpTable de base pour ouvrir une connexion vers votre machine est :
iptables -A INPUT -i eth0 -p nom_du_protocole --dport nom_du_port -j ACCEPT
Où nom_du_protocole est à remplacer par TCP, UDP, all ;
et nom_du_port est le nom du service, tels FTP, DNS ... ou le numéro qui leur correspond tels 21, 53.
Remarque : S'il faut spécifier les deux protocoles TCP et UDP ensemble, on peut le faire en implémentant deux règles, une pour le protocole TCP, l'autre pour l'UDP.
Pour information, chaque service a son propre nom et numéro de services ;
ils sont visibles sous GNU/Linux à /etc/services (et sous MSWindows : C:\Windows\services ) dont vous trouverez un exemplaire en fin de cette page.
Règle Iptables plus précises
La règle peut - doit - être plus précise, plus critique ;
iptables -A INPUT -i eth0 -s votre_reseau_local/masque_de_reseau -d votre_ip_locale -p nom_du_protocole --dport nom_du_port -m state --state NEW -j ACCEPT
Ainsi, tout ce qui ne correspond pas à cette forme de règle, autrement dit Qui rentre sur votre carte ethernet,
dont la source est seulement votre réseau local/son masque de réseau et seulement à destination de votre adresse IP,
dont l'état est une nouvelle connexion par tel protocole et sur tel port, sera rejeté accepté.
Avouez que cette forme précise de règle purge du traffic est un tant soit peu plus sécuritaire... À utiliser de préférence !!!
L'inverse étant (soit la sortie bien sûr !) :
iptables -A OUTPUT -o eth0 -s votre_ip_locale -d votre_reseau_local/masque_de_reseau -p nom_du_protocole --sport nom_du_port -m state --state NEW -j ACCEPT
Règles Iptables plus critiques
Ne tergiversons pas, appliquons un filtre plus critique, en raisonnant plus finement :
En entrée : iptables -A INPUT -i eth0 -s votre_reseau_local/masque_de_reseau -d votre_ip_locale -p nom_du_protocole --dport nom_du_port -m state --state ! INVALID -j ACCEPT
En sortie : iptables -A OUTPUT -o eth0 -s votre_ip_locale -d votre_reseau_local/masque_de_reseau -p nom_du_protocole --sport nom_du_port -m state --state RELATED,ESTABLISHED -j ACCEPT
Autrement dit, on précise que l'on accepte, en entrée sur notre interface réseau, tout ce qui vient de notre réseau local à destination de l'adresse ip, correspondant à notre interface réseau utilisant tel protocole, vers tel numero de port - ou service - dont l'état du paquet n'est pas invalide, c'est-à-dire un paquet ayant l'état 'nouveau', 'établi', 'relatif' ou 'non traqué'.
et que l'on accepte de laisser sortir de notre interface réseau, tout paquet dont la source est l'adresse ip correspondant à notre interface réseau, à destination de notre réseau local utilisant tel protocole, vers tel numero de port - ou service - dont l'état est 'relatif' ou 'établi' - en rapport avec la règle d'entrée, bien sûr -.
Tous les paquets qui ne correspondent pas à ces critères d'entrée ou sortie n'entrent pas ou ne sortent pas !
Comprenez bien qu'il existe des arguments qui permettent de cibler encore plus les définitions ... - ne maîtrisant pas du tout plus le sujet, je vous redirige vers la documentation appropriée -
Exemples de règles
Service Cups
Pour émettre un service Cupsys (je rappelle que c'est ce qui nous sert souvent à imprimer sous GNU/Linux), il faut ouvrir le protocole TCP sur le port 631.
Remarque : il est très possible que pour imprimer par le biais de SaMBa sur un imprimante partagée Windows, il faille ajouter le protocole UDP.
- Règle simple
iptables -A INPUT -p TCP --dport 631 -m state --state NEW -j ACCEPT- Règle critique
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 631 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 631 -m state --state ! INVALID -j ACCEPT
Service DNS
Contacter un DNS, surtout si le réseau local en comporte un, est important, même pour les services DNS sur Internet, entres autres avec votre FAI ; il faut donc ouvrir les protocoles TCP et UDP.
- Règles simples
iptables -A INPUT -m state --state NEW -p TCP --dport 53 -j ACCEPTiptables -A INPUT -m state --state NEW -p UDP --dport 53 -j ACCEPT- Règles critiques
iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p UDP --sport 1024: --dport 53 -m state --state NEW -j ACCEPTiptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 53 -m state --state ! INVALID -j ACCEPTiptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p UDP --sport 53 --dport 1024: -m state --state ESTABLISHED -j ACCEPT
Service SaMBa
Utiliser le service SMB est un peu plus délicat ; en effet, celui-ci se base sur les services netbios de MSWindows pour discuter en environnement réseau multi-plateformes, et sur le service smb/ip pour l'impression (dont Cups a besoin !).
Comme nous le montre cette page sur les winports, il faut donc ouvrir les ports 135,137 en TCP et UDP, 138 en UDP, 139 en TCP, et le 445 en TCP et UDP, aussi !
- Règles simples
# EPMAP => définit toutes les RPC !
iptables -A INPUT -m state --state NEW -p TCP --dport 135 -j ACCEPT,iptables -A INPUT -m state --state NEW -p UDP --dport 135 -j ACCEPT,# NetBios-NS
iptables -A INPUT -m state --state NEW -p TCP --dport 137 -j ACCEPT,iptables -A INPUT -m state --state NEW -p UDP --dport 137 -j ACCEPT,# NetBios-DGM => exploration du réseau (basé sur SMB browser service)
iptables -A INPUT -m state --state NEW -p UDP --dport 138 -j ACCEPT,# NetBios-SSN => partage fichiers, imprimantes par Microsoft
iptables -A INPUT -m state --state NEW -p TCP --dport 139 -j ACCEPT, et# SMB/IP => partage fichiers, imprimantes par SaMBa
iptables -A INPUT -m state --state NEW -p TCP --dport 445 -j ACCEPT,iptables -A INPUT -m state --state NEW -p UDP --dport 445 -j ACCEPT.- Règles critiques
# EPMAP => définit toutes les RPC !
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 135 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p UDP --dport 135 -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 135 -m state --state ! INVALID -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p UDP --sport 135 -m state --state NEW -j ACCEPT# NetBios-NS
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 137 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p UDP --dport 137 -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 137 -m state --state ! INVALID -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p UDP --sport 137 -m state --state NEW -j ACCEPT# NetBios-DGM => exploration du réseau (basé sur SMB browser service)
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p UDP --dport 138 -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p UDP --sport 138 -m state --state NEW -j ACCEPT# NetBios-SSN => partage fichiers, imprimantes par Microsoft
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 139 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 139 -m state --state ! INVALID -j ACCEPT# SMB/IP => partage fichiers, imprimantes par SaMBa
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 445 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p UDP --dport 445 -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 445 -m state --state ! INVALID -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p UDP --sport 445 -m state --state NEW -j ACCEPT
Service SSH
Le service d'encapsulation de données pour contacter un serveur de manière protégée se fait sur le port 22 et protocole TCP.
- Règle simple
iptables -A INPUT -p TCP --dport 22 -m state --state NEW -j ACCEPT- Règle critique
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP --sport 22 -m state --state ! INVALID -j ACCEPT
Fichier /etc/services
Voilà ! Bonne construction...
Pagination
<<| Page : IpTables : ports : |>>