19.04.2023

Linux Firewall

IPTables / IP6Tables
NFTables
Debian Firewall einrichten
UFW (Uncomplicated Firewall)
sonstiges

Navigation
Firewall Grundlagen
Firewall Regeln
einfaches Firewallscript
Firewallscript mit FTP, HTTP, SSH, DNS
Neue Kette (Chain) erstellen
Logging
Firewall Kernelmodule für 2.4.x / 2.6.x
sonstiges

Links
IPTABLES HOWTO
WikiBooks IPTABLES
Iptables
LinuxUser Feines Sieb
Bannen mit iptables
IP-Adresse nach Herkunft filtern mit iptables

 

Seitenanfang

Firewall Grundlagen

Pakete werden von jeder eingebauten Kette unter Verwendung der folgenden Tabellen verarbeitet.

- In Tabellen werden Filterregeln zu Gruppen zusammengefasst.

Tabellen von iptables
Tabelle Beschreibung
filter Standardtabelle, alle "reinen" Filterregeln
nat Regel für Adressumsetzung (Network Address Translation) spezielle Weiterleitungen (Port Forwarding)
mangle Regel bei gewünschter Paketmanipulationen
raw Regel eingesetzt um Ausnahmen vom Connection Tracking zu definieren
security Regeln für Mandatory Access Control (MAC), wird unter anderem von SELinux implementiert

- Jede Tabelle enthält verschiedene Chains. Chains enthalten die eigentlichen Firewall Regeln, sie legen fest, wann ein Paket geprüft wird.

Chains (Ketten) von iptables
Chain für Tabelle Beschreibung
INPUT filter, mangle, security Pakete, für einen lokalen Prozess
OUTPUT filter, nat, mangle, raw, security Pakete, von einem lokalen Prozess
FORWARD filter, mangle, security Pakete, die nur weitergeleitet (geroutet) werden
PREROUTING nat, mangle, raw Pakete, bevor diese geroutet werden
POSTROUTING nat, mangle Pakete, nachdem diese geroutet würden

 

Aktionen, die auf ein Paket angewendet werden
Aktion Beschreibung
ACCEPT Paket wird akzeptiert und angenommen
DROP Paket wird verworfen, der Sender erhält keine Nachricht
REJECT Paket wird verworfen, der Sender wird benachrichtigt, bei IPv6 mit einer ICMPv6 Nachricht
QUEUE, NFQUEUE Paket passiert den Userspace (falls vom Kernel unterstützt)
RETURN Durchlaufen dieser Kette wird beendet und mit der nächsten Regel der vorherigen (aufrufenden) Kette fortgefahren wird
LOG Paketdaten werden im System-Log festgehalten
SNAT (Source-NAT) ändert die Quelladresse des Paketes und wird nur in der POSTROUTING Kette verwendet. (nur nat Tabelle)
MASQUERADE Ersetzt die Quelladresse des Pakets, durch die IP-Adresse der Schnittstelle, auf dem es den aktuellen Host Rechner verlässt
DNAT (Destination-NAT) ändert die Zieladresse des Paketes und wird nur in der PREROUTING Kette verwendet.
REDIRECT ändert die Zieladresse oder ZielPort des Paketes
TOS Feld Traffic Class im IPv6 Header wird mit einem zu definierenden Wert überschrieben. Darf nur in der Tabelle mangle verwendet werden, da das Paket verändert wird.

 

MASQUERADE ist das selbe wie SNAT aber für dynamisch vergebene IP (dialup) Verbindungen. (nur nat Tabelle)

--to-ports Port[-Port]

DNAT ändert die Zieladresse des Pakets und wird in den PREROUTING und OUTPUT, sowie benutzerdefinierten Ketten die nur von solchen aufgerufen wurden, verwendet. (nur nat Tabelle)

--to-destination ipaddr[-ipaddr][:Port-Port]

REDIRECT ändert den Ziel Port, um z.B. ein Paket über einen Proxy zu senden.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
Seitenanfang

Firewall Regeln

Die grundlegenden Parameter:

