我正在尝试将 ftp 服务添加到firewalld,每次我运行firewall-cmd --add-service=ftp
(没有使用永久标志)时都会得到Error: COMMAND_FAILED
。
如果我运行firewall-cmd --permanent --add-service=ftp
(使用永久标志),它会返回success
。
但是,在我重新加载服务后,我无法通过 ssh 连接,除非我通过救援模式禁用防火墙。
firewall-cmd --permanent --add-service=ftp
我并没有尝试打开 ssh 的端口。我只是说明在运行并重新加载后,我失去了对服务器的访问权限firewall-cmd --reload
。
答案1
确实,这种情况发生在 Centos 7 上的 grs 内核中。实际上,您的问题包含答案。为了消除此问题,您需要firewall-cmd --permanent --zone=public --add-service=ftp
在打开防火墙端口时避免使用该命令,或者如果该命令已经存在,则使用 将其删除firewall-cmd --permanent --remove-service=ftp
。这样就解决了问题!
但是您可以使用该命令firewall-cmd --permanent --zone=public --add-port=21/tcp
,因此如果您愿意的话可以打开端口 21。
解释是,firewalld 尝试加载nf_conntrack_ftp内核模块,即使模块支持被禁用,并且在 grs 内核中该模块确实被禁用。
我猜即使你不使用 grs 内核,你也有nf_conntrack_ftp内核模块已禁用。如果反过来想,您可以启用此模块,但我不确定是否可以,而且我还没有尝试过这个对我来说显而易见的解决方案。
这也解决了在firewalld中添加service = ftp后被锁定的问题firewall-cmd --reload
,这实际上是我在使用grs内核时遇到的问题。