1
1
26
04 - Règles IPTables
Polaire edited this page 2025-02-16 23:03:57 +01:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 cest 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 lenvoi 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. Sil y a plus, iptables devra faire un DROP des paquets Utilisez la commande « ping » pour générer des ping plus fréquemment quune 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

C1 - SSH

C2 - FTP

C3 - HTTP

C4 - Tests