iptables - IPv4 Filterregeln erstellen/ändern/löschen.
ip6tables - IPv6 Filterregeln erstellen/ändern/löschen.
arptables - Filter von ARP Paketen
ebtables - Filter für Ethernet-Bridging Pakete

Die allgemeine Syntax der iptables oder ip6tables Befehle ist:

iptables Befehl Regelspezifikation Erweiterungen
oder
ip6tables Befehl Regelspezifikation Erweiterungen
Befehl Beschreibung
Anzeigen
iptables -L -vn Regeln der Standard Kette (Chain) filter anzeigen, -n Nummerische Ausgabe der IP-Adressen und Ports, -v ausführliche Ausgabe
iptables -L -t nat Regeln der Kette nat anzeigen
iptables -L -t mangle Regeln der Kette mangle anzeigen
iptables -L -t raw Regeln der Kette raw anzeigen
iptables -L -t security Regeln der Kette security anzeigen
iptables -L -n --line-numbers Nummern der Regel anzeigen
Löschen
iptables -F alle Regeln löschen (flush)
iptables -D INPUT -s <IP-ADRESSE> -j DROP Regel löschen, Angabe der definierten Regel
iptables -D INPUT <LINE-NUMBER> Regel löschen, Angabe der Zeilennummer der zu löschenden Regel
Erstellen
iptables -A INPUT -s <IP-ADRESSE> -j DROP Regel erstellen, an Kette anfügen
iptables -I INPUT 1 -s <IP-ADRESSE> -j DROP Regel einfügen/bearbeiten, Regel mit der Nummmer 1 ändern
Bearbeiten
iptables -R INPUT -s <IP-ADRESSE> -j DROP Regel ersetzen, überschreiben
iptables -[Kommando] [KETTE] [-t Tabelle] [Parameter] [-Optionen] -j [Aktion]
Parameter Beschreibung
-t Tabelle verwendete Tabelle (FILTER, NAT, MANGLE, SECURITY)
-p Protokoll TCP, UDP, ICMP oder All
-s Quelladresse[Maske]  
--sport Port[:Port] Quellport, falls -p TCP oder UDP ist
-d Zieladresse[Maske]  
--dport Port[:Port] Zielport, falls -p TCP oder UDP ist
-j Aktion ACCEPT, DROP, REJECT, LOG, u.a.
-i in-interface-name für INPUT, FORWARD, PREROUTING
-o out-interface-name für FORWARD, OUTPUT, POSTROUTING
-m state --state ESTABLISHED auf bestehende Verbindungen aufsetzen

Kommandos von iptables:
-A: fügt eine Regel am Ende einer Kette an.
-C: Check
-D: löscht eine Regel in einer Kette, entweder über deren Nummer oder Regel angeben
-I: fügt eine neue Regel in einer bestimmten Position in einer Kette ein
-R: ersetzt eine bestimmte Regel in einer Kette
-L: listet die Regeln einer Kette auf.
-S: Ausgabe der Regeln der ausgewählten Kette
-F: entfernt alle Regeln in einer Kette
-Z: löscht die Byte- und Paketzähler, die die Kette durchlaufen haben
-N: erstellt eine neue Kette
-X: entfernt einer selbst erstellten Kette
-P: ändert die Standardregel einer Kette (Policy)
-E: umbenennen einer selbst erstellten Kette

Zum Ändern einer Kette:

Schalter  
--sport Source Port
--dport Destination Port
--sport 1024: ab Port 1024 und alle höheren
--dport 1024:2800 alle Ports von 1024 bis 2800
-s 192.168.1.0/24 Netzwerk Range von 192.168.1.0 - 192.168.1.255
   
Schalter ICPM  
--icmp-type echo-request Echo Anforderung
--icmp-type echo-reply Echo Antwort
--icmp-type time-exceeded Zeitübertschreitung
--icmp-type parameter-problem Parameterfehler im Datagramm
--icmp-type network-unreachable Netzwerk nicht erreichbar
--icmp-type host-unreachable Host nicht erreichbar
--icmp-type protocol-unreachable Protokoll nicht erreichbar
--icmp-type port-unreachable Port nicht erreichbar

