ufw: IP darf hörenden Server-Port nicht ansprechen

Gemeinsam ins Internet mit Firewall und Proxy.
Antworten
buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 15.10.2022 22:25:50

Ich denke, das Subject offenbart meine Netzwerk-Firewall-Wissens-Level sehr gut. ;)

Auf meinem Server hören 4 Dienste (jeweils eine Debianminidlnad Instanz) auf den Ports 8201 bis 8204. Das kann ich per lsof auch verifizieren.
Diverse Clients in meinem Netz nutzen diese 4 Dienste. Ich möchte allerdings einen einzigen Client per IP (192.168.178.20) ausschließen.
Ich bekomme die Regel per Debianufw einfach nicht hin.

Einer meiner letzten Versuche ware

Code: Alles auswählen

ufw deny from 192.168.178.20 to port 8201
und erhalte ein "Wrong number of arguments".

Als Alternative habe ich versucht die andere Richtung zu blockieren.

Code: Alles auswählen

ufw deny to 192.168.178.20 port 13000
Die Regel wird akzeptiert, aber zeigt auch keinen Effekt. In "lsof" sehe ich dennoch solche Zeilen

Code: Alles auswählen

minidlnad 30464      backup    8u  IPv4 437922      0t0  TCP *:8204 (LISTEN)
minidlnad 30464      backup   10u  IPv4 435891      0t0  TCP OLAF.fritz.box:37548->192.168.178.20:13000 (ESTABLISHED)
minidlnad 30464      backup   11u  IPv4 435894      0t0  TCP OLAF.fritz.box:37550->192.168.178.20:13000 (ESTABLISHED)
minidlnad 30464      backup   13u  IPv4 435888      0t0  TCP OLAF.fritz.box:37534->192.168.178.20:13000 (ESTABLISHED)
minidlnad 30464      backup   14u  IPv4 435911      0t0  TCP OLAF.fritz.box:57998->192.168.178.20:13000 (CLOSE_WAIT)
minidlnad 30464      backup   15u  IPv4 435904      0t0  TCP OLAF.fritz.box:57974->192.168.178.20:13000 (CLOSE_WAIT)
minidlnad 30464      backup   16u  IPv4 435908      0t0  TCP OLAF.fritz.box:57982->192.168.178.20:13000 (CLOSE_WAIT)
minidlnad 30464      backup   17u  IPv4 435921      0t0  TCP OLAF.fritz.box:56398->KodiPi.fritz.box:1533 (CLOSE_WAIT)
minidlnad 30464      backup   18u  IPv4 435925      0t0  TCP OLAF.fritz.box:56402->KodiPi.fritz.box:1533 (CLOSE_WAIT)
OLAF ist der Server; headless Debian 11.
Und der Client ist ein SonyTV.

Hintergrund: Die Verbindungen zwischen dem TV und dem minidlnda beleiben "bestehen", obwohl der TV bereits stundenlang, nicht einfach nur ausgeschaltet, sondern wirklich physisch vom Strom getrennt ist.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von mat6937 » 15.10.2022 23:31:21

buhtz hat geschrieben: ↑ zum Beitrag ↑
15.10.2022 22:25:50
Ich möchte allerdings einen einzigen Client per IP (192.168.178.20) ausschließen.
Ich bekomme die Regel per Debianufw einfach nicht hin.

Einer meiner letzten Versuche ware

Code: Alles auswählen

ufw deny from 192.168.178.20 to port 8201
und erhalte ein "Wrong number of arguments".
Dann versuch mal mit iptables:

Code: Alles auswählen

iptables -I INPUT 1 -i eth0 -p tcp -s 192.168.178.20 --dport 8201 -j REJECT
eth0 evtl anpassen.

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 16.10.2022 08:35:17

mat6937 hat geschrieben: ↑ zum Beitrag ↑
15.10.2022 23:31:21
Dann versuch mal mit iptables:

Code: Alles auswählen

iptables -I INPUT 1 -i eth0 -p tcp -s 192.168.178.20 --dport 8201 -j REJECT
eth0 evtl anpassen.
Super, das funktioniert. Dank dir.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 21.10.2022 20:27:53

Ähm... Scheint doch (nicht mehr) zu funktionieren.

Kann es sein, dass man diese Regel irgendwo eintragen muss, um sie persistent zu machen?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
debilian
Beiträge: 1162
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von debilian » 21.10.2022 22:31:09

-- nichts bewegt Sie wie ein GNU --

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 22.10.2022 08:19:00

