Schotten dicht!
Linux-Systeme vor Angriffen schützen, Teil 2
Praktische Auswirkungen
Noch einmal zusammengefasst: Wir akzeptieren SSH-Verbindungen, die über die ISDN-Karte ankommen, genauso wie Anfragen an unseren Apache-Webserver. Auch ICMP-Nachrichten, Antworten des DNS-Servers und abgerufene Internet-Daten werden durchgelassen. Ein Verbindungsaufbau von außen, der nicht über SSH oder den Webserver geht, wird hingegen immer ignoriert.
Für einen Benutzer, der an Ihrem Rechner sitzt, bedeuten diese Einstellungen nur geringfügige Einschnitte. So kann er, selbst wenn der talk-Daemon aus der letzten Ausgabe nicht abgeschaltet worden ist, nicht vom Internet aus angesprochen werden. Auch die Administration von außen via swat oder linuxconf ist unmöglich, vom eigenen Recher aus funktioniert es problemlos. Einzig im IRC greift eine Einschränkung: Wir können keine Dateien mehr via DCC oder anderweitig schicken. Auch unser FTP-Server ist für Außenstehende nicht erreichbar.
Wir haben Ihnen in Tabelle 1 eine Liste von Erlaubnis-Regeln zusammengestellt, die Sie zur Freigabe einzelner Dienste in die Firewall einbauen können.
Tabelle 1: Regeln zur Dienst-Freigabe
| Nameserver | ipchains -A input -d <§§I>IP<§§I> 53 -p udp -i <§§I>Interface<§§I> -j ACCEPT
|
ipchains -A input -d <§§I>IP<§§I> 53 -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
|
| SSH-Zugang | ipchains -A input -d <§§I>IP<§§I> ssh -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| Telnet-Zugang: | ipchains -A input -d <§§I>IP<§§I> telnet -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| Sendmail-Zugang | ipchains -A input -d <§§I>IP<§§I> smtp -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| Apache-Webserver | ipchains -A input -d <§§I>IP<§§I> http -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| FTP-Zugang | ipchains -A input -d <§§I>IP<§§I> ftp -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
ipchains -A input -s 0/0 ftp-data -d <§§I>IP<§§I> 1024: -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
|
| ICQ | ipchains -A input -d <§§I>IP<§§I> 4000 -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| IRC mit DCC | ipchains -A input -d <§§I>IP<§§I> 1024: -p tcp -i <§§I>Interface<§§I> -j ACCEPT
|
| Diese Regel ist mit Vorsicht zu verwenden, sie erlaubt den Verbindungsaufbau von außen auf nicht-privilegierten Ports. Es darf dann keine andere Regel für Protokoll TCP und Ports ab 1024 aufwärts aktiv sein. |
Automatische Aktivierung
Ein ganz großes Problem für den Aufbau einer privaten Firewall ist, dass sich bei jeder Einwahl die eigene Adresse (IP) ändert – und sie entsprechend in den Firewall-Regeln korrigiert werden muss. Die meisten Konfigurations-Tools für Firewalls sehen die Änderung der IP-Adresse nicht vor und sind so nicht direkt für den Heimgebrauch geeignet.
Optimal wäre, wenn die Regeln nach jeder Anwahl automatisch aktiviert und beim Auflegen wieder deaktiviert würden, natürlich mit der korrekten IP.
Die gesuchten Skripte, in die wir die Regeln einbauen können, lauten /etc/ppp/ip-up und /etc/ppp/ip-down. ip-up wird aufgerufen, sobald die Einwahl erfolgt ist, und nach Auflegen ip-down. Dabei nutzen wir aus, dass uns als Parameter $1 das Modem- beziehungsweise ISDN-Interface und als $4 unsere zugewiesene IP-Adresse mitgeteilt wird. Da für die Einrichtung und Entfernung der Firewall-Regeln fast die selbe Befehlszeile benutzt wird, fassen wir die Regeln in der Datei /etc/ppp/inet_chains zusammen, wobei wir für die IP und das verwendete Interface die entsprechenden Variablen verwenden. Sie finden ein entsprechendes Beispiel auf der Heft-CD unter LinuxUser/firewall/inet_chains. Dort sind auch alle in Tabelle 1 genannten Freigaben vorhanden, jedoch mit einer Raute (#) am Anfang der Zeile auskommentiert und so unwirksam. Möchten Sie einzelne Dienste freischalten, brauchen Sie nur die Raute zu entfernen. Die Datei /usr/local/bin/resolv-list aus Listing 1 wird dafür übrigens nicht mehr benötigt, inet_chains verfügt über eine entsprechende Funktion.
Den Aufruf der inet_chains müssen Sie relativ zu Anfang, am besten gleich als zweite Zeile, in der /etc/ppp/ip-up und /etc/ppp/ip-down eintragen: In /etc/ppp/ip-up:
test -x /etc/ppp/inet_chains && /etc/ppp/inet_chains up $@
In /etc/ppp/ip-down:
test -x /etc/ppp/inet_chains && /etc/ppp/inet_chains down $@



