[10-6] https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html



Ähnliche Dokumente
IT-Sicherheitsmanagement Teil 10: Implementierung von Firewalls

[4-6]

IT-Security. Teil 4: Implementierung von Firewalls

Architekturen für echte Firewalls I. (C) ist eine typische Architektur mit einer Bastion (D) Hat eine Mini-DMZ, die aus einem Crossover-Kabel (A)

Firewalling. Michael Mayer IAV0608 Seite 1 von 6

Firewall Implementierung unter Mac OS X

Grundlagen Firewall und NAT

IT-Security Teil 10: Echte Firewalls mit NAT

Firewalls mit Iptables

Intrusion Prevention mit IPTables. Secure Linux Administration Conference, 6. / 7. Dec Dr. Michael Schwartzkopff. iptables_recent, SLAC 2007 / 1

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Netzwerk Teil 2 Linux-Kurs der Unix-AG

Internet Security 2009W Protokoll Firewall

Tutorial -

#!/bin/tcsh. Das Skript wird in der Umgebung der tcsh Shell aufgerufen und ausgeführt.

IPTables und Tripwire

Bridgefirewall eine transparente Lösung. Thomas Röhl 08. April 2005

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Step by Step Webserver unter Windows Server von Christian Bartl

Informationssicherheit Teil 9: (Personal) Firewalls

Collax PPTP-VPN. Howto

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

1 Mit einem Convision Videoserver über DSL oder ISDN Router ins Internet

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

Grundkurs Routing im Internet mit Übungen

IAC-BOX Netzwerkintegration. IAC-BOX Netzwerkintegration IACBOX.COM. Version Deutsch

NAT und Firewalls. Jörn Stuphorn Universität Bielefeld Technische Fakultät

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Urlaubsregel in David

Guide DynDNS und Portforwarding

WLAN Konfiguration. Michael Bukreus Seite 1

Technical Note ewon über DSL & VPN mit einander verbinden

Literatur. ITSec WS 2016/17 - Teil 3/Firewalls I

IT-Security Teil 3: (Personal) Firewalls

Security. Stefan Dahler. 4. Internet Verbindung. 4.1 Einleitung

Netzwerke 3 Praktikum

mit ssh auf Router connecten

Sicherheit unter Linux Workshop

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Konfiguration von Exchange 2000 zum versenden und empfangen von Mails & Lösung des SEND after POP Problems

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

Verwendung des IDS Backup Systems unter Windows 2000

Anbindung des eibport an das Internet

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Enigmail Konfiguration

Web Interface für Anwender

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

How-to: Webserver NAT. Securepoint Security System Version 2007nx

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Praktikum IT-Sicherheit. Firewall

Modul 2: Automatisierung des Posteingangs - Regel- und Abwesenheits-Assistent

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Konfiguration eines DNS-Servers

Grafstat Checkliste Internetbefragung

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Kontrollfragen Firewalltypen

Routing und DHCP-Relayagent

Externe Abfrage von für Benutzer der HSA über Mozilla-Thunderbird

DNS-325/-320 und FXP

FAQ IMAP (Internet Message Access Protocol)

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Einrichtung von VPN-Verbindungen unter Windows NT

OP-LOG

FastViewer Remote Edition 2.X

Virtual Private Network

Outlook 2013

Einrichtung des GfT Leitsystems für GPRS Verbindungen

Firewall-Regeln Vigor2200

Windows 2008R2 Server im Datennetz der LUH

msm net ingenieurbüro meissner kompetent - kreativ - innovativ

Intranet Moodle

ISA Server 2004 Erstellen eines neuen Netzwerkes - Von Marc Grote

CNAME-Record Verknüpfung einer Subdomain mit einer anderen Subdomain. Ein Alias für einen Domainnamen.

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

macs Support Ticket System

==============================!" ==

Firewalling mit iptables Die Netfilter-Architektur. Seminar Betriebssytemadministration SS 2009

Netzwerkeinstellungen unter Mac OS X

