Iptables
De Linuxmemo.
Commandes de Netfilter
Sommaire |
Construction de la commande
Tables (et ses chaines)
iptables [-t table] (default FILTER) -t filter chains: INPUT, FORWARD, OUTPUT -t nat chains: PREROUTING, INPUT, OUTPUT, POSTROUTING -t mangle chains: PREROUTING, OUTPUT, INPUT, POSTROUTING -t raw chains: PREROUTING, OUTPUT -t security INPUT, OUTPUT, FORWARD
Action sur chaine
iptables [-t table] -A chain rule-specification append -D chain [rulenum|rule-specification] delete -I chain [rulenum] rule-specification insert -R chain rulenum rule-specification replace -N chainperso Create a new user-defined chain -X chainperso Delete the optional user-defined chain specified -E old-chain new-chain Rename the user specified chain to the user supplied name
-P chain target-ACCEPT-or-DROP Set the policy for the built-in (non-user-defined) chain to the given target
-C chain rule-specification check exp: iptables -C INPUT -p tcp --dport 8080 --jump ACCEPT Bad rule (does a matching rule exist in that chain?).
Si aucune table n’est spécifiée, iptables utilisera la table FILTER par défaut.
- lister les règles
iptables -nvL --line-number iptables -t nat -n -L
- Vider (flush) les règles
Si aucune table n’est spécifiée, iptables utilisera la table FILTER par défaut.
iptables -F iptables -t nat -n -F
rule-specification
[-4|-6] \ -p protocole \ --tcp-flags [!] masq comp \ -i in-interface \ -s [!] source/mask \ -sport [!] [port[:port]] \ -o out-interface \ -d [!] source/mask \ -dport [!] [port[:port]] \ -m state --state RELATED,ESTABLISHED \ -j [chain|ACCEPT|DROP|REJECT|LOG|SNAT|DNAT|MASQUERADE] --log-prefix "text"
- Pour -state -m state Etat du paquet.
Une liste de plusieurs valeurs peut être indiquée en les séparant par des virgules. L’état de ce paquet est comparé alors à ces valeurs. NEW correspond à un paquet initiant une nouvelle connexion. ESTABLISHED est un paquet participant à une conversation déjà établie. RELATED est pour un paquet qui ouvre une nouvelle connexion, mais ceci en rapport avec une précédente déjà établie. INVALID indique un paquet qui n’est rattaché à aucune connexion.
man iptables-extensions https://netfilter.org/documentation/HOWTO/fr/netfilter-extensions-HOWTO.html#toc3
- Les actions qui peuvent arriver lorsqu’une règle s’applique à un paquet sont :
ACCEPT : le paquet est accepté. DROP : le paquet est rejeté. QUEUE : le paquet est déplacé dans les processus utilisateurs. Ceci nécessite un intermédiaire (queue handler), qui transfère le paquet à une application. RETURN : le paquet est renvoyé à la chaîne précédente s’il s’agit d’une chaine personnalisée par l’utilisateur. Dans les chaînes standard, le règlement (policy) est exécuté (sans configuration par défaut : ACCEPT).
Les tables
Trois tables au total:
- MANGLE, qui est responsable de l’altération de la qualité du service bits dans l’entête TCP.
- FILTER qui est responsable de filtrage de paquets. Il dispose de trois chaînes intégrées dans lequel vous pouvez placer vos règles de pare-feu :
chaîne de transmission ( FORWARD ): filtrage des paquets à des serveurs protégés par le pare-feu. chaîne d’entrée ( INPUT ): Filtres paquets destinés au pare-feu. chaîne de sortie ( OUTPUT ): filtrage des paquets provenant du pare-feu.
- NAT qui est responsable de la traduction d’adresse réseau. Il dispose de deux chaînes intégrées, qui sont:
La chaine de pré-acheminement ( PREROUTING ): les paquets NAT, l’adresse de destination du paquet doit être changé. La chaine de post-routage (POSTROUTING ): les paquets NAT, l’adresse source du paquet doit être modifiée
Pour chaque règle de filtrage que vous créez vous devez spécifier la table et la chaîne, sauf pour le filtrage de paquets. En effet, la plupart des règles sont liées au filtrage, de ce fait, si aucune table n’est spécifiée, iptables utilisera la table FILTER par défaut.
iptables-persistent
Since Ubuntu 10.04 LTS (Lucid) and Debian 6.0 (Squeeze) there is a package with the name "iptables-persistent" which takes over the automatic loading of the saved iptables rules. To do this, the rules must be saved in the file:
/etc/iptables/rules.v4 for IPv4 and /etc/iptables/rules.v6 for IPv6.
For use, the package must simply be installed.
apt-get install iptables-persistent
Depends on your OS version, behind the scenes iptables-persistent works with netfilter-persistent.service.
you can verify that your service up and running using sudo systemctl status netfilter-persistent.service
iptables-apply / iptables-restore / iptables-save
These can be saved in a file with the command iptables-save for IPv4.
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4 RHEL/CentOS: iptables-save > /etc/sysconfig/iptables
These files can be loaded again with the command iptables-restore for IPv4.
Debian/Ubuntu: iptables-restore < /etc/iptables/rules.v4 RHEL/CentOS: iptables-restore < /etc/sysconfig/iptables
If you would also like to use IPv6 rules, these can be stored in a separate file.
Debian/Ubuntu: ip6tables-save > /etc/iptables/rules.v6 RHEL/CentOS: ip6tables-save > /etc/sysconfig/ip6tables
iptables-apply - a safer way to update iptables remotely
Default Rules
iptables -F iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -s 172.21.0.0/21 -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -s 172.21.0.0/21 -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP