A - Installation IPTables
A1 - Présentation IPTables
Projet NetFilter
A2 - Alternatives et surcouches
Firewalld, par défaut sous les distributions de la famile Red Hat.
A3 - Installation et configuration de base
On commence par désinstaller ufw pour éviter tout conflit.
apt remove ufw
Supprimez nftables et installez iptables
B - Première configuration
On va vérifier l'état de notre pare-feu avec la commande
iptables -L
On constate que toutes les politiques sont à "ACCEPT". A cet instant, notre pare-feu ne filtre aucun paquet. On va donc commencer par passer nos politiques à "DROP" avec les commandes :
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
On peut repasser la commande ci-dessous pour vérifier les modifications
iptables -L
Pour s'assurer que notre filtrage est désormais fonctionnel on peut tenter de pinguer Deb02 sur sa patte 10.10.0.2, depuis Deb01.
ping -c 3 10.10.0.2
On constate que les pings ne passent plus.
Définissez les politiques par défaut en DROP
En guise de premières règles on va commencer par autorisé les connexions qui ont été établis, aussi bien en entrée qu'en sortie. Ca nous permettra d'assurer qu'on ne perde pas une connexion SSH par exemple.
On passe donc :
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Lorsque c’est nécessaire, utilisez le mode stateful du pare-feu Sécurisez votre réseau en configurant le premier pare-feu DEBPN01
Sauvegardez ces règles dans “/root/debpn01.231016.iptables” avec iptables-save
B1 - Pings avec limitation
On va commencer par créer deux règles pour autoriser l’envoi de pings depuis DEB01 vers tous les autres réseaux internes (10.10.0.0/30 et 10.10.0.1/30). L'idée est de pouvoir ping toutes les machines de notre lab, mais uniquement depuis DEB01
On ajoute donc les règles suivantes :
iptables -A OUTPUT -p icmp -s 10.10.0.1 -d 10.10.0.0/30 -j ACCEPT
iptables -A OUTPUT -p icmp -s 10.10.0.1 -d 10.10.0.4/30 -j ACCEPT
Puis on tente de pinguer 10.10.0.2, 10.10.0.5 et 10.10.0.6.
En revanche, je ne ping pas depuis les autres machines.
Limitez le trafic réseau ICMP à 1 ping par seconde. S’il y a plus, iptables devra faire un DROP des paquets Utilisez la commande « ping » pour générer des ping plus fréquemment qu’une fois par seconde (exemple : 2 fois par seconde, ou plus).
En ajoutant la règle ci-dessous, on va créer une règle qui va limité l'envoi de ping à 1/sec. On utilise "-I OUTPUT 1" pour insérer la règle sur la chaine OUTPUT à la position 1.
iptable -I OUTPUT 1 -p icmp -m limit --limit 1/sec --limit-burst 1 -j DROP
On va utiliser la commande ping avec l'option "-i" pour définir l'intervalle d'envoi de pings en secondes.
## On va donc envoyer 4 pings, au rythme de deux par secondes
ping -c 4 -i 0.5 10.10.0.2
En regardant la sortie, on constate que seuls deux paquets sur quatre sont bien transmit. On a donc bien limité les pings à 1/sec depuis DEB01
B2 - HTTP
Afin de tester nos règles HTTP/HTTPS, on va mettre en place un serveur web sur Cos01. Si ce n'a pas été fait à l'installation du de l'OS, on peut lui ajouter un carte réseau en NAT ou en Bridge pour accéder à Internet et télécharger nginx ou httpd par exemple via
yum install nginx
On s'assure également que SELinux n'est pas en status Enforced.
getenforce
### Et si la sortie est "Enforcing"
setenforce 0
On s'assure également d'activé le service associé (httpd ou nginx), on peut également utiliser "wget" sur Cos01 pour s'assurer qu'on a un site qui répond.
On peut tenter le wget sur Deb01 et constater qu'il ne fonctionne pas
On va donc ajouter notre règle :
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
On peut retenter notre wget. On constate qu'il fonctionne sur Deb01.
B3 - SSH
On commence par autoriser le SSH en sortie de Deb01, SSH utilise le port 22. On ajotue donc la règle :
iptables -A OUTPUT -p tcp -s 10.10.0.1 --dport 22 -j ACCEPT
On va alors tenter de se connecter en SSH à Deb02 et à Cos01. On constate qu'on obtient bien la mire pour saisir le mot de passe sur les deux machines.
On peut se connecter aux machines de notre lab depuis DEB01, mais pas vers DEB01. On ajoute donc la règle suivante :
iptables -A INPUT -p tcp -d 10.10.0.1 --dport 22 -j ACCEPT
Avec cette règle, on peut désormais se connecter à DEB01 depuis DEB02 et COS01
B4 - Script et sauvegarde
On se retrouve donc avec les règles suivantes :
Si on redémarre Deb01, nos règles ne seront pas sauvegardés. Pour les conserver, plusieurs solutions : on peut créer au script qu'on lancera au démarrage, via un crontab (voir page 03 du Wiki).
On peut proposer le script suivant :
#!/bin/sh
# DROP ALL
ipatbles -P INPUT DROP
ipatbles -P FORWARD DROP
ipatbles -P OUTPUT DROP
# Autorisation du ping depuis DEB01 vers les deux réseaux du lab.
iptables -A OUTPUT -p icmp -s 10.10.0.1 -d 10.10.0.0/30 -j ACCEPT
iptables -A OUTPUT -p icmp -s 10.10.0.1 -d 10.10.0.4/30 -j ACCEPT
# Utilisation du mode stateful pour autoriser les connexions établies et liées.
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
# Limitation du ping à 1 paquet par seconde.
# Placer cette règle en premier pour qu'elle soit appliqué avant celles autorisant les pings.
iptables -I OUTPUT 1 -p icmp -m lim0it --limit 1/sec --limit-burst 1 -j DROP
# Autorisation du HTTP/HTTPS
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
# Autorisation SSH vers et depuis DEB01
iptables -A OUTPUT -p tcp -s 10.10.0.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -d 10.10.0.1 --dport 22 -j ACCEPT
Notez qu'une autre solution est d'utiliser, une fois toutes nos règles positionnées, la commande iptables permettant de sauvegarder la configuration iptables :
iptables-save > ~/DEB01.iptables
On peut alors utiliser la commande :
iptables-restore < ~/DEB01.iptables
C - Seconde configuration
Définissez les règles de communication des réseaux internes : Les politiques par défaut seront toutes en DROP Le réseau RD1.D2 peut Se connecter en SSH sur DEBPN01 et DEBPN02 Se connecter en FTP sur DEBPN02 uniquement Les réseaux IPI, RD1.D2 et RD2.C1 peuvent se connecter en HTTP sur COSPN01 Vérifiez vos configurations : Créez un tableau de tests avec ce qui doit fonctionner et ce qui doit échouer Vérifiez que la configuration correspond aux attentes