Portbezeichnungen kann man in /etc/services nachsehen
Protokollbezeichnungen stehen in der /etc/protocols

IP-Masquerading
- im LAN einen Rechner mittels NAT zum Router einrichten.

apt-get install ipmasq
# Forwarding aktivieren
echo 1 >> /proc/sys/net/ipv4/ip_forward
# Masquerading aktivieren
modprobe ipt_MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE

Die Regel besagt, daß alle Pakete, die zum Interface ppp0 gehen (-o ppp0) und aus dem lokalen Netzwerk kommen (-s 192.168.0.0/16) maskiert werden (-j MASQUERADE).

- Tabelle erstellen

iptables -N Chain1

- selbst erstellte Tabelle umbenennen

iptables -E Chain1 Chain2

- selbst erstellte Tabelle löschen

iptables -X Chain2

- ankommende Pakete auf dem Zielport 22, 80, 443 zulassen

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

Netfilter einrichten

1. Module laden.
ip_tables
iptable_filter
ip_conntrack
iptable_nat
ipt_state
ipt_unclean
ipt_REJECT
ipt_LOG
iptable_mangle
2. alte bestehende Regeln löschen.
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
# Option -F (flush) löscht bestehende Regeln, -L zeigt Regeln an
3. Default Policy festlegen. (alle Verbindungen für die keine Regel existiert werden verworfen)
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
iptables -t nat -P PREROUTING DROP
iptables -t nat -P POSTROUTING DROP
iptables -t nat -P OUTPUT DROP
iptables -t mangle -P PREROUTING DROP
iptables -t mangle -P INPUT DROP
iptables -t mangle -P FORWARD DROP
iptables -t mangle -P OUTPUT DROP
iptables -t mangle -P POSTROUTING DROP
# Nur für den FILTER ohne NAT und MANGLE reicht auch:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Das sind die Pakete für die keine Regel erstellt wurde, in diesem Beispiel werden alle Pakete durchgelassen (ACCEPT),wenn die Pakete verworfen werden sollen DROP setzen (ist sicherer).
4. ungewöhnliche / defekte Pakete verwerfen.
iptables -A FORWARD -m unclean -j DROP
iptables -A INPUT -m unclean -j DROP
5. Pakete aus I-Net mit privaten (gefälschten) Absenderadressen verwerfen
iptables -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
# Option -i Interface (ppp0 für Modem) -s Source (Quelle der Pakete) -j Jump und DROP verwerfen
6. Loopback Device Zugriff erlauben
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A OUTPUT -o lo -j ACCEPT
-i Input Interface
-o Output Interface
7. Protokollierung einschalten
iptables -t filter -A INPUT -j LOG
iptables -t filter -A FORWARD -j LOG
iptables -t filter -A OUTPUT -j LOG
iptables -t nat -A PREROUTING -j LOG
iptables -t nat -A POSTROUTING -j LOG
iptables -t nat -A OUTPUT -j LOG
iptables -t mangle -A PREROUTING -j LOG
iptables -t mangle -A INPUT -j LOG
iptables -t mangle -A FORWARD -j LOG
iptables -t mangle -A OUTPUT -j LOG
iptables -t mangle -A POSTROUTING -j LOG
8. DNS Anfragen durchlassen
iptables -A OUTPUT -p udp --sport 1024: --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024: -j ACCEPT
iptables -A INPUT -p tcp --sport 53 --dport 1024: -j ACCEPT
# man kann auch den DNS Server der abgefragt wird expliziet angeben, so erreicht man autorisierte Abfragen.
ns1=193.162.1.42
iptables -A INPUT -p udp -s $ns1 --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -s $ns1 --sport 53 -j ACCEPT
# je nachdem wo der Aufruf im Firewallscript steht, werden die bis dahin nicht durch eine Regel abgearbeiteten Packete im Syslog Protokolliert.
9. PING Anfragen beantworten und selbst PING Antworten entgegennehmen.
iptables -A INPUT -i ppp0 -p ICMP --icmp-type ping -j ACCEPT
# Echo Replay (-p icmp --icmp-type echo-reply) für eine Adresse (-s 172.16.5.30) ignorieren
iptables -A INPUT -s 172.16.5.30 -p icmp --icmp-type echo-reply -j DROP
# Echo Request (--icmp-type echo-request) für alle Adressen
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Echo Replay (-p icmp --icmp-type echo-reply) für alle Adresse
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
# alle anderen ICMP Meldungen für alle Adresse
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
10. Forwarding für bestimmt Ports blockieren
# NetBIOS, SMB, SQL Server, NFS, X11
BAD_TCP="135:139 445 1433 2049 5999:6063"
BAD_UDP="135:139 445 1433 2049 5999:6063"
# bad ports -- nicht weiterleiten (teilweise redundant)
for i in $BAD_TCP; do
iptables -A FORWARD -p tcp --dport $i -j DROP
iptables -A FORWARD -p tcp --sport $i -j DROP
done
for i in $BAD_UDP; do
iptables -A FORWARD -p udp --dport $i -j DROP
iptables -A FORWARD -p udp --sport $i -j DROP
done
11. FTP Sitzung
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
12. NetBIOS Verbindungen blockieren
iptables -A INPUT -p udp --dport netbios-ns -j DROP
iptables -A INPUT -p udp --dport netbios-dgm -j DROP
iptables -A INPUT -p tcp --dport netbios-ssn -j DROP
13. SSH Verbindung
# eine SSH Verbindung ist nur vom der IP 12.100.100.0 - 12.100.100.255 möglich
iptables -A INPUT -p tcp -s 12.100.100.0/24 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
14. HTTP Verbindungen
iptables -A OUTPUT -p tcp --sport 80 --dport 1024: -j ACCEPT
der Source Port (--sport 1024:) muss midestens 1024 sein, aber durch den angehängten Doppelpunkt sind auch alle darüberliegenden Ports erlaubt.
iptables -A INPUT -p tcp --sport 1024: --dport 80 ! --syn -j ACCEPT
Die Option ! --syn verweigert also den Aufbau einer neuen Verbindung, während Pakete erlaubt werden, die zu bestehenden Verbindungen gehören.
14. Destination-NAT für lokales Netzwerk erlauben
iptables -A FORWARD -i ppp0 -d 192.168.0.0/16 -j ACCEPT
15. alle übrigen Anfragen aus den Internet verbieten.
iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j LOG
iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j LOG
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
16. Port Forwarding aktivieren für einen Client im lokalen Netzwerk.
iptables -t nat -A PREROUTING -i ppp0 -p TCP --dport 4662 -j DNAT --to-destination 192.168.1.5
iptables -t nat -A PREROUTING -i ppp0 -p UDP --dport 5662 -j DNAT --to-destination 192.168.1.5
17. Firewall Einstellungen für Portforwarding zur Videokonverenz mit iVisit
iptables -t nat -D PREROUTING -i ppp0 -p udp --dprot 9940 -j DNAT --to IP-Adresse
iptables -A FORWARD -m state --state NEW -p udp --dport 9940 -j ACCESS

definierte Firewall Regeln anzeigen

iptables -nL
oder
ip6tables -nL
Seitenanfang

einfaches Firewallscript

#!/bin/sh
#
#	es können neue Verbindungen (NEW), nach Aussen aufgebaut werden
#	bereits aufgebaute Verbindungen (ESTABLISHED) werden akzeptiert
#
IPTABLES=/sbin/iptables
$IPTABLES -F
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED
$IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
$IPTABLES -A INPUT -j LOG --log-prefix "Firewall: "
Seitenanfang

Firewallscript mit FTP, HTTP, SSH, DNS

#!/bin/sh
#
#	lokale Paketfilter
#	FTP, SSH, DNS, HTTP
#
#

#	Variabeln setzen
#
IPTABLES=/sbin/iptables
test -x $IPTABLES || exit 5

case "$1" in
start)
echo
echo "		Loading - Paketfilter Regeln"
echo

#	notwendigen Module laden
#
module="iptable_filter iptable_mangle iptable_nat ip_tables ipt_LOG ip_conntrack ip_conntrack_ftp ipt_state"
for i in $module; do
modprobe $i
done 

#	Loesche alte Regeln und alte Tabellen
#
$IPTABLES -F
$IPTABLES --delete-chain

#	Default Policy festlegen
#
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP

#	Loopback Interface Zugriff
#
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#	ungewöhnliche Pakete verwerfen (nicht für Kernel 2.6)
#
# $IPTABLES -A FORWARD -m unclean -j DROP
# $IPTABLES -A INPUT -m unclean -j DROP

#	Lokales Netzwerk
#
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.0/24 -j ACCEPT

#	IP-Spoofing Pakete verwerfen
#
$IPTABLES -A INPUT -s 255.0.0.0/8 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 255.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 0.0.0.0/8 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 127.0.0.0/8 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 127.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 172.16.0.0/12 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 172.16.0.0/12 -j DROP
$IPTABLES -A INPUT -s 192.168.0.0/16 -j LOG --log-prefix "Gefaelschte Quell-IP!"
$IPTABLES -A INPUT -s 192.168.0.0/16 -j DROP

# wenn der Server mit der IP 192.168.2.100 ein Paket mit seiner IP als Quell-IP empfängt
# ist das Paket meist gefälscht.
$IPTABLES -A INPUT -s 192.168.2.100 -j LOG --log-prefix "Falscher Server!"
$IPTABLES -A INPUT -s 192.168.2.100 -j DROP

#	alle TCP-Session müssen mit SYN beginnen
#
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Stealth Scan versuch?"
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#
#	Hauptregeln für den Paketfilter:
#

#	INBOUND Regeln

#	eingehende Pakete, die Teil von zuvor zugelassenen Sessions sind akzeptieren
#
$IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED

#	FTP Pakete
$IPTABLES -A INPUT -p tcp -j ACCEPT --dport 21 -m state --state NEW

#	SSH Pakete
$IPTABLES -A INPUT -p tcp -j ACCEPT --dport 22 -m state --state NEW

#	HTTP Pakete
$IPTABLES -A INPUT -p tcp -j ACCEPT --dport 80 -m state --state NEW

#	Log was nicht akzeptiert wird
$IPTABLES -A INPUT -j LOG --log-prefix "INPUT abgelehnt: "

#	OUTBOUND Regeln

#	ausgehende Pakete, die Teil von zuvor zugelassenen Sessions sind akzeptieren
#
$IPTABLES -I OUTPUT 1 -j ACCEPT -m state --state RELATED,ESTABLISHED

#	ausgehende PING Anfragen erlauben
$IPTABLES -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request

#	
$IPTABLES -A OUTPUT -p udp -j ACCEPT --dport 53 -m state --state NEW

#	Log was nicht akzeptiert wird
$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT abgelehnt: "
;;

open)
echo 
echo "Achtung! alle Paketfilterregeln werden gelöscht und auf Durchgang gesetzt"
echo 
$IPTABLES -F
$IPTABLES -t filter -P INPUT ACCEPT
$IPTABLES -t filter -P FORWARD ACCEPT
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT;;

stop)
echo 
echo "Achtung! alle Paketfilterregeln werden gelöscht"
echo 
$IPTABLES -F
;;

status)
echo 
echo "		IPTABLES Status anzeigen ..."
echo 
$IPTABLES -L -v --line-numbers
;;

*)
echo 
echo "		Benutze: $0 {start|stop|open|status}"
echo 
exit 1
;;
esac

- SSH Zugriff beschränken, 5 Verbindungen in 5 Min

iptables -A INPUT -i $wan -p tcp --dport ssh \
  -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i $wan -p tcp --dport ssh \
  -m state --state NEW -m recent \
  --update --seconds 300 --hitcount 4 --rttl --name SSH -j DROP
Seitenanfang

Neue Kette (Chain) erstellen

- neue Filter-Kette erstellen

iptables -N new-filter

- neu erstellte Kette anzeigen

iptables -L -nv

- damit die neue Kette genutzt werden kann, muss man durch einen Sprug zu ihr wechseln. Hier wird ein Sprung n die "INPUT" Kette eingefügt zu neuen Kette "new-filter"

