Configurer iptables

Introduction

On a le choix entre le nouveau nftables (installé par défaut) et iptables.. je préfère le vioc iptables, j'ai pas encore la motivation pour apprendre une nouvelle surcouche de pare-feu en commandes, d'autant plus que c'est du debian, j'en vomis d'avance !
Dans le pire des cas, on peut toujours installer shorewall via l'article sur le blog, c'est de très loin la meilleure surcouche !!!

Pour toute la suite, on se met en root !


Installation d'iptables

On commence par désinstaller nftables puis installer iptables :

apt remove --auto-remove nftables -y
apt purge nftables -y
apt update
apt install iptables -y

Configuration de base

iptables est à présent installé et activé, mais il est réglé sur ACCEPT dans tous les sens et sur toutes les interfaces. On va supposer ici que votre serveur a 2 interfaces réseau (pour l'exemple)
Il faut donc le configurer afin de restreindre le périmètre.

D'abord, 2 règles de départ quasi universelles : autoriser le trafic sur l'interface de bouclage puis les connections relatives et établies (quelle que soit l'interface pour cette seconde).

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Configuration des interfaces

Interface extérieure (enp0s3)

Autoriser les flux entrants HTTP et HTTPS uniquement :

iptables -A INPUT -i enp0s3 -p tcp --dport 5501 -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp --dport 5502 -j ACCEPT

Interface interne (enp0s8)

Autoriser les flux entrants HTTP, HTTPS, FTPS et SSH uniquement.
Attention car les ports sont aléatoires lors des transferts de fichiers en FTPS, nous allons donc définir le mode de transfert actif dans filezilla et décider d'une étendue de ports spécifiques à ouvrir sur notre pare-feu (6000 à 6010).
Ainsi, Filezilla va 'imposer' des ports précis, qui seront ouverts sur le pare-feu.

Il faut donc également configurer FileZilla et le faire passer du mode passif au mode actif :
Dans le client, sur FileZilla, Aller dans Edition, Préférences, Connexion, FTP (activez le mode actif), Mode actif (activez Limiter les ports locaux utilisés et inscrivez des ports 6000 à 6010)

iptables -A INPUT -i enp0s8 -p tcp --dport 5501 -j ACCEPT
iptables -A INPUT -i enp0s8 -p tcp --dport 5502 -j ACCEPT
iptables -A INPUT -i enp0s8 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i enp0s8 -p tcp --dport 6000:6010 -j ACCEPT
iptables -A INPUT -i enp0s8 -p tcp --dport 52333 -j ACCEPT

Verrouillage du pare-feu

A présent, il faut refermer le pare-feu et bloquer toute autre accès, quelle que soit l'interface :

iptables -P INPUT DROP
iptables -P FORWARD DROP

Enfin autoriser tous les flux sortants de notre serveur :

iptables -P OUTPUT ACCEPT

Persistance des règles

A présent, il nous faut rendre nos règles immuables (car oui, en l'état actuel, si on redémarre, il y a tout à refaire).

apt install iptables-persistent -y

Evidemment, choisir de sauvegarder les règles actuelles pour IPv4 (/etc/iptables/rules.v4).. !


Commandes utiles

Pour voir toutes nos règles

iptables -L -v

Pour supprimer toutes les règles iptables entrées

iptables -P INPUT ACCEPT
iptables -F
iptables -X

D'autres exemples

Voir toutes les règles

iptables -L

Pour DROPer le port 55555 en entrée, quelle que soit l'interface

iptables -A INPUT -p tcp --dport 55555 -j DROP

Example de script

vi redir.sh
#!/bin/bash
# tout ce qui ira à destination du port 23456 sera rerouté vers 10.0.1.8 sur le port 44444
sudo iptables -t nat -A PREROUTING -p tcp --dport 23456 -j DNAT --to-destination 10.0.1.8:44444
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

⬆️ Retour en haut de la page