iptables-Regeln

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

iptables-Regeln

Beitrag von worker777 » 06.06.2021 13:37:24

Hallo Community,

ich benötige Hilfe bei iptables-Regeln. Ich weiss, dass iptables am "Auslaufen" ist, jedoch ist es immer noch ein aktiver Paket-Filter bei Raspbian, so wie ich das sehe, und es ist ein Paket-Filter bei dem ich mich wenigstens einigermassen auskenne.
'nftables' möchte ich mir anschauen, wenn ich mal Zeit dazu habe und das wird in den nächsten Wochen/Monaten nicht der Fall sein...

Ich habe meinen RasPi am Router aus der "Firewall-/Portforwarding-Zone" in die DMZ gestellt (Wartung/Einstellungen einfacher, da nur am RasPi im Paket-Filter durchzuführen).

Nun habe ich die grundsätzlichen Regeln [in einem Boot-Script] so:

Code: Alles auswählen

LOCAL_IPv4='127.0.0.1'
LOCALHOST_IPv4='127.0.1.1'
HOME_IPv4_SUBNET='192.168.1'
HOME_IPv4_NET="$HOME_IPv4_SUBNET.0/24"
PUBLIC_IPv4_NET='0.0.0.0/0'

LOCAL_IPv6='::1/128'
HOME_IPv6_NET='fe80::/64'
GLOBAL_SCOPE_IPv6='2a02:120b:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz/64'
PUBLIC_IPv6_NET='::/0'

DEVICE_LO='lo'
DEVICE_LAN='eth0'

IPT="/usr/sbin/iptables"
IP6T="/usr/sbin/ip6tables"

$IPT -F
$IPT -X
$IPT -Z
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X

$IP6T -F

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

$IP6T -P INPUT DROP
$IP6T -P FORWARD DROP
$IP6T -P OUTPUT ACCEPT

$IPT -I INPUT -i $DEVICE_LO -j ACCEPT
$IPT -I INPUT -s $LOCAL_IPv4 -j ACCEPT
$IPT -I INPUT -s $LOCALHOST_IPv4 -j ACCEPT
#$IPT -I OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$IP6T -I INPUT -i $DEVICE_LO -j ACCEPT
$IP6T -I INPUT -s $LOCAL_IPv6 -j ACCEPT
$IP6T -I INPUT -s $HOME_IPv6_NET -j ACCEPT
#$IP6T -I OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

So weit so gut - dachte ich...

Irgendwann hatte ich festgestellt, dass der Ping nach Aussen nicht ging, weil keine Namensauflösung geklappt hat...
Danach experimentierte ich - wie man sieht - auch mit

Code: Alles auswählen

$IPT -I OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Mein grundsätzliches Verständnis für die o.g. iptables-Regeln ist wie folgt:
1. Eingehende Verbindungen sind nur zu explizit erlaubten Ports erlaubt
2. Forwarding ist grundsätzlich nicht erlaubt, da auch nicht gebraucht(?) - z.B. kein NAT, etc.
3. Ausgehende Verbindungen (wie z.B. 'Ping', Namensauflösung, etc.) sind grundsätzlich erlaubt

Wenn mein Verständnis der Regeln grundsätzlich richtig ist, warum muss ich dann trotzdem ein:
$IPT -I INPUT -p udp --sport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
in die Regeln setzen, damit die Namensauflösung klappt?
(Die '--sport 53'-Regel habe ich von einer Webseite.)

Kann es jetzt sein, dass auch z.B. Verbindungen zum Apache2, oder Exim4, oder $x_y_dienst nicht korrekt aufgebaut werden, da eventuell '--sport'-Regeln fehlen [könnten]? Und falls dem so ist, wieso?!

Warum muss eine eingehende Verbindung ('-I INPUT -p udp --sport 53 -J ACCEPT') angegeben werden?
Welchen Dienst braucht es auf dem RasPi, damit die Namensauflösung nach Aussen klappt und warum?
Es wird doch (von welchem Dienst/Programm auch immer) eine Verbindung nach Aussen (die ja grundsätzlich erlaubt ist) zu einem Dienst initiiert und von "dort" (Aussen) kommt lediglich über die bereits aufgebaute Verbindung eine Antwort zurück, oder nyscht..?

*KopfKratz* ^^

Danke für Aufklärung.
worker

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 14:02:49

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 13:37:24
Ich weiss, dass iptables am "Auslaufen" ist, jedoch ist es immer noch ein aktiver Paket-Filter bei Raspbian, so wie ich das sehe, und es ist ein Paket-Filter bei dem ich mich wenigstens einigermassen auskenne.
'nftables' möchte ich mir anschauen, wenn ich mal Zeit dazu habe und das wird in den nächsten Wochen/Monaten nicht der Fall sein...
Du kannst iptables schon benutzen. Siehe den Unterschied zwischen iptables und iptables-legacy:

Code: Alles auswählen

:~ $ iptables -V
iptables v1.8.2 (nf_tables)

Code: Alles auswählen

:~ $ iptables-legacy -V
iptables v1.8.2 (legacy)
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 13:37:24
Warum muss eine eingehende Verbindung ('-I INPUT -p udp --sport 53 -J ACCEPT') angegeben werden?
Welchen Dienst braucht es auf dem RasPi, damit die Namensauflösung nach Aussen klappt und warum?
Versuch mal mit:

Code: Alles auswählen

iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
(statt dem "-I INPUT -p udp --sport 53 -J ACCEPT").
Wie ist auf deinem PI die Ausgabe von:

Code: Alles auswählen

sudo netstat -tulpena | grep -i 53
?

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 14:16:31

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:02:49
Versuch mal mit:

Code: Alles auswählen

iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
(statt dem "-I INPUT -p udp --sport 53 -J ACCEPT").
Wie ist auf deinem PI die Ausgabe von:

Code: Alles auswählen

sudo netstat -tulpena | grep -i 53
?
Hi mat6937,
'INPUT 1' gerade eingetragen und
die Ausgabe von 'sudo netstat -tulpena | grep -i 53' ist:

Code: Alles auswählen

tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      0          20398      853/pdnsd           
udp        0      0 0.0.0.0:53              0.0.0.0:*                           0          20399      853/pdnsd           
udp        0      0 192.168.1.72:123        0.0.0.0:*                           119        2475394    972/ntpd            
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           108        16488      443/avahi-daemon: r 
udp6       0      0 2a02:120b:zzzz:zzzz:123 :::*                                119        2475399    972/ntpd            
udp6       0      0 :::5353                 :::*                                108        16489      443/avahi-daemon: r
Namensauflösung geht. :THX:

Was bewirkt denn 'INPUT 1' eigentlich?

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 14:27:42

Okay, also 'INPUT 1' setzt die Regel auf Position 1.

Was ich nicht verstehe ist, warum ich diese Regel anwenden sollte, wenn die doch ja jeden INPUT [also jede Verbindung] erlaubt? Wäre ja dem entgegen gesetzt, was mit der Default-Policy definiert wurde..?

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 14:59:19

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:27:42
Was ich nicht verstehe ist, warum ich diese Regel anwenden sollte, wenn die doch ja jeden INPUT [also jede Verbindung] erlaubt?
Weil ich nicht weiß, ob Du die INPUT-Regeln [für jede erlaubte eingehende Verbindung], auch an der richtigen Stelle in der INPUT chain positioniert hast.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:27:42
Wäre ja dem entgegen gesetzt, was mit der Default-Policy definiert wurde..?
Nein, denn die default-Policy mit DROP soll sich ja auf NEW-Verbindungen beziehen und nicht auf RELATED-/ESTABLISHED-Verbindungen. Ich denke nicht, dass Du so genau einschätzen kannst, von welchem source-Port aus dem Internet, eingehende RELATED-/ESTABLISHED-Verbindungen stammen können, oder?

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 15:31:46

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:59:19
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:27:42
Wäre ja dem entgegen gesetzt, was mit der Default-Policy definiert wurde..?
Nein, denn die default-Policy mit DROP soll sich ja auf NEW-Verbindungen beziehen und nicht auf RELATED-/ESTABLISHED-Verbindungen.
Okay, stimmt...
mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 14:59:19
Ich denke nicht, dass Du so genau einschätzen kannst, von welchem source-Port aus dem Internet, eingehende RELATED-/ESTABLISHED-Verbindungen stammen können, oder?
Klar, das ist so. Nur verstehe ich nicht, warum du mich das fragst?

