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.
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.
|
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.
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).
|
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.
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.
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
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=''
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.
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.
Es wird dringend empfohlen, die Standardkonfiguration der Firewall-Ports nicht zu verändern.
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
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
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'
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'
Das Fli4l-Team