= 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:
# Minimize-Delay (16)
# Maximize-Throughput (8)
# Maximize-Reliability (4)
# Minimize-Cost (2)
# 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.


== Links ==

* http://www.shorewall.net

[{Tag Firewall Debian Linux }]