Vorüberlegung
- Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten.
- Bei iptables sind diese standardmäßig vorhanden.
- iptables verwendet die Tabelle filter mit den drei Ketten INPUT, OUTPUT und FORWARD.
- Die Konfiguration kann direkt über iptables-Befehle erfolgen oder über eine gespeicherte Datei wie /etc/iptables/rules.v4.
- Wird keine Regel gesetzt, lautet die Default Policy standardmäßig ACCEPT.
Anzeigen der aktuellen Konfiguration
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Welchen Zustand haben wir denn nun?
- Ein Paket durchläuft genau eine dieser Ketten:
- Ist das Paket für den lokalen Rechner bestimmt, geht es durch die INPUT-Kette.
- Wird es lokal erzeugt, geht es durch die OUTPUT-Kette.
- Kommt es von außen und soll weitergeleitet werden, geht es durch die FORWARD-Kette.
Funktionsweise
Regeln
- Jede dieser Ketten enthält eine Abfolge von Regeln.
- Diese werden von oben nach unten durchlaufen.
- Trifft eine Regel zu, wird sie angewendet und die Verarbeitung endet.
- Am Ende greift die Default Policy der Kette.
Ziele der Filter-Ketten
- ACCEPT: das Paket wird angenommen
- REJECT: das Paket wird abgelehnt, es wird ein Fehlerpaket gesendet
- LOG: das Paket wird protokolliert
- DROP: das Paket wird still verworfen
| filter table
|
| INPUT |
OUTPUT |
FORWARD
|
| rule 1 |
rule 1 |
rule 1
|
| rule 2 |
rule 2 |
rule 2
|
| rule 3 |
rule 3 |
|
| rule 4 |
|
|
| DEFAULT POLICY |
DEFAULT POLICY |
DEFAULT POLICY
|
Wir ändern nun die Default Policy auf DROP
- Achtung: Es ist momentan keine gute Idee, dies zu aktivieren, wenn man per SSH eingeloggt ist.
- Man würde sich sofort selbst aussperren.
- Die Aktivierung erfolgt erst, wenn alle notwendigen Regeln gesetzt sind.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Connection Tracking
- Connection Tracking merkt sich, welche Verbindungen gerade bestehen.
- Ein neu aufgebautes Paket hat den Status NEW.
- Pakete, die zu einer bestehenden Verbindung gehören, haben den Status ESTABLISHED.
- Zusätzlich gibt es RELATED für z. B. ICMP- oder FTP-Sekundärverbindungen.
- Auch UDP wird mit Hilfe von Timern getrackt.
- Für bestimmte Protokolle wie FTP oder SIP werden ggf. Helper-Module benötigt.
Ziel des Connection Tracking
- Pakete mit Status ESTABLISHED oder RELATED sollen durchgelassen werden.
- Nur neue Verbindungen werden gezielt erlaubt.
- So lässt man nur bekannte oder kontrollierte Kommunikation durch.
Einbauen des Connection Tracking Grundgerüsts
- vi /usr/local/sbin/firewall
#!/bin/bash
#Einlesen der Konfigurationsdatei
source /usr/local/etc/firewall.cfg
case $1 in
start)
echo "starte firewall"
#Löschen aller Reglen
iptables -F
iptables -F -t nat
#Setzen der Default Policy auf DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Aktivieren des Connection Tracking Konzeptes
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
;;
stop)
echo "stoppe firewall"
#Löschen aller Reglen
iptables -F
iptables -F -t nat
#Setzen der Default Policy auf ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
*)
echo "usage: $0 start|stop"
;;
Regeln dauerhaft aktivieren
- apt install iptables-persistent
- iptables-save > /etc/iptables/rules.v4
- systemctl enable netfilter-persistent
- systemctl start netfilter-persistent