Springe zum Hauptinhalt

Archiv

Linux-PCs sichern mit iptables

Einordnung und Abgrenzung

  • Clients: Desktop-PCs, Notebooks unter Linux
  • Server: z.B. Web-Sever, o.dgl.
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
#
  • "Personal Firewall"
    • eine von viele Schutzmaßnahmen
    • Bestandteil der host based security
    • Wirksamkeit umstritten (BSI empfiehlt den Einsatz)
    • filtert ein- und ausgehenden Datenverkehr eines PCs
    • Ziel: ungewollten/unbeabsichtigten Datenverkehr unterbinden
    • Voraussetzung: genaue und detaillierte Kenntnisse über Anwendungsprotokolle
  • hier: Basismechanismen und -werkzeuge
  • nicht:
    • grafische Frontends für Regel-Definitionen
    • Linux als Firewall-System zum Schutz von Netzen

Was ist netfilter/iptables?

  • Paket-Filter im Linux-Kernel (ab Version 2.4)
    • inspiziert IP-Pakete
    • entscheidet auf Grund von Regeln, wie mit einem IP-Paket zu verfahren ist
  • konfiguriert durch das Kommando iptables
  • realisiert als Kernel-Moduln
# ls /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter
arptable_filter.ko          ipt_addrtype.ko    ipt_NETMAP.ko
arp_tables.ko               ipt_ah.ko          ipt_NOTRACK.ko
arpt_mangle.ko              ipt_CLASSIFY.ko    ipt_owner.ko
ip_conntrack_amanda.ko      ipt_comment.ko     ipt_physdev.ko
ip_conntrack_ftp.ko         ipt_conntrack.ko   ipt_pkttype.ko
ip_conntrack_irc.ko         ipt_dscp.ko        ipt_realm.ko
ip_conntrack.ko             ipt_DSCP.ko        ipt_recent.ko
ip_conntrack_proto_sctp.ko  ipt_ecn.ko         ipt_REDIRECT.ko
ip_conntrack_tftp.ko        ipt_ECN.ko         ipt_REJECT.ko
ip_nat_amanda.ko            ipt_esp.ko         ipt_SAME.ko
ip_nat_ftp.ko               ipt_helper.ko      ipt_sctp.ko
ip_nat_irc.ko               ipt_iprange.ko     ipt_state.ko
ip_nat_snmp_basic.ko        ipt_length.ko      ipt_tcpmss.ko
ip_nat_tftp.ko              ipt_limit.ko       ipt_TCPMSS.ko
ip_queue.ko                 ipt_LOG.ko         ipt_tos.ko
iptable_filter.ko           ipt_mac.ko         ipt_TOS.ko
iptable_mangle.ko           ipt_mark.ko        ipt_ttl.ko
iptable_nat.ko              ipt_MARK.ko        ipt_ULOG.ko
iptable_raw.ko              ipt_MASQUERADE.ko
ip_tables.ko                ipt_multiport.ko
# 

  • es werden nur die Moduln geladen, für die Regeln definiert sind (bzw. zugehörige Helper-Moduln)

# lsmod|grep ip ipv6 240097 100 ipt_REJECT 10561 3 ipt_LOG 10049 1 ipt_multiport 5953 3 ipt_state 5825 4 ip_conntrack 45573 1 ipt_state iptable_filter 6721 1 ip_tables 21441 5 ipt_REJECT,ipt_LOG,ipt_multiport,ipt_state,iptable_filter #

Funktionsprinzipien von iptables

  • ein IP-Paket durchläuft mehrere chains / tables
  • chains enthalten Regeln
  • eine Regel definiert ein Muster (Bedingungen, denen ein Paket entsprechen soll, z.B. bestimmte Ziel-Adresse, bestimmte Flags im TCP-Header, o.dgl.) und ein Ziel (target)
  • ein target ist eine weitere chain oder ein default-target (z.B. DROP, ACCEPT, ...)
  • ein Paket wird an das target weitergeleitet, wenn es dem in der Regel definierten Muster entspricht (match)
  • d.h.: sobald ein match erreicht ist, werden nachfolgende Regeln in dieser Tabelle nicht mehr angewendet
  • wird kein match erreicht, bestimmt letztendlich die policy das Verhalten
  • policy definiert eines der default-target

