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)
=========================================================================== #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.