Iptables est une interface de ligne de commande qui permet de configurer NetFilter et ainsi de filtrer les paquets IP. En voici quelques commandes usuelles:

Commandes de base

Afficher les règles

sudo iptables –L

Réinitialiser les règles

sudo iptables -F
sudo iptables -X

Supprimer une règle

Déterminer le numéro de ligne

iptables -L --line-numbers

Supprimer la ligne 2

iptables -D OUTPUT 2

Sauvegarder les règles

sudo -s iptables-save -c

Autoriser un trafic

Autoriser un port entrant (ici le port SSH 22)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Autoriser un port sortant (ici le port SSH 22)

iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

 

Bloquer un trafic

Bloquer l’ensemble du trafic entrant

iptables -P INPUT DROP

Bloquer l’ensemble du trafic sortant

iptables -P OUTPUT DROP

Bloquer une adresse IP

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Bloquer un port entrant (ici le port 80)

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

Bloquer un port sortant (ici le port 80)

iptables -A OUTPUT -p tcp --dport 80 -j DROP

 

Exemple de script

Voici un exemple de script à adapter suivant votre utilisation. (source: http://doc.ubuntu-fr.org/iptables, auteur: BeAvEr)


#!/bin/bash

## Script iptables by BeAvEr.

## Règles iptables.

## On flush iptables.

iptables -F

## On supprime toutes les chaînes utilisateurs.

iptables -X

## On drop tout le trafic entrant.

iptables -P INPUT DROP

## On drop tout le trafic sortant.

iptables -P OUTPUT DROP

## On drop le forward.

iptables -P FORWARD DROP

## On drop les scans XMAS et NULL.

iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

## Dropper silencieusement tous les paquets broadcastés.

iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP

## Permettre à une connexion ouverte de recevoir du trafic en entrée.

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

## Permettre à une connexion ouverte de recevoir du trafic en sortie.

iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT

## On accepte la boucle locale en entrée.

iptables -I INPUT -i lo -j ACCEPT

## On log les paquets en entrée.

iptables -A INPUT -j LOG

## On log les paquets forward.

iptables -A FORWARD -j LOG

exit 0

 

En savoir plus

http://doc.ubuntu-fr.org/iptables [FR]
http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/ [FR]
http://www.netfilter.org/documentation/ [FR][EN]
https://help.ubuntu.com/community/IptablesHowTo [EN]