Paketverarbeitung: das ganze Bild

Bild: Netfilter Paket Traversal

Tabellen (tables)

  • regeln unterschiedliche Arten der Paketverarbeitung
  • grundlegende Gruppierung der Pakete
  • jede Tabelle enthält vordefinierte und ggf. nutzerdefinierte chains
  • conntrack
    • Connection Tracking
    • erkennen von zusammengehörigen Paketen (z.B. TCP-Session, UDP-Stream, Analyse von Anwendungsprotokollen)
    • realisiert sog. statefull packet filter
    • nicht veränderbar: es können keine Regeln angegeben werden
  • mangle
    • bestimmte Änderungen an Paketen, z.B. TTL (time-to-live), TOS (Type of Service)
    • Pakete markieren
    • chains: alle
  • nat
    • Network Address Translation
    • Änderung von IP-Adressen/Port-Nummern
    • SNAT (Soure-NAT):
      • Ändern der Quell-Adresse
      • chains: POSTROUTING
      • auch: Masquerading (Umgang mit dynamischen IP-Adressen, setzen der Quell-IP-Adresse auf IP-Adresse des outgoing Interfaces)
    • DNAT (Destination-NAT):
      • Ändern der Ziel-Adresse
      • chains: PREROUTING und OUTPUT
      • Redirection: Ändern des Ziel-Ports
  • filter
    • Paket-Filter
    • chains: INPUT, OUTPUT und FORWARD
    • oftmals benutzerdefinierte chains
  • wenn für eine Table keine Regeln definiert sind, entfällt die komplette Table (der Kernel-Modul wird nicht geladen)
  • Maschinen, die kein Routing vornehmen, benutzen i.d.R. nur die filter-Table

Regelketten (chains)

IP-Pakete passieren die einzelnen chains unter den folgenden Bedingungen (die einzelnen Tables enthalten ggf. nicht alle chains)

  • PREROUTING
    • unmittelbar nach dem Eintreffen an der Maschine
    • vor der routing-Entscheidung
  • INPUT
    • Ziel: lokaler Prozess
  • FORWARD
    • Ziel: nicht lokal, Paket hat externen Empfänger
  • OUTPUT
    • Quelle: lokaler Prozess
  • POSTROUTING
    • vor dem Verlassen der Maschine

Paketverarbeitung (nur filter)

Bild: iptables-chains (filter)

Das Kommando iptables

  • Einrichten, Manipulieren und Anzeigen der iptables-Regeln im Kernel

Aufrufkonventionen, Syntax, etc.

"Personal Firewall"

  • viele Linux-Distributionen enthalten vordefinierte Regeln
  • diese Regeln implementieren ein "Personal Firewall"
  • Aktivieren/Deaktivieren durch rc-Scripte

Beispiel

  • aus Red Hat Systemen (hier: Fedora Core 4)
  • eingestellt durch /usr/bin/system-config-securitylevel
  • aktiviert/deaktiviert durch /etc/rc.d/init.d/iptables vor bzw. nach Starten/Stoppen der Netzwerk-Konfiguration
# grep -v "^#" /etc/sysconfig/iptables
*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 -m 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 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -p tcp -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
#

  • nur Tabelle filter
  • default-Policy für alle chains: ACCEPT
  • chains INPUT und FORWARD werden umgelenkt in chain RH-Firewall-1-INPUT
    • benutzerdefinierte chains werden oft in der Art eines Unterprogramms eingesetzt
  • chain OUTPUT ist leer (nur default-policy)
    • Unterstellung: wir versenden keine "bösen" Pakete
  • chain RH-Firewall-1-INPUT akzeptiert folgende Pakete:
    • alle Pakete, die über Interface lo hereinkommen
    • alle Pakete der Protokolle icmp, ipv6-crypt (50), ipv6-auth (51)
    • UDP-Pakete mit dem Ziel-Port 5353 und der Ziel-Adresse 224.0.0.251 (Multicast-DNS, mDNS - ZeroConf)
    • UDP-Pakete mit dem Ziel-Port 631 (Internet Printing Protocol, ipp - CUPS)
    • alle Pakete, die zu einer Verbindung (connection) im Zustand ESTABLISHED oder RELATED gehören, z.B.:
      • alle Pakete von korrekt aufgebauten, abgehenden TCP-Sessions
      • alle Pakete von selbst initierten UDP-Streams
    • alle Pakete, die eine neue TCP-Verbindung mit dem Zielport 22 (ssh) initiieren
  • alle anderen Pakete werden zurückgewiesen (REJECT) mit einem icmp-Paket vom Typ icmp-host-prohibited
  • somit ist erreicht:
    • eintreffende Pakete werden zurückgewiesen, wenn es keine "Antwort-Pakete" auf vorher selbst initiierte Verbindungen sind
    • Regeln sind unabhängig von IP- und Netzwerk-Konfiguration

Erweiterung: zurückgewiesene Pakete protokollieren

# iptables -I RH-Firewall-1-INPUT 9 -j LOG --log-level info --log-prefix "iptables REJECT:"

  • Pakete werden protokolliert über syslogd (Log-Level kern.info)
  • Log-Meldungen erhalten den Prefix "iptables REJECT:"

# grep "iptables REJECT" /var/log/messages
...
Apr 10 09:51:40 muethos kernel: iptables REJECT:IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:04:ac:33:7b:26:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=356 TOS=0x00 PREC=0x00 TTL=128 ID=1 PROTO=UDP SPT=68 DPT=67 LEN=336
...

  • Beachte: Protokollieren kann zu dramatischem Anstieg der Filegröße von Logfiles führen!
  • Regelset kontrollieren, ggf. Protkollierung wieder ausschalten

# iptables -D RH-Firewall-1-INPUT 9

Einzelne Dienste einrichten

  • "Personal Firewall"-Einstellungen realisieren i.d.R. diese Strategie
    • alle selbst iniitierten Verbindungen (inkl. dazugehörigem Datenverkehr von angesprochenen Servern) soll erlaubt sein
    • Maschine soll auf unverlangt empfangene Pakete nicht reagieren, d.h. die Maschine betreibt selbst keine Server
    • oftmals eine Ausnahme: SSH-Server
  • viele Dienste kann man relativ einfach erlauben, falls benötigt
    • siehe Beispiel sshd
  • Dienste mit komplexeren Protokollen oder spezifische Ansprüche sind aufwändiger zu realisieren

AFS-Client

  • basiert auf UDP
  • Datenverkehr wird durch Client initiiert, "Personal Firewall" enthält alle erforderlichen Regeln
  • jedoch erforderlich: Erhöhen des Timeout-Wertes für UDP-Streams
# sysctl -w net.ipv4.netfilter.ip_conntrack_udp_timeout_stream=720
  • besser als Eintrag in /etc/sysctl.conf
  • Hintergrund:
    • default-Wert: 180 Sekunden
    • AFS-Server kontaktiert AFS-Client, um diesem mitzuteilen, dass er seine Filekopie im lokalen Cache ungültig ist (z.B. weil ein anderer Client das File modifiziert hat)
    • bei unverändertem default-Wert, würden diese Pakete nur passieren können, wenn der Client seinerseits innerhalb der letzten 180 Sekunden den Server kontaktiert hat - und damit entsprechender Eintrag in Connection-Tracking-Table des Kernels (/proc/net/ip_conntrack) vorhanden ist
    • AFS-Client kontaktiert seinerseits im Abstand von 10 Minuten alle ihm bekannten AFS-Server - um deren Erreichbarkeit zu prüfen
    • durch Erhöhen des Timeout-Wertes auf 12 Minuten ist gesichert, dass Einträge in der Connection-Tracking-Table des Kernels nicht verfallen

FTP-Client

  • komplexes Protokoll (Control Connection, Data Connection)
  • zwei Modi des Protokolls: aktiv vs. passiv (aus Sicht des Servers)
  • passiv
    • Client initiiert Control Connection zum Server (TCP-Port 21)
    • Client wählt passiv-Modus (FTP-Kommando PASV)
    • Server teilt Client Port-Nummer für Data Connection mit, sobald Client eine Data Connection wünscht
    • Client initiiert Data Connection zum Server
    • keine Änderung der Filter-Einstellung auf Client-Seite erforderlich
  • aktiv
    • Client initiiert Control Connection zum Server (TCP-Port 21)
    • Client teilt Server TCP-Port mit, der für Data Connection benutzt werden kann (FTP-Kommando PORT)
    • Server initiiert Data Connection zum Client
    • Verbindungsaufbau zum Client wird durch filter-Regeln unterbunden
    • Lösung:
      • Kernel-Module ip_conntrack_ftp analysiert PORT -Kommando und kennzeichnet die entsprechende IP-Connection in /proc/net/ip_conntrack als RELATED
      • filter-Regeln lassen den Verbindungsaufbau zu
      • Laden des Moduls
        • modprobe ip_conntrack_ftp
        • Eintrag in /etc/sysconfig/iptables-config