debilian hat geschrieben: ↑ zum Beitrag ↑
21.10.2022 22:31:09
kannst du machen:
https://www.thomas-krenn.com/de/wiki/Ip ... _speichern
Als Nicht-Admin/Anfänger würde ich mir die Infos manchmal präziser wünschen.

"Kann" oder "muss"?

Ich nutze hier Debian 11. Die hinter dem Link (von Januar letzten Jahres) gezeigten Lösungen sind mutmaßlich nicht passend. Die dortige "Debian" Lösung beschreiben die Nutzung der Datei /etc/iptables/rules.v4.

Einen Abschnitt weiter unten wird aber im Kontext von REHL der Dienst iptablesd erwähnt. Da Debian seit "Neustem" ja auch SystemD einsetzt, vermute ich nun, dass der Debian-Abschnitt eigentlich out-of-date ist und der REHL Abschnitt gilt.

Ich habe großen Respekt vor diesen Bereichen des Systems und möchte hier daher nicht einfach mal rumspielen.

Welcher ist der empfohlene Weg?

Und warum nutzen wir eigentlich nicht nftables wie im Debian-Wiki (1. Absatz) empfohlen?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
debilian
Beiträge: 1162
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von debilian » 22.10.2022 09:01:42

buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 08:19:00
Als Nicht-Admin/Anfänger würde ich mir die Infos manchmal präziser wünschen.
Deine Kritik mag berechtigt sein, inhaltlich geben sich die Wiki oder die TK Anleitung nicht viel.
ob deine Regeln nun in

Code: Alles auswählen

/etc/iptables/rules.v4
oder

Code: Alles auswählen

/etc/iptables.test.rules
geschrieben werden ist reine Geschmackssache,
da es sich nur um einen Beispiel Namen eine Textdatei handelt.

iptables ist ein grosses Werkzeug, firewalling insgesamt sowieso.
aber die 1-3 Regeln, die du persistent (also dauerhaft) haben möchtest sind es nicht.
darum; keine Angst und nimm den Weg, der dir besser gefällt, ich mag einfach manch TK Anleitung -
darum poste ich diese....

gruss
-- nichts bewegt Sie wie ein GNU --

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

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von mat6937 » 22.10.2022 09:10:02

buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 08:19:00
"Kann" oder "muss"?
"muss". Die Empfehlung war, erst mal zum testen und davor musste die Regel nicht persistent sein.
Da Du ufw benutzt, hättest Du die Regel "umschreiben" sollen/können in "ufw-Syntax" (die ich richtigerweise nicht kenne).
buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 08:19:00
Ich nutze hier Debian 11. Die hinter dem Link (von Januar letzten Jahres) gezeigten Lösungen sind mutmaßlich nicht passend. Die dortige "Debian" Lösung beschreiben die Nutzung der Datei /etc/iptables/rules.v4.

Einen Abschnitt weiter unten wird aber im Kontext von REHL der Dienst iptablesd erwähnt. Da Debian seit "Neustem" ja auch SystemD einsetzt, vermute ich nun, dass der Debian-Abschnitt eigentlich out-of-date ist und der REHL Abschnitt gilt.

Ich habe großen Respekt vor diesen Bereichen des Systems und möchte hier daher nicht einfach mal rumspielen.

Welcher ist der empfohlene Weg?
Der empfohlene Weg ist ufw zu deaktivieren/deinstallieren und netfilter-persistent zu benutzen. Das geht aber nur wenn Du die Syntax für iptables-Regeln kennst. Siehe auch die Ausgabe von:

Code: Alles auswählen

apt-cache show netfilter-persistent
netfilter-persistent benutzt "/etc/iptables/rules.v4"
buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 08:19:00
Und warum nutzen wir eigentlich nicht nftables wie im Debian-Wiki (1. Absatz) empfohlen?
Du kannst dich in die Syntax für nftables einarbeiten und dann auch diese benutzen. Ich mache das erst dann, wenn es die iptables-Syntax nicht mehr gibt, denn das "neue" iptables ist schon nftables und nicht mehr das alte iptables-legacy (das es auch noch gibt). Siehe z. B.:

Code: Alles auswählen

man xtables-nft-multi
vs.

Code: Alles auswählen

man xtables-legacy-multi
EDIT:

BTW: Selbst systemd benutzt (noch) das "alte" iptables-legacy. Wenn man z. B. mit systemd-networkd ein Interface konfiguriert und in dessen config-Datei die s-nat-Option "masquerade" setzt, wird von systemd-networkd (automatisch) eine iptables-legacy-Regel erstellt. Z. B.:

Code: Alles auswählen

:~# iptables-legacy -t nat -L POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  192.168.22.0/24      anywhere  

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 22.10.2022 13:13:52