Hilfestellung. ALL500VDSL2 Rev.B & ALL02400N. Zugriff aus dem Internet / Portweiterleitung / Fernwartung. Router. Endgeräte. lokales.

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Connectivity Everywhere

Professionelle Seminare im Bereich MS-Office

ICS-Addin. Benutzerhandbuch. Version: 1.0

Security + Firewall. 4.0 PPTP Client Einwahl. 4.1 Szenario

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Anwendungsbeispiele Buchhaltung


Packet Filters - iptables

Zugriffssteuerung - Access Control

Zugriffssteuerung - Access Control

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Artikel Schnittstelle über CSV

Transkript:

Literatur [10-1] Spenneberg, Ralf: Linux-Firewalls mit iptables & Co. Addison-Wesley, 2006 [10-2] Purdy, Gregor: LINUX iptables. Pocket Reference, O'Reilly, 2004 [10-3] Barth, Wolfgang: Das Firewall-Buch. millin, 3. Auflage, 2004 [10-4] Ziegler, Robert: Linux-Firewalls. Markt+Technik, 2.Auflage, 2003 [10-5] http://de.wikipedia.org/wiki/iptables [10-6] https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html [10-7] http://www.selflinux.org/selflinux/html/iptables.html [10-8] http://de.wikibooks.org/wiki/linux-praxisbuch:_linux-firewall_mit_ip- Tables [10-9] https://help.ubuntu.com/community/iptableshowto [10-10] https://wiki.archlinux.org/index.php/simple_stateful_firewall 2

Überblick Das Konzept der iptables Architektur/Bauform einer Personal Firewall Regeln für einige Dienste Starten der Firewall 3 Regelketten (Chains) der Filter-Table Input-Chain: Filter für eingehende Pakete an Prozesse Output-Chain: Filter für ausgehende Pakete von Prozessen Forward-Chain: Filter für Pakete, die durchgeleitet werden 4

Algorithmus Eine Regelkette wird solange durchlaufen bis das Ende erreicht wird oder die erste Bedingung zutrifft (hierbei gibt es Ausnahmen). Eine Ausnahme sind Logging-Aktionen, nach denen weiter gelaufen wird. Bei einem Zutreffen der Bedingung wird eine Aktion durchgeführt. Ist das Ende einer Tabelle erreicht, wird eine allgemeine Regel angewandt: die Policy. Aus diesen Gründen kommt es auf die Reihenfolge der Regeln an. Auch die Performanz wird durch die Reihenfolge bestimmt. Hinweis: Regeln können ähnlich Prozeduren in benannten Gruppen zusammen gefasst werden. Dies dient der besseren Strukturierung. 5 Kommando iptables Verarbeitung der Pakete erfolgt durch drei Tabellen bzw. Module innerhalb des Kernels: Filter-Table (mit den besprochenen Chains) Mangle-Table (Markieren, Verändern von Paketen) NAT-Table (Durchführung von NAT) Die Einträge in den Tabellen werden durch das Kommando iptables gesetzt, geändert und gelöscht. Die Kommandos dazu stehen in einem Shell-File, das möglichst direkt nach dem Start der Netzwerkdienste ausgeführt wird. Im Folgenden wird nur die Filter-Tabelle besprochen. 6

Parameter für Filter-Tabelle I Komplette Chains (INPUT, OUTPUT, FORWARD und eigene): -F Chain Löscht alle Regeln einer Kette -P Chain Policy Legt Policy (ACCEPT oder DROP) fest -L Chain Listet Regeln auf Regeln einer Chain: -A Chain Fügt hinten an 7

