Einstieg in iptables als Kernel-basierte Firewall

iptables ist ein Administrationstool für IPv4 Paket Filterung und NAT (= Wikipedia | Network Address Translation) der Linux Kernel Firewall.

Seit der Linux Kernel Version 2.4 gehört iptables zur Funktion des Kernels. Einen integrierten Paketfilter gab es bereits seit der Version 1.0, jedoch wurde dieser über die Jahre hinweg mehrfach überarbeitet und bekam immer mehr an Funktionalität.

Die Firewall des Kernels wird als stateful bezeichnet, da sie den Zustand einer Verbindung überwachen, diese umleiten, oder Datenpakete basierend auf dem Zustand manipulieren und stoppen kann. Stateless Firewalls können dagegen nur die Quell- und Zieladresse manipulieren.

Einsatzzwecke für iptables

Mit Hilfe von iptables und einem Kernel 2.4 oder neuer kann somit eine kleine Firewall gebaut werden, welche vor normalen Angriffen oder neugierigen Personen schützt. Da die Firewall eine Software-basierte Lösung ist, bietet sie noch lange nicht so viel Schutz wie eine Hardware-basierte Firewall, daher ist iptables wirklich nur für den „einfachen“ Schutz gedacht.

Ein paar Beispiele, wofür iptables genutzt werden kann:

      • Zum Schutz vor Brut-Force Angriffen (siehe auch Wikipedia | Brut-Force Methode)
      • Einschränkung bzw. Blockierung von bestimmten Services (z.B. SSH, Webserver, Telnet,…)
      • Zum Schutz vor DoS-Angriffen

Ein paar Beispiele, wofür iptables nicht genutzt werden kann:

      • Zum Schutz vor DDoS-Angriffen

Hinweis: Zwischen DDoS und DoS gibt es einen kleinen Unterschied. DoS-Angriffe erfolgen nur von einem Quellrechner, während DDoS-Angriffe von mehreren verschiedenen Quellrechnern erfolgt. Daher steht das zweite „D“ bei DDoS für „Distributed“. (Siehe auch Wikipedia | Denial of Service)

DoS-Angriffe können mit Hilfe von iptables bis zu einem bestimmten Grad geblockt werden. Ab einem zu großen Angriff schlägt auch hier iptables fehl und der Host wird in die Knie gezwungen. Hier hilft dann nur noch eine Hardware-basierte Firewall, die vor den Host geklemmt wird.

Verwendung von iptables

Bei den Regeln ist zu beachten, dass sie chronologisch, also wie bei einer Liste von oben nach unten abgearbeitet werden. Sobald eine Regel auf ein Paket passt, wird diese Regel genommen und alle anderen Regeln werden ignoriert bzw. gar nicht erst angeschaut. Daher sollte man beim Erstellen der Regeln darauf achten, in welcher Reihenfolge sie stehen.

Nachfolgend eine Tabelle zur Begriffserklärung anhand von Beispielen:

BegriffBeispielErklärung
Rules (= Regeln)ACCEPT, REJECT, DROP,...Entscheidet, was mit dem Paket passiert
Chains (= Ketten)INPUT, FORWARD,...Sammlung von Ketten
Tables (= Tabellen)mangle, nat, filter oder eigen definierteKetten sind in Tabellen unterteilt
ACCEPT (= Erlauben)iptables -A INPUT -p tcp -s 172.16.10.150 --dport 22 -j ACCEPTErlaube eingehende TCP Pakete auf dem Port 22 nur von der IP-Adresse 172.16.10.150
REJECT (= Zurückweisen und Fehlerpaket senden)iptables -A INPUT -p tcp --dport 22 -j REJECTWeise das TCP Paket auf Port 22 zurück und sende ein Fehlerpaket an die Quelladresse
DROP (= Ignorieren und keine Antwort senden)iptables -A INPUT -p tcp --dport 22 -j DROPIgnoriere das eingehende TCP Paket auf Port 22 und sende keine Antwort
LOG (= schreibt einen Eintrag in syslog)iptables -A INPUT -p tcp --dport 22 -j LOGLogge das TCP Paket auf Port 22 in syslog
REDIRECT (= Zieladresse wird manipuliert, sodass es an den lokalen Rechner gesendet wird)iptables -A INPUT -p tcp --dport 22 -j REDIRECTÄndere die Zieladresse des TCP Pakets, welches auf Port 22 reinkommt, auf die IP-Adresse des lokalen Rechners um
MASQUERADE (= Quell-IP-Adresse wird auf die IP-Adresse geändert, worüber das Paket den Rechner verlässt)iptables -A INPUT -p tcp --dport 22 -j MASQUERADEÄndere die Quelladresse auf die IP-Adresse ab, worüber das Paket versendet wird

Neue Regeln werden mittels „iptables -A <CHAINNAME> […]“ erstellt, während mittels „iptables -D <CHAINNAME> […]“ eine spezifizierte Regel gelöscht werden kann. Beim Löschen einer Regel ist zu beachten, dass die Regel exakt so wie beim Erstellen der Regel angegeben werden muss – nur anstatts dem „-A“ schreibt man ein „-D“.

Beispiel für das Erstellen von einer neuen Regel:

Beispiel für das Löschen von einer vorhandenen Regel:

Parameter:

-p gibt das Protokoll an (z.B. TCP)

-s gibt die Quelladresse an, von wo das Paket stammt

–dport gibt den Zielport (= Destination Port) des Pakets an

Beispiel für den chain „INPUT“

Der Chain „INPUT“ beinhaltet alle Regeln für die eingehenden Pakete. Um den SSH-Zugang zum Beispiel nur für ein bestimmtes Netzwerk erreichbar zu machen, kann folgende Regel erstellt werden:

Beispiel für den chain „OUTPUT“

Der Chain „OUTPUT“ beinhaltet alle Regeln für die ausgehenden Pakete. Hier kann man zum Beispiel sagen, dass das System nur SNMP Anfragen zu einem bestimmten Host senden darf:

Für dieses Beispiel muss natürlich die Policy des Chains „OUTPUT“ auf „DROP“ oder ähnlichem eingestellt sein.

Beispiel für eine chain „policy“

Chains können standardmäßig auf eine Regel gesetzt werden, sodass nicht hunderte von Regeln erstellt werden müssen. Ein Beispiel hierfür ist zum Beispiel, dass jeglich ausgehender Traffic verboten wird:

Der Parameter „-P“ steht für „Policy“. Somit wird die Regel auf den kompletten Chain angewandt.

Sebastian Krätzig

Sebastian Krätzig absolviert derzeit eine Ausbildung zum Fachinformatiker für Systemintegration bei der Firma teamix GmbH. Beruflich beschäftigt er sich neben NetApp in dem Themenbereich Linux. Privat treibt er sein Projekt "TS3 Tools" weiter, welches diverse Administrationstools für TeamSpeak Server anbietet. Nebenbei leitet er noch das TeamSpeak-Connection.de Team mit.

 
Kommentare
Joerg Muehlmann

Sehr hilfreich, besten Dank!

Hinterlassen Sie einen Kommentar