= 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 }]