1. Wenn der RasPi eine Namensauflösung macht, macht er doch eine neue Verbindung [ausgehend] auf
2. Das entsprechende Programm(/DNS-Client?) funkt also zum (ausgehend/bereits etabliert) DSN-Server die Anfrage und bekommt eine Antwort (aus obiger Verbindung - also nicht über eine neue Verbindung und auch keine bereits zum [eingehend] RasPi bestehenden Verbindung).
3. Wozu braucht es also die erlaubte eingehende RELATED-/ESTABLISHED-Verbindungsregel (auf der 1. Position in der Tabelle der INPUT-chain)?

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 16:04:31

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 15:31:46
3. Wozu braucht es also die erlaubte eingehende RELATED-/ESTABLISHED-Verbindungsregel (auf der 1. Position in der Tabelle der INPUT-chain)?
Wenn diese Regeln nicht auf der 1. Position der INPUT chain ist, kann es passieren, dass eine andere vorherige Regel zutrifft und den eingehenden Traffic somit blockt.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 16:41:56

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Mit der von dir angegebenen Regel, sieht die iptables-Tabelle wie folgt aus:

Code: Alles auswählen

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.1.0/24       0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
Naja, nicht ganz, denn Du konntest es nicht lassen doch eine andere Regel auf die 1. Position zu setzen. ;-)
Viele andere Regeln die Du z. Zt. in deiner INPUT chain hast sind überflüssig und werden m. E. nicht wirksam werden (müssen). Aber OK, sie schaden auch nicht.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Auch ein 'nmap' (vom gemieteten Server aus abgesetzt) zeigt, dass Ports offen sind, die nicht offen sein dürften (und sie sind es auch nicht, wenn ich deine obige Regel weglasse):
Na klar, denn Portscans mit nmap aus dem _Internet_ sind NEW-Verbindungen und "meine" Regel bezieht sich nur auf eingehende RELATED-/ESTABLISHED-Verbindungen und hat mit NEW-Verbindungen nichts zu tun.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Wo hab ich also einen [Denk-]Fehler..?
Mache in deinem Router nur für die Ports eine Weiterleitung, die Du auch aus dem Internet erreichen willst.

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 16:43:49

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:04:31
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 15:31:46
3. Wozu braucht es also die erlaubte eingehende RELATED-/ESTABLISHED-Verbindungsregel (auf der 1. Position in der Tabelle der INPUT-chain)?
Wenn diese Regeln nicht auf der 1. Position der INPUT chain ist, kann es passieren, dass eine andere vorherige Regel zutrifft und den eingehenden Traffic somit blockt.
Kannst du diesen "eingehenden Traffic" bitte genau(er) erklären?

Ich habe oben versucht zu erklären, dass ich nicht verstehe, warum es eine eingehende Verbindung (bei der Namensauflösung) braucht.

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 16:45:34

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:41:56
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Mit der von dir angegebenen Regel, sieht die iptables-Tabelle wie folgt aus:

Code: Alles auswählen

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.1.0/24       0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
Naja, nicht ganz, denn Du konntest es nicht lassen doch eine andere Regel auf die 1. Position zu setzen. ;-)
Viele andere Regeln die Du z. Zt. in deiner INPUT chain hast sind überflüssig und werden m. E. nicht wirksam werden (müssen). Aber OK, sie schaden auch nicht.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Auch ein 'nmap' (vom gemieteten Server aus abgesetzt) zeigt, dass Ports offen sind, die nicht offen sein dürften (und sie sind es auch nicht, wenn ich deine obige Regel weglasse):
Na klar, denn Portscans mit nmap aus dem _Internet_ sind NEW-Verbindungen und "meine" Regel bezieht sich nur auf eingehende RELATED-/ESTABLISHED-Verbindungen und hat mit NEW-Verbindungen nichts zu tun.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:31:55
Wo hab ich also einen [Denk-]Fehler..?
Mache in deinem Router nur für die Ports eine Weiterleitung, die Du auch aus dem Internet erreichen willst.
Der Post (den ich inzwischen gelöscht habe) war mein Fehler. Ich hatte deine Regel inkl. dem "NEW" angegeben gehabt *schäm* ... sorry ...

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 16:46:17

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:43:49
Ich habe oben versucht zu erklären, dass ich nicht verstehe, warum es eine eingehende Verbindung (bei der Namensauflösung) braucht.
Bei der Namesauflösung (DNS) braucht es keine eingehende NEW-Verbindung, es braucht lediglich erlaubte eingehende RELATED-/ESTABLSHED-Verbindungen für die Namensauflösung (DNS).

EDIT:

