Linux_Befehle | Programme_einrichten | Linux_System | Firewall | Shell_Scripte | FAQs | Debian | Ubuntu | OpenSUSE | RedHat
| Firewall Konfigurationstools | |
|---|---|
| Knetfilter | unter KDE |
| Firestarter | für GNOME |
| Jay's Iptables Firewall | Textbasis |
| Easy Firewall Generator for Iptables | WEB basiert (PHP Script) |
ipchains-Code von 2.2 wird durch iptables abgelöst, das Gesamtsystem heist Netfilter.
Networking options --->
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration --->
| 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 |
--to-source ipaddr[-ipaddr][:Port-Port]
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 die Ziel IP Adresse, um das Paket zum aktuellen Rechner zu senden.
--to-ports Port[-Port]
iptables - IPv4 Filterregeln erstellen/ändern/löschen.
ip6tables - IPv6 Filterregeln erstellen/ändern/löschen.
Die allgemeine Syntax der iptables oder ip6tables Befehle ist:
iptables Befehl Regelspezifikation Erweiterungen oder ip6tables Befehl Regelspezifikation Erweiterungen
| iptables -N Kette | erzeuge eine Kette |
| iptables -X Kette | löschen einerKette |
| iptables -A Kette \ | füge Regel zur Kette hinzu |
| -t Tabelle \ | verwende Tabelle (FILTER, NAT, MANGLE) |
| -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 Ziel \ | was tun, wenn es passt |
| -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 |
Hauptoptionen von iptables:
-N: erstellt eine neue Kette.
-X: entfernt eine leere Kette.
-P: ändert die Standardregel einer Kette.
-L: listet die Regeln einer Kette auf.
-F: entfernt alle Regeln in einer Kette.
-Z: löscht die Byte- und Paketzähler, die die Kette durchlaufen haben.
Zum Ändern einer Kette:
-A: fügt eine Regel am Ende einer Kette an.
-I: fügt eine neue Regel in einer bestimmten Position in einer Kette ein.
-R: ersetzt eine bestimmte Regel in einer Kette.
-D: löscht eine Regel in einer Kette, entweder über deren Nummer oder die Beschreibung der Regel.
| 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).
definierte Firewall Regeln anzeigen
iptables -nL oder ip6tables -nL
iptables -L INPUT -v
iptables -D INPUT 1
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -m state --state NEW -s 192.168.2.0/24 --dport 25 -j DROP iptables -I FORWARD -p tcp -m state --state NEW -s 192.168.2.0/24 -d smtp.t-online.de -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j DROP iptables -I INPUT -p tcp -m state --state NEW -s 1.2.3.4 --dport 22 -j ACCEPT
iptables -I INPUT -m state --state NEW -m recent --set iptables -I INPUT -m state --state NEW -m recent --update --seconds 60 --hitcount 11 -j DROP
#!/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: "
#!/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
- neue Filter-Kette erstellen
iptables -N new-filter
- neu erstellte Kette anzeigen
iptables -L
...
Chain new-filter (0 references)
target prot opt source destination
- 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.
unter Debian das fertige Firewall Script laden und mit
/etc/init.d/iptables save active
als root dauerhaft speichern. Damit werden die Regeln nach /var/lib/iptables/active geschrieben. Dann dpkg-reconfigure iptables aufrufen, auf die Frage Enable the iptables init.d script? mit Yes antworten. Daraufhin wird der Link /etc/rcS.d/S40iptables -> ../init.d/iptables angelegt. Fertig. Nach dem nächsten Reboot sollte der Paketfilter automatisch geladen werden.
update-rc.d