Web-Server

  • Default-Policy: was nicht nicht explizit erlaubt ist, ist verboten
  • Dienste http/https (TCP-Ports 80/443)
  • Gateway zu whois (TCP-Port 43) und finger (TCP-Port 79)
  • keine Einschränkungen innerhalb des Campusnetzes
  • Besonderheit: abgehender Verkehr ist eingeschränkt

# cat /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#
-N LOGREJECT
-A LOGREJECT -j LOG --log-level info  --log-prefix "iptables REJECT:"
-A LOGREJECT -p tcp -j REJECT --reject-with tcp-reset
-A LOGREJECT -j REJECT --reject-with icmp-port-unreachable
#
-N CLEANCHECK
-A CLEANCHECK -m state --state RELATED,ESTABLISHED -j ACCEPT
-A CLEANCHECK -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
-A CLEANCHECK -p tcp ! --syn -m state --state NEW -j REJECT --reject-with tcp-reset
#
-A INPUT -j CLEANCHECK
-A INPUT -s 134.109.0.0/16 -p icmp -j ACCEPT
-A INPUT -s 134.109.0.0/16 -p tcp -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type port-unreachable -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j LOGREJECT
#
#
-A OUTPUT -j CLEANCHECK
-A OUTPUT -p tcp --tcp-flags RST RST -m multiport --sports 80,443 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 134.109.0.0/16 -p udp -j ACCEPT
-A OUTPUT -d 134.109.0.0/16 -p tcp -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 43,79 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -j LOGREJECT
COMMIT

Literatur und Verweise

Bücher

Barth, Wolfgang
Das Firewall-Buch
Grundlagen, Aufbau und Betrieb sicherer Netzwerke mit Linux
ISBN 3-89990-128-2
Nicolaus Millin Verlag GmbH, 2004

Cheswick, W.R.; Bellovin, S.M.; Rubin, A.D.
Firewalls und Sicherheit im Internet
Schutz vor cleveren Hackern
ISBN 3-8273-2117-4
Addison-Wesley Verlag, 2004

Links

http://de.wikipedia.org/wiki/Netfilter/iptables - gute deutsche Zusammenfassung bei Wikipedia

http://www.pro-linux.de/t_netzwerk/print/iptables.html - deutsches Tutorial

http://iptables-tutorial.frozentux.net/ - umfangreiches Tutorial

http://www.kalamazoolinux.org/presentations/20010417/conntrack.html - Connection Tracking

http://www.netfilter.org/ - Homepage von netfilter/iptables

  • Ki generiertes Bild

    Offen für Argumente geht in die zweite Runde

    Online-Debattenformat der Juniorprofessur Soziologie der TU Chemnitz thematisiert am 10. September 2025 die Rolle der Solarenergie im Zuge der Energiewende …

  • Gruppe vieler Menschen

    Let's run #TUCgether!

    Zum Jubiläum des Chemnitzer Firmenlaufs gingen 266 Laufbegeisterte für die TU Chemnitz an den Start …

  • Menschen stehen vor einer Leinwand

    Erfolgreiche Summer School an der TU Chemnitz

    Professur Medienpsychologie und die Hochschulallianz Across begrüßten zur Summer School „How much science is in science fiction?“ medienbegeisterte Nachwuchswissenschaftlerinnen und -wissenschaftler aus neun verschiedenen Ländern …

  • Menschen stehen vor einem Haus

    Als Azubi an die Uni? Ja, klar!

    Kanzler der TU Chemnitz begrüßte neue Auszubildende und gratulierte Absolventinnen und Absolventen zum erfolgreichen Berufsabschluss – TU Chemnitz bildet aktuell in zehn Berufen aus …