Přesměrování portu 8080 na port 80 v nftables

Přesměrování portu 8080 na port 80 v nftables
« kdy: 24. 02. 2022, 11:36:19 »
Potřebuji na wan portu přesměrovat port 8080 na port 80 a nějak se mi to nedaří. Když povolím port 80, tak jsou otevřené oba porty 80 i 8080. Dík za nakopnutí.

Kód: [Vybrat]
#!/sbin/nft -f

### vymazani
flush ruleset

table ip filter {
        chain input {
        type filter hook input priority 0; policy drop;

### interfacy
        iifname eno1 ct state invalid counter drop
        iifname eno1 ct state established,related counter accept

        iifname enp3s0 accept
        iifname wlp2s0 accept
        iifname docker0 accept

### loopback
        iifname lo accept

### lokalni adresy
        ip saddr 172.16.0.0/12 accept

### icmp
        ip protocol icmp accept

### porty
        tcp dport 22 accept
        tcp dport 8080 accept
        #tcp dport 80 accept
        #tcp dport 443 accept
    }

        chain forward {
        type filter hook forward priority 0; policy accept;
        #tcp dport 8080 accept
    }

        chain output {
        type filter hook output priority 0; policy accept;
        #tcp dport 8080 accept
    }
}

table ip nat {
        chain postrouting {
        type nat hook postrouting priority 100;
        ip saddr 172.16.0.0/12 oifname eno1 masquerade
    }
        chain prerouting {
        type nat hook prerouting priority 100; policy accept;
        tcp dport 8080 redirect to :80
    }
}
« Poslední změna: 24. 02. 2022, 11:48:54 od Petr Krčmář »


Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #1 kdy: 24. 02. 2022, 12:02:57 »
Ještě doplním, že v /etc/sysctl.conf mám
net.ipv4.ip_forward=1
net.ipv4.conf.eno1.route_localnet=1 (tohle jsem zkusil doplnit podle nějakého návodu)

robin martinez

  • *****
  • 967
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #2 kdy: 24. 02. 2022, 13:05:56 »
neumim nft, ale predpokladam neco jako
Kód: [Vybrat]
tcp dport 8080 dnat :80
« Poslední změna: 24. 02. 2022, 13:07:52 od robin martinez »
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #3 kdy: 24. 02. 2022, 13:37:58 »
Myslíme tím přesměrováním portu "8080 na 80" Všichni to samé?
1. Myšlená krabička před routerem, který přepíše u příchozích paketů port 8080 na 80.  Co se pak děje s pakety na určitou dst-adresu je další krok problému.
2. Odklonění na lokální počítač (tuším že v pfsense /bsd se to to pravidlo jmenuje DIVERT)

 "V originále" man iptables-extensionjs je REDIRECT  a  volitelný parametr je číslo(rozsah) portu a toto pravidlo nasměruje porty na lokální počítač.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #4 kdy: 24. 02. 2022, 13:56:03 »
V iptables myslím stačilo přesměrovat port 8080 na 80 pomocí IP adresy wan portu 192.168.1.22 a fungovalo to.

V nftables jsem také zkoušel
Kód: [Vybrat]
ip daddr 192.168.1.22 tcp dport 8080 dnat 192.168.1.22:80 nebo 127.0.0.1:80
iifname eno1 tcp dport 8080 dnat 192.168.1.22:80 nebo 127.0.0.1:80
a nejde mi to.


Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #5 kdy: 24. 02. 2022, 16:12:24 »
Když povolím port 80, tak jsou otevřené oba porty 80 i 8080.
To je v pořádku. Přesměrování portu neřeší žádné „otevření“ či zavření“ portu. Přesměrování portu dělá jenom to, že v příchozím paketu přepíše číslo portu a v odchozím paketu to udělá opačně.

Podle mne ten váš zápis v nftables dělá to, že u paketů, které mají cílový port nastaven na 8080, změní cílový port na 80, IP adresu zachová. Na firewallu pak ale nemáte port 80 povolený, takže se paket zahodí.

Pokud nechcete, aby port 80 byl dostupný „z venku“, musíte zařídit, aby aplikace naslouchala jen na localhostu, v NATu paketům neměnit jen port, ale také je přesměrovat na localhost. A když komunikaci na firewallu zakazujete, musíte pak ten lokální port 80 povolit.

Princip je stejný, jako u iptables – tam byl také NAT nezávislý na firewallu a to, že jste NATem někam paket přesměroval ještě neznamenalo, že projde i firewallem.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #6 kdy: 24. 02. 2022, 16:43:45 »
V iptables jsem to míval do kříže a ve firewallu byl povolený port 8080, který byl otevřený, ale to jsem v nftables taky zkusil.
Kód: [Vybrat]
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            192.168.1.22          tcp dpt:8080 to:192.168.1.22:80
DNAT       tcp  --  0.0.0.0/0            192.168.1.22          tcp dpt:80 to:192.168.1.22:8080

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #7 kdy: 24. 02. 2022, 17:37:33 »
Kód: [Vybrat]
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            192.168.1.22          tcp dpt:8080 to:192.168.1.22:80
DNAT       tcp  --  0.0.0.0/0            192.168.1.22          tcp dpt:80 to:192.168.1.22:8080
Tohle vám fungovalo? Bál bych se, že se v případě uplatnění prvního pravidla uplatní i to druhé a vrátí to zase zpátky.

ve firewallu byl povolený port 8080, který byl otevřený, ale to jsem v nftables taky zkusil
Povolený musíte mít ten port, na který se DNATuje. Paketu se nejprve v PREROUTING změní port a teprve následně se uplatňují firewallová pravidla v INPUT nebo FORWARD. Takže pravidla musí odpovídat už tomu cílovému portu. (U SNATu je to opačně, ten se aplikuje až v POSTROUTING, takže firewall vidí ještě neupravené pakety.)

