![iptables 的 FTP 下载问题 -- 允许端口 21 连接,但“网络无法访问”](https://linux22.com/image/52160/iptables%20%E7%9A%84%20FTP%20%E4%B8%8B%E8%BD%BD%E9%97%AE%E9%A2%98%20--%20%E5%85%81%E8%AE%B8%E7%AB%AF%E5%8F%A3%2021%20%E8%BF%9E%E6%8E%A5%EF%BC%8C%E4%BD%86%E2%80%9C%E7%BD%91%E7%BB%9C%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E2%80%9D.png)
我正在尝试连接到 FTP 站点,但使用以下命令wget
:
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /gcrypt/gnutls ... done.
==> SIZE v3.2 ... done.
==> PASV ... couldn't connect to 217.69.76.55 port 40258: Network is unreachable
如果我禁用 iptables,它就可以工作,所以显然这就是问题所在。但我确信我已经正确设置了一切:
# Accept related, established...
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ftp/http(s) clients
-A OUTPUT -p tcp -m multiport --dports 21,80,443,8080 -j ACCEPT
-A OUTPUT -p udp --dport 21 -j ACCEPT
怎么了?
答案1
Iptables 需要加载一些内核模块才能使“RELATED, ESTABLISHED”正常工作。如果您的 HTTP 客户端没问题,那么您显然已经拥有了其中一些客户端。
> lsmod | grep conntrack
nf_conntrack_ipv4 20258 6
nf_defrag_ipv4 12702 1 nf_conntrack_ipv4
xt_conntrack 12760 6
nf_conntrack 99996 2 xt_conntrack,nf_conntrack_ipv4
然而,用于 ftp 的驱动程序nf_conntrack_ftp
是附加的,与设备或文件系统驱动程序不同,它不会由内核自动加载。
> modprobe nf_conntrack_ftp
应该做。 AFAIK 没有用于在启动时自动加载模块的跨发行版方法,但在 Fedora 上您可以添加:
IPTABLES_MODULES="nf_conntrack_ftp"
到/etc/sysconfig/iptables-config
。在使用systemd
但没有此文件的其他系统上,请参阅man modules-load.d
。