Richard Bruno
navigation
Home
admin









Iptables
October 18th, 2016

Table des matières



Documentation
Utilisation
Exemple
Script de démarrage
Limiter les accès



Documentation



(Source : man page)

"Chaque chaîne est une liste de règles que peuvent vérifier un ensemble de paquets ; dans ce cas, on dit qu’on cherche à établir une correspondance avec la règle. Chaque règle détermine ce qui doit être fait avec un paquet qui correspond. Cette action est appellée une «cible», qui peut être un saut vers une chaîne définie par l’utilisateur dans la même table."

Cibles
"Une règle de pare-feu spécifie des critères de correspondance pour un paquet, et une cible. Si le paquet ne correspond pas, la règle suivante de la chaîne est examinée ; s’il correspond, la règle suivante est déterminée par la valeur de la cible, qui peut être le nom d’une chaîne définie par l’utilisateur ou l’une des valeurs spéciales suivantes : ACCEPT, DROP, QUEUE ou RETURN.

ACCEPT signifie que le paquet est autorisé à passer.
DROP signifie que le paquet est détruit.
QUEUE signifie que le paquet est transmis à l’espace utilisateur (si cette option est reconnue par le noyau).
RETURN signifie que l’on cesse de parcourir cette chaîne pour retourner dans la chaîne précédente (appelante) en passant à la règle suivante. Si on atteint la fin d’une chaîne prédéfinie ou s’il y a correspondance avec une règle dans une chaîne prédéfinie ayant pour cible RETURN, la cible désignée par le comportement par défaut de la chaîne détermine le sort du paquet."

Tables

"Il y a actuellement trois tables indépendantes :

filter : C’est la table par défaut (si l’option -t est omise). Elle contient les chaînes prédéfinies INPUT (pour les paquets entrants dans la machine), FORWARD (pour les paquets routés à travers la machine) et OUTPUT (pour les paquets générés localement).

nat : Cette table est consultée lorsqu’on rencontre un paquet qui crée une nouvelle connexion. La table est composée de trois chaînes prédéfinies : PREROUTING (pour modifier les paquets dès qu’ils entrent), OUTPUT (pour modifier les paquets générés localement, avant le routage) et POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir).

mangle : Cette table est employée pour effectuer une modification spéciale des paquets. Jusqu’au noyau 2.4.17, elle offrait deux chaînes prédéfinies : PREROUTING (pour modifier les paquets entrants, avant le routage) et OUTPUT (pour modifier les paquets générés localement, avant le routage). Depuis le noyau 2.4.18, trois autres chaînes prédéfinies sont aussi prises en charge :
INPUT (pour les paquets entrants, destinés à la machine elle-même),
FORWARD (pour modifier les paquets routés à travers la machine) et
POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir)."

Note
Pour tester :

iptables -L -t mangle



Modules

-m state --state ESTABLISHED


-m : utilisation d'un module additionnel
Note : certains modules sont chargés automatiquement.
Par exemple, le module icmp est chargé automatiquement si -p icmp est spécifié.
Même chose pour les modules tcp et udp.

Utilisation du module state :
Pour permettre à une connexion déjà ouverte de recevoir du trafic :

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




What does the range in bracket mean?

Spécification de chaîne : <chain-name> <chain-policy> [<packet-counter>:<byte-counter>]

"Every rule has two counters; the number of packets and the number of bytes that have matched each rule. The default policies also have counters.

This syntax goes in the input to iptables-restore and sets the counters to whatever number is in the square brackets. iptables-save puts the current value of the counters into the square brackets in its output.

You can see human-readable counts for each rule using:"

iptables -L -n -v



and the raw values with

iptables -L -n -v -x



http://serverfault.com/questions/373871/dont-understand-00-iptable-syntax

Utilisation




Ajout
Exemples :

iptables -A G-SOK -p tcp -s machine.domaine.fr -i eth0 --dport 3306 -j ACCEPT


