Konfiguration eines Routers [2]

Paketfilter

ipfwadmin = Kernel 2.0
ipchains = Kernel 2.2
iptables = Kernel 2.4 und höher

chains - Regelketten

output-Regelkette = Alle Pakete, die den Rechner verlassen
input-Regelkette = Alle Pakte, die empfangen werden
forward-Regelkette = Alle Pakete, die weitergeleitet werden sollen

Folgende Dinge können analysiert werden:

- IP-Adresse des Sender
- IP-Adresse des Empfängers
- Port des Senders
- Port des Empfängers
- SYN und ACK-Flag
- Netzwerkschnittstelle

Targets

ACCEPT - Ein Paket wird akzeptiert
DENY - Ein Paket wird abgewiesen. Keine Fehlermeldung
REJECT - Ein Paket wird mit Fehlermeldung abgewiesen
MASQ – Paket wird maskiert (Absenderadresse auf die des Servers gesetzt)
DROP – Paket wird ohne Rückmeldung verworfen

PREROUTING – Umschreiben von Empfängeradresse
OUTPUT – Adressen von lokal erzeugten Dokumenten umschreiben
POSTROUTING – Umschreiben von Absenderadresse

Default-Policies

Firewall-Policy ACCEPT = Grundlegend wird alles akzeptiert und einz. Dienste deaktiviert
Firewall-Policy DENY = Grundlegend wird alles verweigert und einz. Dienste aktiviert

Protokolle, Ports, Verbindungsaufbau

TCP-Handshake

1.) Client schickt Paket an Server:
Empfänger-IP, Empfänger-Port (z.B. 21), Eigene IP, Eigener Port (z.B. 5314), SYN

2.) Server schickt Paket zurück:
Empfänger-IP, Empfänger-Port (z.B. 5314), Eigene IP, Eigener Port (z.B. 21), SYN + ACK

3.) Client antwortet:
Empfänger-IP, Empfänger-Port (z.B. 21), Eigene IP, Eigener Port (z.B. 5314), ACK

Filterregeln

-A <chain> <regel> = Anfügen einer neuen Regel (input, output oder forward) am Ende einer Chain/Tabelle
-D <chain> <regel> = Löschen einer Regel aus einer Chain/Tabelle
-R <chain> <nr> <regel> = Ersetzen einer Regel durch eine neue
-I <chain> <nr> <regel> = Einfügen einer Regel in eine Tabelle/Chain
-F [<chain>] = Alle Regeln einer Chain löschen
-Z [<chain>] = Löschen der Zähler einer Chain
-P <chain> <ziel> = Standardverhalten einer Chain festlegen
-E <chain><chain-neu> = Umbenennen einer Chain
-L <chain> = Aktuelle Regeln ausgeben

-i Interface = Die Netzwerkschnittstelle für die die Regel gilt
-p Protokoll = Das verwendete Protokoll (icmp, tcp, udp)
-y = Das SYN-Flag muss gesetzt, das ACK-Flag nicht gesetzt sein
! -y = Das ACK-Flag muss gesetzt sein
-s IP-Adresse [ Portnummer ] = Absenderadresse (Source)
-d IP-Adresse [ Portnummer ] = Empfängeradresse (Destination)
-j Policy = Policy dieser Regel (ACCEPT, REJECT, DENY, MASQ)

Beispiele:

# Alle Regeln aller Chains in der "filter" Tabelle löschen
iptables -F

# Pakete an lokale Prozesse
# Policy (Standardverhalten am Regelende): Paket verwerfen
iptables -P INPUT DROP

# TCP-Pakete aus dem lokalen Netz durchlassen
iptables -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT

# TCP-Pakete ohne SYN-Flag wegwerfen (an dieser Stelle Unsinn!)
# (Info: SYN-Flag ist nur beim Ersten Paket einer TCP-Verbindung gesetzt)
iptables -A INPUT -p tcp ! --syn -j DROP

# TCP-Pakete an Ziel-Port 113 (auth) erlauben
iptables -A INPUT -p tcp --dport 113 -j ACCEPT

# UDP-Pakete aus lokalem Netz passieren lassen
iptables -A INPUT -p udp -s 192.168.1.0/24 -j ACCEPT

# UDP-Pakete von Name-Servern durchlassen
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# ICMP-Pakete (z.B. Ping) aus lokalem Netz erlauben
iptables -A INPUT -p icmp -s 192.168.1.0 -j ACCEPT

# ICMP-Pakete (z.B. Ping) generell verbieten
iptables -A INPUT -p icmp -j DROP

# Pakete, die geroutet werden
# Policy (Standardverhalten am Regelende): Paket verwerfen
iptables -P FORWARD DROP

# Pakete aus lokalem Netz erlauben und routen
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

# Pakete von lokalen Prozessen
# Policy (Standardverhalten am Regelende): Paket durchlassen
iptables -P OUTPUT ACCEPT

ipchains-save > filter.txt
ipchans-save input > filter-input.txt
ipchains-restore < filter.txt

