Iptables start

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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