[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [IPTABLES] Comment lister les paquets rejetés ?




Le 8 juin 14 à 12:24, Francois Lafont a écrit :

Bonjour à tous,

Le 07/06/2014 23:05, nb a écrit :

Le 07/06/2014 20:31, Philippe Gras a écrit :
Non, justement pas quel que soit l'état de la connexion, et c'est logique.

On n'aurait pas de règle pour les connexions établies, sinon ;-)

Philippe a raison.
INPUT ne sert pas pour une connexion déjà établie, seulement pour l'établissement d'une connexion (paquet tcp syn)

Loin de moi l'idée de vouloir vous embêter avec tout ça (j'essaye
vraiment d'être constructif dans ma démarche) mais il me semble
sincèrement que Philippe et toi nb vous trompez sur ce point.
J'essaye de donner une explication ci-dessous qui tend à le prouver.
Certes, ça n'a pas de rapport direct avec Debian mais je trouve que
le sujet n'est pas inintéressant en soi. Et dans le pire des cas,
si on me montre que j'ai tort (ce qui est tout à fait envisageable
;)), j'en serais le premier content car j'aurais appris quelque
chose (et je pense que je ne serai pas le seul).

OK, ce n'est pas Debian, mais Iptables. Mais on peut l'installer sur une Debian.

Je n'ai pas vu de forum ou de liste dédiée à Iptables, alors je pose ma question
ici même.

J'ai une petite Debian Wheezy toute simple sur laquelle j'ai un
petit apache2 qui tourne (avec la fameuse page « It works »). Je
n'ai fait à la base aucune modification iptables (et donc par
défaut tout passe etc). Cette machine a pour IP 172.31.0.1/16.

OK pour cette démonstration, mais le cas que j'ai évoqué est différent, dans la
mesure où j'ai dû établir ma règle pendant l'attaque, je ne l'ai pas écrite avant.

Je crois qu'il y a une explication à cet état de choses ici :
http://www.bortzmeyer.org/rate-limiting-dos.html
=============================================================
Ici, on met les adresses IP dans une table nommée Web. On peut afficher son contenu avec cat /proc/net/xt_recent/Web pour surveiller le bon fonctionnement. On ne teste que les paquets TCP de type SYN, ceux envoyés pour créer une nouvelle connexion (on aurait pu remplacer --tcp-flags SYN SYN par -m state --state NEW mais cette commande est à état, ce qui est toujours déconseillé face à une DoS).
=============================================================
Il existe apparemment une différence dans le traitement des paquets par iptables
selon leur état.

Je crée alors ces deux règles :

iptables -A INPUT -p tcp --dport 80 -s 172.31.100.144 -j LOG --log-prefix "BASIC INPUT "
iptables -A INPUT -p tcp --dport 80 -s 172.31.100.144 -m state --state RELATED,ESTABLISHED -j LOG --log-prefix "STATE INPUT "

J'ai juste repris le même type de règle que Philippe (dans son message
du 7 juin à 18h16) sauf que :

* j'ai pris une autre IP source (qui correspond à l'IP d'une VM sur
   mon réseau local 172.31.0.0/16)

* j'ai changé l'action. Au lieu de faire un DROP comme Philippe, je me
  contente simplement de journaliser les paquets qui matchent les
  règles avec un préfixe différent pour les différencier dans le log.

Une fois que tout ça est en place, je me rends sur la machine
dont l'IP est 172.31.100.144 et je me contente de visiter une fois
la page http://172.31.0.1 qui m'affiche « It works ». Au même
moment je regarde le fichier de log /var/log/kern.log du serveur
apache2 et voici toutes les lignes que j'obtiens au moment de
la visite de la page web :

[ 3082.346423] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60953 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0·
[ 3082.346697] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60954 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=913 RES=0x00 ACK URGP=0·
[ 3082.346704] STATE INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60954 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=913 RES=0x00 ACK URGP=0·
[ 3082.357986] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=372 TOS=0x00 PREC=0x00 TTL=64 ID=60955 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=913 RES=0x00 ACK PSH URGP=0·
[ 3082.357994] STATE INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=372 TOS=0x00 PREC=0x00 TTL=64 ID=60955 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=913 RES=0x00 ACK PSH URGP=0·
[ 3082.358973] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60956 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK URGP=0·
[ 3082.358980] STATE INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60956 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK URGP=0·
[ 3087.360441] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60957 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK FIN URGP=0·
[ 3087.360448] STATE INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60957 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK FIN URGP=0·
[ 3087.360968] BASIC INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60958 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK URGP=0·
[ 3087.360975] STATE INPUT IN=eth1 SRC="" DST=172.31.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=60958 DF PROTO=TCP SPT=58402 DPT=80 WINDOW=980 RES=0x00 ACK URGP=0·

J'ai juste enlevé quelques champs (comme le champ MAC par exemple)
pour écourter un peu les lignes. En regardant le champ ID des
paquets et en regardant le préfixe ("BASIC INPUT" ou "STATE INPUT"),
on peut constater que tout paquet qui a été matché par la règle
« STATE INPUT » (la règle 2) l'a été également avec la règle « BASIC
INPUT » (la règle 1). Pour moi, cela confirme bien le fait que la
règle :

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

va faire un DROP sur tous les paquets destinés à un processus
local (correspondant à du tcp, dont le port de destination vaut 80 et
l'IP source est 172.31.100.144) et cela quel que soit l'état de la
connexion indiqué dans l'entête tcp (donc même pour des paquets
correspondant à une connexion déjà établie).

Voilà. Si je me suis planté, alors toutes mes excuses, je lirais avec
grand intérêt les explications qu'on me donnera.

Bon dimanche à tous.

-- 
François Lafont

-- 
Lisez la FAQ de la liste avant de poser une question :

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: [🔎] 539439E3.3020302@free.fr">https://lists.debian.org/[🔎] 539439E3.3020302@free.fr



Reply to: