Iptables
Aus Fedorawiki.de
| |
Dieser Artikel ist noch nicht vollständig. Du kannst helfen, ihn zu bearbeiten. |
Zur eigenen Sicherheit sollte auf allen Systeme, welche einen Zugang zu einem Netzwerk haben, sei es lokal oder dem Internet, mit einer Firewall geschützt werden. iptables ist die Firewall, die bei fast allen Distributionen verfübar ist, so auch bei Fedora. Netzwerktechnisch arbeitet iptables auf OSI-Schicht 3, also der Verbindungsschicht, es ist aber auch möglich, dass andere Schichten kontrolliert werden.
Inhaltsverzeichnis |
iptable
Innerhalb des Linux-Kernel erlaubt Netfilter Netzwerk-Pakete abzufangen und zu manipulieren. Iptables ist eigentlich das dazugehörige Dienstprogramm zur Konfiguration von Netfilter, aber meistens wird von iptables gesprochen.
Erklärungen
Tabellen (tables)
Die iptables-Architektur gruppiert die Verarbeitungs-Regeln gemäss ihrer Funktion in drei Tabellen.
- filter für Paketfilter
- nat für Network Address Translation
- mangle für Paketmanipulationen
Die Tabellen beinhalten Ketten (engl. chains) von Regeln, welche abgearbeitet werden und aus Mustern (engl. patterns) bestehend, welche dann bestimmen auf welche Pakete welche Regel angewendet wird und deren Ziele (engl. targets), die festlegen, was mit den Paketen passiert. Chains also, wo was geprüft wird, Pattern definieren, welche Pakete betroffen sind und Targets, was mit ihnen geschiehen soll. Die sequentiell Abarbeitung bis zum ersten Treffer der Filterregeln ist der Normalfall, ausser es gibt eine Ausnahme.
Ketten (chains)
Netterweise hat Iptables fünf fest vorgegebene Ketten (built-in chains), welche im Kernel eingebaut sind.
- PREROUTING Unmittelbar, bevor eine Routing-Entscheidung getroffen wird, müssen die Pakete hier durch (nur bei nat und mangle)
- INPUT Hier landen alle Pakete, welche an einen lokalen Prozess gerichtet sind (nur bei filter und mangle)
- OUTPUT Hier laufen alle Pakete durch, die von einem lokalen Prozess stammen
- FORWARD für alle zu routenden Pakete, also Pakete die für andere Rechner bestimmt sind (nur bei filter und mangle)
- POSTROUTING Alle Pakete, lokale und solche die geroutet werden, laufen hier durch (nur bei nat und mangle)
Es besteht zusätzlich die Möglichkeit, dass eigene Ketten definieren können.
Ziele (targets)
Jede Kette kann auch Regeln enthalten und jede dieser Regel besteht aus einer Filter-Spezifikation und aus einem Ziel (target). Das Ziel gibt am Ende an, was mit einem Paket passieren soll. Ein Ziel kann unter anderem eine benutzerdefinierte Kette, ein Standardziel oder ein erweitertes Ziel sein. Für die fest vorgegebenen Ketten kann eine Policy definiert werden, welche angewandt wird, wenn keine der angegebenen Regeln zu trifft. Eine Policy ist aber immer ein Standardziel. Default ist ACCEPT.
Folgende Standardziele gibt es:
- ACCEPT Das Paket wird akzeptiert.
- DROP Das Paket wird ohne Rückmeldung an den Sender verworfen.
- QUEUE Das Paket wird in eine Queue im Userspace geschickt, sodass es von einem Benutzerprogramm bearbeitet werden kann. Wird die Queue nicht gelesen, funktioniert es wie DROP.
- RETURN In benutzerdefinierten Ketten angewendet wird die Abarbeitung dieser Kette abgebrochen und mit der nächsten Regel der vorhergehenden (aufrufenden) Kette fortgeführt. Bei den fest vorgegebenen Ketten greift die Policy der Kette.
Die wichtigsten erweiterten Ziele sind:
- LOG Das Paket wird mit ausgewählten Informationen im Syslog aufgezeichnet und anschliessend normal durch die Kette weitergeleitet.
- REJECT Das Paket wird verworfen und der Sender mittels ICMP-Nachricht oder RST-Paket (nur bei TCP-Verbindungen) darüber informiert
Folgende Ketten sind nur in der nat-Tabelle gültig.
- DNAT und SNAT (nur bei PREROUTING und OUTPUT bzw. POSTROUTING) stehen für Destination NAT bzw. Source NAT. Dabei wird die Ziel- bzw. die Quell-Adresse des Paketes durch die angegebene Adresse ersetzt.
- MASQUERADE (nur bei POSTROUTING) ist eine Spezialform von Source NAT. Die Quell-Adresse des Paketes wird dabei durch die IP-Adresse der Schnittstelle ersetzt, auf welcher es den Rechner verlassen wird.
- REDIRECT (nur bei PREROUTING und OUTPUT) leitet das Paket zum lokalen Rechner um, dies wird für transparente Proxy-Server benötigt.
Bei DNAT, SNAT und MASQUERADE merkt sich Netfilter die Adress-Übersetzung und wendet sie auf alle nachfolgenden Pakete derselben Verbindung und in beide Richtungen ebenfalls an. Dies wird auch als connection tracking bezeichnet.
Die Konfigurations-Datei
Die Konfigurations-Datei ist zu finden unter /etc/sysconfig/iptables und könnte mit einem beliebigen Editor bearbeitet werden, aber dies wird nicht empfohlen.
# Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 162 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
Beispiele
Totale Abschottung
So werden alle Pakete verworfen und das System ist komplett dicht. Diese Abfolge kann einfach am Anfang des Firewall-Scriptes stehen und so wird sicher gestellt, dass zu Beginn das System geschützt ist.
iptables -F iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
SSH (lokal)
Diese Regel erlaubt den Zugriff auf einen lokalen ssh-Server (192.168.1.2) von einem Client (192.168.1.10) aus.
iptables -A OUTPUT -o eth0 -p tcp -s 192.168.1.2 --sport 1024: -d 192.168.1.10 --dport 22 -m state --state NEW -j ACCEPT
Aktives FTP
Die Port-Nummer wird vom FTP-Client zum FTP-Server über den FTP-Kanal gesendet. Der Server verbindet sich von Port 20 zum Client-Port und sendet über diese neue aufgebaute Verbindung (ftp-data) die Daten. Die Resultate von ls oder eines get-Kommandos werden so übertragen. Die FTP-Datenverbindung (ftp-data) wird also vom Server aufgebaut und nicht wie die FTP-Verbindung vom Client.
Um dieses Art von ftp zu erlauben, müsste eine generelle Regel für alle einkommenden Verbindungen von Port 20 (FTP-Server) auf hohe Port-Nummern (>1023) des Clients anlegt werden. Dies ist eine sehr unelegante Methode. Durch das Modul ip_conntrack_ftp steht ein besserer Ansatz zur Verbindungsverfolgung zur Verfügung. Es durchsucht das PORT Kommando nach der Port-Nummer, mit der sich der Server mit dem Client verbinden wird. So wird dann eine Beziehung zwischen ftp und ftp-data hergestellt (RELATED). Die folgenden Regeln bewirken dies.
iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
Passives FTP
Im Gegensatz zu aktivem ftp wird die gewünschte PORT-Nummer in der passiven Variante der Datenverbindung nicht vom Client sondern vom Server festgelegt und via PORT-Kommando übertragen. Der Client verbindet sich dann zu diesem Port auf dem Server und der Datenverkehr beginnt. Obwohl diese Vorgehensweise als sicherer gilt, ist fast gar nichts mehr über die Port-Nummern der Verbindung bekannt.
Ähnlich wie beim aktiven FTP kann man die Filterregeln aufstellen, es wird aber anstelle von NEW für die OUTPUT Kette der Parameter RELATED angewendet.
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
Graphische Oberflächen
Fedora-Tool
Unter System -> Administration -> Sicherheitsstufe und Firewall ist das Fedora-eigene Gui zur Konfiguration der Firewall zu finden. Die Konsolen-Anwendung system-config-securitylevel erledigt das gleiche.
Firestarter
Für Einsteiger ist Firestarter eine gute Möglichkeit zum Erstellen einer Firewall.
Firewall-Builder
Dieses Tool bietet eine grafische Oberfläche und ist auch geeignet zur Erstellung von komplizierten Konfigurationen, da die Handhabung von iptables erleichtert wird.
Siehe auch