Policies - die Auffangbecken
Die Policy ist das Auffangbecken einer Chain - allerdings haben lediglich die drei Standardchains
(input, output, forward) eine Policy, alle eigenen Chains reichen Pakete für die keine Regeln existieren
einfach an die aufrufende Chain zurück. Mögliche Werte für die Policy sind 'DENY', 'REJECT' und 'ACCEPT'. Deny
läßt das Paket einfach verschwinden. Reject tut das gleiche, teilt der Gegenstelle allerdings mit,
daß das Paket nicht angenommen wurde. Accept läßt das Paket passieren.
Soll der
Firewall wirklich Sicherheit bieten, so sollten alle Policies auf 'DENY' stehen. Die Option 'REJECT'
produziert nur unnötigen
Traffic und 'ACCEPT' öffnet bei jedem Konfigurationsfehler ein Scheunentor
für den Angreifer.
Die Policy einer Chain setzt man mit dem Kommando
ipchains -P Name Policy
Das Setzen der Policy sollte zu Beginn der Firewallkonfiguration erfolgen. Damit ist sichergestellt,
daß eventuell auftretende Fehler im späteren Verlauf, die zum Beispiel zum Abbruch des Konfigurationsskripts
führen, nicht für offene Türen sorgen. Allerdings müssen die folgenden Regeln dann wohlüberlegt sein.
Außerdem ist zu beachten, das bei der Verwendung von Namen statt
IP Adressen innerhalb einer Regel
sichergestellt sein muß, daß der Zugriff auf den
Nameserver in früheren Regeln erlaubt wurde.
Das Kernstück: Die Regel
Jede Chain besteht aus einer Menge von Regeln. Eine Regel betrachtet den Header eines Paketes und
enscheidet anhand der dort vorliegenden Informationen was mit dem Paket zu geschehen hat. Als Grundlage
der Entscheidungen betrachtet es die Absendeadresse, die Zieladresse das verwendete Protokoll und
abhängig von diesem entsprechend weitere Informationen.
Eine Regeldefinition basiert nun auf genau diesen Informationen. Im folgenden Beispiel soll die
Kommunikation mit dem
Webserver 'www.somehost.com' vom Rechner 'paul.myhome.de' erlaubt werden. Das
HTTP Protokoll basiert auf TCP, der Webserver verwendet den
Port 80. Der lokale Rechner 'Paul' hat
eine gültige IP Adresse. Der Firewall ist über das Interface 'eth0' im
LAN eingebunden, und über
eine Dialup Verbindung 'ppp0' mit dem Internet.
Zunächst muß das Paket des lokalen Rechners die Input-Chain passieren. Das hinzufügen der
Regel erfolgt mit dem Kommando:
ipchains -A input -i eth0 -s paul.myhome.de -j ACCEPT
Jetzt werden Pakete von Paul an der Schnittstelle eth0 entgegengenommen. Entsprechende Routen vorausgesetzt,
werden die Pakete nur weitergeleitet, und passieren die Forward Chain. Eine Regel die das
Weiterleiten von Pauls Paketen erlaubt setzt man mit
ipchains -A forward -s paul.myhome.de -d www.somehost.com -j ACCEPT
Alle Pakete von Paul an den Webserver werden nur weitergereicht. Vor dem Verlassen des Rechners werden ausgehende
Pakete nun noch von der Output Chain untersucht. Das Kommando
ipchains -A output -i ppp0 -pTCP -d www.somehost.com 80 -j ACCEPT
erlaubt nun allen Paketen auf der Schnittstelle ppp0 zu verlassen, sofern sie an den Webserver gerichtet
sind, und auch dann nur, wenn Sie dort an den Webserverport gerichtet sind. Eine
FTP Verbindung zu
dem Rechner ist damit nicht möglich. Erreichen die Pakete von Paul den
Server so versucht der
Server im allgemeinen Pakete zurückzuschicken. Entsprechende Regeln für die Antwortpakete mü
ssen ebenfalls eingetragen werden. Im Beispiel lauten sie
ipchains -A input -i ppp0 -pTCP -s www.somehost.com 80 -j ACCEPT
ipchains -A forward -s www.somehost.com -d paul.myhome.de -j ACCEPT
ipchains -A output -i eth0 -d paul.myhome.de -j ACCEPT
Die erste Regel erlaubt Antwortpaketen von Port 80 des Webservers das Passieren der Input Regel,
die zweite das Weiterleiten von entsprechenden Paketen an den lokalen Rechner Paul, und die
dritte das Verlassen der Pakete über die Lokale Schnittstelle. Will man auf diese Weise
Regeln für alle möglichen Verbindungen definieren so ist der Aufwand gigantisch. Für
gewöhnlich vergibt man Regeln nicht für einzelne Rechner sondern für Rechnergruppen.
Hat das lokale Netz den IP Bereich von 1.2.3.1 bis 1.2.3.255 und sollen allen Rechner
Verbindungen zu Webservern erlaubt werden so genügt ein 1.2.3.0/24 als Quelladresse.
Die Zahl nach dem '/' gibt die Anzahl signifikanter Bits in der IP
Adresse an. Die
erste Input Regel lautet also beispielsweise:
ipchains -A input -i eth0 -s 1.2.3.0/24 -j ACCEPT
um Pakete von allen lokalen Rechnern an der lokalen Schnittstelle entgegenzunehmen.
Um sich alle bestehenden Regeln anzusehen verwendet man das '-L' (list) Kommando. Eine
fehlerhafte oder überflüssige Regel löscht man über das '-D' Kommando. Als Parameter
dient entweder die Nummer der Regel in der Chain also z.B. 'ipchains -D 1' um die erste
Regel zu löschen oder die extakten Parameter des entsprechenden '-A' Kommandos. Sollen alle
Regeln gelöscht werden so kann eine Chain mittels 'ipchains -F Name' geleert (flushed) werden.