Iptables start: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 74: Zeile 74:
  
 
=Einbauen des Connection Tracking Grundgerüsts=
 
=Einbauen des Connection Tracking Grundgerüsts=
<pre>
+
#!/bin/bash
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
#Einlesen der Konfigurationsdatei
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
source /usr/local/etc/firewall.cfg
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
case $1 in
</pre>
+
  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"
 +
  ;;
  
 
=Regeln dauerhaft aktivieren=
 
=Regeln dauerhaft aktivieren=

Version vom 12. April 2025, 20:00 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

#!/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