Shorewall #

Nachdem die erste Version unserer LUG-Firewall mit einem eigenen FireWallScript ausgestattet wurde, lief sie soweit ganz gut. Andererseits kann der Aufwand, der dabei betrieben wird, nicht der Weisheit letzter Schluss sein. Außerdem ist das Gesamtscript inzwischen so gross und auch unübersichtlich geworden, das es immer schwerer fällt, Änderungen vorzunehmen, ohne dabei Fehler zu machen. Schon, als wir dieses Script entwarfen, hatten wir die Idee, wiederkehrende Teile in Unterprogramme auszulagern etc. Allerdings ist es dann dazu nie gekommen. Nach langer Suche habe ich nun eine Firewall gefunden, die genau das macht.

Shorewall ist ein Firewall-Script, das den Inhalt einiger Konfiguration-Dateien in /etc/shorewall/... einliest und dann aus diesen Einstellungen entsprechende iptables-Befehle generiert. Dabei fängt Shorewall Fehler ab, besitzt ein Startskript für /etc/init.d/shorewall und kann auch kompliziertere Konfigurationen mit mehreren Zonen, DMZ, Tunnelverbindungen für VPNs, Masquerading, NAT, etc. verwalten.

Beispielkonfiguration #

Aufgabe #

Um zu zeigen, wie einfach eine kleine Firewall für einen Router aufgebaut ist, hier ein Beispiel. Ich habe nur die Einträge aufgeführt, die absolut nötig sind. Es handelt sich um einen Router, der per DSL am Internet hängt und einem kleinen lokalen Netz den Zugang zum Internet ermöglicht. Ausserdem gibt es einen Zugang aus dem Internet per ssh sowie einen WWW-Zugang von der Firewall selber aus (fuer DynamischesDNS mit ddclient).

Dateien #

/etc/shorewall/zones

 net Net  Internet 
 loc Local  Local networks

/etc/shorewall/interfaces

 net ppp0 -  noping,norfc1918,dropunclean
 loc eth0 192.168.1.255 dropunclean,routestopped

/etc/shorewall/policy

 loc net ACCEPT
 net all DROP info
 all all REJECT info

/etc/shorewall/rules

 ACCEPT loc fw tcp ssh
 ACCEPT net fw tcp ssh
 ACCEPT fw net tcp domain # Namensaufloesung
 ACCEPT fw net udp domain # "
 ACCEPT fw net tcp ssh # Ausgang zu anderen Rechnern
 ACCEPT fw net tcp www # noetig fuer ddclient

/etc/shorewall/masq

 ppp0 192.168.1.0/24

Beschreibung des Beispiels #

Shorewall teilt alle angeschlossene Netze in sog. Zonen ein. Diese werden in zones definiert. In interfaces werden dann Interfaces diesen Zonen 1:1 zugeordnet. Falls dies nicht so einfach 1:1 geht, kann man als Interface "-" angeben und in der Datei hosts genauere Zuordnungen treffen. Nun gibt man in policy die Grundregeln an, die zwischen verschiedenen Zonen gelten sollen. In rules werden dann besondere Regeln für bestimmte Protokolle vergeben. Da in der Policy alle Verbindungen vom lokalen Netz ins Internet zugelassen wurden, bleibt da nicht so viel. Natürlich kann man auch DROP als Policy setzen und dann alle Protokolle einzeln freigeben. Zuletzt muss in masq noch angegeben werden, dass Masquerading eingeschaltet werden soll. Fertig!

Gestartet wird das Ganze mit einem normalen Startskript, d.h. beim hochfahren oder mit /etc/init.d/shorewall start.

kompliziertere Sachen #

Auch schwierigere Dinge scheinen mit Shorewall alle recht einfach zu gehen. Selbst in meiner heimischen Umgebung, wo mehrere Netz-Zonen, Rechner mit besonderen Rechten, ein zentraler Server, und zeitweilig sogar ein PPTP- und demnächst auch ein IPSec-Eingang aus dem Internet bestehen, bin ich noch nicht an die Grenze von Shorewall gestossen. Auch Dinge wie Destination-NAT (Portforwarding), TOS-Felder oder Traffic Shaping gehen laut Doku. Sollte man dennoch mal an eine Grenze kommen, gibt es auch Möglichkeiten, eigene iptables-Befehle einzufügen. Wer Probleme hat, kann mich auch gerne fragen. -- ThomasBayen

Traffic Shaping über /etc/shorewall/tos #

in dieser Datei werden die jeweiligen Protokolle definiert und ihnen eine Priorität zugewiesen. Folgende Prioritäten können gesetzt werden:
  1. Minimize-Delay (16)
  2. Maximize-Throughput (8)
  3. Maximize-Reliability (4)
  4. Minimize-Cost (2)
  5. Normal-Service (0)
Hier ein Beispiel:
===========================================================================
#SOURCE DEST            PROTOCOL        SOURCE PORTS    DEST PORTS 
    TOS
# Minimize delay for ssh
all     all             tcp             -               ssh        
    16
all     all             tcp             ssh             -          
    16
# Minimize delay for ftp
all     all             tcp             -               ftp        
    16
all     all             tcp             ftp             -          
    16
# Maximize throughput for ftp-data
all     all             tcp             ftp-data        -          
    8
all     all             tcp             -               ftp-data   
    8
# user-defined
# Minimize delay for "World Of Warcraft"
all     all             tcp             3274            -          
    16
all     all             tcp             -               3274       
    16
===========================================================================
Dies ermöglicht zB störungsfreies Online-Gaming und ssh-Sessions bei gleichzeitigen ftp-Downloads.

Tags:  Firewall, Debian, Linux

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-4) was last changed on 23-Sep-2012 14:16 by Peter Hormanns