Besonderheiten iptables im Vergleich zu ipchains

Bei iptables exisitiert noch eine weitere wichtige Angabe: die Regeltabelle. Diese Tabelle wird mit der Option -t eingeleitet. Gibt man keine Regeltabelle explizit an, wird standardmäßig filter verwendet. Es gibt drei Filtertabellen:

filter = Hier wird definiert, wie Pakete gefilter werden. Die in dieser Tabelle enthaltenen Regeln entsprechen dem von ipchains (INPUT, DENY, FORWARD, etc)
nat = Diese Regeln bestimmen, wie Absender- und Empfängeradressen geändert werden (POSTROUTING, OUTPUT, PREROUTING).
mangle = Einzelne Elemente des Paket-Headers verändern,

 

Beispiel-Skript

#!/bin/bash
# Default-Policy für INPUT = DROP, OUTPUT = ACCEPT,
# FORWARD = ACCEPT
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT


# Standardmäßig alle Regeln löschen
iptables -t filter -F

# Loopback-Device freischalten
iptables -t filter -A INPUT -i lo -j ACCEPT

# ICMP-Paket für eth0 erlauben
iptables -t filter -A INPUT -i eth0 -p icmp -j ACCEPT

# Eingehende HTTP-Verbindung erlauben
iptables -t filter -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
# Eingehende SSH-Verbindung erlauben
iptables -t filter -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT

iptables-save > filter.txt
iptables-save input > filter-input.txt
iptables-restore < filter.txt

NAT und Masquerading

NAT steht für Network Address Translation was man als das Umschreiben von IP-Adressen in IP-Paketen bezeichnet. NAT wird häufig als Masquerading eingesetzt. Dabei wird:

- die Absenderadresse von nach außen gehenden Paketen auf die Serveradresse umgeschrieben
- die Empfängeradresse von eingehenden Paketen wieder auf den ursprünglichen Absender umgeschrieben

# Masquerading mit ipchains
ipchains -A forward -i eth2 -s 192.168.0.0/24 -j MASQ

# Masquerading mit iptables
# Ansender-IP ist 212.212.212.5
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 212.212.212.5

IP-Forwarding

Beim IP-Forwarding sollen Rechner aus einem Netzwerk, die Dienste öffentlich zur Verfügung stellen (Webserver, FTP, etc), nicht direkt erreichbar sein. Um dies zu ermöglichen, kann man mit den Ports “tricksen”. Beim IP-Forwarding werden eingehende Pakete auf einen anderen Port des Zielrechners umgeleitet. Bsp.: Stellt man eine HTTP-Anfrage an einen Rechner, so kann der Router die Anfrage auf Port 6666 umleiten. Der Webserver auf dem Zielrechner ist so konfiguriert, dass HTTP-Anfragen auf Port 6666 angenommen werden. So ist der Dienst nicht direkt auf Port 80 erreichbar.

 

Bei IP-Forwarding spricht man somit auch von Destination-NAT.

 

# Port-Weiterleitung mit ipchains
# 212.212.212.5 = Externe Adresse des Routers
# Alle Anfragen an 212.212.212.5:80 werden an
# 192.112.36.10 6666 weitergeleitet
ipmasqadm portfw -a -P tcp -L 212.212.212.5 80 -R 192.112.36.10 6666

# Port-Weiterleitung mit iptables
iptables -t nat -A PREROUTING -p tcp -d 212.212.212.5 --dport 80 -j DNAT –to-destinsation 192.112.36.10:6666

Wichtige Firewall-Einstellungen in /proc/sys/net/ipv4/

ip_forward = Weiterleitung von IP-Paketen erlauben/verbieten
tcp_syncookies = Wenn aktiviert, werden SYN-Flood-Attacken (Denial-Of-Service) verhindet
tcp_syn_retries = Wie viele SYN-Pakete werden nacheinander akzeptiert, bevor SYN-Cookie-Methode zieht.
icmp_echo_ignore_all = 1 = Alle ICMP-Echo-Anfragen werden ignoriert
icmp_echo_ignore_broadcasts = 1 = Alle Pings an Broadcast-Adressen werden ignoriert.

echo 1 > /proc/sys/net/ipv4/ip_forward

Dynamisches Routing

Router sind in der Lage, sich vorhergehende Routen zu merken und somit für das nächste Mal die optimale Route zu wählen. Mittels RIP (Routing Information Protocol) können Router sogar Ihre Informationen untereinander austauschen, es werden also die Routingtabellen ausgetauscht. Neben RIP gibt es noch folgende Routing-Protokolle, die im Prinzip alle dasselbe tun:

IGRP/EIGRP (Interior Gateway Routing Protocol/Enhanced IGRP)
OSPF (Open Shortest Path First)
IS-IS (Intermediate System to Intermediate System)
EGP (Exterior Gateway Protocol)
BGP (Border Gateway Protocol)

Routing-Dämon routed

routed hält die Routingtabellen auf den aktuellen Stand und kommuniziert über RIP mit anderen Routern, um die Routingtabellen untereinander auszutauschen.