GNU/Linux >> Tutoriels Linux >  >> Linux

Aide-mémoire des commandes IPtables

Aperçu

IPtables est l'un des pare-feu les plus connus (et assez efficace également) qui est également disponible sur de nombreuses distributions Linux préinstallées par défaut. Le but de cet article est d'agir comme une feuille de triche des commandes Iptables, compte tenu de la puissance d'Iptables, il contient également de nombreuses commandes pour de nombreux scénarios de mise en réseau. Iptables utilise différentes règles de table avec plusieurs chaînes pour bloquer et autoriser le trafic :

  • FILTRE : c'est la table par défaut destinée à filtrer les règles de circulation
    • ENTRÉE  :Sous la chaîne d'entrée, nous définissons les règles et les comportements pour contrôler les connexions entrantes.
    • SORTIE :Sous la chaîne de sortie, nous contrôlons les connexions sortantes
    • AVANCER :comme son nom l'indique, NOUS utilisons la chaîne de transfert pour spécifier les connexions entrantes que nous allons rediriger tout de suite vers une autre route, adresse ou port (le transférer). Le transfert est couramment utilisé avec NAT.
  • NAT – table de traduction d'adresses réseau utilisée pour mapper plusieurs ressources de trafic local sur les connexions sortantes afin d'établir une nouvelle route. La table NAT inclut les règles de chaîne suivantes :
    • PRÉROUTAGE – sert à contrôler/modifier un paquet dès son arrivée (connexions entrantes)
    • SORTIE – est utilisé pour modifier les paquets générés localement
    • POSTROUTING – sert à contrôler/modifier un paquet dès qu'il est sur le point de partir (connexions sortantes)
  • MANGLE – la table mangle est utilisée pour la modification ou l'altération de paquets. La table Mangle a 5 règles de chaîne :
    • PRÉROUTAGE – pour modifier les connexions entrantes
    • SORTIE – pour modifier les paquets générés localement
    • ENTRÉE – pour les paquets entrants
    • POSTROUTING – pour modifier les paquets lorsqu'ils sont sur le point de sortir
    • AVANCER – pour les paquets acheminés via la boîte (ou qui doivent être transférés vers une nouvelle connexion/route)

Pour cette aide-mémoire, il y a un repo github avec une version téléchargeable en .pdf :LINK

Commandes IPtables

Comment afficher les règles de pare-feu

– Afficher toutes les règles

# iptables -L

– Afficher toutes les règles avec des numéros de ligne

# iptables -L --line-numbers

– Afficher toutes les règles avec une sortie détaillée des paquets actifs

# iptables -n -L -v

-Règles d'affichage pour une chaîne NAT

# iptables -t nat -L

Ces options de sortie/d'affichage peuvent également être combinées avec d'autres commandes d'affichage, telles que :

# iptables -t nat -L --line-numbers

– Afficher les règles pour une règle de chaîne spécifique

# iptables -L INPUT

– Afficher les règles mais avec des spécifications de chaîne

# iptables -S INPUT

-Règles d'affichage pour une chaîne et avec des paquets actifs

# iptables -S INPUT -v

Comment supprimer et ajouter des règles

– Supprimer une règle par un numéro de ligne

# iptables -D INPUT 10

– Supprimer une règle par une spécification

# iptables -D INPUT -m conntrack --ctstate

– Vider toute la chaîne (supprimer toutes les règles de la chaîne)

# iptables -F

– Rincer une seule chaîne

# iptables -F INPUT
# Iptables -t nat -F
# Iptables -t mangle -F

– Ajouter une nouvelle chaîne

# iptables -N custom-filter

– Ajouter une nouvelle règle

# iptables -I INPUT -s 123.123.123.133 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j REJECT

Remarque concernant l'ajout des règles - comme vous pouvez le voir ici, nous avons deux règles différentes avec des options différentes. Notez les premières options définies juste après les iptables :-I et -A.
Ces options vous indiquent où les règles vont être placées dans la table, au début (option -I) de la règle de chaîne ou à la fin bas (-A).
Iptables lit les règles en partant de la première règle en haut de la chaîne puis descend vers le bas et les applique dans cet ordre.

Exemples et commandes IPtables les plus couramment utilisées

Bloquer le trafic

– Bloquer une adresse IP pour avoir accès aux entrants

# iptables -A INPUT -s 192.168.100.1 -j DROP

– Bloquer un sous-réseau IP spécifique aux entrées

# iptables -A INPUT -s 192.168.1.100/24 -j DROP

– Bloquer une adresse IP pour rejeter tous les paquets

# iptables -A INPUT -s 192.168.1.100 -j REJECT

– Bloquer une adresse IP à une interface réseau spécifique lors de l'entrée

# iptables -A INPUT -i eth0 -s 192.168.1.102 -j DROP

– Bloquer uniquement le trafic TCP pour une adresse IP ou une plage IP spécifique

# iptables -A INPUT -p tcp -s 192.168.1.100 -j DROP
# iptables -A INPUT -p tcp -s 192.168.1.100/24 -j DROP

– Supprimer le trafic pour un port spécifique (fermer le port)

# iptables -A INPUT -p tcp --dport xxx -j DROP
# iptables -A INPUT -p tcp --dport 22 -j DROP

– Supprimez tous les paquets réseau non valides en entrée

# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

Autoriser le trafic ou ouvrir des ports avec IPtables