Oder stellst Du evtl. Pihole mit deinem PI im (W)LAN zur Verfügung?

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 16:56:39

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:46:17
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:43:49
Ich habe oben versucht zu erklären, dass ich nicht verstehe, warum es eine eingehende Verbindung (bei der Namensauflösung) braucht.
Bei der Namesauflösung (DNS) braucht es keine eingehende NEW-Verbindung, es braucht lediglich erlaubte eingehende RELATED-/ESTABLSHED-Verbindungen für die Namensauflösung (DNS).
[/qoute]
Hmm, also geht es bei der default-Policy (demfall: All DROP first) darum, jeglichen eingehenden Traffic zu blocken (solange nicht etwas explizit erlaubt)? Also auch einen Traffic, der über eine (vom RasPi aus gesehen) ausgehende Verbindung läuft?
mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:46:17
EDIT:
Oder stellst Du evtl. Pihole mit deinem PI im (W)LAN zur Verfügung?
Nein. Da ist auch nichts mit WLAN.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 17:01:31

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:56:39
Hmm, also geht es bei der default-Policy (demfall: All DROP first) darum, jeglichen eingehenden Traffic zu blocken (solange nicht etwas explizit erlaubt)? Also auch einen Traffic, der über eine (vom RasPi aus gesehen) ausgehende Verbindung läuft?
Eine ausgehende Verbindung betrifft die OUTPUT chain und dort ist ja die default policy auf ACCEPT.
In der INPUT chain werden nur die eingehenden Verbindung berücksichtigt.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 16:56:39
Nein. Da ist auch nichts mit WLAN.
Dann wirst Du auch keine eingehende NEW-Verbindung zum PI, für DNS/Namensauflösung auf dem PI, brauchen.
Zuletzt geändert von mat6937 am 06.06.2021 17:04:11, insgesamt 1-mal geändert.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: iptables-Regeln

Beitrag von eggy » 06.06.2021 17:01:45

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 15:31:46
1. Wenn der RasPi eine Namensauflösung macht, macht er doch eine neue Verbindung [ausgehend] auf
2. Das entsprechende Programm(/DNS-Client?) funkt also zum (ausgehend/bereits etabliert) DSN-Server die Anfrage und bekommt eine Antwort (aus obiger Verbindung - also nicht über eine neue Verbindung und auch keine bereits zum [eingehend] RasPi bestehenden Verbindung).
3. Wozu braucht es also die erlaubte eingehende RELATED-/ESTABLISHED-Verbindungsregel (auf der 1. Position in der Tabelle der INPUT-chain)?
zu Obrigem:
1. kommt drauf an.
Wer auf dem PI macht die Namensauflösung und wie?
Gehen wir mal davon aus, Du meinst den Resolver, welcher hier mal via UDP beim DNS-Server anfragt.
2. hier ist dann der Fehler: Bei UDP ist nichts etabliert. UDP ist ein sogenanntes "verbindungsloses Protokoll".
3. RELATED wird benutzt, um zu erraten, dass die Antwort zu der Anfrage gehört.

Bei TCP siehts etwas anders aus.
Aber auch hier spielt "gehört zur TCP Verbindung" erstmal für iptables keine Rolle - solange Du nicht explizit darauf verweist (established). Grundsätzlich brauchst Du getrennte Regeln für beide Richtungen. Nur spart man sich die Rückrichtung oft, indem man faul "related, established" nutzt.
LOCAL_IPv4='127.0.0.1'
LOCALHOST_IPv4='127.0.1.1'
HOME_IPv4_SUBNET='192.168.1'
HOME_IPv4_NET="$HOME_IPv4_SUBNET.0/24"
PUBLIC_IPv4_NET='0.0.0.0/0'
Mal ne Frage am Rande, hat die Kiste keine "richtige" V4 IP?
Falls das nicht (komische) Absicht ist: 127.x.x.x ist loopback und nicht das lokale Netz.

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 06.06.2021 17:21:03

eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:01:45
1. kommt drauf an.
Wer auf dem PI macht die Namensauflösung und wie?
Gehen wir mal davon aus, Du meinst den Resolver, welcher hier mal via UDP beim DNS-Server anfragt.
2. hier ist dann der Fehler: Bei UDP ist nichts etabliert. UDP ist ein sogenanntes "verbindungsloses Protokoll".
3. RELATED wird benutzt, um zu erraten, dass die Antwort zu der Anfrage gehört.

Bei TCP siehts etwas anders aus.
Aber auch hier spielt "gehört zur TCP Verbindung" erstmal für iptables keine Rolle - solange Du nicht explizit darauf verweist (established). Grundsätzlich brauchst Du getrennte Regeln für beide Richtungen. Nur spart man sich die Rückrichtung oft, indem man faul "related, established" nutzt.
Zu 1.: Naja egal ob ich ein nslookup mache, oder z.B. apt den/die Debian-Server anfragt.
Zu 2.: Stimmt, aber auch der Traffic wird doch in der default-Policy berücksichtigt, oder?
Zu 3. & nachfolgendem Text: Ich denke jetzt kommen wir der Sache etwas näher ^^ ...