Das Paket Debianiptables-persistent sollte als erstes installiert werden bevor man die Datei /etc/iptables/rules.v4 anlegt. Das Paket überschreibt die Datei nämlich, ohne darauf hinzuweisen (#1022231). Es gibt zwar eine nicht eindeutig verständliche Ja/Nein Abfrage, beim Installieren, die enthält aber nicht die Info, dass hier etwas überschrieben wird.

OK, ich habe die Regel jetzt in rules.v4 eingetragen und das Paket installiert. Mal sehen, wie sich der Server verhält.

Code: Alles auswählen

root@OLAF:/etc# apt install iptables-persistent

...

root@OLAF:/etc# cat /etc/iptables/rules.v4
iptables -I INPUT 1 -i eth0 -p tcp -s 192.168.178.20 --dport 8201 -j REJECT
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von mat6937 » 22.10.2022 14:02:43

buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 13:13:52
OK, ich habe die Regel jetzt in rules.v4 eingetragen und das Paket installiert. Mal sehen, wie sich der Server verhält.
Weißt Du wie der Eintrag in der "/etc/iptables/rules.v4"-Datei zustande kommt bzw. welches Format/Syntax dafür benutzt wird?
Z. B.:

Code: Alles auswählen

:~# cat /etc/iptables/rules.v4
# Generated by xtables-save v1.8.2 on ...
BTW: Du willst ufw und iptables-persistent, gleichzeitig/parallel benutzen bzw. aktiv haben?

Wie sind bei dir, z. Zt. die Ausgaben von:

Code: Alles auswählen

systemctl status netfilter-persistent
systemctl is-enabled netfilter-persistent
systemctl is-active netfilter-persistent
?

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 22.10.2022 15:12:31

Debianufw hab ich natürlich vorher entfernt (purge).

Von der rule syntax weiß ich nichts. Da dies in den Links nicht explizit benannt und auch nicht weiter verlinkt wurde, ging ich davon aus, dass dies eben die selbe wie in der shell ist.
Ich habe meinen Eintrag dort per Debianvim reingeschrieben. ;)

Code: Alles auswählen

$ sudo systemctl status netfilter-persistent
● netfilter-persistent.service - netfilter persistent configuration
     Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/netfilter-persistent.service.d
             └─iptables.conf
     Active: failed (Result: exit-code) since Sat 2022-10-22 14:34:04 CEST; 37min ago
       Docs: man:netfilter-persistent(8)
    Process: 589 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=1/FAILURE)
   Main PID: 589 (code=exited, status=1/FAILURE)
        CPU: 8ms

Okt 22 14:34:04 OLAF systemd[1]: Starting netfilter persistent configuration...
Okt 22 14:34:04 OLAF netfilter-persistent[596]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables>
Okt 22 14:34:04 OLAF netfilter-persistent[600]: iptables-restore: line 1 failed
Okt 22 14:34:04 OLAF netfilter-persistent[596]: run-parts: /usr/share/netfilter-persistent/plugins.d/15-ip4tables exited wi>
Okt 22 14:34:04 OLAF netfilter-persistent[596]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables>
Okt 22 14:34:04 OLAF systemd[1]: netfilter-persistent.service: Main process exited, code=exited, status=1/FAILURE
Okt 22 14:34:04 OLAF systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
Okt 22 14:34:04 OLAF systemd[1]: Failed to start netfilter persistent configuration.

$ systemctl is-enabled netfilter-persistent
enabled

$ systemctl is-enabled netfilter-persistent
enabled
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von mat6937 » 23.10.2022 00:00:12

buhtz hat geschrieben: ↑ zum Beitrag ↑
22.10.2022 15:12:31
Von der rule syntax weiß ich nichts.

Code: Alles auswählen

Okt 22 14:34:04 OLAF systemd[1]: Failed to start netfilter persistent configuration.
"iptables-restore < /etc/iptables/rules.v4" konnte nicht angewendet werden, oder?

Erstelle deine erforderlichen iptables-Regeln manuell oder mit einem shell-Script, schau mit z. B.:

Code: Alles auswählen

iptables -nvx -L
iptables -nvx -L -t nat
nach, ob sie OK sind und wenn das der Fall ist führe:

Code: Alles auswählen

iptables-save > /etc/iptables/rules.v4
chmod 600 /etc/iptables/rules.v4
aus. Danach:

Code: Alles auswählen

systemctl daemon-reload
systemctl restart netfilter-persistent
und poste nach einem reboot, die Ausgabe von:

Code: Alles auswählen

