Iptables start: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=Vorüberlegung= *Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten. *Bei iptables sind diese standardmäßig vorhanden. *iptab…“) |
|||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 19: | Zeile 19: | ||
*Wird es lokal erzeugt, geht es durch die '''OUTPUT'''-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. | *Kommt es von außen und soll weitergeleitet werden, geht es durch die '''FORWARD'''-Kette. | ||
| + | {{#drawio:iptables-filter.png}} | ||
=Funktionsweise= | =Funktionsweise= | ||
| Zeile 73: | Zeile 74: | ||
=Einbauen des Connection Tracking Grundgerüsts= | =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 | ||
| + | <span style="color:#1100FF">#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</span> | ||
| + | ;; | ||
| + | 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" | ||
| + | ;; | ||
| + | =Ausführbar machen= | ||
| + | *chmod +x /usr/local/sbin/firewall | ||
| + | |||
| + | =Regeln dauerhaft aktivieren= | ||
| + | ==config== | ||
| + | */etc/systemd/system/firewall.service | ||
<pre> | <pre> | ||
| − | + | [Unit] | |
| − | + | Description=firewall | |
| − | + | After=network.target syslog.target | |
| + | |||
| + | [Service] | ||
| + | RemainAfterExit=yes | ||
| + | ExecStart=/usr/local/sbin/firewall start | ||
| + | ExecStop=/usr/local/sbin/firewall stop | ||
| + | User=root | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
</pre> | </pre> | ||
| − | + | ==activate== | |
| − | = | + | *systemctl daemon-reload |
| − | * | + | *systemctl enable firewall.service |
| − | + | *systemctl start firewall.service | |
| − | *systemctl enable | ||
| − | *systemctl start | ||
Aktuelle Version vom 12. April 2025, 20:03 Uhr
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
- iptables -L -v -n
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"
;;
Ausführbar machen
- chmod +x /usr/local/sbin/firewall
Regeln dauerhaft aktivieren
config
- /etc/systemd/system/firewall.service
[Unit] Description=firewall After=network.target syslog.target [Service] RemainAfterExit=yes ExecStart=/usr/local/sbin/firewall start ExecStop=/usr/local/sbin/firewall stop User=root [Install] WantedBy=multi-user.target
activate
- systemctl daemon-reload
- systemctl enable firewall.service
- systemctl start firewall.service
