Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Iptables - Controle nombre connexions par IP

24 réponses
Avatar
Benjamin RIOU
Bonjour =E0 tous,

Apr=E8s avoir mis =E0 jour iptables (en version 1.3.6), certains modules
fonctionnent =E0 nouveau, comme connbytes.

Mais c'est comme d'hab, ca marche tellement bien, qu'on en veut toujours pl=
us ;)

J'ai absolument besoin de controler le nombre de connexions par IP.

Pour cela il y a iplimit
(http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.=
html)

mais j'aimerais savoir s'il n'y avait pas un moyen sans passer par le
patch d'iptables ?


Merci !
Ben
(qui a rat=E9 son permis pour la 3 eme fois aujourd'hui...) ;)

10 réponses

1 2 3
Avatar
Franck Joncourt
--6sX45UoQRIJXqkqR
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, May 02, 2007 at 09:00:53PM +0200, Benjamin RIOU wrote:
Bonjour à tous,

Après avoir mis à jour iptables (en version 1.3.6), certains mo dules
fonctionnent à nouveau, comme connbytes.

Mais c'est comme d'hab, ca marche tellement bien, qu'on en veut toujours
plus ;)

J'ai absolument besoin de controler le nombre de connexions par IP.

Pour cela il y a iplimit
(http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO- 3.html)

mais j'aimerais savoir s'il n'y avait pas un moyen sans passer par le
patch d'iptables ?




As tu regarde du cote de *-m recent --hitcount* ?

Cela correspond peut etre a tes besoins.

--
Franck Joncourt
http://www.debian.org
http://smhteam.info/wiki/
GPG server : pgpkeys.mit.edu
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE

--6sX45UoQRIJXqkqR
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFGOOW2xJBTTnXAif4RAjHEAJ97X0uZO3kAVCYzr1yFPp209ZOxUACfRTR0
pKGmby8u8FBPF8uwsSVuNtA =M5Cv
-----END PGP SIGNATURE-----

--6sX45UoQRIJXqkqR--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pascal Hambourg
Salut,

Benjamin RIOU a écrit :

J'ai absolument besoin de controler le nombre de connexions par IP.

Pour cela il y a iplimit
(http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html)



Ouh, c'est vieux, ça ! iplimit a été remplacé par connlimit en 2003.

mais j'aimerais savoir s'il n'y avait pas un moyen sans passer par le
patch d'iptables ?



L'ennui, c'est que comme son prédécesseur connlimit n'est toujours pas
inclus dans le noyau standard... Pire, il n'est même plus inclus dans le
patch-o-matic-ng, il faut le récupérer avec ./runme --download. Et la
correspondance "recent" ne permet de compter que des événements comme
les demandes de connexion, et pas les connexions encore établies.