Die möglichen Aktionen Aktion kann sein (Beispiele): ACCEPT DROP REJECT LOG Annehmen und Weiterleiten des Pakets Verwerfen Verwerfen und mit ICMP-Fehlermeldung ablehnen Logging, Prüfung geht weiter 9 Zustandsbehaftete Firewall I "-m" oder "--match XYZ" steht für verschiedene Parameter -m state Zustand innerhalb des Protokolls State NEW Erläuterung TCP-Aufbaupaket bzw. 1. UDP-Paket ESTABLISHED Paket einer TCP-Verbindung bzw. Folge-UDP-Paket RELATED INVALID Verwandt: Fehlerpaket zu einer bestehenden Verbindung oder weitere Verbindung (FTP-Modul) Paket kann nirgends zugeordnet werden Diese Verbindungszustände gelten nur dann, wenn genügend Tabellenplatz vorhanden ist. Falls nicht, geht automatisch der Filter in den stateless-zustand! 10

Zustandsbehaftete Firewall III - Varianten Es gibt zwei Varianten, die äquivalent sind: iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Hier wird die ältere, die (fast) immer funktioniert, vorgestellt. 12

Beispiele Erlauben aller TCP-Packete von Außen nach Innen: iptables -A INPUT -p tcp --dport 80 -j ACCEPT Begrenzen von Pings von Außen nach Innen: iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/min --limit-burst 8 -j ACCEPT Ablehnen aller UDP-Pakete von Außen nach Innen: iptables -D INPUT -p udp -j REJECT --reject-with icmp-port-unreachable 13 REJECT oder DROP? DROP führt zu einem kommentarlosen Wegwerfen des untersuchten Pakets. REJECT führt zu einem Wegwerfen und dem Absenden einer ICMP-Fehlermeldung. DROP ist fast immer besser als REJECT, wenn es sich um Pakete von Draußen handelt. REJECT ist fast immer besser als DROP, wenn es sich um Pakete vom LAN oder von Drinnen handelt. 14

Weitere Kommandos I iptables -L [Chain] listet die aktuelle Situation auf, wobei ein besonderes Format benutzt wird iptables-save gibt die aktuelle Situation in einem (fast) iptables-konformen Format aus iptables-restore benutzt das iptables-save-format und definiert damit die neuen Regeln. 15 Weitere Kommandos II - iptables L-Output I Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere LOG all -- loopback/8 anywhere LOG... LOG all -- anywhere loopback/8 LOG... DROP all -- loopback/8 anywhere DROP all -- anywhere loopback/8 LOG all -- anywhere anywhere LOG... DROP all -- anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination TCPMSS tcp -- anywhere anywhere tcp flags:syn,rst/syn TCPMSS.. 16

Weitere Kommandos III - iptables -L-Output II Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere LOG icmp -- anywhere anywhere icmp time-exceeded LOG... ACCEPT icmp -- anywhere anywhere cmp time-exceeded ACCEPT icmp -- anywhere anywhere cmp port-unreachable ACCEPT icmp -- anywhere anywhere cmp fragmentation-needed ACCEPT icmp -- anywhere anywhere cmp network-prohibited ACCEPT icmp -- anywhere anywhere icmp host-prohibited ACCEPT icmp -- anywhere anywhere icmp communication-prohibited DROP icmp -- anywhere anywhere icmp destination-unreachable ACCEPT all -- anywhere anywhere state NEW,RELATED,ESTABLISHED LOG all -- anywhere anywhere LOG... Chain reject_func (3 references) target prot opt source destination REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable 17 Weitere Kommandos IV - iptables-save (Auszug) -A INPUT -i lo -j ACCEPT -A INPUT -s 127.0.0.0/255.0.0.0 -j LOG... -A INPUT -d 127.0.0.0/255.0.0.0 -j LOG... -A INPUT -s 127.0.0.0/255.0.0.0 -j DROP -A INPUT -d 127.0.0.0/255.0.0.0 -j DROP -A INPUT -j LOG... -A INPUT -j DROP -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 11 -j LOG... -A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3/3 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3/9 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3/10 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3/13 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 3 -j DROP -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -j LOG --log-prefix "SuSE-FW-OUTPUT-ERROR " --log-tcp-options --log-ip-options 18

