Iptables
Aus Gentoo Linux Wiki
| Firewall • Dienste absichern • Verschlüsselung • alphabetischer Security Index |
Dieser Artikel wird derzeit stark erweitert, überarbeitet und in Einzelartikel aufgespaltet:
- Iptables für Anfänger
- Iptables für Fortgeschrittene
- Iptables Installation und Kernelkonfiguration
- Frontends und andere Tools für Iptables
- Bandbreitenmanagement mittels Iptables und Tc
Inhaltsverzeichnis |
[Bearbeiten] Einleitung
iptables ist ein Paketfilter. Er untersucht die Pakete, die einen Rechner verlassen oder erreichen. Das heißt, er kann bestimmte Netzwerkpakete basierend auf Art, Quelle, Ziel usw. zurückweisen.
Dieser Artikel soll zeigen, wie man Regeln erstellen kann und was man mit den Regeln bewirken kann.
[Bearbeiten] Voraussetzungen
Welches Wissen wird vorrausgesetzt, um den Artikel verstehen zu können?
- Man sollte Grundlagen über die Netzwerktechnologie kennen.
- Man sollte wissen, was eine Firewall ist.
- Man sollte wissen, wie man mit dem Linux-Kernel umgeht.
[Bearbeiten] Quellen
Falls du irgendwo meinst dir nicht hundert Prozent sicher zu sein, lies dir folgende Artikel doch mal durch:
[Bearbeiten] Installation
Bevor wir beginnen, stelle sicher, dass deine Hardware richtig konfiguriert ist. Vor allen Dingen sollte deine Netzwerkverbindung einwandfrei funktionieren.
[Bearbeiten] iptables im Kernel konfigurieren
Um iptables zu bekommen, muss die Kernel-Option "Network packet filtering (replaces ipchains)" NETFILTER aktiviert sein. Die Option findest du unter:
| Code: make menuconfig |
Networking---> Networking Options----> Network Packet Filtering (replace Ipchains) |
ACHTUNG: Die Option "Fast switching" übergeht alle Network-Packet-Filtering-Optionen. Stelle sicher, dass die Option nicht aktiviert ist, da sonst alle Einstellungen unbrauchbar werden. Du erhältst nun eine Liste der verschiedenen Möglichkeiten, wie du deine Firewall konfigurieren kannst. Wir brauchen für iptables die "IP tables support"-Option. Aktiviere diese Option entweder
- als Modul
- oder direkt im Kernel.
Grundsätzlich ist zu empfehlen, Module für die Protokollversionen 4 und 6 zu nutzen, also reicht ein normales <SPACE>, da standardmäßig Module erstellt werden.
[Bearbeiten] iptables einbinden
dazu natürlich ein
emerge iptables
wenn der Vorgang beendet ist, kann man die iptables sofort starten:
/etc/init.d/iptables restart
Da noch keine Regeln erstellt sind, passiert eigentlich auch nichts. Wichtig: iptables ist ein Filter, der zur Laufzeit gesetzt wird. Ist der Dienst nicht aktiv, werden sämtliche Änderungen ignoriert
Damit iptables beim Hochfahren des Systems gestartet wird, sollte es in den Runlevel eingefügt werden
rc-update add iptables default
Nun kann man entsprechend seinen Vorstellungen die Regeln zu iptables hinzufügen. Der Einfachheit halber empfehlen wir ein bash-Skript zum Konfigurieren von iptables. Bei mir sieht das so aus
makeNAT.sh
#!/bin/bash IPTABLES='/sbin/iptables' # # Schnittstellen als Variablen festlegen EXTIF='ppp0' INTIF1='eth0' INTIF2='eth1' # IP-Forwarding im Kernel einschalten /bin/echo 1 > /proc/sys/net/ipv4/ip_forward # # Alle Regelungen in IPTables löschen echo -e " + reseting IPTables" $IPTABLES -F $IPTABLES -X # # Alles was nicht geregelt ist wird abgelehnt # Standardregel waere ACCEPT $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP # # Masq/NAT einschalten für lokales Netzwerk echo -e " - enable Masquerade" $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE # # Datentransfer nach aussen immer erlauben $IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT # # und ein paar Dienste freischalten echo -e " - Allowing access to the SSH server" $IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT echo -e " - Allowing access to the HTTP server" $IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT # # ganz wichtig, irgendwo müssen ja die Windowsraubkopien geladen werden echo -e " - Allowing access to the MLDONKEY server" $IPTABLES -A INPUT --protocol udp --dport 4662 -j ACCEPT $IPTABLES -A INPUT --protocol tcp --dport 4662 -j ACCEPT # # alles andere geht in die Tonne echo -e " - disable rest of trafic" # block out all other Internet access on $EXTIF $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP $IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP
wenn das passt, sollte man die erstellten iptables-Regeln noch sichern, damit sie beim nächsten Neustart auch verwendet werden
/etc/init.d/iptables save
[Bearbeiten] Frontends
[Bearbeiten] Grafische Oberfläche
Für Benutzer, die noch nicht ganz mit der Syntax von iptables vertraut sind, gibt es eine gute grafische Schnittstelle namens kmyfirewall. Das Tool kann aktuelle Konfigurationen von iptables auslesen und es können eigene Initscripts erstellt werden, sodass iptables automatisch beim Starten des Systems aktiviert wird. Siehe auch http://kmyfirewall.sourceforge.net/
http://www.simonzone.com/software/guarddog/
[Bearbeiten] Firehol
Wer sich nicht mit der recht komplexen Konfiguration von iptables befassen kann/will, aber nicht auf eine grafische Oberfläche zurückgreifen kann, dem sei das iptables-Frontend Firehol (http://firehol.sf.net) empfohlen. Es hat keine grafische Benutzerschnittstelle, sondern wird über eine .conf-Datei und Shell-Skripte gesteuert. Die Syntax ist jedoch deutlich simpler als die von iptables selbst. Zudem hat Firehol eine Funktion, die die benötigten Einstellungen "errät". Auch die Manpage ist recht eingängig. Zugleich sind auch sehr ausgefeilte Konfigurationen der Firewall möglich, und man kann sogar direkte iptables-Befehle in die Konfiguration einbinden.
Trotz der relativ einfachen Bedienung von Firehol sind (zumindest grundlegende) Kenntnisse von iptables dringend empfohlen. (Stichworte: Policies, eingehende gegenüber ausgehenden Verbindungen, Definieren von IP- und Port-Bereichen, "iptables-save", etc.)
Beachte bitte die Diskussion zu diesem Artikel.
