Besser Filtern mit IP Tables
Seite 3: State of the Art
State of the Art
Der Einsatz von Match-Erweiterungen in Netfilter erhöht die Flexibilität deutlich. Match-Module testen auf spezielle Eigenschaften von Netzwerkpaketen, die über die Standardparameter von Paketfilterregeln hinausgehen. Wenn man will, kann man auch eigene Module schreiben; allerdings muss dazu der Linux-Kernel neu übersetzt werden.
Match-Module spricht man über iptables -m an, wobei jedes Modul eine Reihe von Unteroptionen enthalten kann. Auch zu den Match-Modulen hält iptables Hilfestellung bereit: iptables -m -h listet die Optionen des jeweiligen Moduls auf.
Das wichtigste Modul ist -m state, mit dem man Verbindungen auf ihren Zustand filtern kann (Stateful Filtering/Inspection). TCP-, UDP- und ICMP-Pakete werden daraufhin überprüft, ob sie zu einer bereits bestehenden Verbindung gehören. Das state-Modul analysiert dazu verschiedene Angaben in den Paketen, wie zum Beispiel Sequenznummern und welche Flags in den Headern gesetzt sind. In eigenen Tabellen verwaltet es dann alle zu einer Verbindung gehörenden Parameter.
Mit Stateful Inspection lassen sich funktionierende Regelsätze viel einfacher erstellen als noch mit ipchains. Um beispielsweise den Rechnern im LAN beliebige Verbindungen von drinnen nach draußen zu gestatten, genügen zwei Regeln:
iptables -A FORWARD -m state --state NEW -i eth0 -j ACCEPT
iptables -A FORWARD -m state
--state ESTABLISHED,RELATED -j ACCEPT
Alle Pakete, die eine neue Verbindung aufbauen, haben den State NEW, ESTABLISHED trifft auf alle Pakete einer bestehenden Verbindung zu, bei der schon Daten von beiden Seiten ausgetauscht worden sind. Dies gilt auch für UDP- und ICMP-Pakete, die immer verbindungslos sind. RELATED umfasst alles, was logisch zu einer Verbindung gehört, aber kein echter Teil der Verbindung ist, etwa ICMP-Fehlermeldungen einer nicht zu Stande gekommenen Verbindung. Ebenfalls unter RELATED laufen aktive FTP-Datenübertragungen, die als separate Verbindungen vom ftp-Server aufgebaut werden, aber logisch zu einer bestehenden Verbindung gehören. So lassen sich die Probleme, die einfache Paketfilter mit dem aktiven FTP-Protokoll haben, einfach umgehen.
Zusätzlich gibt es eine Reihe weiterer States wie INVALID, der alle Pakete ausfiltert, die weder zu einer bestehenden Verbindung gehören, noch zum Versuch, eine neue Verbindung aufzubauen.
In der Regel arbeitet man auf Firewalls mit einer Deny-All-Strategie (DROP oder REJECT als Default Policy). Um auf dem System trotzdem ausgehende Verbindungen und eingehende Antwortpakete zu erlauben, muss man folgende Regeln erstellen:
iptables -A OUTPUT -m state
--state NEW, ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state
--state ESTABLISHED, RELATED -j ACCEPT