Firewall: Shorewall auf Ubuntu 12.04 einrichten

Ob ein Server eine Firewall braucht, ist umstritten. Einige KollegInnen meinen, der beste Schutz ist eine gewissenhafte Konfiguration der Dienste. Andere Menschen sind da skeptischer und nutzen eine Firewall gegen mögliche Software bugs oder um einen Schaden bei falscher Konfiguration zu minimieren. Wie dem auch sei: Jeder soll seinen Prinzipien frönen. Deswegen beschreibe ich hier die Konfiguration einer Shorewall Firewall Version 4.4.26 auf Ubuntu Server 12.04 LTS.

  1. Installiere Shorewall: sudo apt-get install shorewall
  2. Kopiere die Dateien interface, masq, rules, policy, routestopped und shorewall.conf von /usr/share/doc/shorewall/examples/two-interfaces nach /etc/shorewall
  3. Setze in /etc/default/shorewall die Option startup=1
  4. Deaktiviere die Optionen in der /etc/sysctl.conf – also mit einen #  an jeden Zeilenanfang – die auch von Shorewall bedient werden, z.B. das forwarding.
  5. Für weitere Hilfe aus dem Internet kann es notwendig sein, die genaue Shorewall Version zu erfahren. Ein dpkg -l shorewall auf der console gibt diese Info. (l wie L)
  6. Jetzt bearbeiten wir die Dateien, welche nach /etc/shorewall kopiert wurden:

Die Datei interfaces ist für zwei Netzwerkschnittstellen vorbereitet. Sollte man eine dritte Schnittstelle haben (z.B. weil der Server als wlan Router fungiert), dann werden die Einträge in interfaces entsprechend ergänzt, z.B.

#ZONE wlan #INTERFACE wlan0 #BROADCAST detect #OPTIONS: wie beim loc-eth- Device.

Beachte! Wenn auf deinem Server ein DHCP Dienst läuft, also z.B. dnsmasq oder ISC DHCP, ist bei der Netzwerkschnittstelle die der DHCP Server bedienen soll, in der Datei interfaces, die Option dhcp zu setzen! Andersrum genauso: Die Netzwerkschnittstelle, die von deinem Internet- Provider automatisch eine IP-Adresse erhält, ist ebenfalls mit der Option dhcp zu kennzeichnen!

Die Datei masq ist einfach anzupassen: An das Device zum Internet werden die privaten Netzwerke als SOURCE angehängt, z.B.

#INTERFACE eth0 #SOURCE 192.168.1.0/24

Die Datei policy kann übernommen werden. Wenn der Server auch als wlan Router fungiert, sind entsprechende Einträge zu ergänzen, z.B.

#SOURCE wlan #DEST net #POLICY ACCEPT

Die Datei routestopped legt fest, welche Netzwerke auf den Server zugreifen dürfen, auch wenn die Firewall mal ge-stoppt ist. Es ist zu prüfen, ob es Sinn macht, die Heimnetze einzutragen, aber es macht kaum Sinn das Internet einzutragen.

Die Datei zones kann übernommen werden. Wenn der Server als wlan Router fungiert, sollten die Einträge entsprechend ergänzt werden, z.B.

#ZONE wlan #TYPE ipv4

Die Datei shorewall.conf erfordert nur sehr wenige Änderungen:

  • STARTUP_ENABLE=yes
  • IP_FORWARDING=on

Die Datei rules erfordert nur Anpassungen, für Dienste, welche auf dem Server laufen. Eigentlich ist das bei Shorewall die zentrale Datei, an der eventuell mehr wie einmal gearbeitet werden muss, da sie auch die Zugänge der PC’s aus dem localen Netz zu den Server- Diensten und den Zugang zum Internet steuert. Ich würde aber jetzt keine große Geschichte daraus machen, sondern sich mal in Ruhe die Logik dieser Datei verinnerlichen!

Die entscheidenden Spalten in dieser Datei sind (in Standardfällen!) die ersten Fünf:

ACTION, SOURCE, DEST, PROTO, DEST PORT

Eigentlich erklärt sich die Logik von selbst, wenn man die genannten Schlüssel- Wörter in einen Satz überträgt. Zum Beispiel möchten wir: den DNS Zugriff (ACTION) akzeptieren (ACCEPT), von Clients aus dem loc Netzwerk (SOURCE), auf den Server (DEST), über das Protokoll tcp (PROTO), und den Zielport 53 (eben der DNS Port, DEST PORT). Dies ergibt folgende Regel:

DNS(ACCEPT)     loc   $FW   tcp    53

Wenn wir uns aber in /usr/share/shorewall den Inhalt von macro.DNS anschauen, sehen wir schon PROTO und DEST PORT hinterlegt! Diese macros sollen uns die Konfiguration erleichtern und können statt einen langen Roman in der Datei rules angewendet werden. So wird aus unseren obigen Beispiel folgender Eintrag:

DNS(ACCEPT)    loc   $FW

Fertig, weil der Eintrag DNS in unseren Beispiel das macro DNS in /usr/share/shorewall meint!

Was ist aber, wenn ich einen Dienst auf einen anderen Port gelegt habe? Häufig begegnet uns das beim SSH Dienst. Da auf diesen Dienst viele Angriffe erfolgen macht es Sinn diesen Dienst von Port 22 auf z.B. 33333 zu verlegen. Wie sage ich der Shorewall, dass mein SSH auf einen anderen Port lauscht? Ganz einfach:

SSH(ACCEPT)   net   $FW   tcp   33333

Wir lassen das macro.SSH in /usr/share/shorewall unangetastet, setzen es aber ein und geben in der Spalte den neuen Port 33333 mit. Fertig. Also, lasse die macros in Ruhe! Nochmal. Diese Regel sagt: Benutze das macro SSH wenn Anfragen aus dem Internet über das tcp Protokoll kommen, aber nicht auf den Standardport 22 wie im macro, sondern auf Port 33333. Einfach oder?

Damit weißt Du, was zu tun ist!

Überlege, welche Dienste (SSH, Webserver, Samba, usw.) in welche Richtung (lokales Netzwerk, aus dem Internet, zum Internet) über welches Protokoll und welchen Port angeboten werden sollen. So habe ich auf meinen Homeserver einen Webserver laufen und dadurch mußte ich folgende Regel eintragen, damit die Webseiten im Internet verfügbar sind:

HTTP(ACCEPT)   net   $FW

Da meine Rechner im Homenetz auch auf diese Webseiten wollen, habe ich noch folgende Regel eingetragen:

HTTP(ACCEPT)   loc  $FW

Genug der Beispiele. Aber sicherlich ist Dir aufgefallen, das wir alles erlaubt (ACCEPT) hatten. Natürlich kann Admina auch einen Zugriff z.B. für verschiedene IP- Adressen verweigern (REJECT).

The End

Letztlich kann Admina sagen, dass die Dokumentation von Shorewall ausgesprochen gut ist! Wenn Du auf der console man <Dateiname> also z.B. man rules eingibst, bekommst Du die manpage für diese Shorewall Datei angezeigt. Dort findest Du weitere Hilfen.

Nach dem ganzen Konfig- Kram startest Du die Firewall auf der console mit sudo shorewall start. Mit sudo shorewall show bekommst Du die Regeln angezeigt, die Shorewall mit iptables generiert hat. Nach dem Start von Shorewall ist es immer interessant in die /var/log/shorewall, /var/log/boot.log und /var/log/kern.log zu schauen.

Übrigens, wer jetzt nach Routing aktivieren und Maskierung fragt: Das haben wir oben in der shorewall.conf und in masq schon abgefrühstückt. Eine weitere Anpassung von sonstigen Dateien auf deinen Linux- Server ist nicht erforderlich!

Have fun…

| Shorewall | Shorewall auf Wikipedia | Konfig Beispiel | Artikel Grundlage |

Hinterlasse einen Kommentar

2 Kommentare auf "Firewall: Shorewall auf Ubuntu 12.04 einrichten"

Benachrichtige mich zu:
avatar
2000
Sortiert nach:   neuste | älteste | beste Bewertung
trackback

[…] Ich gehe hier nicht(!) auf Grundlagen ein. Ich gehe hier von einer Konfiguration wie in meinen Artikel beschrieben aus. Kurz: Der Server hat eine Netzwerkkarte eth0/dhcp zum Internet, eine eth1/statisch […]

trackback

[…] Ich gehe hier nicht(!) auf Grundlagen ein. Ich gehe hier von einer Konfiguration wie in meinen Artikel beschrieben aus. Kurz: Der Server hat eine Netzwerkkarte eth0/dhcp zum Internet, eine eth1/statisch […]

wpDiscuz