在FirewallD中允许被动FTP连接(CentOS 7)

在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 

我没有彻底地研究过这个问题,所以我不明白这些细节,但是这似乎与如何为服务器和客户机上的vsftpd(例如:Filezilla)设置主动 – 被动连接有关。

基本上你需要:

尝试:编辑/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客户端可以工作

尝试用端口号代替服务名称:

 firewall-cmd --permanent --add-port=21/tcp firewall-cmd --reload