Script zur Firewall-Definition I Es wird Schritt für Schritt ein Shell-Skript zur eigenen Benutzung einer Personal Firewall aufgebaut und erklärt. Das Sicherheitsniveau ist hierbei höher als bei einer "normalen" Personal Firewall. Aus Gründen der Vereinfachung wird angenommen, dass durch Ausführen dieses Scripts die gesamte Firewall definiert wird, d.h. bestimmte Phasen des Bootens werden nicht berücksichtigt. Für diese Fälle muss das Script in einzelne Teile aufgeteilt, gesondert angepasst und schrittweise ausgeführt werden. Wenn der bash benutzt wird müssen die! durch \! ersetzt werden, da der! für den Zugriff auf die Kommando-History benutzt wird. 19 Script zur Firewall-Definition II Annahmen für das Weitere: eth0: Ethernet-Schnittstelle nach außen Bei DSL und damit PPPoE muss es stattdessen ppp0 heißen Die Prozesse lesen und schreiben auf eth0 LINUX Kernel ab 2.4 20

Script zur Firewall-Definition III Wenn die Adressen vertrauenswürdiger Server bekannt sind, so sollte der Zugriff nur auf diese beschränkt werden. Konkret auf folgende Server: DHCP-Server HTTP-Proxy-Server DNS-Server NTP-Server Ein Problem besteht natürlich, wenn diese Server nicht laufen und deren Funktion durch andere ersetzt werden. Dann geht nichts mehr ("ausgesperrt"). 21 Script zur Firewall-Definition IV Abschnitte des Scripts (A) Setzen der Kernel-Parameter (B) Löschen alter Regeln (C) Policies definieren (D) Behandeln schräger Scanns (E) Dynamische Regeln (F) Unsinniges von Draußen filtern (G) Behandlung einzelner Dienste (H) ICMP (I) Logging von unerwünschten Paketen Im folgenden werden Auszüge aus einem Skript vorgestellt. Anhand dessen können die fehlenden Teil leicht ergänzt werden. 22

Script zur Firewall-Definition V Damit das Skript universeller wird, werden verschiedene Parameter in Shell-Variablen gelegt, die nun erklärt werden: OUTER="eth0" OUTERNET="172.22.0.0" OUTERNET_BROADCAST="172.22.255.255" LOOPBACK="127.0.0.0/8" LOOP_INT="lo" NAMESERVER="172.22.x.x" SMTPSERVER="172.22.x.x" POPSERVER="172.22.x.x" IMAPSERVER="172.22.x.x" TIMESERVER="172.22.x.x" CLASS_A="10.0.0.0/8" CLASS_B="172.16.0.0/12" CLASS_C="196.168.0.0/16" CLASS_D="224.0.0.0/4" CLASS_E="240.0.0.0/5" Schnittstelle nach Außen Netz über eth0 Lokale Schnittstelle bzw. Netz ISP- oder lokaler Server Lokale Adressräume und Sonderadressen 23 Konfigurieren der Kernelparameter I Abschnitt (A) (1) # Alle eingehende Pings ignorieren # echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all (2) # Pings an Broadcast-Adressen ignorieren echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts (4) # TCP-SYN Cookies einschalten echo 1 >/proc/sys/net/ipv4/tcp_syncookies Hierbei ist die Entscheidung zu treffen, ob ein anderes System das eigene "anpingen" können darf oder nicht. 24

Konfigurieren der Kernelparameter II Das Setzen von Kernelparametern erfolgt über das /proc- Dateisystem. Das /proc-dateisystem beruht auf einem ähnlichen Verfahren wie die Geräte-Dateien (/dev): Interne Tabellen werden über die Dateisystemschnittstelle (open, read, write, close) verfügbar gemacht. Das bedeutet auch, dass das Aktivieren einer Firewall nur mit root-rechten möglich ist. Zu (1): einige ISPs benutzen Ping zu Diagnose-Zwecken sowie als Teil von DHCP Zu (4): Dies soll gegen SYN-Flooding schützen 25 Konfigurieren der Kernelparameter III Für IPv4 liegen die Werte in /proc/sys/net/ipv4 Listen eines Wertes: cat /proc/sys/net/ipv4/parameter Setzen der Werte echo "X" > cat /proc/sys/net/ipv4/parameter wobei X für das Einschalten 1 ist für das Ausschalten 0 ist bzw. der gewünschte Wert ist Nach jedem Booten brauchen die Variablen nur einmal gesetzt zu werden. Permanentes Setzen erfolgt per grub, dem die Parameter übergeben werden; dies wird per Yast2 über die Konfiguration des Bootladers konfiguriert bzw. in grub.conf geschrieben. 26

