Samstag, 1. September 2012

Schnelle Hilfe mit IPTABLES

Eines in meinen Augen beste und schnellste Tool wenn es um einen Schuz des eigenen Systems geht ist Iptables, die seit Kernel 2.4.x integrierte Firewall. http://de.wikipedia.org/wiki/Iptables. Natürlich gibt es hierzu mehr Howtos als man alleine lesen kann. Trotzdem möchte ich die IPtables noch einmal kurz beleuchten, da ich sie im täglichen Geschäft immer mal wieder brauche.

So habe ich in meinem Dokumenten Ordner eine Datei die nennt sich "iptables_fastuse.txt" hier befindet sich eigentlich nur eine kleine Übersicht über verschiedene Regeln die ich schonmal gebraucht habe, mit einer kleinen erläuterung was diese einegtlich tun (ich vergesse das nämlich dauernd).

Der Erste aufruf in meiner liste

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP wie sich ebstimmt vermuten lässt, erstellt diese eine Regel welche jeden reinkommenden Traffic (INPUT) von einer gewissen Adresse (-s xxx.xxx.xxx.xxx) nicht an (DROP). Hierbei steht das -A für Append, also die Regel wird am Ende der "regelnliste" angestellt.

Wie sich also zeigt ist der Aufbau der iptables sehr einfach gehalten. Wir unterscheiden also eigentlich auf der einen Seite

INPUT
OUTPUT

hierbei gilt natürlich auch die Unterschiede zwischen -A -I -D zu beachten.
-A fügt die regel hinten an die Liste an
-I fügt die regel vorne in die Liste ein
-D löscht die passende Regel wieder aus der Liste

und auf der -j Seite (Also der "Was tun wir damit")

ACCEPT
REJECT
RETURN
DROP

Zunächst noch ein/zwei ganz wichtigen Hinweisen. Die Regeln der iptables werden von oben nach unten durchgegangen, also die erste Regel vor der Zweiten und so weiter. Somit muss man etwas aufpassen, wenn das System eine Default auf ACCEPT hat, dann muss man Verbindungen verbieten, ist die default ein DROP so kann man dies natürlich mit ACCEPT steueren.
In den folgenden Regeln gehen wir von einem default auf ACCEPT aus.

Löschen der ganzen Regeln geht einfach mit iptables -F, dan ansehen der Regeln via iptables -L.

Kommen wir nun also zu ein paar anderen Regeln, die man etwas besser benutzen kann, und ich denke das sie ein paar Feinheiten von iptables aufzeigen die man täglich benutzen kann.

iptables -A INPUT -p tcp --syn --dport <<PORT>> -m connlimit --connlimit-above <<ANZAHL>> -j REJECT --reject-with tcp-reset 
Dies ist ein sehr schöner Befehl, mit Hilfe von connlimit sperren wir den gleichzeitigen Zugriff von einer IP auf unseren PORT sobald diese über ANZAHL hinaus gehen, sehr schön um zB Kundenzugriffe auf Datenbanken einzuschränken

Dann erwähnen wir im gleichen Atemzug natürlich auch noch

iptables -A INPUT -p tcp -m limit --limit 1/s --limit-burst 3 -j RETURN 
Der Limit Funktion, anders als der connlimit, ist es egal von welcher IP die Zugriffe kommen sie sorgt eibfach dafür das in diesem Fall nur 1 Zugriff pro sekunde über tcp möglich ist. Diese Kommando lässt sich auch mit --dport PORT erweitern, um also einen Zugriff auf diesen Port zu beschränken

Es hat sich auch bewährt das ganze als Log zu schreiben, da man ja nachvollziehen möchte wen man so rausgeschmissen hat, folgender Eintrag vor dem eigentlichen Eintrag (z.B. einer der Erste) sorgt dafür das dies als zeile in /var/log/kern.log gespeichert wird

iptables -A INPUT -p tcp --syn --dport <<PORT>> -m connlimit --connlimit-above <<ANZAHL>> -j LOG man beachte also das für das REJECT ein LOG benutzt wird, also wird es in diesem Falle nur gelogt, die eigentliche Verbindung funktioniert aber trotzdem. Deshalb muss auch dieser Eintrag _vor_ dem Reject stehen, da ansonsten die Verbindung unterbrochen wird und kein LOG gschrieben wird.