iptables -A G-SOK -p tcp -s machine.domaine.fr -i eth0 --dport 10000:2000 -j ACCEPT


Multiport :

iptables -A G-SOK -p tcp -s machine.domaine.fr -i eth0 -m multiport --dport 3306,1719,1720 -j ACCEPT



Listage

iptables -L --line-numbers -v



-v permet de voir l'interface concernée.

Insertion

Exemples :

iptables -I G-SOK 4 -p tcp -s machine.domaine.fr -i eth0 --dport 3306 -j ACCEPT




Suppression

iptables -D <chaine> <numero de ligne>



Sauvegarde

iptables-save > firewall.rules



Restauration

iptables-restore < firewall.rules



Note 1

# iptables -A G-OK -s machine.domaine.fr -i eth0 --dport 80 -j ACCEPT
iptables v1.4.2: Unknown arg `(null)'
Try `iptables -h' or 'iptables --help' for more information.
#


# iptables -A G-OK -p all -s machine.domaine.fr -i eth0 --dport 80 -j ACCEPT
iptables v1.4.2: Unknown arg `(null)'
Try `iptables -h' or 'iptables --help' for more information.
#


Explication :
on spécifie un port => le protocole est soit tcp ou udp

# iptables -A G-OK -p tcp -s machine.domaine.fr -i eth0 --dport 80 -j ACCEPT
#




Interdire les accès vers une machine

iptables -I OUTPUT 1 -d <adresse ip> -j DROP




Exemple



config par défaut CentOS 5.6

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
#



Chain INPUT (policy ACCEPT)


policy ACCEPT indique que c'est le comportement par défaut.
cf iptables -P

Sur une debian

iptables -t filter -X
iptables -t filter -F
iptables -t filter -A INPUT -i lo -j ACCEPT
# comm deja etablies
iptables -t filter -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
# eth0
iptables -t filter -A INPUT -i eth0 -p tcp -m state --state NEW --dport 53 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p udp -m state --state NEW --dport 53 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p tcp -m state --state NEW --dport 22 -j ACCEPT
# wlan0
iptables -t filter -A INPUT -i wlan0 -p tcp -m state --state NEW --dport 53 -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p udp -m state --state NEW --dport 53 -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p tcp -m state --state NEW --dport 22 -j ACCEPT
# icmp
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# log
iptables -t filter -A INPUT -j LOG --log-prefix iptables-denied --log-level 6 -m limit --limit 5/min
iptables -t filter -P INPUT DROP



Script de démarrage



root@netmasterpo-04:/etc/init.d# cat /etc/init.d/iptables
#! /bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: mountkernfs $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Run iptables
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

case "$1" in

start)

if [ -x /root/ipt ]; then
/root/ipt
fi


;;
restart|reload|force-reload)

if [ -x /root/ipt ]; then
/root/ipt
fi
exit 3


;;
stop)

if [ -x /root/free-ipt ]; then
/root/free-ipt
fi


;;
*)

echo "Usage: $0 start|stop|restart" >&2
exit 3


;;


esac
root@netmasterpo-04:/etc/init.d#



Installation :

update-rc.d iptables defaults



Limiter les accès



Le module "recent" de Netfilter permet de limiter le nombre de connexions autorisées pour un temps donné.
Par exemple pour des connexions SSH :

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP



Ces 2 lignes permettent de limiter l'accès au service SSH à 3 connexions par minute.





Dernières modifs
Réseau (June 21st, 2021)
PacketFence 4.5.0 (October 18th, 2016)
Cisco (October 18th, 2016)
Connexion VPN sous MAC (October 18th, 2016)
DELL 5424 (October 18th, 2016)
DELL 6224 (October 18th, 2016)
DELL MXL (October 18th, 2016)

Contact
Pour m'envoyer un mail,
Pour me laisser un commentaire :
richard.brunooo
chez
gmail.com


powered by kure, modified by Bruno