Iptables Nat: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 43: Zeile 43:
 
  -t filter # anzeigen der nat Tabelle
 
  -t filter # anzeigen der nat Tabelle
 
  -n        # numerical
 
  -n        # numerical
 +
=Ausgangsskript=
 +
#!/bin/bash
 +
case $1 in
 +
start)
 +
LANDEV="ens19"
 +
WANDEV="eth0"
 +
LAN="10.82.243.0/24"
 +
WANIP="10.82.227.1"
 +
echo "starte firewall"
 +
#flushen der Regeln
 +
iptables -F
 +
#löscht eigene Ketten
 +
'''iptables -X'''
 +
#Default Policy setzen
 +
iptables -P INPUT DROP
 +
iptables -P OUTPUT DROP
 +
iptables -P FORWARD DROP
 +
#Connection Tracking
 +
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
 +
#Verkehr von Rechner hinaus freischalten
 +
iptables -A OUTPUT -m state --state NEW -j ACCEPT
 +
#Verkehr über das loopback device freischalten
 +
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
 +
#Verkehr zum Rechner ZUM TCP PORT 22 erlauben
 +
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
 +
#ping freischalten
 +
iptables -A INPUT  -p icmp --icmp-type echo-request  -m state --state NEW -j ACCEPT
 +
'''iptables -N lan-to-wan'''
 +
'''iptables -A lan-to-wan -s $LAN -i $LANDEV -o $WANDEV -m state --state NEW -j ACCEPT'''
 +
#ping und namensauflösung von innen freischalten
 +
'''iptables -A FORWARD  -p icmp --icmp-type echo-request -j lan-to-wan'''
 +
'''iptables -A FORWARD  -p tcp --dport 53  -j lan-to-wan'''
 +
'''iptables -A FORWARD  -p udp --dport 53 -j lan-to-wan'''
 +
#Freischalten von smtp,http,imap,https,smtps,imps
 +
iptables -A FORWARD  -m multiport -p tcp --dport 25,80,143,443,465,993  -j lan-to-wan
 +
#Logging der Ketten vor dem Ablehnen der Pakete
 +
iptables -A INPUT  -j LOG  --log-prefix "--iptables-drop-in--"
 +
iptables -A OUTPUT -j LOG  --log-prefix "--iptables-drop-out--"
 +
iptables -A FORWARD -j LOG --log-prefix "--iptables-drop-for--"
 +
;;
 +
stop)
 +
echo "stoppe firewall"
 +
iptables -F
 +
iptables -P INPUT ACCEPT
 +
iptables -P OUTPUT ACCEPT
 +
iptables -P FORWARD ACCEPT
 +
;;
 +
esac

Version vom 1. September 2022, 10:21 Uhr

Funktionsweise

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

Die filter Tabelle

Die Ketten der filter Kette

  • PREROUTING: für Pakte die über eine Schnittstelle hereinkommen, noch bevor entschieden ist ob sie an den Rechner oder weitergeleitet werden.
  • 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 generiert werden
  • POSTROUTING: Pakete die den Rechner verlassen.
In diesem Schaubild ist mangle Tabelle ausgeblendet.

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
  • SNAT: Quell Adresse oder Port werden verändert.
  • DNAT: Ziel Adresse oder Port werden verändert.
  • MASQUERADE: Quell Adresse wird auf die IP einer Schnittstelle geändert.
  • NETMAP: Ganze Netze werden umgesetzt. Kann sowohl Quell als auch Ziel Netze sein

Syntax Allgemein

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

  • iptables -nvL -t nat
-L        # Listing
-t filter # anzeigen der nat Tabelle
-n        # numerical

Ausgangsskript

#!/bin/bash
case $1 in
start)
LANDEV="ens19"
WANDEV="eth0"
LAN="10.82.243.0/24"
WANIP="10.82.227.1"
echo "starte firewall"
#flushen der Regeln
iptables -F
#löscht eigene Ketten
iptables -X
#Default Policy setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Connection Tracking
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
#Verkehr von Rechner hinaus freischalten
iptables -A OUTPUT -m state --state NEW -j ACCEPT
#Verkehr über das loopback device freischalten
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
#Verkehr zum Rechner ZUM TCP PORT 22 erlauben
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
#ping freischalten
iptables -A INPUT  -p icmp --icmp-type echo-request  -m state --state NEW -j ACCEPT
iptables -N lan-to-wan
iptables -A lan-to-wan -s $LAN -i $LANDEV -o $WANDEV -m state --state NEW -j ACCEPT
#ping und namensauflösung von innen freischalten
iptables -A FORWARD  -p icmp --icmp-type echo-request -j lan-to-wan
iptables -A FORWARD  -p tcp --dport 53  -j lan-to-wan
iptables -A FORWARD  -p udp --dport 53 -j lan-to-wan
#Freischalten von smtp,http,imap,https,smtps,imps
iptables -A FORWARD  -m multiport -p tcp --dport 25,80,143,443,465,993  -j lan-to-wan
#Logging der Ketten vor dem Ablehnen der Pakete
iptables -A INPUT  -j LOG  --log-prefix "--iptables-drop-in--"
iptables -A OUTPUT -j LOG  --log-prefix "--iptables-drop-out--"
iptables -A FORWARD -j LOG --log-prefix "--iptables-drop-for--"
;;
stop)
echo "stoppe firewall"
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
esac