iptables: aktuelles Modul

8

Ich verwende das "aktuelle" Modul, um das Scannen von Ports zu verhindern, z.

-A INPUT -i eth0 -m recent --name PORTSCAN --update --seconds 60 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT         -m recent --name PORTSCAN --set -j DROP

Die --updateOption aktualisiert im Gegensatz zu ihrem Namen (dh alten Wert durch neuen aktualisieren) nicht den zuletzt gesehenen Eintrag, sondern fügt einen weiteren hinzu. In meinem einfachen Setup interessiert mich nur der letzte Eintrag. Ich brauche nicht die gesamte Historie der gesehenen Pakete (dh für Statistiken).

Gibt es eine Möglichkeit, ich konnte nur das zuletzt gesehene Paket behalten? Früher gab es eine Option --reap, aber AFAIK wurde entfernt.

Ich mache mir Sorgen, dass auf einem ausgelasteten Server die PORTSCAN-Liste schnell ziemlich groß werden könnte. Ich weiß nicht, wie hoch das Limit ist, aber ich bin mir sicher, dass es ein Limit geben muss.

user1968963
quelle

Antworten:

10

Wenn Sie sich die Manpage für iptables ansehen, insbesondere den recentModulabschnitt, gibt es einige Parameter, die so aussehen, als würden sie Ihnen die Kontrolle geben, nach der Sie suchen:

Auszug aus dem recentAbschnitt iptables- Modul

Das Modul selbst akzeptiert Parameter, Standardeinstellungen werden angezeigt:

   ip_list_tot=100
          Number of addresses remembered per table.

   ip_pkt_list_tot=20
          Number of packets per address remembered.

Anhand dieser beiden Parameter können Sie also die Anzahl der IP-Adressen und die Anzahl der Pakete steuern, an die sich das recentModul "erinnert".

Denken Sie daran, dass dies ein Kernelmodul ist. Um diese Einstellungen anzuwenden, müssen Sie sie entweder wie folgt zum Laden des Moduls festlegen:

/sbin/modprobe ipt_recent ip_list_tot=2000 ip_pkt_list_tot=255

Auf meinem Fedora 14-System heißt das Modul tatsächlich. xt_recentSie können sehen, welche Arten von Parametern es verwenden kann, indem Sie modinfo:

$ modinfo xt_recent
filename:       /lib/modules/2.6.35.14-106.fc14.x86_64/kernel/net/netfilter/xt_recent.ko
alias:          ip6t_recent
alias:          ipt_recent
license:        GPL
description:    Xtables: "recently-seen" host matching
author:         Jan Engelhardt <[email protected]>
author:         Patrick McHardy <[email protected]>
srcversion:     00B9A3AB999488BFEB4FA6A
depends:        
vermagic:       2.6.35.14-106.fc14.x86_64 SMP mod_unload 
parm:           ip_list_tot:number of IPs to remember per list (uint)
parm:           ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
parm:           ip_list_hash_size:size of hash table used to look up IPs (uint)
parm:           ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
parm:           ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
parm:           ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)

Überprüfen der xt_recent-Einstellungen

Alle Einstellungen für dieses Modul werden unter dem gespeichert /sys/module/xt_recent. Insbesondere werden die Parameter, die Sie übergeben, hier beibehalten:

$ ls -1 /sys/module/xt_recent/parameters/
ip_list_gid
ip_list_hash_size
ip_list_perms
ip_list_tot
ip_list_uid
ip_pkt_list_tot

Jeder der Parameter kann durch einfaches Durchsuchen der Dateien in diesem Verzeichnis überprüft werden, zum Beispiel:

cat /sys/module/xt_recent/parameters/ip_pkt_list_tot

Dies sagt uns also, dass der Standardwert für den Parameter ip_pkt_list_tot20 ist.

slm
quelle
Das funktioniert super. Vielen Dank. Ich kann jetzt beim Laden des Moduls ip_pkt_list_tot = 1 angeben. Gibt es in Bezug auf die andere Option, ip_list_tot, eine Möglichkeit, den Standard- / aktuellen Wert herauszufinden?
user1968963
OK, ich sehe, ich kann die aktuellen Werte der Parameter finden in: / sys / module / xt_recent / parameters / *
user1968963
Entschuldigung, ich bin ausgestiegen, habe gerade Ihre Frage gesehen. Ja, Sie können alles unter / sys / module / xt_recent / * sehen. Ich werde die Antwort auch mit diesen Informationen aktualisieren.
slm
1
Eine schönere Möglichkeit, die Informationen in diesen Dateien head /sys/module/xt_recent/parameters/*
aufzulisten
1

Zusätzlich zu der oben gegebenen Antwort schlage ich vor, dass Sie eine zusätzliche BADGUYS-Tabelle vor Ihre PORTSCAN-Falle stellen und diese verwenden, um ein Überlaufen der letzteren zu verhindern.

Wenn der PORTSCAN ausgelöst wird, fügen Sie der Tabelle BADGUYS einen Datensatz hinzu.

Etwas wie das:

-A INPUT --name PORTSCAN --rcheck --seconds 60 --reap --hits 20 -j set_bad
-A INPUT --name BADGUYS --rcheck --seconds 3600 --reap -j noway
-A INPUT <trap case> --name PORTSCAN --set
-A set_bad --name BADGUYS --set
-A noway -p tcp -j REJECT --reject-with tcp-reset
-A noway -j DROP
AnrDaemon
quelle