iptables -t filter -A INPUT -j new-filter

- Regeln in die neue Kette einfügen, mit dem "RETURN" Aufruf springt man wieder in die vorige Kette zurück (INPUT-Kette)

iptables -A new-filter -m mac --mac-source 11:22:33:aa:bb:cc -j ACCEPT
iptables -A new-filter -j RETURN

- Sprung zur Kette "new-filter" aus INPUT entfernen

iptables -t filter -D INPUT -j new-filter

- die gesammte eigene Kette löschen (die Kette darf keine Regel mehr enthalten "iptables -F new-filter")

iptables -X new-filter

Es können beliebig viele selbst definierte Ketten erstellt werden und mann kann zwischen denn Ketten beliebig hin und her springen.

Seitenanfang

Logging

Firewall Log in Datei speichern

# /etc/rsyslog.conf
...
#
# Firewall Logs
#
kern.warn                       -/var/log/iptables.log
...
service rsyslog restart

- Logging aktivieren, der Zeile im Log wird Firewall: vorangestellt und als Level 4 (Warn Meldung) gespeichert

iptables -A INPUT -j LOG --log-prefix "Firewall: " --log-level 4
ip6tables -A INPUT -j LOG --log-prefix "Firewall: " --log-level 4

- nur SMTP (Port 25) in Datei ausgeben

iptables -A INPUT -p tcp --dport 25 -j LOG --log-prefix "Firewall: " --log-level 4
ip6tables -A INPUT -p tcp --dport 25 -j LOG --log-prefix "Firewall: " --log-level 4

- LOG Regel einer IP sperre

iptables -A INPUT -s <IP-ADRESSE> -m limit --limit 5/min -j LOG --log-prefix "banned: " \
--log-level 7
Parameter Beschreibung
-m limit --limit 5/min max. 5 Einträge je Minute ins LOG File
--log-level 7 Loglevel 7 (DebugMode) Ausgabe in /var/log/debug

 

 

Seitenanfang

Firewall Kernelmodule für 2.4.x / 2.6.x

Networking options --->
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration --->

Standardmodule

Modul Funktion Kernelquelle
ip_conntrack Verbindungsverfolgung (connection tracking) Connection tracking (required for masq/NAT)
ip_contrack_ftp dito für FTP FTP protocol support
ip_nat_ftp NAT-Support für FTP FTP protocol support
ip_queue packet queueing (Weiterreichen an Userspace) Userspace queueing via NETLINK (EXPERIMENTAL)
ipchains ipchains Kompatibilität (Kernel 2.2) ipchains (2.2-style) support
ipfwadm ipfwadm Kompatibilität (Kernel 2.2) ipfwadm (2.0-style) support
ipt_LOG packet logging (Target LOG) LOG target support
ipt_MARK packet marking, Filter auf MARK-Symbole von Paketen netfilter MARK match support
ipt_MASQUERADE Masquerading MASQUERADE target support
ipt_MIRROR packet mirroring (source ? destination) MIRROR target support (EXPERIMENTAL)
ipt_REDIRECT transparentes Umleiten von Paketen REDIRECT target support
ipt_REJECT Zurückweisen von Paketen REJECT target support
ipt_TOS type of service setzen TOS target support
ipt_limit Begrenzerfilter limit match support
ipt_mac MAC-Filter MAC address match support
ipt_multiport Filter für mehrere Ports auf einmal Multiple port match support
ipt_owner Filter auf erzeugenden Nutzer (lokal) Owner match support (EXPERIMENTAL)
ipt_state Filter für Verbindungsstatus Connection state match support
ipt_tos Filter für type of service TOS match support
ipt_unclean Filter für ,,komische`` Pakete Unclean match support (EXPERIMENTAL)
ipt_conntrack   Connection tracking match support
iptable_filter implementiert Tabelle filter Packet filtering
iptable_mangle implementiert Tabelle mangle Packet mangling
iptable_nat implementiert Tabelle nat Full NAT

 

Seitenanfang

sonstiges