Dieser Artikel soll auf einfach Weise erklären wie man unter Ubuntu eine Effektive Firewall mit dem Programm Shorewall realisiert.
iptables2
(Bei Ubuntu schon installiert)
Shorewall wird einfach mit sudo apt-get install shorewall
installiert.
Die Config liegt in /etc/shorewall/. Beispielkonfigurationen für die verschiendensten Konfigurationen (ein oder mehrere Interfaces, mehrere ISP's, etc.) liegen in /usr/share/doc/shorewall/examples.
Zuerst sollte man sich für den eigenen Andwendungsfall passenste Konfiguration aus den unterordnern in /etc/shorewall/ kopieren. Der Ordner Shorewall sollte nun folgende Dateien Beinhalten:
Dateiname | Bedeutung |
---|---|
interfaces | Konfiguration der Netzwerkkarten und der zugehörigen Zonen |
Makefile | von Shorewall zum kompilieren gebraucht, einfach in Ruhe lassen |
masq | Verschleierung von Interfaces |
policy | Richtlininien, werden zuerst auf den Traffic angewendet |
routestopped | Regelt welche Routen beim Stoppen von Shorewall gelten |
rules | Regeln für den Traffic, werden nach den policies angewendet |
shorewall.conf | Grundsätzliche Konfiguration |
zones | Zonendatei, legt die Eigenschaften von Zonen fest |
Die Firewall prüft bei eingehendem Datenverkehr zuerst immer im policy File was mit dem Traffic (Portunabhängig) passieren soll. Hier kann der Verkehr entweder zugelassen oder geblockt werden.
Für allen eingehenden Verkehr werden zunächst Richtlinien in der Datei policy gesucht, und danach Regeln in der Datei rules.
Bei der Konfiguration gehen wir wie folgt vor: interfaces → zones → policy → rules → masq
Hier legt man zunächst fest, welche Netzwekkarten überwacht werden sollen.
# # Shorewall version 4.0 - Sample Interfaces File for three-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------ # For information about entries in this file, type "man shorewall-interfaces" ############################################################################### #ZONE INTERFACE BROADCAST OPTIONS net eth0 detect tcpflags,dhcp,nosmurfs,routefilter,logmartians loc eth1 detect tcpflags,nosmurfs,routefilter,logmartians dmz eth2 detect tcpflags,nosmurfs,routefilter,logmartians vpn tun0 detect tcpflags,nosmurfs,routefilter,logmartians
In dieser Datei wird pro Interace INTERFACE
festgelegt welche Zone ZONE
an der jeweiligen Netzwerkkarte hängt.
Alle Optionen von BROADCAST
und OPTIONS
findet man hier.
Diese Datei spezifiziert die einzelnen Zonen und um was für Typen es sich handelt.
Die Firewall selbst ist dabei eine eigene Zone, das heißt für sie werden auch eigene policies und rules erstellt.
Systemweit kann die Firwall mit der Umgebungsvaribale $FW
in der Shorewallkonfig genutzt werden.
# # Shorewall version 4.0 - Sample Zones File for three-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------ # For information about entries in this file, type "man shorewall-zones" ############################################################################### #ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall net ipv4 loc ipv4 dmz ipv4 vpn ipv4
Hier beginnt die eigentliche Konfiguration der Firewall. Im Policy-File wird definiert welche Netzwerke miteinander Kommunizieren können und welche nicht. Hierbei wird nicht Portbasiert verfahren, es kommt entweder alles oder nichts durch. Hierzu werden sowohl Source- als auch Destination Netzwerk angegeben. Die drei Regeln für den Traffic sind:
# # Shorewall version 3.4 - Sample Policy File for three-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------ # For information about entries in this file, type "man shorewall-policy" ############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST loc net ACCEPT net all DROP info # THE FOLLOWING POLICY MUST BE LAST all all REJECT info
Wie man am Beispiel sieht wird aller ausgehender Verkehr von loc
nach net
akzeptiert, der eingehende Verkehr von net
nach loc
wird ohne Hinweis fallen gelassen.
Achtung: Die Reihenfolge der Regeln in der Datei entspricht auch der späteren Verarbeitungsreihenfolge. Die Regeln werden in dieser Reihenfolge abgearbeitet und die erste passende Regel angewandt! Wenn man das nicht weiß, kann es schnell Probleme geben.
Diese Datei ist die wichtigste in der Firwall Konfiguration. In ihr werden Port- und Protokollspezifische Regelungen für den eingehenden und ausgehenden Datenverkehr festgelegt. Das Schema ist dabei immer gleich. [Aktion][Quelle][Ziel][Protokoll][Port]… Man kann also sehr detailliert angeben, wie verfahren werden soll. Die Beispieldatei der Shorwall Konfig sieht so aus:
# # Shorewall version 4.0 - Sample Rules File for three-interface configuration. # Copyright (C) 2006,2007 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------------------------------------ # For information about entries in this file, type "man shorewall-rules" ############################################################################################################# #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK # PORT PORT(S) DEST LIMIT GROUP # # Accept DNS connections from the firewall to the Internet # DNS(ACCEPT) $FW net # # # Accept SSH connections from the local network to the firewall and DMZ # SSH(ACCEPT) loc $FW SSH(ACCEPT) loc dmz # # DMZ DNS access to the Internet # DNS(ACCEPT) dmz net #Drop Ping from the "bad" net zone. Ping(DROP) net $FW # # Make ping work bi-directionally between the dmz, net, Firewall and local zone # (assumes that the loc-> net policy is ACCEPT). # Ping(ACCEPT) loc $FW Ping(ACCEPT) dmz $FW Ping(ACCEPT) loc dmz Ping(ACCEPT) dmz loc Ping(ACCEPT) dmz net ACCEPT $FW net icmp ACCEPT $FW loc icmp ACCEPT $FW dmz icmp # Uncomment this if using Proxy ARP and static NAT and you want to allow ping from # the net zone to the dmz and loc #Ping(ACCEPT) net dmz #Ping(ACCEPT) net loc
DNS(ACCEPT) $FW net
→ Diese Regel besagt, dass alle Anfragen von DNS-Diensten von der Firewall ($FW) and das Internet (net) zugelassen werden sollen
SSH(ACCEPT) net $FW
→ Der SSH Zugriff aus dem Internet auf die Firewall wird gestattet.
Will man für ein hinter der Firewall liegendes lokales Netzwerk Beispielsweise den SMTP-Port freigeben dann kann man das folgendermaßen machen:
ACCEPT net loc:192.168.178.202 tcp 25
→ Der Zugriff vom Internet auf die IP-Adresse 192.168.178.202 in der Zone loc
wird auf Port 25 erlaubt.
Enstprechend diesem Schema können sehr einfach Regeln für die Firewall eingerichtet werden. Die gesamte Konfigurationsmöglichkeiten der Rules findet man hier.
Damit die Firewallregeln kompiliert werden können muss die Firewall gestarter werden. Hierzu muss man zwei Dateien ändern:
startup
auf 1 gesetzt werdenSTARTUP_ENABLED
auf Yes gesetzt werden und mit source shorewall.conf
neu eingelesen werden.
Danach kann man die Firewallregeln kompilieren in dem man im shorwallverzeichnis sudo make
aufruft.
Nachdem eventuelle Fehler ausgebessert wurden kann die Firewall mit sudo service shorewall start
gestartet werden.
Ändern man Regeln in der Datei /etc/shorewall/policy oder /etc/shorwall/rules so kann man diese Regeln einfach mit zwei Befehlen übernehmen
# sudo make # sudo shorewall refresh