Konfigurieren der Kernelparameter IV (Auszug) Alle Dateinamen relativ zu /proc/sys/net/ipv4: Name Bedeutung ip_forward Bei FORWARD-Regeln Einschalten (1) conf/*/rp_filter Anti-Spoof-Filter: Einschalten (1) tcp_syncookies SYN-Flooding-Test: Einschalten (1) icmp_echo_ignore_all Kein ping mehr: Einschalten (1) icmp_echo_ignore_broadcasts Ping-Räusche verhindern: Einschalten (1) icmp_ignore_bogus_error_responses Schmutzbeseitigung: Einschalten (1) accept_redirects Abschalten (0) accept_source_route Abschalten (0) boot_relay Abschalten (0) log_martians Bei unklaren Paketen: Einschalten (1) mc_forwarding Nur bei Multicast: Einschalten 27

Behandeln von Stealth-Scanns Abschnitt (D) # Alle Bits gelöscht iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # SYN und FIN iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN und RST iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # FIN und RST iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP # FIN ohne ACK, Xmas-Scann iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP # PSH ohne ACK iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP # URG ohne ACK iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP 30

Bemerkungen "... -p tcp --tcp-flags SYN,FIN SYN,FIN..." bedeutet, dass die TCP-Flags SYN,FIN (erster Eintrag) betrachtet werden und dass die Flags SYN,FIN (zweiter Eintrag) An sein sollen, damit die Regel zutrifft. Hier werden die bekannten Portscanns gestört, da die beschränkende Bedingung von "-i $OUTER" fehlt, gilt dies für alle Schnittstellen. 31 Dynamische Regeln I Abschnitt (E) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID..." iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "INVALID..." iptables -A OUTPUT -m state --state INVALID -j DROP Es werden alle aufgebauten Verbindungen aller Protokolle an allen Schnittstellen ohne weitere Prüfung erlaubt Alles mit unklaren Verbindungsstatus wird verworfen Logging mit speziellem Präfix Das sind die "Durchzugsregeln" für den eigentlichen Datentransport. 32

Dynamische Regeln II Dies hier betrifft den Unterschied zwischen stateless und statefull Filtern. Regeln mit "-m state --state" o.ä. setzen das Verfolgen von Verbindungen samt den Kontext voraus. Im Kernel wird für jede Verbindung der Zustand in einer Tabelle vermerkt. Diese Überwachung benötigt dynamisch so viele Einträge, wie Verbindungen aufgebaut werden. Dies führt zu einem Löschen bzw. Überschreiben alter Einträge, wenn die interne Tabelle voll ist. Dies wiederum führt zu einem Vergessen des Zustands. Daher sollten nach den dynamischen Regeln statische als "Fall back" folgen; in dem Beispiel kommen diese bei den einzelnen Protokollen. 33 Unsinniges von Draußen Abschnitt (F) Das muss entsprechend dem benutzten Netz # Private Adressen von Draußen und Loopback angepasst werden. iptables -A INPUT -i $OUTER -s $CLASS_A -j DROP iptables -A INPUT -i $OUTER -s $CLASS_B -j DROP iptables -A INPUT -i $OUTER -s $CLASS_C -j DROP iptables -A INPUT -i $OUTER -s $LOOPBACK -j DROP # Broadcasts behandeln iptables -A INPUT -i $OUTER -s $OUTERNET_BROADCAST -j LOG iptables -A INPUT -i $OUTER -s $OUTERNET_BROADCAST -j DROP # iptables -A INPUT -i $OUTER -d $OUTERNET_BROADCAST -j LOG # iptables -A INPUT -i $OUTER -d $OUTERNET_BROADCAST -j DROP Aber (Achtung): Mit der letzten Zeile werden alle Broadcasts an die eigene Maschine verworfen, was vielleicht nicht immer gewollt ist. 34

Behandlung einzelner Dienste Abschnitt (G) Nun wird Dienst für Dienst behandelt. Wer einen bestimmten Dienst nicht hat bzw. ihn nur lokal auf seiner Maschine benutzen will, lässt die Angabe von Regeln weg, was DROP bedeutet. Dies gilt für den Zugriff von außen, aber auch für den von innen. Wem DROP für die eigene Benutzung von Diensten zu destruktiv erscheint, baut eine eigene Regel mit "-A OUTPUT -o $OUTER" und "-j REJECT" ein. Dann erhält ein Client, der einen nicht erlaubten Dienst benutzen will, ein ICMP-Fehlerpaket. 35 DNS Tabelle (aus letzter Einheit) Nr Außen Richtung Innen Außen-Innen (1) *:UDP:53 <- *:UDP:open Server-Client (2) *:TCP:53 <- *:TCP:open Server-Client (3) *:UDP:53 <-> *:UDP:53 Server-Server (4) *:TCP:53 <-> *:TCP:53 Server-Server (5) *:UDP:open -> *:UDP:53 Client-Server (6) *:TCP:open -> *:TCP:53 Client-Server IP-Adresse Außen Port Initiale Richtung IP-Adresse Innen Port Rollen Kürzel Erläuterung Kürzel Erläuterung Open 1024:65535 * Beliebige sinnvolle Adresse UDP Protokoll TCP Protokoll 36

Umsetzung in iptables-regeln I Nr Außen Richtung Innen Außen-Innen (1) *:UDP:53 <- *:UDP:open Server-Client iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT --dport 53 -m state --state NEW -j ACCEPT iptables -A INPUT -i $OUTER -p udp --sport 53 --dport $OPEN_PORT -j ACCEPT Das ganze noch einmal für die Gegenrichtung 37 Umsetzung in iptables-regeln II Zustandsbehaftet Zustandslos iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT --dport 53 -j ACCEPT Fallback iptables -A INPUT -i $OUTER -p udp --sport 53 --dport $OPEN_PORT -j ACCEPT Interpretationsreihenfolge 38

Hinweise zum Fallback (UDP-Version) Zustandsbehafteter Modus iptables -A OUTPUT -o $OUTER -p udp --dport XYZ -m state --state NEW -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Zustandsloser Modus iptables -A OUTPUT -o $OUTER -p udp --dport XYZ -j ACCEPT iptables -A INPUT -i $OUTER -p udp --sport XYZ -j ACCEPT 39

Umsetzung in iptables-regeln III # Einfache Client-Anfragen Zeile (1) iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT --dport 53 -j ACCEPT iptables -A INPUT -i $OUTER -p udp --sport 53 --dport $OPEN_PORT -j ACCEPT # Das Ganze noch einmal für TCP Zeile (2) iptables -A OUTPUT -o $OUTER -p tcp --sport $OPEN_PORT --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -o $OUTER -p tcp --sport $OPEN_PORT --dport 53 -j ACCEPT iptables -A INPUT -i $OUTER -p tcp! --syn --sport 53 --dport $OPEN_PORT -j ACCEPT Für TCP muss der Aufbau von Außen verhindert werden, trotzdem muss der Rückfluss erfolgen können Für UDP ist "! --syn" nicht erforderlich 41 Hinweise zum Fallback (TCP-Version) Zustandsbehafteter Modus iptables -A OUTPUT -o $OUTER -p tcp --dport XYZ -m state --state NEW -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Zustandsloser Modus iptables -A OUTPUT -o $OUTER -p tcp --dport XYZ -j ACCEPT iptables -A INPUT -i $OUTER -p tcp! --syn --sport XYZ -j ACCEPT 42

Umsetzung in iptables-regeln IV Nr Außen Richtung Innen Außen-Innen (1) $NAMESERVER:UDP:53 <- *:UDP:open Server-Client Hier findet nun eine Beschränkung auf einen bestimmten DNS-Server statt. Wenn mehrere DNS-Server erlaubt sein sollen, dann muss eine Liste von DNS-Server-Adressen in einer For-Schleife abgearbeitet werden. 43 Umsetzung in iptables-regeln V # Einfache Client-Anfragen iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT -d $NAMESERVER --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -o $OUTER -p udp --sport $OPEN_PORT -d $NAMESERVER --dport 53 -j ACCEPT iptables -A INPUT -i $OUTER -p udp -s $NAMESERVER --sport 53 --dport $OPEN_PORT -j ACCEPT Fall Back # Das Ganze noch einmal für TCP iptables -A OUTPUT -o $OUTER -p tcp --sport $OPEN_PORT -d $NAMESERVER --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -o $OUTER -p tcp --sport $OPEN_PORT -d $NAMESERVER --dport 53 -j ACCEPT iptables -A INPUT -i $OUTER -p tcp! --syn -s $NAMESERVER --sport 53 --dport $OPEN_PORT -j ACCEPT 44

Netzwerkzeit NTP Nr Außen Richtung Innen Außen-Innen (1) *:UDP:123 <- *:UDP:open Server-Client Hier wurde die Funktion der Kommunikation der Server untereinander weggelassen, d.h. auf unserem HOST gibt es keinen TIME-Server. TIME (Veraltet) Nr Außen Richtung Innen Außen-Innen (1) *:UDP:37 <- *:UDP:open Server-Client (2) *:TCP:37 <- *:TCP:open Server-Client 45 Mail SMTP Nr Außen Richtung Innen Außen-Innen (1) *:TCP:25 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:25 Client-Server POP Nr Außen Richtung Innen Außen-Innen (1) *:TCP:110 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:110 Client-Server IMAP Nr Außen Richtung Innen Außen-Innen (1) *:TCP:143 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:143 Client-Server Die Fälle 2 treffen nur dann zu, wenn ein eigener Server, der von außen erreichbar sein soll, vorhanden ist. 46

Interaktivität I Telnet Nr Außen Richtung Innen Außen-Innen (1) *:TCP:23 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:23 Client-Server SSH Nr Außen Richtung Innen Außen-Innen (1) *:TCP:22 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:22 Client-Server (3) *:TCP:22 <- *:TCP:513:1024 Server-Client (4) *:TCP:513:1024 -> *:TCP:22 Client-Server Die Fälle 2 und 4 treffen nur dann zu, wenn ein eigener Server, der von außen erreichbar sein soll, vorhanden ist. Für SSH gibt es zwei Varianten, die einmal mit den nicht- privilegierten und einmal mit den privilegierten Ports arbeiten. 47 Interaktivität II Bei den "interaktiven" Diensten muss ein Fall Back in den zustandslosen Betrieb vorhanden sein, denn die Antwortzeiten (durch den Menschen) können so lang sein, dass der Kernel die entsprechenden Tabelleneinträge löscht. 48

FTP Das besondere Protokoll Nr Außen Richtung Innen Außen-Innen Modus (1) *:TCP:21 <- *:TCP:open Server-Client (2) *:TCP:20 -> *:TCP:open Server-Client aktiv (3) *:TCP:open <- *:TCP:open Server-Client passiv Über Port 21 wird der Kontrollkanal aufgebaut. Der Fall (2) behandelt den aktiven Modus, bei dem der Server Datenverbindungen zum Client (von Außen!) aufbaut. Der Fall (3) behandelt den passiven Modus, bei der Client sämtliche Verbindungen aufbaut. Zum Betrieb von FTP sind besondere Module notwendig, die per RELATED die betroffenen Datenkanäle behandeln. Ohne diese Module bzw. zustandslos öffnet FTP sehr stark die Firewall. 49 Das Web HTTP Nr Außen Richtung Innen Außen-Innen (1) *:TCP:80 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:80 Client-Server HTTPS Nr Außen Richtung Innen Außen-Innen (1) *:TCP:443 <- *:TCP:open Server-Client (2) *:TCP:open -> *:TCP:443 Client-Server Die Fälle 2 treffen nur dann zu, wenn ein eigener Server, der von außen erreichbar sein soll, vorhanden ist. 50

Traceroute als Sonderfall Selbst traceroute aufrufen Nr Außen Richtung Innen Kommentar (1) *:UDP:33434-33523 <- *:UDP:32769-65535 Senden (2) *:ICMP:3 -> - Time exceeded (3) *:ICMP:11 -> - Destination unreachable Vom fremden traceroute bearbeitet werden Nr Außen Richtung Innen Kommentar (1) *:UDP:32769-65535 -> *:UDP:33434-33523 Empfang (2) - <- *:ICMP:3 Time exceeded (3) - <- *:ICMP:11 Destination unreachable 51 ICMP Abschnitt (H) "Time exceeded", "Parameter Error" und "Destination unreachable" sollten von Außen immer erlaubt werden. Wenn fremdes Traceroute erlaubt werden soll: "Time exceeded" und "Destination unreachable" von Innen nach Außen. Je nach Entscheidung bezüglich pings: Von Innen nach Außen: eigene pings Von Außen nach Innen: fremde pings, Kernel-Parameter ändern In jedem Fall: "Parameter Error" von Innen nach Außen und alle fragementierten ICMP verwerfen. 52

ICMP II - Auszug #--Fragmentierte Pakete auf allen Schnittstellen iptables -A INPUT --fragment -p icmp -j LOG --log-prefix "Fragmented ICMP: " iptables -A INPUT --fragment -p icmp -j DROP #--Parameter-Problem iptables -A INPUT -i $OUTER -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A OUTPUT -o $OUTER -p icmp --icmp-type parameter-problem -j ACCEPT #--destination unreachable samt den Untertypen iptables -A INPUT -i $OUTER -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A OUTPUT -o $OUTER -p icmp --icmp-type destination-unreachable -j DROP #--dieser Typ muss leider hinaus gehen, sonst gehen andere Sachen nicht iptables -A OUTPUT -o $OUTER -p icmp --icmp-type fragmentation-needed -j ACCEPT 53 Logging I Abschnitt (I) #--Logging der abgewiesenen empfangenen ICMP-Pakete iptables -A INPUT -i $OUTER -p icmp --icmp-type! 8 -j LOG --log-prefix "Dropped Received ICMP: " #--Logging der abgewiesenen UDP-Pakete iptables -A INPUT -i $OUTER -p udp -j LOG --log-prefix "Dropped Received UDP: " #--Logging der abgewiesenen TCP-Pakete iptables -A INPUT -i $OUTER -p tcp -j LOG --log-prefix "Dropped Received TCP: " #--Logging der abgewiesenen gesendeten Pakete iptables -A OUTPUT -o $OUTER -p tcp -j LOG --log-prefix "Dropped Send Packet: " 54

Logging II Aber: Viel ist nicht unbedingt besser als wenig. Aber immer: Die Logfiles analysieren! Ausprobieren, welchen Umfang das Logging haben soll. Dazu kommt noch die Frage nach dem Einsatz von IDS, z. B. snort, die ja auch eine Menge Logging-Möglichkeiten haben. In jedem Falle: Ein einheitliches, einfach zu analysierendes Logfile-Format benutzen. Dieses Format muss auch zu den Auswertewerkzeugen passen, z.b. logsurfer. 55 Nun wieder etwas entspannen... Einsam auf weiter Flur... 56