Portál AbcLinuxu, 12. května 2025 11:35

Dotaz: Pasivní FTP - ip_conntrack_ftp nechce fungovat

18.6.2008 20:03 Jiří J. | skóre: 34 | blog: Poutník | Brno
Pasivní FTP - ip_conntrack_ftp nechce fungovat
Přečteno: 1742×
Odpovědět | Admin
Zdravím,
předem bych chtěl říci, že jsem hledal všude možně (i zde - viz. podobný problém), našel spoustu "řešení", ale svůj problém jsem nevyřešil..

Situace:
"Internet" <---> router (forwardující porty 13000-14000) <---> server
Používám proftp a v configu mám (mimo jiné)
Port                            13021

MasqueradeAddress               6.7.8.9
PassivePorts                    13900 13949
(kde 6.7.8.9 je vnější IP routeru).

Vše fungovalo v pořádku až do chvíle, kdy jsem se rozhodl server trochu zabezpečit (včetně port knockingu) a nastavil netfilter do přibližně následující podoby:
# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  127.0.0.0/8          127.0.0.0/8         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ANTIFLOOD  all  --  0.0.0.0/0            0.0.0.0/0           
FTP_KNOCK  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:13021 
FTP_KNOCK  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:13900:13949 
SSH_KNOCK  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:13022 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain ANTIFLOOD (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           recent: UPDATE seconds: 1 name: icmp_ping side: source 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8 recent: SET name: icmp_ping side: source 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 state NEW 

Chain FTP_KNOCK (2 references)
target     prot opt source               destination         
ACCEPT     all  --  1.2.3.4              0.0.0.0/0           

Chain SSH_KNOCK (1 references)
target     prot opt source               destination         
(kde 1.2.3.4 je adresa FTP klienta) a 5. řádek v INPUT je jen pro test (v praxi by neměl být potřeba, pokud bude connection jako RELATED).

Dle rad Google a zdejších diskuzí jsem jsem zkoušel všemožně rožnit ip_conntrack_ftp / nf_conntrack_ftp, poté i s optionem ports=13021 u modprobe, nic nepomohlo.
# cat .config |grep FTP
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_TFTP=m

# modprobe ip_nat_ftp
FATAL: Module ip_nat_ftp not found.

# ls /lib/modules/2.6.24-gentoo-r2/kernel/net/netfilter/ |grep ftp
nf_conntrack_ftp.ko
nf_conntrack_tftp.ko
FTP klient:
$ ftp -v 6.7.8.9 13021
Connected to dns-name-for-6.7.8.9.
220 ProFTPD 1.3.1rc2 Server (ProFTPD testftp) [6.7.8.9]
Name (6.7.8.9:user): user
331 Password required for user
Password:
230 User user logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
227 Entering Passive Mode (1,2,3,4,54,159).
ftp: connect: Connection timed out
ftp> 
/proc/net/nf_conntrack:
ipv4 2 tcp 6 109 SYN_SENT src=192.168.1.1 dst=1.2.3.4 sport=57680 dport=113 packets=3 bytes=180 [UNREPLIED] src=1.2.3.4 dst=192.168.1.1 sport=113 dport=57680 packets=0 bytes=0 mark=0 use=1
(kde 192.168.1.1 je síťovka samotného routeru).

Doopravdy nevím, na co jsem zapomněl, je ip_nat_ftp tím kritickým bodem a měl bych zkusit jiné jádro? Anebo proč vlastně ip_conntrack_ftp nehodí spojení do RELATED stavu? Je jen pro aktivní FTP? Není problém právě na routeru? (ip_conntrack_ftp asi netuší, že se klient připojuje na 6.7.8.9 a ne na 192.168.1.1)

(pokud někdo víte o nějakém zdejším zapadlém threadu, kde je tohle již vyřešeno, prosím o link, při hledání "pasivní ftp" jsem toho moc užitečného nenašel)

Děkuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.6.2008 20:07 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Odpovědět | | Sbalit | Link | Blokovat | Admin
ehrm, chyba "maskování":
227 Entering Passive Mode (1,2,3,4,54,159).
má být samozřejmě
227 Entering Passive Mode (6,7,8,9,54,159).
18.6.2008 21:10 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předně ten záznam z conntrack tabulky je ident dotaz serveru na klienta. Za další očekáváná datová spojení se nachází v /proc/net/nf_conntrack_expect a nakonec modul s FTP pomocníkem se jmenuje nf_conntrack_ftp, jak jste si vygrepoval, a taky si jej musíte sám natáhnout.
18.6.2008 21:31 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Díky.
Vím, že je to záznam o poslaném SYN packetu klientovi, ale expect byl prázdný (myslím) a řekl bych, že ta část za [UNREPLIED] vypadá na strukturu, kterou conntrack očekává.
Pri modprobech ip_conntrack_ftp mi to nahrávalo nf_conntrack_ftp, takže jsem z toho vydedukoval alias, ale zkusím jej modprobovat přímo, jakmile se k tomu časově dostanu.
18.6.2008 22:27 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nezkoumám to podrobně, ale možná jestli není problém právě v tom

ipv4 2 tcp 6 109 SYN_SENT src=192.168.1.1 dst=1.2.3.4 sport=57680 dport=113 packets=3 bytes=180 [UNREPLIED] src=1.2.3.4 dst=192.168.1.1 sport=113 dport=57680 packets=0 bytes=0 mark=0 use=1

čili jestli vám router nezahazuje pakety směřující ze serveru na klieta:113, které by se měl klient mít šanci odmítnout (reject), nebo by to za něj měl udělat router. Teoreticky by kvůli tomu mohl i úplně vytimeoutovat. Kakžopádně bych zkusil iptables -A INPUT -p udp --dport 113 -j REJECT --reject-with icmp-port-unreachable a nebo povolit na routeru forward i portu 113 na klienta (předpokládám že spojení na server zkoušíte z lokální sítě přes vnější rozhraní routeru).
18.6.2008 22:34 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Asi jsem to napsal zmateně, ale zkrátka jestli ze serveru není směrem na klienta otevřená cesta na port 113 o němž se server dozví že tam nic neběží, ale pakety mu místo toho zahodíte (třeba na routeru nebo ve fw klienta) tak to může být problém (server čeká a případně se předčasně ukončí komunikace).
18.6.2008 22:36 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Koukám že na tu 113ku směruje tcp, ne udp jak jsem to uvedl ve svém příkladě, čili rejectovat raději všechno :)
18.6.2008 22:56 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Nebo do proftpd.conf IdentLookups off a restart proftpd bude asi nejrychlejší vyzkoušení jestli je to tím.
19.6.2008 00:12 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
O portu 113 ("auth") vím, hodlám to ošetřit časem s dolazením nastavení firewallu, ale tam asi problém nebude... protože do teď nebyl z routeru 113 forwardovaný a FTP fungovalo .. pokud dám něco jako
iptables -I INPUT 1 -s 1.2.3.4 -j ACCEPT
tak FTP zase funguje...
Router není momentálně pod mou plnou kontrolou, ale budu tam snad v brzké době nahazovat nějaké "embedded distro" (asi Slackware) s Webminem (současná krabička již nedostačuje), přesto bych to ale rád vyřešil bez dalších port forwardů.

IdentLookups direktivu zkusím, díky.
19.6.2008 00:19 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
IdentLookups funguje ... takže se na FTP server připojím, pokud mu nechám povolené porty 13900 - 13949.
Už jen nějak donutit nf_conntrack_ftp, aby datová spojení registroval jako RELATED.
19.6.2008 00:30 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Pasivní FTP - ip_conntrack_ftp nechce fungovat
Basically, ip_conntack_ftp enables your firewall to identify packets relating to ftp, and ip_nat_ftp modifies ftp packets for computers behind a firewall running nat. ip_nat_ftp requires ip_conntrack_ftp to be loaded, so it loads that module automatically for you. Thats why loading either of them works for you. It looks as if you should be able to just load ip_conntrack_ftp to get everything to work, and ignore ip_nat_ftp.

I hope this helps a bit.

--James Cooley
A jelikož v /proc/config.gz podpora pro netfilter-NAT vůbec není a jelikož jsem mezitím provedl make clean, asi brzy naconfiguruji nové jádro i s ip_nat_ftp a uvidím...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.