Iptables Filter

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Funktionsweise

  • Die Regeln werden nacheinander abgearbeitet wenn eine Regel greift hört der Verarbeitungsprozess auf.
  • Wenn keine greift wird die Default Policy angewandt.
filter table
INPUT OUTPUT FORWARD
rule 1 rule 1 rule 1
rule 2 rule 2 rule 2
rule 3 rule 3 rule 3
rule 4 rule 4 rule 4
POLICY POLICY POLICY

Die filter Tabelle

Die Ketten der filter Kette

  • FORWARD: für Pakte die über eine Schnittstelle hereinkommen, den Rechner auch wieder verlassen.
  • INPUT: für Pakete die über eine Schnittstelle hereinkommen und einen Dienst auf dem Rechner ansprechen
  • OUTPUT: für die über eine Schnittstelle herausgehenden Pakete, die von einem lokalen Dienst
In diesem Schaubild sind nat und mangel Tabellen ausgeblendet.
  • Jedes Paket durchläuft nue eine Filter Kette

Die Filter Regeln der filter Tabelle

Regeln werden mit iptables erstellt und an Ziele geschickt.

Ziele der filter Tabelle

  • ACCEPT: das Paket kann passieren
  • REJECT: das Paket wird zurückgewiesen und ein Fehlerpaket wird gesendet
  • LOG: schreibt einen Eintrag in die syslog
  • DROP: das Paket wird ignoriert und keine Antwort gesendet

Syntax Allgemein

Die Momentan in der filter Tabelle gesetzten Ketten und Regeln sieht man mit

  • iptables -nvL -t filter
-L        # Listing
-t filter # anzeigen der filter Kette
-n        # numerical
-v        # verbose

Da -t filter Default ist, kann man es auch weglassen,

  • iptables -nvL -t filter

Firewallscript

Der Rumpf

Zuerst wird in dem firewall-Skript ein case start - stop Block angelegt:

  • cd /usr/local/sbin/
  • vi firewall
#!/bin/bash
 case $1 in
  start)
   echo "starte firewall"
  ;;
  stop)
   echo "stoppe firewall"
  ;;
  *)
   echo "usage: $0 start|stop"
  ;;
 esac

Script ausführbar machen

  • chmod +x firewall

Testen des Scripts

  • firewall start
  • firewall stop
  • firewall

Flushen aller vorhergehenden Regeln

#!/bin/bash
case $1 in
  start)
   echo "starte firewall"
   iptables -F   
   ;;
   stop)
    echo "stoppe firewall"
    iptables -F
    ;;
esac
Die neuen Funktionen die wir hier verwenden beinhalten

-F löscht alle Regeln aller Ketten

Setzen der Default Policys

 #!/bin/bash
case $1 in
start)
echo "starte firewall"
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
;;
stop)
echo "stoppe firewall"
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
esac
Die neuen Funktionen die wir hier verwenden beinhalten

-P INPUT DROP setzt die default policy auf DROP

Momentaner Status nach firewall stop

  • iptables -nvL
Chain INPUT (policy ACCEPT 56 packets, 3824 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 35 packets, 7884 bytes)
 pkts bytes target     prot opt in     out     source               destination 

ESTABLISHED und RELATED Pakete (Connection Tracking)

  • iptables ist eine stateful Firewall
  • Die bedeutet das über Verbindungen Buch geführt wird.
  • Wenn das erste Paket erlaubt ist, gilt eine Verbindung als ESTABLISHED
  • RELATED Paketes stehen in Beziehung zu einer Verbindung, beispielsweise ICMP Nachrichten.
  • Die Idee ist nun alle ESTABLISHED und RELATED Pakete freizuschalten und nur zu entscheiden ob das erste Paket durch darf oder nicht.
  • Wir setzen dies mit folgenden Befehlen um.
 #!/bin/bash
case $1 in
start)
echo "starte firewall"
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
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"
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
esac
Verwendete Syntax
Die neuen Funktionen die wir hier verwenden beinhalten:
-m state: Das Modul von iptables das erkennt ob ein Paket eine Verbindung initiiert oder zu einer bereits errichteten Verbindung gehört.
--state ESTABLISHED,RELATED: Der Status nach dem das Paket untersucht wird, wobei
ESTABLISHED: Pakete die zu einer Verbindung gehören. Also frühestens das 2 Paket.
RELATED: Pakete die in einer relation zu einer anderen Verbindung stehen.
-j ACCEPT Regel springt zum ACCEPT Ziel.