Gestion du firewall iptables

Au risque de passer pour un vieux barbu, je ne me suis jamais fait à firewalld qui est embarqué de base dans les CentOs 7.X, du coup je vous propose de revenir à iptables.

[cyklodev_summary]

Pre requis :

  • Un accès root sur le serveur

Installation

On commence par arrêter firewalld

systemctl stop firewalld
systemctl disable firewalld

Puis on installe les services iptables

yum install iptables-services

Ensuite on démarre et on active iptables

systemctl start iptables
systemctl enable iptables

Utilisation

Listing des règles

J’utilise ici l’option line-numbers qui va permettre plus tard de supprimer une règle en donnant simplement son numéro.

iptables -n -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1   ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
4   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
5   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
6   REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
4    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Ajout d’une règle

On rajoute en position 3 des INPUT une autorisation pour le pour 80 du http.

iptables -I INPUT 3 -p tcp -m tcp --dport 80 -j ACCEPT

Suppression d’une règle

On supprime la ligne 6 de la chaine des INPUT.

iptables -D INPUT 6

Bloquer le ping

On bloque le ping en entrée et en sortie.

iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -I INPUT -p icmp --icmp-type 8 -j DROP

Bloquer le DDOS

Plus intéressant, on va pouvoir mettre des seuils de nombre de connexion sur un port. Dans le cas ci dessous, on autorise 20 connexion à la minutes et on stocke 100 connexions. Toutes celles qui arriveront après (mais dans la même minute) ne seront pas acceptées et arriveront à la fin de la chaine (donc en REJECT).

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

Pensez donc à adapter ces paramètres en fonction de votre traffic.

Bloquer le scan de port

Pour bloquer les scan de ports d’outils comme nmap, on va créer une nouvelle chaine (block-scan) et lui définir une limite de un hit par seconde. Tout ce qui suit sera DROP.

iptables -N block-scan
iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
iptables -A block-scan -j DROP

Permanence des règles

Sauvegarde

La sauvegarde peut se faire n’importe où, mais le fichier qui est lu au demarrage de CentOS est celui ci. Donc autant l’utilisé.

iptables-save > /etc/sysconfig/iptables

J’en profite pour faire une petite mise en garde si vous utilisez docker, car la communication des conteneurs passe aussi par iptables.

Nettoyage des règles

Si vous voulez repartir de zéro, rien de plus simple.

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Restauration

Vous pouvez également restaurer votre configuration de démarrage.

iptables-restore < /etc/sysconfig/iptables

Zephilou

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Post comment