Iptables für Anfänger
Aus Gentoo Linux Wiki
| Firewall • Dienste absichern • Verschlüsselung • alphabetischer Security Index |
|
Netfilter ist Bestandteil des Linux-Kernels, der es erlaubt, Netzwerkpakete abzufangen und zu manipulieren und bildet damit das Herzstück einer Firewall auf Linux-Basis.
Iptables ist das dazugehörige Dienstprogramm zur Konfiguration von Netfilter.
Dieser Artikel soll zeigen, wie man Regeln erstellt und Iptables in Grundzügen verstehen kann.
Inhaltsverzeichnis |
[Bearbeiten] Installation
Mit der Installation und der Kernelkonfiguration beschäftigt sich der Artikel Iptables Installation.
[Bearbeiten] Konfiguration
Vorneweg ein wenig Theorie zum besseren Verständnis.
Bitte dazu den Abschnitt Aufbau aus dem Wikipedia-Artikel zu Iptables lesen.
Folgende möglichen Anwendungsfälle ergeben sich in der Praxis eines Heimanwenders
Fall 1: Einmal ein PC direkt am Modem/Internet
################## ###### # WAN (Dsl/Isdn) # --- # PC # ################## ######
Fall 2: Ein Netzwerk mit einem bis mehreren PCs, in dem als DSL-Router ein extra PC arbeitet.
################## ############### ########
# WAN (Dsl/Isdn) # --- # Router (PC) # --- # PC 1 #
################## ############### | ########
|
| ########
-- # PC 2 #
########
Es gibt sicherlich noch mehr, aber das sind die gebräuchlichen, in denen man sich eine Firewall aufsetzt.
[Bearbeiten] Fall 1: Einmal ein PC direkt am Modem/Internet
Hier kann man auf die Chains PREROUTING/POSTROUTING und FORWARD vollkommen verzichten. Da kein Forwarding vorhanden ist (es hängt ja nur ein Rechner am Netz) braucht man lediglich die Chains INPUT und OUTPUT. Hier ein Beispiel:
#!/bin/bash /sbin/iptables -F /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -A INPUT -p ALL -i lo -j ACCEPT /sbin/iptables -A INPUT -p ALL -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -p tcp -i ppp0 --dport 22 -j ACCEPT
iptables -F löscht vorhandene Regeln
iptables -P setzt die Policys, das bedeuted, wenn keine Iptables-Regel greift, dann kommen diese zur Geltung. Ausgehende Pakete wollen wir immer erlauben, deshalb OUTPUT ACCEPT und einkommende bis auf erlaubte Ausnahmen mittels INPUT DROP fallenlassen. Da hinter dem Rechner kein Netzwerk oder zweiter Rechner erreichbar ist, sollte man FORWARD DROP einstellen.
Diese Ausnahmen werden in den letzten drei Regeln definiert:
iptables -A INPUT -p ALL -i lo -j ACCEPT -A INPUT definiert, dass diese Regel für ankommende Verbindungen gilt, mit -p ALL definiert man alle Protokolle (ICMP/TCP/UDP) und mit -i lo, dass diese Regen nur für das lo-Device gültig ist. -j ACCEPT erlaubt den Zugriff.
iptables -A INPUT -p ALL -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT Wie oben, aber diesmal für das DSL-Device (ifconfig beachten!) definiert man mit -m state --state ESTABLISHED,RELATED Pakete, die von außen reinkommen und zu einer bestehenden Verbindung, sprich einer lokal aufgebauten Verbindung gehören.
iptables -A INPUT -p tcp --dport 22 -i ppp0 -j ACCEPT lässt Verbindungen von außen -i ppp0 auf den Service SSH --dport 22 zu -j ACCEPT.
Fertig ist eine ganz einfach gestrikte Firewall. Empfehlenswert ist das natürlich nur, wenn man nicht alle Ports auf seinem System geschlossen bekommt, ansonsten ist solch eine Firewall sinnlos. Mittels netstat -ltup als Root kann man herausfinden, welche Programme auf welchen Ports lauschen. Ein Abstellen dieser ist effektiver, als mittels einer Firewall diese zu schließen.
[Bearbeiten] Fall 2: Ein Netzwerk mit einem bis mehreren PCs, in dem als DSL-Router ein extra PC arbeitet.
Hier wirds ein wenig komplizierter, man braucht nun noch die Chains POSTROUTING und FORWARD.
#!/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 #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
Im INPUT-Abschnitt definiert man freien Zugang auf die lo-Schnittstelle und vom Netzwerk aus. Zugriffe aus dem Internet werden auf Pakete zu bestehenden Verbindungen beschränkt sowie auf SSH.
Im FORWARD-Abschnitt wird freien Zugang aus dem Netzwerk ins Internet gestattet und bestehende Verbindungen aus dem Internet ins Netzwerk ebenfalls.
Im POSTROUTING-Abschnitt wird schlussendlich definiert, dass Pakete aus dem Netzwerk ins Internet mit der öffentlichen IP maskiert werden. Damit das auch funktioniert, muss IP Forwarding im Kernel mit echo 1 > /proc/sys/net/ipv4/ip_forward angeschalten werden.
[Bearbeiten] Nutzung des Firewallscripts
Die Beispiele kann man sich in einer Datei speichern (z.b. firewall.sh) und bequem aufrufen. Um das nicht bei jedem Rechnerstart erledigen zu müssen, sorgt man mit /etc/init.d/iptables save dafür, dass die Regeln gespeichert werden sollen. Mittels rc-update add iptables default erreicht man, dass die gespeicherten Regeln beim Hochfahren ausgeführt werden.
Alternativ kann man im Falle eines DSL-Anschlusses auch das Script wenn der Rechner als Router arbeitet in /etc/ppp/firewall-masq speichern und in /etc/ppp/pppoe.conf FIREWALL=MASQUERADE definieren.
[Bearbeiten] Bemerkungen
Dies sind ganz einfache Scripte, die rigoros den Zugriff von außen versperren, wenn man die SSH-Regel weglässt und ungehinderten Zugriff von innen nach außen erlauben. Es gibt Regeln, die man mit einbauen sollte, darauf geht dann aber Iptables für Fortgeschrittene ein.
[Bearbeiten] Siehe auch
- Iptables Installation und Kernelkonfiguration
- Iptables für Fortgeschrittene
- Frontends und andere Tools für Iptables
- Bandbreitenmanagement mittels Iptables und Tc