Also, so wie ich das jetzt verstehe, läuft das so ab:
1. Ein Programm/Dienst macht eine ausgehende Verbindung ins Internet auf (z.B. DNS) - jetzt steht eine Leitung. Auf dieser Leitung werden die angefragten Daten auf der selben Leitung zum betr. Dienst/Programm "rücktransportiert", ABER auch auf diesem "Rücktransport" greift die INPUT-chain ... richtig? Also wenn in der INPUT-chain kein RELATED-/ESTABLISHED grundsätzlich erlaubt ist, wird dieser Traffic - auch wenn das keine eingehende Verbindung ist - von iptables herausgefiltert - spricht: Es wird diesem Rück-Traffic nicht erlaubt das Ziel (Dienst/Programm auf dem RasPi) zu erreichen.
Hab ich das jetzt richtig verstanden?
eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:01:45
LOCAL_IPv4='127.0.0.1'
LOCALHOST_IPv4='127.0.1.1'
HOME_IPv4_SUBNET='192.168.1'
HOME_IPv4_NET="$HOME_IPv4_SUBNET.0/24"
PUBLIC_IPv4_NET='0.0.0.0/0'

Mal ne Frage am Rande, hat die Kiste keine "richtige" V4 IP?
Keine öffentliche nein. Ich hab ein dyndns (inkl. Domainnamen) dort eingerichtet.
eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:01:45
Falls das nicht (komische) Absicht ist: 127.x.x.x ist loopback und nicht das lokale Netz.
Du meinst, dass das Loopback hier ne komische Bezeichnung von mir hat? ... das kann man auch sonstwie nennen, Hauptsache ich weiss im Script für was es steht ;-D ...

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 18:36:29

eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:01:45
Gehen wir mal davon aus, Du meinst den Resolver, welcher hier mal via UDP beim DNS-Server anfragt.
2. hier ist dann der Fehler: Bei UDP ist nichts etabliert. UDP ist ein sogenanntes "verbindungsloses Protokoll".
Ja es ist richtig, dass UDP (im Verglich zu TCP) ein "verbindungsloses Protokoll" ist. D. h. aber nicht, dass iptables nicht den Zustand einer UDP-Verbindung erkennen kann. Z. B.:

Code: Alles auswählen

iptables -I INPUT 1 -i eth0 -p udp --sport 53 -m state --state ESTABLISHED -j DROP

Code: Alles auswählen

:~# host heise.de 4.2.2.1
;; connection timed out; no servers could be reached
danach:

Code: Alles auswählen

iptables -D INPUT 1

Code: Alles auswählen

:~# host heise.de 4.2.2.1
Using domain server:
Name: 4.2.2.1
Address: 4.2.2.1#53
Aliases: 
heise.de has address 193.99.144.80
heise.de has IPv6 address 2a02:2e0:3fe:1001:302::
heise.de mail is handled by 10 relay.heise.de.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 06.06.2021 18:42:45

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Also wenn in der INPUT-chain kein RELATED-/ESTABLISHED grundsätzlich erlaubt ist, wird dieser Traffic - auch wenn das keine eingehende Verbindung ist - von iptables herausgefiltert - spricht: Es wird diesem Rück-Traffic nicht erlaubt das Ziel (Dienst/Programm auf dem RasPi) zu erreichen.
Hab ich das jetzt richtig verstanden?
BTW: Wenn es um die INPUT chain (auch Rück-Traffic) geht, ist es immer eine _eingehende_ Verbindung.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: iptables-Regeln

Beitrag von eggy » 06.06.2021 19:10:13

worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 1.: Naja egal ob ich ein nslookup mache, oder z.B. apt den/die Debian-Server anfragt.
Ja und Nein. So einfach ist das nicht.
Es gibt mehrere Arten Namensauflösung zu machen, eine davon ist ne DNS Anfrage. Und wie die gemacht wird, gibt unterschiedliche Methoden. Ohne Dich jetzt mit Details zuwerfen zu wollen, entweder man greift auf nen externes Programm/Bibliothek (unspezifisch als "Resolver" bezeichnet) zurück oder macht die Anfrage im Programm selbst. Dann gibt's Unterschiede darin, welche Anfrage (Query) gestellt wird, und dann gibt's noch unterschiedliche Arten, wie man die Anfrage stellen kann, rekursiv/iterativ z.B., von Spezialzeug wie DNSSec mal ganz abgesehn. Bestimmte Queries (bzw deren Länge) bedeuten einfach, dass TCP sinnvoller ist, historisch war es UDP, heute je nach Anwendungsfalls und/oder System mal so mal so. Und um die Verwirrung zu perfektionieren gibts auch noch die nsswitch.conf.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 2.: Stimmt, aber auch der Traffic wird doch in der default-Policy berücksichtigt, oder?
Für iptables ohne Erweitung gibt es nicht "den Traffic". Es gibt Pakete. Einzelne. Erstmal alles ohne Logik.
Das was-gehört-wozu kommt erst später (unter anderem durch die connection tracking Module).
Iptables arbeitet sein Regelwerk von oben nach unten ab, grundsätzlich gilt erstmal "erster Treffer zählt".
Wenn irgendwo beim Abarbeiten des Regelwerks nen "-j ACCEPT" kommt, darf das Paket passieren, kommt nen "-j DROP" eben nicht. Und die Policy sagt nur "was mach ich mit den Paketen, wenn ich unten angekommen bin und für die ich bis dahin noch nichts entschieden habe".
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 3. & nachfolgendem Text: Ich denke jetzt kommen wir der Sache etwas näher ^^ ...

Also, so wie ich das jetzt verstehe, läuft das so ab:
1. Ein Programm/Dienst macht eine ausgehende Verbindung ins Internet auf (z.B. DNS) - jetzt steht eine Leitung.
Nö. Unterschied TCP/UDP lies Dich da mal ein.
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Auf dieser Leitung werden die angefragten Daten auf der selben Leitung zum betr. Dienst/Programm "rücktransportiert", ABER auch auf diesem "Rücktransport" greift die INPUT-chain ... richtig?
Nein, loopback (127.x.x.x) hat ne besondere Bedeutung und ist nicht das Lan lokale Interface. Dein Rechner hat noch ne weiteres "Netzwerkinterface" zumindest in der Logik der Paketvermittlung und damit bei iptables, das Rechner lokale, Pakete die der Rechner nur an sich selbst sendet, ohne dass sie physikalisch auf die Kabel kommen. Der Unterschied spielt ne wichtig Rolle. Und Dein Script erweckt den Eindruck, dass Dir der Unterschied noch nicht bewusst ist. Deswegen: Lokale IP (192.168.x.x zB ) ist nicht loopback (127.x.x.x)!
Lies nochmal dazu nochmal nach.

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 07.06.2021 09:03:48

mat6937 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 18:42:45
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Also wenn in der INPUT-chain kein RELATED-/ESTABLISHED grundsätzlich erlaubt ist, wird dieser Traffic - auch wenn das keine eingehende Verbindung ist - von iptables herausgefiltert - spricht: Es wird diesem Rück-Traffic nicht erlaubt das Ziel (Dienst/Programm auf dem RasPi) zu erreichen.
Hab ich das jetzt richtig verstanden?
BTW: Wenn es um die INPUT chain (auch Rück-Traffic) geht, ist es immer eine _eingehende_ Verbindung.
Alles klar, danke :THX:

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 07.06.2021 09:13:09

eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 19:10:13
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 1.: Naja egal ob ich ein nslookup mache, oder z.B. apt den/die Debian-Server anfragt.
Ja und Nein. So einfach ist das nicht.
Es gibt mehrere Arten Namensauflösung zu machen, eine davon ist ne DNS Anfrage. Und wie die gemacht wird, gibt unterschiedliche Methoden. Ohne Dich jetzt mit Details zuwerfen zu wollen, entweder man greift auf nen externes Programm/Bibliothek (unspezifisch als "Resolver" bezeichnet) zurück oder macht die Anfrage im Programm selbst. Dann gibt's Unterschiede darin, welche Anfrage (Query) gestellt wird, und dann gibt's noch unterschiedliche Arten, wie man die Anfrage stellen kann, rekursiv/iterativ z.B., von Spezialzeug wie DNSSec mal ganz abgesehn. Bestimmte Queries (bzw deren Länge) bedeuten einfach, dass TCP sinnvoller ist, historisch war es UDP, heute je nach Anwendungsfalls und/oder System mal so mal so. Und um die Verwirrung zu perfektionieren gibts auch noch die nsswitch.conf.
Ja, die Verwirrung ist komplett :D ...
eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 19:10:13
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 2.: Stimmt, aber auch der Traffic wird doch in der default-Policy berücksichtigt, oder?
Für iptables ohne Erweitung gibt es nicht "den Traffic". Es gibt Pakete. Einzelne. Erstmal alles ohne Logik.
Das was-gehört-wozu kommt erst später (unter anderem durch die connection tracking Module).
Iptables arbeitet sein Regelwerk von oben nach unten ab, grundsätzlich gilt erstmal "erster Treffer zählt".
Wenn irgendwo beim Abarbeiten des Regelwerks nen "-j ACCEPT" kommt, darf das Paket passieren, kommt nen "-j DROP" eben nicht. Und die Policy sagt nur "was mach ich mit den Paketen, wenn ich unten angekommen bin und für die ich bis dahin noch nichts entschieden habe".
Ja, das weiss ich. Ich bin es vereinfacht angegangen ("Traffic"), da ich die "tiefere" Funktionsweise der Paket-Verarbeitung (die einzelnen Layer-Schichten, etc. bis hin zum physikalischen Geschehen) nicht kenne, bzw. mir denke, dass ich das ganze Networking nicht ins Detail studiert haben muss, um zu wissen, welche Regel wann anzuwenden ist, damit ein Dienst, etc. ins Netz offen sein kann.
Klar, die Positionen für die Reglen sind wichtig und - wie ich jetzt weiss - ist es auch wichtig, dass der (für meine Begriffe) "Rück-Traffic" auch zurück kommt und nicht geblockt wird.
eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 19:10:13
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Zu 3. & nachfolgendem Text: Ich denke jetzt kommen wir der Sache etwas näher ^^ ...

Also, so wie ich das jetzt verstehe, läuft das so ab:
1. Ein Programm/Dienst macht eine ausgehende Verbindung ins Internet auf (z.B. DNS) - jetzt steht eine Leitung.
Nö. Unterschied TCP/UDP lies Dich da mal ein.
Da verwirrst du mich aber nochmals. Ich bin hier von einer TCP-Verbindung ausgegangen, um erstmal das grundsätzliche Verständnis für meine Problematik zu bekommen. UDP ist dann wohl anders, da ja verbindungslos...
eggy hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 19:10:13
worker777 hat geschrieben: ↑ zum Beitrag ↑
06.06.2021 17:21:03
Auf dieser Leitung werden die angefragten Daten auf der selben Leitung zum betr. Dienst/Programm "rücktransportiert", ABER auch auf diesem "Rücktransport" greift die INPUT-chain ... richtig?
Nein, loopback (127.x.x.x) hat ne besondere Bedeutung und ist nicht das Lan lokale Interface. Dein Rechner hat noch ne weiteres "Netzwerkinterface" zumindest in der Logik der Paketvermittlung und damit bei iptables, das Rechner lokale, Pakete die der Rechner nur an sich selbst sendet, ohne dass sie physikalisch auf die Kabel kommen. Der Unterschied spielt ne wichtig Rolle. Und Dein Script erweckt den Eindruck, dass Dir der Unterschied noch nicht bewusst ist. Deswegen: Lokale IP (192.168.x.x zB ) ist nicht loopback (127.x.x.x)!
Lies nochmal dazu nochmal nach.
Warum bringst du hier das Loopback ins Spiel?
Das Loopback kenne ich und auch dessen Bedeutung ist mir bekannt, nur warum du das jetzt hier erwähnst verstehe ich nicht...

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 07.06.2021 09:53:10

worker777 hat geschrieben: ↑ zum Beitrag ↑
07.06.2021 09:13:09
Ich bin hier von einer TCP-Verbindung ausgegangen, um erstmal das grundsätzliche Verständnis für meine Problematik zu bekommen. UDP ist dann wohl anders, da ja verbindungslos...
D. h. aber nicht, dass Du bei UDP mit iptables, die Verbindung (bzw. den Datenverkehr) _zum_ Server und _vom_ Server genau so "regeln" kannst wie bei TCP.
Es gibt tools mit denen Du das anschauen kannst. Z. B.:

Code: Alles auswählen

tcpdump -c 100 -vvveni eth0 src port 53

Code: Alles auswählen

host -t a -T heise.de 1.1.1.1
und (mit UDP statt TCP)

Code: Alles auswählen

host -t a heise.de 9.9.9.9
Wenn Du mit dnssec testen willst, kannst Du z. B. dig benutzen:

Code: Alles auswählen

