在带有 FirewallD 的 CentOS 7 中,启用 HTTP 访问很容易:
firewall-cmd --permanent --zone=public --add-service=http
然而,
firewall-cmd --permanent --zone=public --add-service=ftp
不起作用:规则适用,但除了禁用 FirewallD 之外,我无法通过任何方式访问 FTP。
一些诊断信息:
- 我已经检查了服务定义文件(ftp.xml),它使用了 nf_conntrack_ftp 模块。
- 在我的 VPS 上,模块被编译到内核中(不是单独的),所以它无法通过 lsmod 找到,但我可以通过以下方式确认它在那里:
zgrep FTP /proc/config.gz
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_TFTP=y
答案1
我没有彻底研究过这个问题,所以我不了解细节,但这似乎与服务器上的 vsftpd 和客户端(例如:Filezilla)的主动 - 被动连接的设置方式有关。
基本上你需要:
- 通过将以下内容添加到 /etc/vsftpd/vsftpd.conf 来配置 vsfptd 被动模式:
pasv_enable=Yes pasv_max_port=40000 pasv_min_port=40000
- 重新启动 vsftpd:
systemctl restart vsftpd.service
- 在 FirewallD 中打开 4000 端口:
firewall-cmd --permanent --add-port=40000/tcp firewall-cmd --reload
- 然后我就可以连接了
lftp
。要设置 Filezilla 使用主动模式,请检查http://www.itzgeek.com/how-tos/linux/centos-how-tos/enable-passive-mode-in-ftp-on-centos-7-rhel-7-for-filezilla-and-winscp.html#axzz3X4loTCMi
答案2
尝试:编辑/etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_min_port=65400
pasv_max_port=65410
然后:
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -p TCP --dport 21 --sport 1024:65534 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -p TCP --dport 65400:65410 --sport 1024:65534 -j ACCEPT
firewall-cmd --reload
firewall-cmd --permanent --direct --get-all-rules
我使用 vsftp 服务器并且 FileZilla 客户端可以工作