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 quon 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 lutilisateur 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 ; sil correspond, la règle suivante est déterminée par la valeur de la cible, qui peut être le nom dune chaîne définie par lutilisateur ou lune 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 à lespace utilisateur (si cette option est reconnue par le noyau).
RETURN signifie que lon 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 dune chaîne prédéfinie ou sil 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 : Cest la table par défaut (si loption -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 lorsquon 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 quils entrent), OUTPUT (pour modifier les paquets générés localement, avant le routage) et POSTROUTING (pour modifier les paquets lorsquils sont sur le point de sortir).
mangle : Cette table est employée pour effectuer une modification spéciale des paquets. Jusquau 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 lorsquils sont sur le point de sortir)."
Note
Pour tester :
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:"
and the raw values with
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.
|
|
Contact
|
|---|
Pour m'envoyer un mail, Pour me laisser un commentaire :richard.brunooo chez gmail.com |  |
|
|