– Autoriser le trafic (entrant et sortant) sur SSH

# iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Remarque  :pour bloquer le trafic sur ces ports, remplacez l'option ACCEPT par DROP

– Autoriser une adresse IP ou une plage de réseau spécifique sur SSH entrant (supprimer CIDR pour définir uniquement une adresse IP)

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Remarque  :La même configuration pour la plage réseau peut être appliquée aux autres règles entrantes répertoriées ci-dessous

Remarque  :pour bloquer le trafic sur ces ports, remplacez l'option ACCEPT par DROP

– Autoriser le trafic sur HTTP et HTTPS (entrant et sortant)

# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Configuration multiport

# iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Remarque :pour bloquer le trafic sur ces ports, remplacez l'option ACCEPT par DROP

– Autoriser le trafic sur MySQL 

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Autoriser le trafic MySQL vers une interface réseau spécifique

# iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Autoriser le trafic PostgreSQL

# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Autoriser le trafic PostgreSQL vers une interface réseau spécifique

# iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Autoriser les appels entrants sur SMTP/IMAP/IMAPS/POP3/POP3S/

SMPT
# iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAP
# iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAPS
# iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3
# iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3S
# iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Comment configurer la redirection de port dans IPtables

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Cette commande par exemple redirigera tout le trafic entrant sur eth0 port du port 25 au port 2525

Ces paramètres ici sont également utilisés à titre d'exemple. Ce qui sera réalisé ici est - sur le port 80, tous les entrants seront limités/réduits à 100 connexions établies par minute et définiront un limitr-burst de 200 paquets correspondants.

– Bloquer les requêtes ping entrantes

# iptables -A INPUT -p icmp -i eth0 -j DROP

– Bloquer ou autoriser l'accès à une adresse mac spécifique

# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

– Autoriser l'accès en boucle

# iptables -A INPUT -i lo -j ACCEPT 
# iptables -A OUTPUT -o lo -j ACCEPT

– Limiter le nombre de connexions simultanées par adresse IP

# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

La commande ci-dessus limitera le nombre de connexions au port 22 (ssh) et n'autorisera pas plus de connexions par client. Le numéro de port peut bien sûr être modifié.

Enregistrer les paquets perdus

# iptables -A INPUT -i eth0 -j LOG --log-prefix "Dropped packets:"

Vous pouvez modifier le préfixe –log-prefix selon votre choix. Les journaux peuvent être recherchés avec la commande suivante :

# grep "IPtables dropped packets:" /var/log/messages

– Enregistrez les paquets abandonnés provenant d'une plage de réseau spécifique

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "

– Comment rechercher des entrées/règles dans les IPtables avec grep

# iptables -L INPUT -v -n | grep 192.168.0.100

Commandes Iptables pour empêcher les cyberattaques plus avancées

– Comment bloquer l'inondation du réseau sur le port http

# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

– Configurer la protection de l'analyse des ports

# iptables -N port-scanning
# iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
# iptables -A port-scanning -j DROP

– Protection contre la force brute pour SSH

# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

– Protection contre les attaques d'inondation SYN

# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
# iptables -A syn_flood -j DROPiptables -A INPUT -p icmp -m limit --limit  1/s --limit-burst 1 -j ACCEPT
# iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
# iptables -A INPUT -p icmp -j DROPiptables -A OUTPUT -p icmp -j ACCEPT

– Atténuation des attaques d'inondation SYN avec SYNPROXY

# iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
# iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

– Bloquer les paquets entrants qui ne sont pas SYN

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

– Forcer la vérification des fragments sur tous les paquets entrants

# iptables -A INPUT -f -j DROP

– Bloquer tous les paquets entrants pour empêcher l'attaque de paquets XMAS

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

– Bloquer tous les paquets NULL en entrée

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

– Intercepter et supprimer tous les paquets avec de faux indicateurs TCP

# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

– Enregistrer les règles IPtables dans un fichier et les restaurer

# iptables-save > ~/iptables.rules
# iptables-restore < ~/iptables.rules

– Enregistrer les règles IPtables de manière permanente avec netfilter

Remarque :nécessite le plug-in iptables "iptables-persistent" étre installé. Peut l'installer avec "apt install iptables-persistent" sur les distributions Debian/Ubuntu.

# netfilter-persistent save

Résumé

Pour résumer l'article - nous avons compilé une liste d'aide-mémoire des commandes IPtables avec certaines des règles les plus courantes sur la configuration d'IPtables pour divers cas d'utilisation (ayant des règles d'autorisation et de suppression qui sont utilisées quotidiennement pour de nombreux services Web et services qui fonctionnent via le réseau ) et a également répertorié certaines commandes IPtables avancées qui peuvent empêcher diverses cyberattaques.

Même si iptables est un pare-feu génial, faites attention aux règles que vous appliquez.


Linux
  1. Aide-mémoire pour les commandes Linux courantes

  2. Présentation d'une feuille de triche sur les macros Groff

  3. Aide-mémoire de référence rapide des commandes Docker

  4. Aide-mémoire des commandes Linux

  5. Aide-mémoire des commandes Linux de base

Aide-mémoire des commandes Git

Aide-mémoire des commandes MySQL

Aide-mémoire des commandes de base de données MySQL pour Linux

Feuille de triche des commandes Pacman pour Arch Linux

Commandes nano de base (aide-mémoire)

Commandes vim de base (aide-mémoire)