Navigation



Über mich

Jens Rautenstrauch
Rietberg, Nordrhein-Westfalen


Projekte

Tutorien


Link(s)


Tutorial: Firewall

Stand: 09.03.2008 15:30, V1.02 ~ Jens Rautenstrauch

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.
  • 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