====== Linux Firewall mit Shorewall und IPtables2 ====== Dieser Artikel soll auf einfach Weise erklären wie man unter Ubuntu eine Effektive Firewall mit dem Programm **Shorewall** realisiert. ===== Voraussetzung ===== * Installiertes Paket ''iptables2'' (Bei Ubuntu schon installiert) * Liste aller zu öffnenden Ports * Bei vielen Interfaces am besten eine Zeichnung des Netzwerks, sonst kann es schnell unübersichtlich werden ===== Installation ===== 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**. ===== Konfiguration ===== 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 ==== interfaces ==== 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 [[http://shorewall.net/index.html|hier]]. ==== Zones ==== 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 ==== Policy - Richtlinien für den Verkehr zwischen Zonen ==== 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: * DROP = Der eingehende Verkehr wird nicht weitergeleitet und "fallen" gelassen. * REJECT = Der eingehende Verkehr wird nicht weitergeleitet und die Quelle wird darüber informiert * ACCEPT = Lässt den Verkehr zu. # # 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. ==== Rules - Spezifische Regeln für Protokolle und Ports ==== 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 === Beispiel 1 === ''DNS(ACCEPT) $FW net'' -> Diese Regel besagt, dass alle Anfragen von DNS-Diensten von der Firewall ($FW) and das Internet (net) zugelassen werden sollen === Beispiel 2 === ''SSH(ACCEPT) net $FW'' -> Der SSH Zugriff aus dem Internet auf die Firewall wird gestattet. === Beispiel 3 === 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 [[http://shorewall.net/manpages/shorewall-rules.html|hier]]. ==== Make und Start ==== Damit die Firewallregeln kompiliert werden können muss die Firewall gestarter werden. Hierzu muss man zwei Dateien ändern: - In der Datei **/etc/default/shorewall** muss der Wert von ''startup'' auf **1** gesetzt werden - In der Datei **/etc/shorewall/shorewall.conf** der Wert von ''STARTUP_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 von Regeln ==== Ä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 {{tag>Firewall, iptables}}