Každopádně když máte problém s NATem, je rozumné firewall nejprve úplně vypnout, nakonfigurovat správně NAT, a teprve pak začít konfigurovat firewall. Když řešíte obojí najednou, nevíte, kde dřív hledat chyby – jestli v NATu, nebo ve firewallu, nebo dokonce v aplikaci.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #8 kdy: 24. 02. 2022, 17:58:03 »
Mě by spíše pomohlo a nakoplo, jak změnit konfiguraci z prvního příspěvku, aby byl port 8080 otevřený.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #9 kdy: 24. 02. 2022, 19:45:56 »
Mě by spíše pomohlo a nakoplo, jak změnit konfiguraci z prvního příspěvku, aby byl port 8080 otevřený.
Já bych tam zkusil odkomentovat ten řádek, který povoluje komunikaci na portu 80:

Kód: [Vybrat]
#!/sbin/nft -f

### vymazani
flush ruleset

table ip filter {
        chain input {
        type filter hook input priority 0; policy drop;

### interfacy
        iifname eno1 ct state invalid counter drop
        iifname eno1 ct state established,related counter accept

        iifname enp3s0 accept
        iifname wlp2s0 accept
        iifname docker0 accept

### loopback
        iifname lo accept

### lokalni adresy
        ip saddr 172.16.0.0/12 accept

### icmp
        ip protocol icmp accept

### porty
        tcp dport 22 accept
        tcp dport 8080 accept
################# následující řádek jsem odkomentoval ##########################
        tcp dport 80 accept
        #tcp dport 443 accept
    }

        chain forward {
        type filter hook forward priority 0; policy accept;
        #tcp dport 8080 accept
    }

        chain output {
        type filter hook output priority 0; policy accept;
        #tcp dport 8080 accept
    }
}

table ip nat {
        chain postrouting {
        type nat hook postrouting priority 100;
        ip saddr 172.16.0.0/12 oifname eno1 masquerade
    }
        chain prerouting {
        type nat hook prerouting priority 100; policy accept;
        tcp dport 8080 redirect to :80
    }
}

Samozřejmě pak na tom portu 80 na příslušné IP adrese musí poslouchat nějaká aplikace.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #10 kdy: 24. 02. 2022, 20:10:45 »
Díky, ale asi to mám krkolomě vyřešené. To povolení portu 80 být musí (8080 ne), potom mám přesměrování na stejnou IP a port 80 zakázaný. V tu chvíli mám 8080 otevřený, ale ten konfigurák ještě finálně upravím. 

Kód: [Vybrat]
### porty
        tcp dport 22 accept
        #tcp dport 8080 accept
        tcp dport 80 accept
        #tcp dport 443 accept

...

        ip daddr 192.168.1.22 tcp dport 8080 dnat 192.168.1.22:80
        tcp dport 80 drop
« Poslední změna: 24. 02. 2022, 20:14:06 od novak_josef_2019 »

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #11 kdy: 24. 02. 2022, 20:54:59 »
port 80 zakázaný
Nemůžete mít port zároveň povolený i zakázaný. Linuxový firewall funguje na základě pravidel – ta se postupně procházejí, vyhodnotí se, zda paket pravidlu vyhovuje, a pokud ano, uplatní se akce, která je u pravidla nastavená. Pokud je akce ACCEPT, REJECT nebo DROP, je to už rozhodnutí, co se má s paketem udělat, a další pravidla se už neprochází. Takže vy řádkem
Kód: [Vybrat]
tcp dport 80 acceptříkáte, že příchozí pakety protokolu TCP/IP s cílovým portem 80 se mají pustit do počítače. Tím zpracování paketu firewallem končí, protože už je rozhodnuto, co s paketem. Na pravidlo
Kód: [Vybrat]
tcp dport 80 droptudíž nikdy nemůže dojít.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #12 kdy: 24. 02. 2022, 21:24:43 »
Klidně bych to udělal jinak, ale takhle mi to funguje. Když 80 prvně nepovolím, tak 8080 otevřený není, ale když 80 prvně povolím, 8080 přesměruji a poté 80 zakáži, tak mám 8080 otevřený a 80 filtrovaný.
O finální podobě jsem už psal, NAT dám nahoru a potom budu řešit porty.
« Poslední změna: 24. 02. 2022, 21:30:01 od novak_josef_2019 »

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #13 kdy: 24. 02. 2022, 21:38:07 »
Klidně bych to udělal jinak, ale takhle mi to funguje. Když 80 prvně nepovolím, tak 8080 otevřený není, ale když 80 prvně povolím, 8080 přesměruji a poté 80 zakáži, tak mám 8080 otevřený a 80 filtrovaný.
O finální podobě jsem už psal, NAT dám nahoru a potom budu řešit porty.
Ne, port 80 nezakážete a filtrovaný není.

Re:Přesměrování portu 8080 na port 80 v nftables
« Odpověď #14 kdy: 24. 02. 2022, 21:55:15 »
NAT dám nahoru a potom budu řešit porty.
Ještě k tomuhle – je jedno, jestli v konfiguračním souboru bude NAT nahoře nebo dole, pořadí sekcí nemá na nic vliv. Třeba tady je schéma toho, jak packet putuje síťovým stackem linuxu: Nftables - Packet flow and Netfilter hooks in detail. Pořadí pravidel má význam jenom v jednom konkrétním řetězci, kde se testuje jedno pravidlo za druhým. Putování paketu mezi jednotlivými řetězci je ale pevně dané, vizte ten obrázek.