IPTables - Dstlimit/Hashlimit

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
durztbrother
Beiträge: 235
Registriert: 27.01.2003 23:23:48
Wohnort: Hamburg

IPTables - Dstlimit/Hashlimit

Beitrag von durztbrother » 26.01.2006 18:49:24

Hi all,

ich experimentiere gerade ein wenig mit IPTABLES und dem dstlimit modul herum und habe mir diese beiden Rules erstellt um testweise HTTP Requests zu blocken:

Code: Alles auswählen

iptables -v -A INPUT -p tcp --dport 80 -m dstlimit --dstlimit 10/second  --dstlimit-mode srcip-dstip  --dstlimit-name wwwlimit -j ACCEPT

iptables -v -A INPUT -p tcp --dport 80 -m recent --name wwwlimit --set -j DROP
Wenn ich meine FW mit diesen Regeln füttere bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

ACCEPT  tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  tcp dpt:80 limit: avg 10/sec burst 5 mode srcip-dstip
iptables: No chain/target/match by that name
DROP  tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  udp dpt:80 recent: SET name: wwwlimit side: source
Hat jemand eine Idee was es damit auf sich haben könnte?

Fakten:

Code: Alles auswählen

Debian Sarge
uname -a
Linux amd 2.6.15 #1 Sat Jan 7 19:44:16 CET 2006 i686 GNU/Linux
root@amd:/home/patrick# iptables -V
iptables v1.2.11
Viele Grüße
Patrick
Zuletzt geändert von durztbrother am 29.01.2006 10:03:55, insgesamt 4-mal geändert.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: IPTables - Dstlimit

Beitrag von gms » 26.01.2006 22:21:01

Habe das jetzt auch probiert, wollte das Modul ja schon länger einmal testen.
Der Fehler wird durch die "dstlimit-name" Option verursacht. Egal was dort eingegeben wird, es erscheint immer diese Fehlermeldung. Leider ist diese Option aber zwingend erforderlich. Die Manpage sagt darüber nur folgendes:
man iptables hat geschrieben: --dstlimit-name name
Name for /proc/net/ipt_dstlimit/* file entry
Da müßte also im Kernel ein entsprechender Code vorhanden sein, der das "ipt_dstlimit" Verzeichnis erstellt.

Code: Alles auswählen

root@gms1:/usr/src/linux-2.6.15# egrep -R mkdir.*ipt *
net/ipv4/netfilter/ipt_CLUSTERIP.c:     clusterip_procdir = proc_mkdir("ipt_CLUSTERIP", proc_net);
net/ipv4/netfilter/ipt_hashlimit.c:     hashlimit_procdir = proc_mkdir("ipt_hashlimit", proc_net);
net/ipv4/netfilter/ipt_recent.c:        proc_net_ipt_recent = proc_mkdir("ipt_recent",proc_net);
Gut, also der Verzeichnisname könnte ja auch in einer Variablen gespeichert werden, diese müßte aber doch irgenwo initialisiert werden:

Code: Alles auswählen

root@gms1:/usr/src/linux-2.6.15# grep -R ipt_dstlimit *
root@gms1:/usr/src/linux-2.6.15#
Anscheinden paßt hier also das iptables-Paket nicht ganz mit dem Kernel zusammen. Mehr habe ich aber auch noch nicht herausgefunden. Ich werde mir morgen vielleicht einmal die netfilter-Sourcen saugen.

Gruß
gms

Benutzeravatar
durztbrother
Beiträge: 235
Registriert: 27.01.2003 23:23:48
Wohnort: Hamburg

Beitrag von durztbrother » 28.01.2006 10:22:50

Hi gms,

bist Du schon irgendwie weiter gekommen? Ich habe noch ca 2 Stunden google gequält, aber leider nichts hilfreiches gefunden.

Ciao
Patrick

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 28.01.2006 17:02:26

Beim Bauen von iptables wird standardmäßig die libipt_dstlimit.so nicht mehr erzeugt.
In diesem iptables Changelog wurde dstlimit das letzte Mal erwähnt:
iptables v1.3.0 Changelog hat geschrieben: - New libipt_hashlimit Match, supersedes dstlimit
[ Harald Welte ]
Scheint ein versteckter Hinweis zu sein :)

Gruß
gms

[edit]
Hier stehts noch eindeutiger:
http://www.netfilter.org/projects/patch-o-matic/pom-obsolete.html hat geschrieben: dstlimit - iptables dstlimit match
Author: Harald Welte <laforge@netfilter.org>
Status: Deprecated by hashlimit
[/edit]

Benutzeravatar
durztbrother
Beiträge: 235
Registriert: 27.01.2003 23:23:48
Wohnort: Hamburg

Beitrag von durztbrother » 28.01.2006 17:30:36

Hallo gms,

habe es auch gerade gefunden

Code: Alles auswählen

 Deprecated by hashlimit
habe mir eine neuere Version von IPTABLES installiert : iptables-1.3.4
Anschließend das hashlimit Modul geladen und die Regeln angepasst und eine Regel für HTTPS Traffic erzeugt

Code: Alles auswählen

$IPTABLES -A  \
      -p TCP --sport $p_high --dport https -m hashlimit \
       --hashlimit 10/second --hashlimit-mode srcip,dstport \
       --hashlimit-name https -j ACCEPT
und es geht:

Code: Alles auswählen

iptables -L -v -n | grep limit
 0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spts:1024:65535 dpt:443 limit: avg 10/sec burst 5 mode srcip-dstport

Im Proc Verzeichnis sieht man dann auch einen entsprechenden Eintrag, wenn die Regel greift:

Code: Alles auswählen

 cat /proc/net/ipt_hashlimit/https
8 213.153.4.151:0->0.0.0.0:443 16000 16000 3200
 cat /proc/net/ipt_hashlimit/https
9 213.152.5.151:0->0.0.0.0:443 6400 16000 3200
Gruß
Patrick

Antworten