OpenWrt 22.03 ftp probléma

OpenWrt-t futtató router mögött van egy ftp szerverem. Ahhoz hogy kívülről is el lehessen érni, a 21-es port forwardon kívül az alábbi custom szabályt is be kellett állítani:

iptables -t raw -I PREROUTING -p tcp --dport 21 -j CT --helper ftp

Ezt az OpenWrt GUI lementette a /ect/firewall.user file-ba, amit a /etc/config/firewall config meg felnyalt ezzel a sorával:

config include
      option path '/etc/firewall.user'

OpenWrt 21.02.x alatt ez ment is szépen, csak fel kellett tenni a kmod-ipt-nathelper és kmod-ipt-raw csomagokat is.

Azonban OpenWrt 22.03.x alatt már iptables based firewall3 helyett nftables based firewall4 van, nincs iptables parancs, ezért nem megy a fenti custom rule.

A tünet a következő: ftp login lemegy, login / pass megad, elfogadja a helyeset, de utána nem történik semmi, nincs hibaüzenet, csak áll az ftp kliens. (mc beépített)

Keresgéltem, hogy miként lehetne a fenti szabályt nftables-el megoldani, de nem sikerült, ilyen szinten nem értek a hálózat mélységeihez.

Aztán észrevettem, hogy van a firewall beállításnál a forward szabályánál az advanced fülön van egy olyan lehetőség, hogy "Match helper" és egy legördülőből ki lehet választani az "FTP passive connection tracking (FTP)" lehetőséget.

Sajnos, ha ezt beállítom, akkor a forward komplett megszűnik, még telnet-el sem lehet a 21-es portra kapcsolódni. Ha kikapcsolom, akkor a login folyamatig újra megy az ftp, csak utána áll meg.

Tudom, hogy az ftp egy elavult, unsecure, stb. protokoll, de ebben az esetben nem tudom megkerülni.

Tud esetleg valaki megoldást a problémára?

Hozzászólások

Mindenképpen tűzfal contrack vonalon akarod megoldani a problémát, vagy szóba jöhet más módszer is?
Konkrétan arra gondolok, hogy az ftp szervernek megadhatod, hogy a passzív portjait mely tartományból válassza és ha ezt elegendően kicsire veszed, akkor ezt a 10-100 portot a 21-es porthoz hasonlóan direktben az ftp sterver felé is forwardolhatod. Bónusz: az ftp szerveren szokott lenni olyan opció is, hogy megadhatod, hogy a kliensek felé mit küldjön, milyen IP-n látszik. Ide az owrt WAN IP-t megadva a kliens felé csak olyan adat megy, ami neked pont jó kell legyen.

Szerkesztve: 2023. 01. 02., h – 15:52

Nekem ez megoldotta (igaz, nem az új nftables használatával - majd egyszer azt is megtanulom):

iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp

Előtte a kmod-nf-nathelper csomagot fel kell rakni, abban vannak az ftp conntrack modulok (tehát pont úgy, ahogy írtad a régiebbi OpenWrt-ken).

És amúgy van iptables, valamelyik compat csomagból elérhető.

Az iptables-sel beállított szabály így jelenik meg az nft-ben:

root@OpenWrt:/etc/config# nft list table ip raw
table ip raw {
        chain PREROUTING {
                type filter hook prerouting priority raw; policy accept;
                meta l4proto tcp # xt_tcp counter packets 87 bytes 4326 # xt_CT
        }
}

ami iptables-szel így néz ki:

iptables -L -v -t raw
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination          
  87  4326 CT         tcp  --  any    any     anywhere             anywhere             tcp dpt:ftp CT helper ftp

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

Ez van nálam:

lrwxrwxrwx    1 root     root            27 Dec 19 15:56 /usr/sbin/iptables -> /usr/sbin/xtables-nft-multi

az meg az xtables-nft csomagban van.

De van még egy iptables-zz-legacy csomag is.

(Az az igazság, hogy én felraktam egy csomó mindent válogatás nélkül, hogy menjen a régi iptables-re alapuló firewall script).

Felraktam az xtables-nft csomagot és kipróbáltam ezt:

xtables-nft-multi -t raw -I PREROUTING -p tcp --dport 21 -j CT --helper ftp

De hibát dob:

ERROR: No valid subcommand given.
Valid subcommands:
 * iptables-xml
 * xml
 * iptables
 * iptables-nft
 * main4
 * save4
 * restore4
 * iptables-save
 * iptables-restore
 * iptables-nft-save
 * iptables-nft-restore
 * ip6tables
 * ip6tables-nft
 * main6
 * save6
 * restore6
 * ip6tables-save
 * ip6tables-restore
 * ip6tables-nft-save
 * ip6tables-nft-restore
 * iptables-translate
 * ip6tables-translate
 * iptables-restore-translate
 * ip6tables-restore-translate
 * arptables
 * arptables-nft
 * arptables-restore
 * arptables-nft-restore
 * arptables-save
 * arptables-nft-save
 * ebtables-translate
 * ebtables
 * ebtables-restore
 * ebtables-save
 * ebtables-nft
 * ebtables-nft-restore
 * ebtables-nft-save
 * xtables-monitor

A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.

Megcsináltam a symlink-et, és az

iptables -t raw -I PREROUTING -p tcp --dport 21 -j CT --helper ftp

parancs ugyanazt a hibát adja, mint fent a tied:

iptables v1.8.7 (nf_tables): unknown option "--helper"
Try `iptables -h' or 'iptables --help' for more information.

Pedig fent van a kmod-nf-nathelper csomag is.

A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.

Szerkesztve: 2023. 01. 02., h – 16:04

22.03-ban is van lehetőség custom nftables rule-ra. /etc/nftables.d/*.nft fileokat felnyalja alapból.

https://openwrt.org/docs/guide-user/firewall/netfilter_iptables/netfilt…

De saját file-t is definiálhatsz a megfelelő helyre:

https://openwrt.org/docs/guide-user/firewall/firewall_configuration#inc…

Nyilván ide nft ruleokat kell tenni , nem iptables ruleokat.

https://wiki.nftables.org/wiki-nftables/index.php/Conntrack_helpers

a problémádra sajnos nem tudom a választ, de a topic megmentett egy pár napos kurvaanyázástól.

Már épp firssítettem volna a routeremet ~fél napos karbantartási időt feltételezve, de nekem (is) saját iptables alapú firewall scriptem van jelenleg...

így kicsit jobban rá kell készüljek akkor... :o

Ehhez is vargagab mester kellett. Ki kell adni ezt a parancsot:

sysctl -w net.netfilter.nf_conntrack_helper=1

és működik minden, ahogy kell.

A tudomány és a hit vitája akkor eldőlt, amikor villámhárítót szereltek a templomokra.

Hogy ne kelljen mindig kiadni a fenti parancsot (hiszen az csak a futó rendszerre van hatással), érdemes a /etc/sysctl.conf-ba, vagy még inkább egy önálló conf file-ba a /etc/sysctl.d könyvtárban (pl. 20-nf-conntrack-helper.conf) a következő tartalmat betenni:

 

net.netfilter.nf_conntrack_helper = 1