systemctl status netfilter-persistent
Wenn Du nicht root bist und kein debian hast (Ubuntu oder Raspi-OS oder ??) musst Du sudo benutzen oder für iptables-save, evtl. root werden mit "sudo -i".
Achtung, dass Du dich mit iptables nicht aussperrst (vor allem bei headless Systemen).

buhtz
Beiträge: 1099
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von buhtz » 23.10.2022 14:02:25

Ich nutze hier Debian 11 (per sudo).

Code: Alles auswählen

$ cat /etc/os-release | grep PRETTY
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
mat6937 hat geschrieben: ↑ zum Beitrag ↑
23.10.2022 00:00:12
"iptables-restore < /etc/iptables/rules.v4" konnte nicht angewendet werden, oder?
Nein. Verstehe nicht warum ich das hätte tun sollen. Was tut der Befehl? Er liest die Reglen aus der rules Datei aus und lädt sie sozusagen in den "filter" (die "firewall")?
mat6937 hat geschrieben: ↑ zum Beitrag ↑
23.10.2022 00:00:12
Erstelle deine erforderlichen iptables-Regeln manuell oder mit einem shell-Script, schau mit z. B.:

Code: Alles auswählen

iptables -nvx -L
iptables -nvx -L -t nat
OK.

Code: Alles auswählen

$ sudo iptables -nvx -L
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 REJECT     tcp  --  eth0   *       192.168.178.20       0.0.0.0/0            tcp dpt:8201 reject-with icmp-port-unreachable

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

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

$ sudo iptables -nvx -L -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

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

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

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
mat6937 hat geschrieben: ↑ zum Beitrag ↑
23.10.2022 00:00:12

Code: Alles auswählen

iptables-save > /etc/iptables/rules.v4
chmod 600 /etc/iptables/rules.v4
Interessant.

Code: Alles auswählen

$ sudo cat /etc/iptables/rules.v4
# Generated by iptables-save v1.8.7 on Sun Oct 23 13:56:15 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.178.20/32 -i eth0 -p tcp -m tcp --dport 8201 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Sun Oct 23 13:56:15 2022

$ ll /etc/iptables/rules.v4
-rw------- 1 root root 293 23. Okt 13:56 /etc/iptables/rules.v4
mat6937 hat geschrieben: ↑ zum Beitrag ↑
23.10.2022 00:00:12
Danach:

Code: Alles auswählen

systemctl daemon-reload
systemctl restart netfilter-persistent
und poste nach einem reboot, die Ausgabe von:

Code: Alles auswählen

systemctl status netfilter-persistent

Code: Alles auswählen

● netfilter-persistent.service - netfilter persistent configuration
     Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/netfilter-persistent.service.d
             └─iptables.conf
     Active: active (exited) since Sun 2022-10-23 13:59:03 CEST; 1min 17s ago
       Docs: man:netfilter-persistent(8)
    Process: 598 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
   Main PID: 598 (code=exited, status=0/SUCCESS)
        CPU: 10ms

Okt 23 13:59:03 OLAF systemd[1]: Starting netfilter persistent configuration...
Okt 23 13:59:03 OLAF netfilter-persistent[605]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Okt 23 13:59:03 OLAF netfilter-persistent[605]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Okt 23 13:59:03 OLAF systemd[1]: Finished netfilter persistent configuration.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

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

Re: ufw: IP darf hörenden Server-Port nicht ansprechen

Beitrag von mat6937 » 23.10.2022 14:10:42

buhtz hat geschrieben: ↑ zum Beitrag ↑
23.10.2022 14:02:25

Code: Alles auswählen

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 REJECT     tcp  --  eth0   *       192.168.178.20       0.0.0.0/0            tcp dpt:8201 reject-with icmp-port-unreachable

Code: Alles auswählen

● netfilter-persistent.service - netfilter persistent configuration
     Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/netfilter-persistent.service.d
             └─iptables.conf
     Active: active (exited) since Sun 2022-10-23 13:59:03 CEST; 1min 17s ago
       Docs: man:netfilter-persistent(8)
    Process: 598 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
   Main PID: 598 (code=exited, status=0/SUCCESS)
        CPU: 10ms

Okt 23 13:59:03 OLAF systemd[1]: Starting netfilter persistent configuration...
Okt 23 13:59:03 OLAF netfilter-persistent[605]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Okt 23 13:59:03 OLAF netfilter-persistent[605]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Okt 23 13:59:03 OLAF systemd[1]: Finished netfilter persistent configuration.
D. h. es gibt nur eine einzige iptables-Regel in der INPUT chain, die Du benutzen willst/musst, oder?
Wenn ja, dann sollte es so richtig sein.

Antworten