Tutorial: Firewall
In diesem Tutorial (oder HowTo) wird beschrieben, wie Sie die Linux- Firewall iptables mittels firehol einrichten. Das Tutorial umfasst nur die Einrichtung einer kleinen Basisfirewall. NAT oder Ähnliches wird nicht behandelt.
1. Hinweis: Leider kann firehol nicht auf einem V- Server eingesetzt werden. Dort besteht kein Zugriff auf die Linux- Firewall iptables!
2. Hinweis: Der Autor übernimmt keinerlei Verantwortung für eventuelle Schäden, welche durch das Anwenden dieses Tutorials auftreten könnten. Das Anwenden Jener geschiet auf eigene Gefahr und der Autor kann nicht zur Verantwortung gezogen werden.
Betriebssystem: | Linux |
Distribution: | Debian 4.0 (Etch) |
Paketinstallation
Die folgenden Pakete werden mit Hilfe von aptitude in der Standardkonfiguration installiert, falls diese nicht schon vorhanden sind:
firehol | Eine leicht zu konfigurierende Firewall |
Interaktive Installation mit aptitude:
?#> aptitude |
Erfahrene Anwender können natürlich auch direkt installieren:
?#> aptitude install firehol |
Zum Editieren von Konfigurationsdateien nutze ich gerne den Editor mcedit vom Midnight Commander (mc).
Installation:
?#> aptitude install mc |
Aufruf:
?#> mcedit DATEI |
Konfiguration
Ermitteln der Schnittstellen:
?#> ifconfig
eth0 Protokoll:Ethernet Hardware Adresse FF:FF:FF:FF:FF:FF inet Adresse:99.99.9.90 Bcast:99.99.9.255 Maske:255.255.255.0 inet6 Adresse: ffff::fff:ffff:ffff:fff/64 Gültigkeitsbereich:Verbindung UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11391652 errors:0 dropped:0 overruns:0 frame:0 TX packets:632649 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:786086847 (749.6 MiB) TX bytes:248426661 (236.9 MiB) eth0:1 Protokoll:Ethernet Hardware Adresse FF:FF:FF:FF:FF:FF inet Adresse:99.99.9.91 Bcast:99.99.9.255 Maske:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Protokoll:Lokale Schleife inet Adresse:127.0.0.1 Maske:255.0.0.0 inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:147326 errors:0 dropped:0 overruns:0 frame:0 TX packets:147326 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:0 RX bytes:34035352 (32.4 MiB) TX bytes:34035352 (32.4 MiB) ?#> |
In diesem Beispiel werden 2 Schnittstellen konfiguriert. Die primäre Schnittstelle eth0 mit IPv4: 99.99.9.90 und die virtuelle Schnittstelle eth0:1 mit IPv4: 99.99.9.91.
Ermitteln der benötigten Ports:
(Lokal lauschende Ports werden mittels 'grep -v 127.0.0.1' herausgefiltert.)
?#> netstat -atpn | grep -v 127.0.0.1
Aktive Internetverbindungen (Server und stehende Verbindungen) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 32663/myIMAPS tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 7708/myHTTPSWebserver tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 32663/myIMAP tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2336/myPortmapper tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 30411/myHTTPWebserver tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 18113/myMTA tcp 0 0 99.99.9.90:22 0.0.0.0:* LISTEN 2959/mySSHServer tcp 0 0 99.99.9.90:22 94.125.123.245:59852 VERBUNDEN 10748/mySSHServer: root@no tcp 0 36 99.99.9.90:22 94.125.123.245:60258 VERBUNDEN 12188/8 |
Beispiel- Anpassungen an der Server- Konfigurationsdatei /etc/firehol/firehol.conf:
- Port 22 (SSH) soll nur über die IP 99.99.9.90 erreichbar sein.
- Standardgemäß lauscht der SSH- Server auf allen Schnittstellen.
In der SSH- Konfiguration kann das Lauschen auch auf nur eine Schnittstelle beschränkt werden.
- Standardgemäß lauscht der SSH- Server auf allen Schnittstellen.
- IMAP und IMAPS sollen nur über die IP 99.99.9.90 erreichbar sein.
- MTA, HTTP, Portmapper und HTTPS dürfen von überall (IP 99.99.9.90 und 99.99.9.91) aus erreichbar sein.
- ICMP: Pinganfragen sollen auf allen Schittstellen (IP 99.99.9.90 und 99.99.9.91) erlaubt sein.
Ansicht der Konfiguration /etc/firehol/firehol.conf:
version 5
FIREHOL_AUTOSAVE="/etc/firehol/iptables" interface eth0 KURZNAME_1 dst 99.99.9.90 server "icmp ssh smtp http sunrpc imap https imaps" accept #< portmapper server custom RPC tcp/602 default accept server custom RPC udp/602 default accept #portmapper > client all accept #Ausgehenden Verkehr komplett freigeben interface eth0 KURZNAME_2 dst 99.99.9.91 server "icmp smtp http sunrpc https" accept #< portmapper server custom RPC tcp/602 default accept server custom RPC udp/602 default accept #portmapper > client all accept #Ausgehenden Verkehr komplett freigeben |
Für KURZNAME_1 und KURZNAME_2 sollte ein benutzerdefinierter Name gewählt werden, der kürzer als 8 Zeichen ist.
Testen der Konfiguration
Der sicherste Weg die Firewall zu testen ist, der Test- und Bestätigungsweg:
?#> firehol try |
Jetzt hat man 30 Sekunden Zeit 'commit' einzugeben. Dieses sollte man aber nur tun, wenn sichergestellt wird, dass alle Programme einwandfrei funktionieren.
Zum Beispiel kann innerhalb der 30 Sekunden der Neuaufbau einer SSH- Verbindung getestet werden.
Nachdem 'commit' eingegeben wurde, wird die Firewall für die Laufzeit des Servers/ Rechners aktiviert.
Die soeben erstellte Firewallkonfiguration kann mittels folgenden Befehl gesichert werden:
?#> firehol save |
Automatischer Start der Firewall
Soll die Firewall- Konfiguration beim Systemstart geladen werden, dann muss nur eine Zeile in /etc/default/firehol geändert werden:
START_FIREHOL=YES
#If you want to have firehol wait for an iface to be up add it here WAIT_FOR_IFACE="eth0" |
Der Eintrag 'START_FIREHOL' steht standardmäßig auf 'NO'.
Bei 'WAIT_FOR_IFACE' habe ich die Schnittstelle angegeben, auf die gewartet werden soll. Erst wenn diese verfügbar ist, wird die Firewall aktiviert.
EOT