Iptables für Fortgeschrittene
Aus Gentoo Linux Wiki
| Firewall • Dienste absichern • Verschlüsselung • alphabetischer Security Index |
Dieser Artikel ist ein Kurz-Artikel - Du kannst uns helfen, diesen zu erweitern. Klicke dazu auf bearbeiten.
|
Bitte zuerst Iptables für Anfänger lesen. Dieser Artikel basiert auf Fall 2: Ein Netzwerk mit einem bis mehreren PCs, in dem als DSL-Router ein extra PC arbeitet.
Inhaltsverzeichnis |
[Bearbeiten] Geeignetes Regelset aufstellen
Bei der Erstellung einer Firewall ist es hilfreich, sich vor Augen zu führen, welche Wege die Pakete nehmen könnten und sich das auf einen Zettel notiert.
[Bearbeiten] einfaches Beispiel
Zuerst definiert man am besten ein einfaches Regelset, wie in Iptables für Anfänger beschrieben:
#!/bin/bash ## Variablen setzen EXT_IF="ppp0" # Schnittstelle zum Internet INT_IF="eth0" # Schnittstelle, an dem das Netzwerk hängt. IPRANGE="192.168.0.1/24" # IP Bereich im Netzwerk ## IPv4 forwarding einschalten echo 1 > /proc/sys/net/ipv4/ip_forward ## Vorhandene Regeln löschen /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F ##Policys setzen /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP #INPUT (Pakete gerichtet an Router) /sbin/iptables -A INPUT -p ALL -i lo -j ACCEPT /sbin/iptables -A INPUT -p ALL -i $INT_IF -j ACCEPT /sbin/iptables -A INPUT -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -p tcp -i $EXT_IF --dport 22 -j ACCEPT #ssh /sbin/iptables -A INPUT -p tcp -i $EXT_IF --dport 80 -j ACCEPT #http /sbin/iptables -A INPUT -p tcp -i $EXT_IF --dport 443 -j ACCEPT #https #OUTPUT (Pakete vom Router) # Da Policy für OUTPUT auf ACCEPT steht, hier keine Regel nötig #FORWARD (Pakete vom Netzwerk ins Internet oder in die andere Richtung) /sbin/iptables -A FORWARD -p ALL -i $INT_IF -j ACCEPT /sbin/iptables -A FORWARD -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT #POSTROUTING (Weiterleitung zwischen Netzwerk und Internet definieren /sbin/iptables -t nat -A POSTROUTING -o $EXT_IF -s $IPRANGE -d 0/0 -j MASQUERADE
Und überprüft (z.b. mittels Portscanner) ob diese Regeln wie gewünscht funktionieren.
[Bearbeiten] fortgeschrittenes Beispiel mit Schutz vor diversen Attacken
Nun kann man sich weiter vorbewegen und weitere Regeln einfügen:
#!/bin/bash
#####################
##### Variablen #####
EXT_IF="ppp0" # Schnittstelle zum Internet
INT_IF="eth0" # Schnittstelle, an dem das Netzwerk hängt.
IPRANGE="192.168.0.1/24" # IP Bereich im Netzwerk
SERVICES_UDP="" #freigegebene UDP-Ports
SERVICES_TCP="80 443 22 21" #freigegebene TCP-Ports (hier http, https, ssh, ftp)
######################
##### Proc Stuff #####
echo 1 > /proc/sys/net/ipv4/ip_forward #IPv4 forwarding
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #Broadcast Pings
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all #ICMP unterbinden, wenn auf 1
#####################################
##### Vorhandene Regeln löschen #####
/sbin/iptables -F #löscht alle Regeln
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X #löscht eigene Ketten
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
#######################
##### Grundregeln #####
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
###################################
##### Sicherheitsvorkehrungen #####
iptables -N bad_packets
iptables -A bad_packets -p ALL -m state --state INVALID -j DROP #kaputte Pakete droppen
iptables -A bad_packets -p tcp -s $LAN_IP_RANGE -j REJECT --reject-with tcp-reset #Antispoofing
iptables -A bad_packets -p tcp -s $MODEM_IP_RANGE -j REJECT --reject-with tcp-reset #Antispoofing
iptables -A bad_packets -p tcp -s $FON_IP_RANGE -j REJECT --reject-with tcp-reset #Antispoofing
iptables -A bad_packets -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #Ping Of Death (sinnvoll, wenn ICMP akzeptiert wird)
iptables -A bad_packets -p ALL -j RETURN #gibt Kontrolle zurück
iptables -N service_sec
iptables -A service_sec -p tcp --syn -m limit --limit 1/s -j ACCEPT #SYN-Flood Attacken
iptables -A service_sec -p tcp ! --syn -m state --state NEW -j DROP #TCP-SYN-Pakete ohne Status NEW droppen
iptables -A service_sec -p tcp --tcp-flags ALL NONE -m limit --limit 1/h -j ACCEPT #Portscanner ausschalten
iptables -A service_sec -p tcp --tcp-flags ALL ALL -m limit --limit 1/h -j ACCEPT #Portscanner ausschalten
iptables -A service_sec -p ALL -j RETURN #gibt Kontrolle zurück
################################
##### freigegebene Dienste #####
/sbin/iptables -N services
for port in $SERVICES_TCP ; do
/sbin/iptables -A services -p tcp --dport $port -j service_sec
/sbin/iptables -A services -p tcp --dport $port -j ACCEPT
done
for port in $SERVICES_UDP ; do
/sbin/iptables -A services -p udp --dport $port -j service_sec
/sbin/iptables -A services -p udp --dport $port -j ACCEPT
done
/sbin/iptables -A services -p ALL -j RETURN #gibt Kontrolle zurück an die aufrufende Kette (hier INPUT)
#################
##### INPUT #####
## aus dem Internet (ppp0)
/sbin/iptables -A INPUT -p icmp -j ACCEPT #ICMP generell akzeptieren
#sicherheit
/sbin/iptables -A INPUT -p ALL -i $EXT_IF -j bad_packets #Sicherheitsvorkehrungen
/sbin/iptables -A INPUT -p ALL -i $EXT_IF -j services #Dienste freigeben
/sbin/iptables -A INPUT -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
## aus dem Ethernet (ethX)
/sbin/iptables -A INPUT -p ALL -i $INT_IF -j ACCEPT
## local
/sbin/iptables -A INPUT -p ALL -i lo -j ACCEPT
##################
##### OUTPUT #####
/sbin/iptables -A OUTPUT -p ALL -j ACCEPT
###################
##### FORWARD #####
## aus dem Ethernet (ethX)
/sbin/iptables -A FORWARD -p ALL -i $INT_IF -j ACCEPT
## aus dem Internet (ppp0)
/sbin/iptables -A FORWARD -p ALL -i $EXT_IF -j bad_packets #sicherheit
/sbin/iptables -A FORWARD -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
###########################
##### NAT POSTROUTING #####
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s $LANRANGE -d 0/0 -j MASQUERADE
Wie man sieht schützt dieses Script zusätzlich vor diversen Angriffspunkten. Das ganze kann man weiter verfeinern, der Author emfielt eh, sich die Links am Ende des Artikels anzuschauen und ein Regelset von Grundauf zu schreiben.
[Bearbeiten] Siehe auch
- Iptables Installation und Kernelkonfiguration
- Iptables für Anfänger
- Frontends und andere Tools für Iptables
- Bandbreitenmanagement mittels Iptables und Tc

