Benutzer-Werkzeuge

Webseiten-Werkzeuge


bs:linux:firewall

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:

DateinameBedeutung
interfacesKonfiguration der Netzwerkkarten und der zugehörigen Zonen
Makefilevon Shorewall zum kompilieren gebraucht, einfach in Ruhe lassen
masqVerschleierung von Interfaces
policyRichtlininien, werden zuerst auf den Traffic angewendet
routestoppedRegelt welche Routen beim Stoppen von Shorewall gelten
rulesRegeln für den Traffic, werden nach den policies angewendet
shorewall.confGrundsätzliche Konfiguration
zonesZonendatei, 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 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 hier.

Make und Start

Damit die Firewallregeln kompiliert werden können muss die Firewall gestarter werden. Hierzu muss man zwei Dateien ändern:

  1. In der Datei /etc/default/shorewall muss der Wert von startup auf 1 gesetzt werden
  2. 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

Bei Verwendung dieses Wikis erklären Sie sich mit dem Haftungsausschluss, Nutzungsbedingungen und der Datenschutzerklärung dieses Wikis einverstanden. Impressum.

bs/linux/firewall.txt · Zuletzt geändert: 2012/10/11 10:23 (Externe Bearbeitung)