Les commandes iptables

Transcription

Les commandes iptables
Les commandes iptables
Jean-Philippe Gaulier
2005-08-22
Résumé
Ce cours vous invite à pénétrer dans l’univers formidable du firewall
netfilter et de son indissociable iptables. Vous trouverez ici les règles de
base vous permettant une prise en main rapide du logiciel.
1
Table des matières
1 L’histoire selon Linux
3
2 IPtables
3
3 Les
3.1
3.2
3.3
4
4
5
6
chaı̂nes
Comment créer une nouvelle chaı̂ne ? . . . . . . . . . . . . . . . .
Comment effacer une chaı̂ne ? . . . . . . . . . . . . . . . . . . . .
Lister les chaı̂nes et leur contenu . . . . . . . . . . . . . . . . . .
4 La remise à zéro des compteurs
7
5 Les polices de sécurité des chaı̂nes
8
6 Les
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
règles
Créer une règle . . . . . . . .
Jouer avec les drapeaux TCP
Les options pour UDP . . . .
Les options pour ICMP . . .
La correspondance . . . . . .
Les cibles . . . . . . . . . . .
Les interfaces . . . . . . . . .
La fragmentation . . . . . . .
Enlever une règle . . . . . . .
.
.
.
.
.
.
.
.
.
7 Conclusion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
11
11
12
13
13
14
14
15
2
1
L’histoire selon Linux
Le filtrage de paquets semble nécessaire à partir du moment où votre machine se connecte à une autre machine, et ce pour la simple et bonne raison que
vous ne voulez en aucun cas que qui que ce soit vienne faire n’importe quoi chez
vous sans votre autorisation. Pour cela, dès la version 1.1 de linux (j’entends
par là le noyau, bien sûr), Alan Cox a porté une premiere version de filtre fondé
sur ipfw de BSD. Il a été amélioré dans la version 2.0, entre autres par Jos Vos,
mais ce n’est pas l’unique contributeur. Au milieu de l’année 1998, Rusty Russel et Michael Neuling retravaillèrent le noyau et introduisirent l’outil ipchains.
Ipchains existe sous la branche linux 2.2. La génération 2.4 du noyau s’est vue
fournie d’un outil de la quatrième génération nommé iptables.
Cela sous-entend quoi ? Qu’il vous est nécessaire d’avoir un noyau 2.4 minimum et de positionner ”CONFIG NETFILTER” a Y (pour Yes, oui en francais)
dans la configuration de ce dernier. En pratique, vous avez accès a netfilter depuis le noyau 2.3.15, et vous devez donc pouvoir vous servir d’iptables par dessus.
Qu’est ce qu’iptables en fait ? Est-ce le firewall ? est-ce un logiciel ? est-ce la
recette de la potion magique ?
Iptables est un outil, une interface, permettant d’insérer et de supprimer les
règles de la table du filtre de paquets du noyau.
2
IPtables
Quelques petites règles sont à observer.
La configuration de votre firewall est archivée dans votre noyau, ce qui signifie qu’au prochain redémarrage, toutes les règles seront perdues. Vous devez
créer un fichier ou seront stockées toutes les règles et chaı̂nes qui vous semblent
nécessaires. En tant que bon éleve, faites une copie du fichier. Russel préconise
l’emploi de iptables-save et iptables-restore. Vous pouvez tout aussi bien les appeler remus et romulus, si ca vous parle et surtout si vous avez le courage de lier
le tout. Il existe en effet des petites options pour iptables-save et iptables-restore
qui peuvent s’avérer bien pratiques (voir leur man respectif pour en apprendre
davantage).
Placez votre script d’initialisation de règles à l’endroit adéquat. Assurez-vous
de faire quelque chose de réfléchi, au cas où il y aurait un problème aléatoire lors
de l’exécution de votre script (balancer un ‘exec /sbin/sulogin‘ par exemple).
Maintenant que le décor est posé, il est nécessaire de regarder un petit peu
plus en avant l’essentiel. Nous verrons donc deux parties. La premiere concerne
la gestion des chaı̂nes, la deuxième approche la gestion des règles à l’intérieur
des chaı̂nes. A savoir qu’une chaı̂ne est constituée d’un ensemble de règles.
Au commencement, vous possédez en tout et pour tout trois chaı̂nes vierges.
INPUT, OUTPUT et FORWARD. Chacune de ces chaı̂nes possède également
une politique globale de traitement, ce qui veut dire que si rien n’est indiqué,
c’est cette politique globale qui s’appliquera par défaut à l’ensemble des règles
inscrites dans cette chaı̂ne.
Chaines initiales
3
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
3
3.1
Les chaı̂nes
Comment créer une nouvelle chaı̂ne ?
iptables -N votre_nom_de_cha^
ıne
Vous remarquerez que votre nom de chaı̂ne figure ici en minuscules. Par
convention, les chaı̂nes définies par l’utilisateur sont écrites en minuscules pour
les distinguer des autres. Votre chaı̂ne maintenant créée, vous pouvez la remplir
de règles.
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
Chain toto (0 references)
target
prot opt source
destination
Ajouter une nouvelle règle a une chaı̂ne : iptables -A
Pour l’exemple, nous droperons tous les paquets icmp en provenance de
127.0.0.1 :
$>iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
DROP
icmp -- localhost.localdomain anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
4
Chain toto (0 references)
target
prot opt source
destination
Notre règle a été correctement ajoutée. Nous reviendrons plus tard sur
l’écriture conforme d’une règle.
3.2
Comment effacer une chaı̂ne ?
Pour les besoins de l’exemple, je prendrai le fait que, par mégarde, j’ai rentré
quatre fois de suite la meme règle dans la meme chaı̂ne (sic). Nous obtenons
donc :
Chain INPUT (policy
target
prot opt
DROP
icmp -DROP
icmp -DROP
icmp -DROP
icmp --
ACCEPT)
source
destination
localhost.localdomain anywhere
localhost.localdomain anywhere
localhost.localdomain anywhere
localhost.localdomain anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
Chain toto (0 references)
target
prot opt source
destination
Bien que tout ceci soit d’une absurdité totale, cela va nous permettre d’approcher deux nouvelles options. En effet, devant cette redondance de chaı̂ne, il
va nous falloir faire le ménage ! Pour cela, vous avez le choix entre l’effeuillage
ligne par ligne ou alors le nettoyage complet. C’est l’option que l’on pourrait
assimiler a la chasse d’eau, -F (ou –flush). Cette option vide completement une
chaı̂ne.
$>iptables -F nom_de_votre_cha^
ıne
Attention ! Si vous ne spécifiez aucune chaı̂ne, toutes les chaı̂nes seront
vidées.
Une méthode plus élégante revient à faire aussi simple que pour sa création :
$>iptables -X ma_cha^
ıne
L’auteur d’iptables pose la question du X. Pourquoi employer cette lettre
qui n’a réellement aucun sens. En effet, jusqu’a présent, ce que nous avons pu
voir ramenait toujours vers un mot significatif ; A pour add, N pour new, F pour
flush, D pour delete. Alors pourquoi employer X ici. En général, un X marque
l’emplacement, peut-être trouverez-vous un trésor derrière celui-ci. Pour ceux
que cela intéresse vraiment, le X a été adopté car toutes les autres ’bonnes’
lettres étaient déja prises :)
De même que pour l’option de flush, une petite règle a été insérée. Si aucune
chaı̂ne n’est citée, iptables tentera d’effacer toutes les chaı̂nes définies par les
utilisateurs. Vous ne pouvez pas supprimer les trois chaı̂nes crées par défaut, a
savoir INPUT, OUTPUT et FORWARD.
5
3.3
Lister les chaı̂nes et leur contenu
Toute création nécessite un regard sur son oeuvre. Vous ne pourrez en aucun
cas travailler indéfiniment a l’aveuglette. Nous avons vu que les règles étaient
stockées dans un fichier. Faire appel a ce fichier pour connaitre les règles instaurées releverait de la lourdeur la plus totale et surtout, cela ne prendrait
en aucun cas les changements effectués entre temps. Il existe donc plusieurs
commandes qui permettent de lister avec plus ou moins de renseignements les
chaı̂nes et règles mises en place.
L’option -L
Deux utilisations. Dans le premier cas, vous spécifiez que vous voulez uniquement voir la chaı̂ne passée en paramètre.
$>iptables -L INPUT
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
REJECT
icmp -- localhost.localdomain anywhere
reject-with icmp-port-unreac
Cela permet de travailler avec une visibilité accrue sur la chaı̂ne que vous
paramétrez.
Explication de l’affichage :
– Chain : chaı̂ne
– INPUT : Nom de la chaı̂ne
– (policy ACCEPT) : Si aucune règle ne correspond au paquet, il sera accepté.
– target : Ce que l’on fait du paquet (accept, drop ou reject)
– prot : Protocole visé
– opt : options
– source : Endroit d’ou proviennent les paquets
– destination : Endroit ou vont les paquets
La derniere ligne présente correspond a une règle que l’on a ajoutée,
ici elle signifie : rejeter tous les paquets icmp en provenance de localhost. Plus spécifiquement, le correspondant envoie un paquet ICMP
type 8 (echo request) et votre ordinateur renvoie normalement un
paquet ICMP type 0 (echo reply). Avec la chaı̂ne présente, le correspondant reçoit un message comme quoi son correspondant n’est
pas joignable (C’est qui ? C’est le plombier). L’argument -L sans aucun
autre parametre permet d’afficher toutes les chaı̂nes présentes, même si elles ne
contiennent aucune règle.
$>iptables -L
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
REJECT
icmp -- localhost.localdomain anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
6
reject-with icmp-port-unreac
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
La sous-option de verbosité
Encore appelée -v (ou –verbose). Cette forme vous donnera des informations
supplémentaires sur l’interface concernée (eth0, eth1, ppp0, etc...), le nombre
de paquets ainsi que le nombre de bits transférés.
$>iptables -L -v
Chain INPUT (policy ACCEPT 21 packets, 4085 bytes)
pkts bytes target
prot opt in
out
source
destination
20 1960 REJECT
icmp -- any
any
localhost.localdomain anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Chain OUTPUT (policy ACCEPT 38 packets, 3283 bytes)
pkts bytes target
prot opt in
out
source
destination
re
La sous-option numérique
Un certain nombre de paramètres sont par défaut écrits de manière compréhensible
pour l’homme, à savoir ”localhost.localdomain” représente en fait votre machine.
L’ip définie par convention est 127.0.0.1. L’option -n permet donc en un sens
plus de rigueur dans sa lecture.
$>iptables -L -v -n
Chain INPUT (policy ACCEPT 31 packets, 4834 bytes)
pkts bytes target
prot opt in
out
source
20 1960 REJECT
icmp -- *
*
127.0.0.1
destination
0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Chain OUTPUT (policy ACCEPT 50 packets, 4017 bytes)
pkts bytes target
prot opt in
out
source
destination
4
La remise à zéro des compteurs
Comme nous avons pu le voir dans les exemples précédents, vous avez la
possibilité de relever le nombre de paquets et d’octets (bytes) que cela représente.
Cela peut par exemple etre utile dans le cadre de la métrologie.
$>iptables -L -v -n
Chain INPUT (policy ACCEPT 25 packets, 4067 bytes)
pkts bytes target
prot opt in
out
source
30 2520 DROP
icmp -- *
*
127.0.0.1
7
destination
0.0.0.0/0
reje
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes)
pkts bytes target
prot opt in
out
source
destination
Ici, vous voyez que certaines chaı̂nes ont vu leurs compteurs incrémentés.
Nous allons donc remettre tout cela à zéro. L’option que nous utiliserons sera Z (pour zero). Vous pouvez aussi utilser –zero. Cette option combinée à l’option
de listing vous permettra de récupérer la valeur des compteurs avant qu’ils soient
remis à zéro.
$>iptables -L -v -n -Z
Chain INPUT (policy ACCEPT 25 packets, 4067 bytes)
pkts bytes target
prot opt in
out
source
30 2520 DROP
icmp -- *
*
127.0.0.1
destination
0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes)
pkts bytes target
prot opt in
out
source
Zeroing chain ‘INPUT’
Zeroing chain ‘FORWARD’
Zeroing chain ‘OUTPUT’
destination
Contrôlons que tout soit bien remis à zéro :
$>iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
0
0 DROP
icmp -- *
*
source
127.0.0.1
destination
0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in
out
source
destination
Les compteurs sont bien à leur état initial, l’opération s’est bien déroulée.
5
Les polices de sécurité des chaı̂nes
Comme nous l’avons évoqué au début de ce cours, les chaı̂nes principales
possèdent des politiques globales. Pour agir dessus, il faut utiliser l’option -P
comme dans l’exemple ci-dessous :
$>iptables -P INPUT DROP
8
Chain INPUT (policy DROP)
target
prot opt source
destination
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
Ainsi, vous pouvez employer la cible ACCEPT ou DROP ou encore une
chaı̂ne que vous avez créée.
Il est à noter qu’une politique de sécurité stricte instaure la mise de DROP
sur les chaı̂nes principales, ce qui oblige ainsi tous les paquets a être traités par
des règles ou à être refusés. Cependant, ne faites cela que si vous comprenez ce
que vous faites, dans le cas inverse, vous n’aurez plus accès au réseau...
6
Les règles
Nous avons traité ce qui concernait les chaı̂nes, il nous faut maintenant
nous concentrer sur leur contenu, à savoir les règles. Si l’on devait prendre une
métaphore, on pourrait considérer que les chaı̂nes sont les océans et que les
règles sont des fleuves. Chaque fleuve reliant un océan.
6.1
Créer une règle
Avant toute chose, vous devez savoir dans quelle chaı̂ne vous allez placer
votre règle. Celle-ci concerne t’elle une entrée (INPUT), une sortie (OUTPUT)
ou transmission (FORWARD) d’un paquet. Vous pouvez également l’assigner à
une sous chaı̂ne que vous aurez créée au préalable. Syntaxe :
iptables -A cha^
ıne arguments
exemple :
$>iptables -A INPUT -s 127.0.0.1 -j DROP
on demande )à iptables d’ajouter dans la chaı̂ne INPUT les arguments suivants :
-s 127.0.0.1
-j DROP
Dont la source est 127.0.0.1
Refuser
On refuse tout ce qui provient de l’hôte local en entrée. Afin d’élargir notre
champ de couverture, nous traiterons ici d’un certains nombre d’arguments que
l’on peut passer à notre règle en ajoût. Gardez en tête que nous ne traitons ici
que les paramètres ! N’oubliez donc pas comment se constitue une règle.
Presque tout argument peut avoir son contraire. Il suffit pour cela de le faire
suivre d’un point d’exclamation ’ !’
$>iptables -A INPUT -s ! 127.0.0.1
-s, --source, --src
-d, --destination, --dst
Définit la provenance du paquet
Définit la destination du paquet
9
Pour ces définitions, vous pouvez viser une adresse unique, comme tout un
réseau, pour cela, il suffit d’utiliser le masque de sous réseau. ’192.168.21.0/24’
est équivalent à ’192.168.21.0/255.255.255.0’. Pour spécifier une adresse unique,
vous utiliserez ’/32’ et pour au contraire couvrir l’ensemble des adresses, ’0/0’
(toutes les IP existantes). Vous avez également la possibilité de noter les dns
(eof.eu.org, localhost), cependant, cela reste déconseillé. Si je décide de bloquer
eof sur mon réseau, je bloquerai également le serveur qui héberge les autres sites
que eof. Ceci est par conséquent très embêtant.
-p, --protocol
Définit le(s) protocole(s) choisi(s)
Les protocoles que vous pouvez employer sont spécifiés dans /etc/protocols.
Toutefois, la plupart du temps, vous vous réferrerez à ’tcp’, ’udp’ ou ’icmp’. Vous
pouvez utiliser ’all’ qui regroupe l’ensemble des protocoles. Lorsque l’option
n’est pas spécifiée, ’all’ est sélectionné par défaut. La casse employée pour la
spécification du protocole n’a pas d’importance.
$>iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
Vous restez insatisfait ? Vous désirez pouvoir filtrer vos paquets par drapeau
(flag) sur tcp, sur le port source ou destination ? Pas de problème.
6.2
Jouer avec les drapeaux TCP
L’option –tcp-flags autorise le filtre sur des drapeau tcp spécifiques. La
première liste de drapeau est composée du masque de ceux que vous voulez
examiner, la deuxième comporte tous ceux qui doivent voir leurs bits mis à un.
$>iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP
$>iptables -L -vn
Chain
pkts
5217
156
0
INPUT (policy ACCEPT 8058
bytes target
prot opt
2287K
all -10856
all -0 DROP
tcp --
packets, 3277K bytes)
in
out source
eth0
*
0.0.0.0/0
lo
*
0.0.0.0/0
*
*
0.0.0.0/0
destination
0.0.0.0/0
0.0.0.0/0
0.0.0.0/0
tcp flags:0x3F/0x12
Ici, si l’on veut tous les drapeaux, à savoir : SYN, ACK, FIN, RST, URG,
PSH il faut que les bits de SYN et ACK soient positionnés. Il existe encore deux
autres drapeaux présents pour vous faciliter la tâche : ALL et NONE. ALL
regroupe l’ensemble des drapeaux et NONE bien évidemment aucun.
L’option –syn en corrélation avec l’option précédente. C’est un raccourci
pour –tcp-flags SYN,RST,ACK SYN
Les options –sport (ou –source-port) et –dport (ou –destination-port) distinguent le port source ou le port destination. Vous pouvez utiliser les noms des
ports que vous souhaitez (www, ftp, ...) comme dans /etc/services ou directement les numéros de ceux-ci. Pour décrire une plage, séparez le port de début
du port de fin par deux points ’ :’.
$>iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20:2000
10
Si vous désirez insérer la notion de ”tous les ports supérieurs ou égaux à”
ou bien ”tous les ports inférieurs ou égaux à”, laissez le champ vide avant ou
apres les deux points, selon ce que vous désirez faire.
$>iptables -A INPUT
$>iptables -L
Chain INPUT (policy
target
prot opt
ACCEPT
tcp -ACCEPT
tcp --
-j ACCEPT -s 127.0.0.1 -p tcp --sport 20:
ACCEPT)
source
destination
localhost.localdomain anywhere
localhost.localdomain anywhere
tcp
tcp
spts:ftp-data:2000
spts:ftp-data:65535
L’option –tcp-option vous permet de traiter les datagrammes en fonction des
options passées a tcp, pour en savoir plus sur celles-ci, reportez-vous à :
6.3
Les options pour UDP
Les options disponibles pour le protocole UDP sont –sport (ou –source-port)
et –dport (ou –destination-port). L’usage reste le même que celui vu pour TCP.
6.4
Les options pour ICMP
L’option –icmp-type vous autorise le filtrage des paquets icmp selon leurs
types. Vous retrouverez la liste des types à l’adresse suivante :
Vous pouvez au choix nommer les types de manière numérique, le premier
nombre représentant le type, le deuxième représentant le code, le tout étant
séparé par un slash (/)
$>iptables -A INPUT -p icmp --icmp-type 3/3
Chain INPUT (policy ACCEPT)
target
prot opt source
icmp -- anywhere
destination
anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
icmp
La seconde manière vous invite à utiliser les types icmp par nom. Je vous
dresse ici la liste existante
$>iptables -p icmp --help
echo-reply (pong)
destination-unreachable
network-unreachable
host-unreachable
protocol-unreachable
port-unreachable
fragmentation-needed
11
port-unreachable
source-route-failed
network-unknown
host-unknown
network-prohibited
host-prohibited
TOS-network-unreachable
TOS-host-unreachable
communication-prohibited
host-precedence-violation
precedence-cutoff
source-quench
redirect
network-redirect
host-redirect
TOS-network-redirect
TOS-host-redirect
echo-request (ping)
router-advertisement
router-solicitation
time-exceeded (ttl-exceeded)
ttl-zero-during-transit
ttl-zero-during-reassembly
parameter-problem
ip-header-bad
required-option-missing
timestamp-request
timestamp-reply
address-mask-request
address-mask-reply
6.5
La correspondance
Il nous reste encore un sous chapitre à voir, il s’agit des extensions ”match”.
En français, nous pourrions traduire par extensions de comparaison.
L’option -m (ou –match)
La différence avec les autres extensions réside dans le fait que celles-ci, si
elles ne sont pas spécifiées, ne seront jamais chargées par défaut par votre filtre.
La raison en est simple, la plupart de ces extensions sont spécifiques à des
protocoles, ou juste présentes à titre de test/expérimentation ou encore pour
vous montrer de quoi est capable iptables. Nous ne couvrirons donc que quelques
options.
L’option –mac-source
Filtre les paquets selon leur adresse source. l’adresse mac sera évidemment
donnée sous la forme XX :XX :XX :XX :XX :XX
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
12
Chain INPUT (policy
target
prot opt
icmp -all --
ACCEPT)
source
anywhere
anywhere
destination
anywhere
anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
icmp
MAC
L’option –limit
Cette option permet d’instaurer des limites, des taux, comme, par exemple,
limiter le nombre de messages d’historique. Cette option est suivie d’un nombre ;
vous pouvez aussi faire suivre ce nombre de l’unité temporelle désirée (/second ;/minute ;/hour ;/day). Par défaut, la limite est réglée à trois par heure.
6.6
Les cibles
L’option -j (ou –jump) spécifie ce que vous désirez faire du paquet. La cible
peut être une sous-chaı̂ne que vous aurez vous-même créée ou alors vers une
valeur spéciale. Celle-ci peut prendre la forme de ACCEPT, DROP, QUEUE
ou RETURN.
– ACCEPT autorise le paquet à continuer son chemin.
– DROP n’autorise pas le paquet à continuer son chemin.
– QUEUE permet de passer le paquet a une application. Si jamais aucune
application n’attend après le paquet, il est rejeté.
– RETURN se comporte différemment selon son emplacement. S’il est dans
une chaı̂ne que vous avez construite, le paquet est renvoyé à la chaı̂ne
forgée d’où il vient. S’il se trouve déja dans une chaı̂ne forgée, c’est la
police de cette même chaı̂ne qui décide du sort du paquet.
6.7
Les interfaces
Les options -i (ou –in-interface) et -o (ou –out-interface) sont les spécifications
des interfaces sur lesquelles les paquets arrivent ou partent. Si vous avez bien
compris, cela signifie que toute règle comportant -o dans la chaı̂ne INPUT ne
se verra pas beaucoup récompensée, il en va de même si vous insérez une règle
avec -i dans la chaı̂ne OUTPUT.
$>iptables -A INPUT -i eth0
$>iptables -A INPUT -i lo
Si vous demandez à présent un listing simple de vos chaı̂nes, vous ne verrez
aucune différence, pensez donc à demander un listing détaillé.
$>iptables -L -vn
Chain INPUT (policy ACCEPT 3045 packets, 1182K bytes)
13
port-unreachable
00:00:00:00:00:01
pkts bytes target
destination
346
14
202K
1040
prot opt in
out
source
all
all
*
*
0.0.0.0/0
0.0.0.0/0
---
eth0
lo
Chain OUTPUT (policy ACCEPT 1867 packets, 241K bytes)
pkts bytes target
prot opt in
out
source
0.0.0.0/0
0.0.0.0/0
destination
Pour spécifier plusieurs interfaces du même type (eth0, eth1, eth2, etc... par
exemple) vous pouvez utiliser le caractere +.
$>iptables -A INPUT -i eth+
Toutes les interfaces commencant par eth seront alors concernées. Par défaut,
si l’option n’est pas spécifiée, le ’+’ est mis d’office, sélectionnant toutes les
interfaces.
6.8
La fragmentation
Depuis le début, je ne vous parle que de paquets, mais qu’en est-il des fragments de paquets, ces petits bouts de puzzle qui au final constituent un splendide
paquet ? Vous n’êtes pas sans savoir que des paquets trop conséquents n’ont aucune chance de traverser différents réseaux, les tailles autorisées étant différentes
selon chaque routeur. Vous voyez donc votre paquet arriver petit a petit. Seule
l’entête contiendra l’ip où il doit se rendre, que ferez vous donc des autres fragments ? Si vous désirez donc traiter le deuxième fragment, le troisieme, etc.
utilisez l’option -f, (ou –fragment).
6.9
Enlever une règle
Pour enlever ligne par ligne, il vous faut simplement exécuter : iptables -D
la chaı̂ne la règle concernée ou encore
iptables -D la chaı̂ne le numéro de la règle. Chaque chaı̂ne contenant des
règles sont numérotées en partant de un. Il est à noter que dans le premier cas,
si vous avez deux règles identiques, seule la premiàre (numériquement parlant)
sera otée.
Il est intéressant de noter que pour obtenir les numéros des règles dans les
chaı̂nes, vous pouvez utiliser l’option –line-number.
$>iptables -L --line-number
Chain INPUT (policy ACCEPT)
num target
prot opt source
1
all -- anywhere
2
all -- anywhere
3
all -- anywhere
destination
anywhere
anywhere
anywhere
Chain FORWARD (policy ACCEPT)
num target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
14
num
1
target
prot opt source
all -- anywhere
7
Conclusion
destination
anywhere
Mieux vaut avoir une souris dans la main qu’un chat dans la gorge. Ceci
n’est qu’une petite présentation de l’outil, et il ne faut pas penser que tout est
dit ici, loin s’en faut ; mais toutes les bonnes choses ont une fin, et comme le dit
le dicton popuplaire, la faim justifie les moyens, ou peut-être est ce une histoire
de coupe-fin. Au fait : ‘man iptables‘ !
15