firewall home |
Einleitung |
Architektur |
Syntax |
Stateful Inspection |
NAT/Masquerading |
logging |
BeispielScripts |
Quellen/Links |
|
Stateful Inspection
Nun ein wenig, über die interessanteste Neuerung von iptables.
Ein Firewall mit s. i. ist um einiges sicherer als ein normaler Paketfilter.
Er speichert die Verbindungsdaten in Tabellen, wie Quell- und Ziel IP-Adresse,
Port-Nummer - Paare, Protokolltypen, den Verbindungsstatus und timeouts.
Folgende vier Statusformen gibt es :
INVALID : | Das Paket gehört zu keiner bekannten Verbindung |
ESTABLISHED: | Das Paket gehört zu einer bekannten Verbindung, welche schon in beiden Richtungen Pakete ausgetauscht hat. |
NEW : | Entweder das Paket startet eine neue Verbindung, oder es gehört zu einer, die noch keine Pakete in beiden Richtungen hatte |
RELATED : | Das Paket startet eine neue Verbindung, die mit einer bestehenden Verbindung verwandt ist (z.B. ftp). |
Die Statustabelle kann man sich z.B mit cat /proc/net/ip_conntrack ansehen.
Die maximale Größe der Tabelle wird in /proc/sys/net/ip4/ip_conntrack_max
bestimmt.
Hier nun ein Beispiel:
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
Dies erlaubt ausgehende Päckchen, die eine neue Verbindung initialisieren
oder zu einer bereits bestehenden gehören. Eingehende Verbindungen werden
nur gestattet, wenn sie zu einer bestehenden Verbindung gehören.
Da durch ein von aussen gesendetes ack-Paket wohl einen Tabelleneintrag
erzeugt wird, sollte man sich versichern, daß nur Pakete mit einem syn-Flag
gesetzt als neu betrachet werden :
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
to be continued.