(qui a raté son permis pour la 3 eme fois aujourd'hui...) ;)



Courage, j'ai réussi à la 4ème tentative. ;-)


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Benjamin RIOU
Salut !

Merci pour vos réponses.

> J'ai absolument besoin de controler le nombre de connexions par IP.
L'ennui, c'est que comme son prédécesseur connlimit n'est toujours pa s
inclus dans le noyau standard... Pire, il n'est même plus inclus dans l e
patch-o-matic-ng, il faut le récupérer avec ./runme --download. Et la
correspondance "recent" ne permet de compter que des événements comme
les demandes de connexion, et pas les connexions encore établies.



recent ne veut pas entendre parler de moi :

iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--name overconnect --update --seconds 60 -j DROP
ceci passe.

iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--hitcount 200 --seconds 60 --set --name overconnect -j DROP
ceci me répond : argument incorrect.


########################################################################### #######################
iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m connlimit
--connlimit-above 70 -j DROP

Oui, connlimit était l'idéal pour moi, mais il me répond continuellem ent :
iptables: No chain/target/match by that name

Bien que le fichier libipt_connlimit.ko est bien dans /lib/iptables/

Donc c'est parce que cela ne serait pas inclus au kernel ?

C'est étrange dans la mesure où :
iptables -m connlimit --help
répond correctement.

et que le module connlimit est présent dans le man d'iptables...



++
Ben


> (qui a raté son permis pour la 3 eme fois aujourd'hui...) ;)

Courage, j'ai réussi à la 4ème tentative. ;-)


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact .org




Avatar
Franck Joncourt
--yLVHuoLXiP9kZBkt
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, May 02, 2007 at 10:15:36PM +0200, Pascal Hambourg wrote:
Salut,

Benjamin RIOU a écrit :
>
>J'ai absolument besoin de controler le nombre de connexions par IP.
>
>Pour cela il y a iplimit
>(http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO -3.html)

Ouh, c'est vieux, ça ! iplimit a été remplacé par con nlimit en 2003.

>mais j'aimerais savoir s'il n'y avait pas un moyen sans passer par le
>patch d'iptables ?

L'ennui, c'est que comme son prédécesseur connlimit n'est toujo urs pas
inclus dans le noyau standard... Pire, il n'est même plus inclus dan s le
patch-o-matic-ng, il faut le récupérer avec ./runme --download. Et la
correspondance "recent" ne permet de compter que des événements comme
les demandes de connexion, et pas les connexions encore établies.



Aurais tu un exemple pour mettre en evidence l'interet de compter le
nombre de connxions etablies plutot que le nombre de nouvelles connexions ?

Merci.

--
Franck Joncourt
http://www.debian.org
http://smhteam.info/wiki/
GPG server : pgpkeys.mit.edu
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE

--yLVHuoLXiP9kZBkt
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFGOPV7xJBTTnXAif4RAovvAJ0Rrb/IVan6wJxCyzRlUDPkSShFygCeMqE7
Xjha7AdYZfpiaQC234PINMA BXg
-----END PGP SIGNATURE-----

--yLVHuoLXiP9kZBkt--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Benjamin RIOU
> Aurais tu un exemple pour mettre en evidence l'interet de compter le
nombre de connxions etablies plutot que le nombre de nouvelles connexions ?

Merci.




iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--name overconnect --rcheck --seconds 60 -j DROP
iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--seconds 60 --hitcount 200 --name overconnect --update -j DROP

Passe maintenant.
Si j'ai bien compris :
Au bout de la 201 eme connexion l'espace de 60 secondes :
la premiere ligne passe ne rejette pas le paquet
la seconde ligne blackliste le paquet et le rejette

La 202 eme connexion se voit rejetée par la ligne 1, et ce, pour
60 secondes.

Maintenant, il va falloir que je modifie quelques trucs :
The module itself accepts parameters, defaults shown:

ip_list_tot0
Number of addresses remembered per table
j'ai pas encore 100 personnes sur ma passerelle donc ca c'est bo n

ip_pkt_list_tot
Number of packets per address remembered
......faut que je mette un minimum de 200, non ?

ip_list_hash_size=0
Hash table size. 0 means to calculate it based on ip_list_t ot,
default: 512
.......mon copain parle le slovène, je vais lui demander.

ip_list_perms44
Permissions for /proc/net/ipt_recent/* files

debug=0
Set to 1 to get lots of debugging info

C'est quand même étonnant que connlimit soit dans le man, soit en
librairies, et ne fonctionne pas quand même

++
Ben
Avatar
Franck Joncourt
--SO98HVl1bnMOfKZd
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, May 02, 2007 at 10:27:13PM +0200, Benjamin RIOU wrote:
Salut !

Merci pour vos réponses.

>> J'ai absolument besoin de controler le nombre de connexions par IP.
>L'ennui, c'est que comme son prédécesseur connlimit n'est touj ours pas
>inclus dans le noyau standard... Pire, il n'est même plus inclus da ns le
>patch-o-matic-ng, il faut le récupérer avec ./runme --download . Et la
>correspondance "recent" ne permet de compter que des événement s comme
>les demandes de connexion, et pas les connexions encore établies.

recent ne veut pas entendre parler de moi :

iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--name overconnect --update --seconds 60 -j DROP
ceci passe.

iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--hitcount 200 --seconds 60 --set --name overconnect -j DROP
ceci me répond : argument incorrect.




iptables -A FORWARD -m mac --mac-source xxxxxxx
-m recent --set --name overconnect

iptables -A FORWARD -m mac --mac-source xxxxxxx
-m recent --rcheck --seconds 60 --hitcount 200
--name overconnect -j DROP

iptables -A FORWARD -m mac --mac-source xxxxxxx
-j ACCEPT

Je fonctionne avec ce principe pour mon ftp et cela fonctionne bien.

Cependant, j'ai un petit doute sur l'utilisation de la directive --set
maintenant. Il va falloir mettre cela au clair.

--
Franck Joncourt
http://www.debian.org
http://smhteam.info/wiki/
GPG server : pgpkeys.mit.edu
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE

--SO98HVl1bnMOfKZd
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFGOPuNxJBTTnXAif4RArxcAJ4mXlrF2sZJ+PSDdpPxiiYu/8z+UwCePR4z
WFr45TKFFUqYujQSwzRomNk =u2BP
-----END PGP SIGNATURE-----

--SO98HVl1bnMOfKZd--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Franck Joncourt
--BZaMRJmqxGScZ8Mx
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, May 02, 2007 at 10:43:32PM +0200, Benjamin RIOU wrote:
>Aurais tu un exemple pour mettre en evidence l'interet de compter le
>nombre de connxions etablies plutot que le nombre de nouvelles connexion s
>?
>
>Merci.
>

iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--name overconnect --rcheck --seconds 60 -j DROP
iptables -A FORWARD -m mac --mac-source 00:15:58:32:FF:85 -m recent
--seconds 60 --hitcount 200 --name overconnect --update -j DROP



Au final, j'aurais plutot vu une directive *limit* à l'utilisation de
*recent* car tu connais quelque chose sur le client, son adresse mac.
J'utilise *recent* pour matcher des clients inconnus suivant leur ip
pour des regles mettant en oeuvre *hitcount*.

Mais Pascal a mis en évidence un point important d'apres moi :
connexions etablies ou nouvelles.


Passe maintenant.
Si j'ai bien compris :
Au bout de la 201 eme connexion l'espace de 60 secondes :
la premiere ligne passe ne rejette pas le paquet
la seconde ligne blackliste le paquet et le rejette




Dans l'exemple que j'avais mentionne precedemment, je mettais a jour
l'adress ip du client à chaque connexion, et ensuite diminuais le
compteur de la meme maniere. Si le compteur atteint les 200 dans la
minute alors les paquets sontr DROPpes autrement on passe a la regle
suivante et on les ACCEPT.

C'est quand même étonnant que connlimit soit dans le man, soit en
librairies, et ne fonctionne pas quand même



Aucune idee !

--
Franck Joncourt
http://www.debian.org
http://smhteam.info/wiki/
GPG server : pgpkeys.mit.edu
Fingerprint : C10E D1D0 EF70 0A2A CACF 9A3C C490 534E 75C0 89FE

--BZaMRJmqxGScZ8Mx
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFGOQCGxJBTTnXAif4RAjRzAKCZlIWv7WHLUaICHKHP4kDtLVwxBQCffutj
rbdFE405xlo+2x5tDUN8oUk ÞwJ
-----END PGP SIGNATURE-----

--BZaMRJmqxGScZ8Mx--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pascal Hambourg
[Je coupe le passage sur la correspondance "recent", que je connais très
mal et qui me donne mal au crâne à chaque fois que je m'y frotte.]

Benjamin RIOU a écrit :
Oui, connlimit était l'idéal pour moi, mais il me répond continuellement :
iptables: No chain/target/match by that name

Bien que le fichier libipt_connlimit.ko est bien dans /lib/iptables/

Donc c'est parce que cela ne serait pas inclus au kernel ?



Voilà.

C'est étrange dans la mesure où :
iptables -m connlimit --help
répond correctement.



C'est la bibliothèque libipt_connlimit d'iptables qui répond.

et que le module connlimit est présent dans le man d'iptables...



Comme pour un grand nombre de cibles et de correspondances d'iptables,
il faut deux éléments :
- une bibliothèque libipt_truc.so située dans /lib/iptables/ et utilisée
par le programme iptables lors de la création d'une règle ;
- un module du noyau ipt_truc.[k]o ou xt_truc.ko situé dans
/lib/modules/<version>/kernel/net/... qui réalise effectivement la
fonction lorsqu'un paquet rencontre la règle. Notons que la fonction
peut être compilée en dur dans le noyau et non en module.

Ici comme souvent, c'est le module noyau qui manque, car iptables
contient depuis longtemps des extensions qui ne sont pas présentes en
standard dans le noyau mais fournies à part dans le patch-o-matic[-ng].
Parfois c'est le contraire, par exemple quand la version d'iptables est
trop ancienne pour le noyau. C'est le cas actuellement avec le dernier
iptables 1.3.7, plus ancien que le dernier noyau 2.6.21. Il y a aussi le
cas intermédiaire, quand un nouvelle option est ajoutée à une cible ou
une correspondance existante ; il faut qu'à la fois le module du noyau
et la bibliothèque d'iptables la prennent en charge pour pouvoir
l'exploiter. Ce fut par exemple le cas du support des intervalles de
ports dans la correspondance "multiport", introduit dans le noyau 2.6.11
et iptables 1.3.0 (je crois).


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pascal Hambourg
Franck Joncourt a écrit :

Aurais tu un exemple pour mettre en evidence l'interet de compter le
nombre de connxions etablies plutot que le nombre de nouvelles connexions ?



Volontiers. Chaque connexion ouverte consomme des ressources de la
machine (CPU, mémoire, bande passante...), on peut donc souhaiter
limiter les ressources allouées à chaque utilisateur en limitant le
nombre de connexions ouvertes simultanément par adresse IP source. Peu
importe qu'il ouvre 1000 connexions par minute du moment qu'il a moins
de 10 connexions ouvertes simultanément à chaque instant, c'est-à-dire
que ces connexions sont de courte durée.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Benjamin RIOU
Le 02/05/07, Pascal Hambourg a écrit :
[Je coupe le passage sur la correspondance "recent", que je connais trè s
mal et qui me donne mal au crâne à chaque fois que je m'y frotte.]

Benjamin RIOU a écrit :
> Oui, connlimit était l'idéal pour moi, mais il me répond continue llement :
> iptables: No chain/target/match by that name
>
> Bien que le fichier libipt_connlimit.ko est bien dans /lib/iptables/
>
> Donc c'est parce que cela ne serait pas inclus au kernel ?

Voilà.

> C'est étrange dans la mesure où :
> iptables -m connlimit --help
> répond correctement.

C'est la bibliothèque libipt_connlimit d'iptables qui répond.

> et que le module connlimit est présent dans le man d'iptables...

Comme pour un grand nombre de cibles et de correspondances d'iptables,
il faut deux éléments :
- une bibliothèque libipt_truc.so située dans /lib/iptables/ et utili sée
par le programme iptables lors de la création d'une règle ;
- un module du noyau ipt_truc.[k]o ou xt_truc.ko situé dans
/lib/modules/<version>/kernel/net/... qui réalise effectivement la
fonction lorsqu'un paquet rencontre la règle. Notons que la fonction
peut être compilée en dur dans le noyau et non en module.



En effet, cela n'est pas dans /lib/modules/.../kernel/net/ipv4/netfilter/ !

Je crie à l'arnaque ;-)

Vais essayer de patcher iptables avec patch-o-matic (je sens déjà les
misères arriver...)
afin d'y mettre en place connlimit, puisque vous me dites que c'est le
mieux (c'est vrai que cela semble moins l'usine que recent).

J'avais déjà essayé , mais sans grand succès :
Pour accèder à patch-o-matic, il faut se connecter à un svn via la c ommande :

svn co https://svn.netfilter.org/netfilter/trunk/module

or, je n'ai pas le programme svn d'installé, et je n'ai aucune idée de
que c'est .
:#apropos svn
svn: rien d'approprié

et aptitude search svn ne répond rien qui pourrait se lancer hors GUI.


Y a t'il une astuce ?

++ bonne nuit ;-)
Ben
1 2 3