Iptables Mangle: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 21: Zeile 21:
 
=Die mangle Tabelle=
 
=Die mangle Tabelle=
 
==Die Ketten der mangle Tabelle==
 
==Die Ketten der mangle Tabelle==
*'''PREROUTING''': für Pakte die über eine Schnittstelle hereinkommen, noch bevor entschieden ist ob sie an den Rechner oder weitergeleitet werden.  
+
*'''PREROUTING''': für Pakete 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
+
*'''INPUT''': für Pakete, die über eine Schnittstelle hereinkommen und einen Dienst auf dem Rechner ansprechen.
*'''FORWARD''': für Pakte die über eine Schnittstelle hereinkommen, den Rechner auch wieder verlassen.
+
*'''FORWARD''': für Pakete, die über eine Schnittstelle hereinkommen, den Rechner auch wieder verlassen.
*'''OUTPUT''': für die über eine Schnittstelle herausgehenden Pakete, die von einem lokalen Dienst generiert werden
+
*'''OUTPUT''': für Pakete, die über eine Schnittstelle herausgehen und von einem lokalen Dienst generiert wurden.
*'''POSTROUTING''': Pakete die den Rechner verlassen.
+
*'''POSTROUTING''': für Pakete, die den Rechner verlassen.
 
{{#drawio:iptables-mangle.png}}
 
{{#drawio:iptables-mangle.png}}
  
Zeile 61: Zeile 61:
 
  iptables -t mangle -A FORWARD -p tcp -i $LANDEV -o $WANDEV --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
 
  iptables -t mangle -A FORWARD -p tcp -i $LANDEV -o $WANDEV --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
 
=PORTFORWARDING ACCEPT Sauberer=
 
=PORTFORWARDING ACCEPT Sauberer=
*Wenn wir nach innen ein Portfording machen
+
*Wenn wir nach innen ein Portforwarding machen
*Wird zuerst der Port geändert und danach in der FORWARD Kette freigeschaltet.
+
*Es wird zuerst der Port geändert und danach in der FORWARD Kette freigeschaltet.
 
;Beispiel
 
;Beispiel
 
  iptables -t nat -A PREROUTING -j DNAT -d $WANIP -p tcp --dport 80 --to $WEBSERVER
 
  iptables -t nat -A PREROUTING -j DNAT -d $WANIP -p tcp --dport 80 --to $WEBSERVER
Zeile 70: Zeile 70:
 
  iptables -t nat -A PREROUTING -j DNAT -i $WANDEV -p tcp --dport 80 -d $WANIP --to $WEBSERVER
 
  iptables -t nat -A PREROUTING -j DNAT -i $WANDEV -p tcp --dport 80 -d $WANIP --to $WEBSERVER
 
  iptables -t filter -A FORWARD -j ACCEPT -m mark --mark 0x8
 
  iptables -t filter -A FORWARD -j ACCEPT -m mark --mark 0x8
 +
 
=Policy Routing=
 
=Policy Routing=
 
*Normalerweise wird das Routing anhand des Zieles vorgenommen.
 
*Normalerweise wird das Routing anhand des Zieles vorgenommen.
 
*Wenn andere Kriterien genutzt werden sollen nennt man das Policy Routing
 
*Wenn andere Kriterien genutzt werden sollen nennt man das Policy Routing
*Man geht nun folgendermassen vor
+
*Man geht nun folgendermaßen vor
*Man erstellt zu erst eine default route und weisst diese eine Tabelle (keine iptables Tabelle) zu.  
+
*Man erstellt zu erst eine default route und weist diese eine Tabelle (keine iptables Tabelle) zu.  
 
*Im Beispiel die Tabelle 13
 
*Im Beispiel die Tabelle 13
 
  ip route add default via  10.82.227.30 table 13
 
  ip route add default via  10.82.227.30 table 13

Aktuelle Version vom 5. September 2022, 06:37 Uhr

Funktionsweise

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

Die mangle Tabelle

Die Ketten der mangle Tabelle

  • PREROUTING: für Pakete 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.
  • FORWARD: für Pakete, die über eine Schnittstelle hereinkommen, den Rechner auch wieder verlassen.
  • OUTPUT: für Pakete, die über eine Schnittstelle herausgehen und von einem lokalen Dienst generiert wurden.
  • POSTROUTING: für Pakete, die den Rechner verlassen.

Die Regeln der mangle Tabelle

Regeln werden mit iptables erstellt und an Ziele geschickt.

Ziele der 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 mangle Tabelle gesetzten Ketten und Regeln sieht man mit

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

Ausgangsskript vom filter Workshop

MSS Reduktion

Theorie

  • Wenn PPPoE oder IPSec VPNs benutzt werden, kann man manchmal nicht die komplette 1500 Byte der MTU nutzen.
  • Man könnte nun auf Fragmentierung hoffen.
  • Leider haben viele Betriebssystem das "Don't Fragment"-Bit gesetzt.
  • Die Pakete gehen dann oft ohne Rückmeldung verloren.
  • Es gibt aber einen Trick, um dies zu umgehen.
  • Im ersten Paket wird in den TCP-Optionen die Maximale Segment Size(MSS) angeben.
  • Dies ist die Maximale Anzahl an Bytes, die ein TCP Paket übertragen kann.
  • Wenn man dazu nun den IP (20 Byte) und den TCP (20 Byte) Header dazuzählt, kommt man auf eine theoretische MTU, die kleiner ist.

Befehl

iptables -t mangle -A FORWARD -p tcp -i $LANDEV -o $WANDEV --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

PORTFORWARDING ACCEPT Sauberer

  • Wenn wir nach innen ein Portforwarding machen
  • Es wird zuerst der Port geändert und danach in der FORWARD Kette freigeschaltet.
Beispiel
iptables -t nat -A PREROUTING -j DNAT -d $WANIP -p tcp --dport 80 --to $WEBSERVER
iptables -A FORWARD  -p tcp --dport 80  -i $WANDEV -o $LANDEV -d $WEBSERVER -j ACCEPT
Wir wollen nun schon den Verbindungsaufbau zur WANIP kontrollieren.
iptables -t mangle  -A PREROUTING -j MARK -i $WANDEV -p tcp --dport 80 -d $WANIP --set-mark 0x8
iptables -t nat -A PREROUTING -j DNAT -i $WANDEV -p tcp --dport 80 -d $WANIP --to $WEBSERVER
iptables -t filter -A FORWARD -j ACCEPT -m mark --mark 0x8

Policy Routing

  • Normalerweise wird das Routing anhand des Zieles vorgenommen.
  • Wenn andere Kriterien genutzt werden sollen nennt man das Policy Routing
  • Man geht nun folgendermaßen vor
  • Man erstellt zu erst eine default route und weist diese eine Tabelle (keine iptables Tabelle) zu.
  • Im Beispiel die Tabelle 13
ip route add default via  10.82.227.30 table 13
  • Danach erstellt man eine rule (keine Iptables rule) und weist ihr den fwmark 0x2 zu
ip rule add fwmark 0x2 table 13
  • Abschliessend erstellt man Regeln
iptables -t mangle -A FORWARD -p tcp --dport 80  -j MARK --set-mark 2
iptables -t mangle -A FORWARD -p tcp --dport 443  -j MARK --set-mark 2
  • Fazit: Der http und https Traffic wird über ein anderes Gateway geroutet.