Iptables Mangle: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 6: | Zeile 6: | ||
!colspan="6"|nat table | !colspan="6"|nat table | ||
|-style="font-style: italic; color: blue;" | |-style="font-style: italic; color: blue;" | ||
| − | ||PREROUTING||INPUT||OUTPUT||POSTROUTING | + | ||PREROUTING||INPUT||FORWARD||OUTPUT||POSTROUTING |
|- | |- | ||
| − | ||rule 1 ||rule 1 ||rule 1 ||rule 1 | + | ||rule 1 ||rule 1 ||rule 1 ||rule 1||rule 1 |
|- | |- | ||
| − | ||rule 2 ||rule 2 ||rule 2||rule 2 | + | ||rule 2 ||rule 2 ||rule 2 ||rule 2||rule 1 |
|- | |- | ||
| − | ||rule 3 ||rule 3 ||rule 3||rule 2 | + | ||rule 3 ||rule 3 ||rule 3 ||rule 2||rule 1 |
|- | |- | ||
| − | ||rule 4 ||rule 4 ||rule 4|| rule 4 | + | ||rule 4 ||rule 4 ||rule 4 || rule 4||rule 1 |
|-style="font-style: italic; color: red;" | |-style="font-style: italic; color: red;" | ||
| − | ||POLICY||POLICY||POLICY||POLICY | + | ||POLICY||POLICY||POLICY||POLICY||POLICY |
|} | |} | ||
| − | =Die | + | =Die mangle Tabelle= |
| − | ==Die Ketten der | + | ==Die Ketten der mangle Tabelle== |
| − | *'''PREROUTING''': für | + | *'''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 | + | *'''FORWARD''': für Pakete, die über eine Schnittstelle hereinkommen, den Rechner auch wieder verlassen. |
| − | *'''OUTPUT''': für die über eine Schnittstelle | + | *'''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}} | ||
| − | ==Die | + | ==Die Regeln der mangle Tabelle== |
Regeln werden mit '''iptables''' erstellt und an Ziele geschickt. | Regeln werden mit '''iptables''' erstellt und an Ziele geschickt. | ||
| − | ==Ziele der | + | |
| + | ==Ziele der Tabelle== | ||
*'''ACCEPT''': das Paket kann passieren | *'''ACCEPT''': das Paket kann passieren | ||
*'''REJECT''': das Paket wird zurückgewiesen und ein Fehlerpaket wird gesendet | *'''REJECT''': das Paket wird zurückgewiesen und ein Fehlerpaket wird gesendet | ||
| Zeile 39: | Zeile 40: | ||
=Syntax Allgemein= | =Syntax Allgemein= | ||
| − | Die Momentan in der ''' | + | Die Momentan in der '''mangle''' Tabelle gesetzten Ketten und Regeln sieht man mit |
*iptables -nvL -t nat | *iptables -nvL -t nat | ||
-L # Listing | -L # Listing | ||
| − | -t | + | -t mangle # anzeigen der mangle Tabelle |
-n # numerical | -n # numerical | ||
'''Ausgangsskript vom filter Workshop''' | '''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. | ||
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.
