Unterabschnitte


3.12 Die alte Konfiguration des Paketfilters

Bei der Konfiguration des Paketfilters werden zwei Dinge unterschieden: Die kommunikation mit dem Router und die Kommunikation mit anderen Netzen über den Router hinweg. An allen Stellen, an denen Netzwerke, IP-Adressen oder Hosts angegeben werden müssen, kann man sich auch auf IP_NET_x, IP_NET_x_IPADDR oder via '@hostname' auf einen Host aus HOST_x beziehen.

3.12.1 Kommunikation über den Router hinweg

Der Paketfilter wird so konfiguriert, dass er generell nur Pakete von IP-Adressen akzeptiert, die ihm bekannt sind. Bekannt sind ihm IP-Adressen aus Subnetzen, die in folgenden Variablen angegeben wurden:

Weiterhin kennt der Router auch alle Rechner, zu denen Verbindungen aufgebaut wurden.

Zusätzlich wendet Fli4l auf die ihm bekannten IP-Adressen noch eine Black-/Whitelist (FORWARD_HOST_x) an und filtert bestimmte Ports heraus (FORWARD_DENY_PORT_x. Die Anwendung der Filter ist in Abbildung 3.2 dargestellt. Eine zutreffende Regel verzweigt im Bild nach oben bzw. nach unten, trifft die Regel nicht zu, wird die nächste genommen. Das wird durch den Pfeil nach rechts symbolisiert.

Die Konfigurationsvariablen werden im folgenden genauer beschrieben.

Abbildung 3.2: Konfigurationsvariablen und ihre Anwendung
\includegraphics[width=\columnwidth]{forward}
PRE/Post
Regeln die vom Nutzer selbst geschrieben wurden und unter opt/etc/rc.d/fwrules.pre,post.* abgelegt wurden. Diese können die Pakete sowohl akzeptieren als auch verwerfen.
TN
Kommunikation zwischen TRUSTED_NETS wird ohne weitere Filterung akzeptiert
FDP
Pakete, die an in FORWARD_DENY_PORT_x spezifizierte Ports gerichtet werden, werden verworfen.
BL
Kommt das Paket von einem in der Blacklist angegebenen Rechner, wird es verworfen.
WL
Kommt das Paket von einem in der Whitelist angegeben Rechner, wird es erst einmal weiterbetrachtet (es muß zusätzlich noch aus einem der bekannten Netze stammen).
RN
Kommt das Paket von einem Rechner aus einem in ROUTE_NETWORK angegebenen Subnetz, wird es akzeptiert.
MN
Kommt das Paket von einem Rechner aus einem in MASQ_NETWORK angegebenen Subnetz, wird es akzeptiert.
Rel
Gehört das Paket zu einer bereits aufgebauten Verbindung, wird es akzeptiert (egal, woher es kommt).
All
Eine Regel, die auf alle Pakete zutrifft und dafür sorgt, dass das Paket verworfen wird.
Log
Es wird für das Paket ein Eintrag im Syslog bzw. auf der Konsole erzeugt.
Drop
Das Paket wird verworfen.
Accept
Das Paket wird akzeptiert und damit weitergeleitet.

MASQ_NETWORK

Hier sind die Netzwerke anzugeben, die nach aussen hin maskiert werden sollen. Verwendet man nicht-offizielle IP-Adressen, wie z.B. 192.168.x.x, und soll der Router als Zugang ins Internet verwendet werden, müssen diese hier unbedingt angegeben werden.

Die Form ist:

        NETZWERKNUMMER/ANZAHL-DER-GESETZTEN-BITS-IN-NETMASK

also z.B. für Netze der Form 192.168.x.0:

        MASQ_NETWORK='192.168.6.0/24'

Hier sind also die ersten 24 Bits in der Netzwerkmaske gesetzt.

Sollen mehrere Netze maskiert werden, sind diese durch Leerzeichen zu trennen. Soll kein Netz maskiert werden, muss der Variablen-Inhalt leer sein.

Wie ein Paket aus einem in MASQ_NETWORK angegebenen Subnetz durch die Firewall läuft, ist in Abbildung 3.3 dargestellt.

Abbildung 3.3: Der Weg von Paketen aus einem MASQ_NETWORK durch den Paketfilter
\includegraphics[width=\columnwidth]{mn}

ROUTE_NETWORK

Pakete, die zu von Hosts in diesen Subnetzen aufgebauten Verbindungen gehören, werden vom Router geforwarded. Zusätzlich werden Pakete, die in diese Netze hineingehen, nicht maskiert.

Dieses kann z.B. für eine Verbindung zur Firma sinnvoll sein, wo Mitarbeiter dieser Firma von dort Zugang in das eigene Netz haben sollen. Das Format ist dasselbe wie bei MASQ_NETWORK, also z.B.

        ROUTE_NETWORK='192.168.1.0/24'

Auch können hier wieder mehrere Netze angegeben werden.

ROUTE_NETWORK kann in der Regel einfach leer bleiben.

Der Weg, den Pakete eines ROUTE_NETWORK nehmen, ist in Abbildung 3.4 dargestellt (es ist der gleiche wie ein Paket aus einem der TRUSTED_NETS).

Abbildung 3.4: Der Weg von Paketen aus einem der TRUSTED_NETS bzw. ROUTE_NETWORK durch den Paketfilter
\includegraphics[width=\columnwidth]{tn}
SRN
Das Paket stammt aus einem in ROUTE_NETWORK angegebenen Subnetz.
DRN
Das Paket soll in ein in ROUTE_NETWORK angegebenes Subnetz geleitet werden.

FORWARD_HOST_WHITE

Es gibt Situationen, da möchte man entweder einigen Rechnern gezielt den Zugriff auf andere Netze erlauben (Whitelist) oder genau andersherum einigen Rechnern den Zugriff auf andere Netze verbieten (Blacklist). Der Paketfilter läßt dann lediglich Pakete der angegebenen Rechner durch bzw. blockiert genau diese. Setzt man FORWARD_HOST_WHITE auf yes, stellt die nachfolgende Aufzählung eine Whitelist dar, andernfalls eine Blacklist.

Will man also keinem Rechner die Kommunikation über den Router verbieten, definiert man eine leere Blacklist (FORWARD_HOST_WHITE='no' und FORWARD_HOST_N='0'). Dies ist auch die Standardkonfiguration.

FORWARD_HOST_N FORWARD_HOST_x

Hier werden die Rechner der White- bzw. Blacklist aufgeführt. Z.B.

        FORWARD_HOST_N='2'
        FORWARD_HOST_1='192.168.6.5'
        FORWARD_HOST_2='192.168.6.6'

Pakete dieser beiden Rechnern werden im Falle einer Whitelist als einzige vom Router weitergeleitet, im anderen Falle als einzige blockiert.

FORWARD_DENY_PORT_N FORWARD_DENY_PORT_x

Hiermit kann man das Routing über bestimmte IP-Ports verhindern. Sinnvoll ist z.B. das Verbieten des Routings der Netbios-Ports 137-139. Damit wird nicht nur das Routing von IP-Paketen mit den angegebenen Ports nach ``außen'' unterbunden, sondern auch das Routing dieser Ports zwischen zwei LANs.

Betreibt man mehrere Netzwerkkarten für mehrere Subnetze und möchte, dass einige Clients aus einem Subnetz auf die unter Windows freigegebenen Verzeichnisse eines Clients aus einem anderen Subnetz zugreifen können, sollte das Forwarding der Netbios-Ports aber hier nicht unterbunden werden. In diesem Fall kann man mit TRUSTED_NETS (s.o.) Netze angeben, zwischen denen das Routing dieser Ports dennoch explizit erlaubt ist.

Ein Beispiel: Abschalten Zugriff auf Napster-Dienste:

        FORWARD_DENY_PORT_N='7'                # Anzahl
        FORWARD_DENY_PORT_1='135-139 REJECT'   # NetBios-Ports 135 bis 139
        FORWARD_DENY_PORT_2='445     REJECT'   # MS-DS
        FORWARD_DENY_PORT_3='8888    REJECT'   # Napster Port 8888
        FORWARD_DENY_PORT_4='7777    REJECT'   # Napster Port 7777
        FORWARD_DENY_PORT_5='7000    REJECT'   # Napster Port 7000
        FORWARD_DENY_PORT_6='4444    REJECT'   # Napster Port 4444
        FORWARD_DENY_PORT_7='4200    REJECT'   # Napster Port 4200

TRUSTED_NETS

Das Sperren des Routings der mittels FORWARD_DENY_PORT_x angegebenen Ports und die Black/Whitelist (FORWARD_DENY_HOST) kann mit Hilfe von TRUSTED_NETS für bestimmte Netze außer Kraft gesetzt werden. Hier können Netze angegeben werden, die vertrauenswürdig sind. Ein typisches Beispiel ist das Routing von NetBios-Ports zwischen zwei LANs, die über zwei Netzwerkkarten des fli4l-Routers versorgt werden. In diesem Fall sind alle vertrauenswürdigen Netze anzugeben, z.B.

        TRUSTED_NETS='192.168.1.0/24 192.168.6.0/24'

Dabei ist es im Gegensatz zur Variable MASQ_NETWORK notwendig, alle Netze anzugeben, zwischen denen geforwardet werden soll. Es sind also mindestens 2 Netze einzutragen, damit korrekte IP-Tables-Regeln generiert werden!

Der Weg, den Pakete eines ROUTE_NETWORK nehmen, ist in Abbildung 3.4 dargestellt (es ist der gleiche wie ein Paket aus einem TRUSTED_NET).

Standard-Einstellung: TRUSTED_NETS=''

Andere Netze

Wie in den einführenden Bemerkungen bereits angemerkt, leitet der Router nur Pakete weiter, die aus Netzen kommen, die er kennt. Da man aber nicht alle Netze, mit denen man kommunizieren will, von vornherein kennt, führt der Router Buch über aufgebaute Verbindungen und läßt auch Pakete durch, die zu solchen Verbindungen gehören. Der Weg eines solchen Paketes durch den Paketfilter ist in Abbildung 3.5 dargestellt.

Abbildung 3.5: Der Weg von Paketen aus einem unbekannten Netz durch den Paketfilter
\includegraphics[width=\columnwidth]{other}

3.12.2 Kommunikation mit dem Router

Während die bisherige Konfiguration die Kommunikation von Hosts über den Router hinweg beschrieb, beschreibt der folgende Teil die Kommunikation mit dem Router. Da fli4l Dienste auf bestimmte Ports zur Verfügung stellt, ist es sinnvoll, diese vor Zugriffen von aussen zu schützen.


Wichtig: Das vom Router maskierte LAN (s.o) ist generell vor dem Zugang von aussen geschützt. Die angegebenen Portnummern regeln deshalb nur den Zugriff von aussen auf den fli4l-Router selbst.

Interessant sind dabei die in Tabelle 3.4 beschriebenen Dienste und die dazugehörigen Ports. Rechner aus Netzen, die in MASQ_NETWORK, ROUTE_NETWORK bzw. TRUSTED_NETS angegeben sind, haben freien Zugang zum Router, für alle anderen sind alle Ports des Routers zu. Will man einen Dienst auch anderen anbieten, muß der entsprechende Port über die Variablen INPUT_ACCEPT_PORT_x geöffnet werden.


Tabelle 3.4: Ports, auf denen fli4l ggfs. Dienste anbietet
Port Name Prozess
22 ssh sshd
37 time <kernel>
53 domain dnsmasq
80 www mini_httpd
137:139 netbios smbd (samba)
515 printer lpd
5000 <imond> imond
5001 <telmond> telmond
8000 <proxy> privoxy


Es wird dringend empfohlen, die Standardkonfiguration der Firewall-Ports nicht zu verändern.

INPUT_ACCEPT_PORT_N INPUT_ACCEPT_PORT_x

Standardmäßig sind alle Ports nach außen zu, eine Verbindung zum Router ist nicht möglich. Ports, auf denen ein Dienst nach außen angeboten wird, müssen hier angegeben werden.

Ein Eintrag besteht dabei aus einem einzelnem Port bzw. einem ganzen Port-Bereich (zwei Ports durch Doppelpunkt getrennt) und einer optionalen Protokollangabe (TCP oder UDP). Wird kein Protokoll angegeben, werden auf dem Port beide Protokolle akzeptiert. Am Beispiel der ssh, die ihren Dienst auf Port 22 über das TCP-Protokoll anbietet, würde das wie folgt aussehen:

INPUT_ACCEPT_PORT_N='1'             # no. of ports to accept from outside
INPUT_ACCEPT_PORT_1='22 TCP'        # e.g. allow connection to ssh service

INPUT_POLICY

Kommt ein Paket beim Router an, das aufgrund der Konfiguration nicht durchgelassen werden darf, hat der Router zwei Möglichkeiten. Er kann das Paket einfach wegwerfen (DROP) oder es ablehnen (REJECT) und eine entsprechende Information an den Absender zurückschicken. Wie der Router reagiert, wird hier festgelegt, wobei die Standardreaktion REJECT ist.

Bei Anwendung der DROP-Policy verhält sich der Router still - das kann auch Probleme machen. Zum Beispiel schicken einige Rechner, die Internet-Dienste wie ftp anbieten, als Antwort auf einen Verbindungsaufbau eine Anfrage auf Port 113 (auth) zurück. Wenn fli4l darauf nicht reagiert, kann es zum ungewollten Abbruch der Verbindung zum gewünschen Dienst kommen.

Ich persönlich ziehe die REJECT-Policy vor, da sie erwartungsgemäß weniger Probleme bei diversen Internet-Protokollen bereitet und genauso sicher ist wie DROP.

Weiterführende Informationen zu REJECT vs DROP:

http://www.iks-jena.de/mitarb/lutz/usenet/Firewall.html#Deny
http://www.chiark.greenend.org.uk/%7Epeterb/network/drop-vs-reject

DENY_ICMP

Sollen Zugriffe von außen über das ICMP-Protokoll (echo requests) verboten werden, kann DENY_ICMP='yes' gesetzt werden. In diesem Fall kann man den Router von außen nicht mehr mit ping ansprechen. Bevor hier ein yes eingetragen wird, sollte man unbedingt folgende Seiten besuchen:

http://www.iks-jena.de/mitarb/lutz/usenet/Firewall.html#Verstecken
http://extern.fli4l.de/fli4l_faqengine/faq.php?display=faq&faqnr=26&catnr=10&prog=1

Standard-Einstellung: DENY_ICMP='no'

PACKETFILTER_LOG

Hier kann eingestellt werden, ob abgelehnte Zugriffe von außen über die Syslog-Schnittstelle protokolliert werden sollen. Dazu muss auch OPT_KLOGD aktiviert sein.

Hier eine kurze Erklärung der wichtigsten Elemente einer Protokollzeile:

IN=ppp0 OUT= MAC= SRC=217.238.54.176 DST=217.235.38.43 LEN=48
    TOS=0x00 PREC=0x00 TTL=124 ID=30343 DF PROTO=TCP SPT=3087
    DPT=4662 WINDOW=16384 RES=0x00 SYN URGP=0

IN Device, auf dem das Paket hereinkam
SRC, DST Quell- und Zieladresse des Paketes
LEN Länge des Pakets in Bytes
TOS Type Of Service
TTL Time To Live, Anzahl der Hops, bis das Paket gelöscht wird
PROTO=TCP TCP Paket
SPT, DPT Quell- und Zielport
ID IP-ID, wird mit jedem Paket vom Sender um eins erhöht

Standard-Einstellung: PACKETFILTER_LOG='no'

PACKETFILTER_LOG_LEVEL
Definiert die Log-Parameter, die beim Generieren eines Log-Eintrages verwendet werden. Möglich ist dabei eines der folgenden Log-Level: debug, info, notice, warning, err, crit, alert, emerg.

Das Fli4l-Team
3. Mai 2009