Table des matières
Linux
Firewall iptables
iptables est un ensemble de commandes permettant de configurer le module Netfilter, qui intercepte et manipule les paquets IP avant et après le routage.
Le module Netfilter peut également être administré graphiquement depuis :
- firewalld
- webmin
iptables cheat sheet | Download |
Notes :
- All rules are processed from top to down. Once a rule is matched, the rest will be ignored.
- Never run iptables -F if the default rules are DROP or your system will be inaccessible. If possible, set the default rule to ACCEPT and add iptables -A INPUT -j DROP at the end.
Installer iptables
$ sudo apt-get install iptables
Démarrer le service iptables
$ service iptables start
Pour que iptables soit lancé par défaut au démarrage du système, on change le statut du niveau d'exécution :
$ chkconfig -level 345 iptables on
Définir des règles de filtrage
- Lister toutes les règles
$ iptables -L -n -v --line-numbers
- Flush de toutes les règles
$ iptables -F
- Supprimer toutes les règles utilisateur
$ iptables -X
- Supprimer une règle
$ iptables -L -n -v --line-numbers $ iptables -D input {line-number}
- Définir une règle par défaut
$ iptables -P INPUT DROP $ iptables -P FORWARD DROP $ iptables -P OUTPUT DROP
Règles de blocage
- Bloquer une IP entrante
$ iptables -A INPUT -s aa.bb.cc.dd -j DROP
- Bloquer l'accès à une URL
$ iptables -A OUTPUT -p tcp -d www.microsoft.com -j DROP
- Bloquer les requêtes web entrantes
$ iptables -A input -p tcp --dport 80 -j DROP
Règles de filtrage
- Autoriser le trafic entrant d'une connexion déjà établie
$ iptables -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT
- Autoriser le ping depuis une adresse IP seulement
$ iptables -A INPUT -s 1.2.3.0/24 -p icmp --icmp-type echo-request -j ACCEPT $ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
- Autoriser l'accès SSH depuis une adresse IP seulement
$ iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT $ iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j DROP
- Autoriser les requêtes DNS
$ iptables -A OUTPUT -p udp -o eth0 -dport 53 -sport 1024:65535 -j ACCEPT
- Autoriser les connections sortantes HTTP et HTTPS pour les ports TCP classiques
$ iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -j ACCEPT $ iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -j ACCEPT
- Translation d'adresse NAT (Port forward)
Transférer tout le trafic entrant vers le port 22 du serveur aa.bb.cc.dd:22
$ iptables -t nat -A PREROUTING -I eth0 -p tcp --dport 1022 -j DNAT --to aa.bb.cc.dd:22 $ iptables -A FORWARD -p tcp -d aa.bb.cc.dd -dport 22 -m state --state NEW,ESTABLISH -j ACCEPT
Journalisation
- Journaliser tout le trafic rejeté
$ iptables -N LOGnDROP $ iptables -A LOGnDROP -j LOG --log-prefix 'DROP_LOG :' $ iptables -A LOGnDROP -j DROP
Sauvegarde et restauration des règles iptables
Les règles créées avec iptables ne sont pas durables et ne valent que jusqu’à ce que votre ordinateur ne s’éteigne. Il est recommandé d’utiliser iptables-save
pour sauvegarder vos paramètres sous forme de document “.rules” dans les fichiers d’iptables.
- Sauvegarder les règles
$ iptables-save > /etc/iptables/iptables.rules
- Restauration des règles
(à placer, de préférence, dans un script lancé au démarrage du système)
$ iptables-restore < /etc/iptables/iptables.rules