dig +dnssec bund.de @9.9.9.9
Bei DNS over TLS (DoT) wird vom Server der TCP-Port 853 benutzt und bei DNS over HTTPS (DoH) wird der Server auf seinem lauschenden TCP-Port 443 erreicht. Es gibt auch Tools zum testen von DoT bzw. DoH:

Code: Alles auswählen

:~ $ doh berlin.de                
[berlin.de]
TTL: 76835 seconds
A: 109.68.230.145
AAAA: 2a00:13c8:00f5:0000:0000:0393:8a4d:0002

Code: Alles auswählen

:~ $ doh hamburg.de https://dns.quad9.net/dns-query
[hamburg.de]
TTL: 300 seconds
A: 212.1.41.12
AAAA: 2a02:0ad0:0005:0001:0000:0000:0000:0012

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 07.06.2021 10:53:06

mat6937 hat geschrieben: ↑ zum Beitrag ↑
07.06.2021 09:53:10
D. h. aber nicht, dass Du bei UDP mit iptables, die Verbindung (bzw. den Datenverkehr) _zum_ Server und _vom_ Server genau so "regeln" kannst wie bei TCP.
Es gibt tools mit denen Du das anschauen kannst. Z. B.:

Code: Alles auswählen

tcpdump -c 100 -vvveni eth0 src port 53
Was es mit UDP und TCP genau auf sich hat, da muss ich mich noch einlesen. Die Ausgabe von tcpdump (wenn ich dann z.B. ein 'nslookup' mache) verstehe ich auch nicht. Das ist mir dann zu tief in der Tiefe ^^ ...
Leider habe ich im Moment nicht die nötige Zeit dafür, aber irgendwann möchte ich schon noch den genauen Unterschied zwischen UDP und TCP (insbes. in Verbindung mit Paketfiltern) verstehen.

Jedenfalls danke für die Hilfe!

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: iptables-Regeln

Beitrag von mat6937 » 07.06.2021 11:13:15

worker777 hat geschrieben: ↑ zum Beitrag ↑
07.06.2021 10:53:06
..., aber irgendwann möchte ich schon noch den genauen Unterschied zwischen UDP und TCP (insbes. in Verbindung mit Paketfiltern) verstehen.
Ein wesentlicher Unterschied ist, dass man für TCP-Verbindungen, im Paketfilter tcp-flags benutzen kann und bei UDP gibt es das nicht. Z. B.:

Code: Alles auswählen

iptables -I INPUT 1 -t security -i <input-Interface> -p tcp --tcp-flags SYN,ACK SYN,ACK -s <source-IP-Adresse> -m ecn ! --ecn-tcp-ece -j DROP
Siehe auch:

Code: Alles auswählen

man iptables-extensions | grep -i tcp-flags

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: iptables-Regeln

Beitrag von eggy » 07.06.2021 16:31:48

@mat6937: man braucht nicht mal bis doh zu gehen, +tcp bzw +notcp (ist default) reicht bei dig schon aus.
UDP: zwei Zeilen; TCP: fast nen halber Bildschirm voll

@worker777: ohne grundlegendes Verständnis der Protokolle, wird Deine Selbstbau-Firewall vermutlich löchrig wie nen schweizer Käse.
Du kannst gerne mal im Jabber vorbei schauen, im "Gespräch" lässt sich vielleicht einfacher rausfinden, wo Deine Verwirrung herkommt und wie man sie loswird.
Falls Du nen Buch zu der Materie suchst: "Kurose: Computernetworks - A Top-Down-Approach.", gibts auch auf Deutsch, Titel so ähnlich, liest sich bequem weg.

worker777
Beiträge: 103
Registriert: 14.04.2015 07:59:26

Re: iptables-Regeln

Beitrag von worker777 » 07.06.2021 19:53:43

@mat6937:
Alles klar, danke dir.

@eggy:
Ja, mit dem Schweizerkäse haste absolut recht - ich krieg das nicht gebacken, vor allem das IPv6. Hab den RasPi jetzt wieder hinter die Router-FW "gestellt" und die Ports wieder freigeschaltet, da ich im Moment einfach leider keine Zeit dafür habe .... ärgerlich(!).
Danke auch für's Jabber Angebot, aber wie gesagt, im Moment geht das zeitlich einfach nicht. Und für sowas brauch ich reichlich Zeit und Ruhe, sonst wird das nix ^^ ...

Ich habe mir einiges hier rauskopiert und wenn ich dann wieder Zeit dafür habe, werde ich es hervorholen - Eure Zeit/Mühe ist also nicht vergebens gewesen ;-)
Vielen Dank, auch für die Geduld! :THX:

Antworten