我已经在 VPS 上的全新 CentOS 7 最小安装中安装了 firewalld(奇怪的是,从我搜索的内容来看,firewalld 应该已经与系统一起安装了)。
我尝试打开一些端口,但是当运行如下命令时
firewall-cmd --zone=public --add-port=80/tcp --permanent
我收到以下错误消息:Error: INVALID_ZONE: public
。
当我查看可用区域时,firewall-cmd --get-zones
什么也没得到。
应该如何配置呢?
答案1
这听起来像是一个非常奇怪的 VPS 设置和问题,但如果您不介意编写一些 XML,您可以轻松地构建自己的区域。
我的公共区域是:
<?xml version="1.0" encoding="utf-8"?>
<zone target="DROP">
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<port protocol="tcp" port="443"/>
</zone>
它是默认 public.xml 的轻微修改版本,它丢弃而不是拒绝数据包,并允许 HTTPS 和 SSH。
您可以将其放入(我认为)/etc/firewalld/zones/public.xml。
答案2
VPS 会做各种愚蠢的事情。有些 VPS 会在内核级别破坏 SELinux,因此您甚至无法启用它。首先,您需要使用 检查内核uname -r
。它应该显示el7
,例如
3.10.0-693.2.2.el7.x86_64
如果是 el7,那就没问题了。如果不是,您需要检查您的 VPS 是否可以使用原版 EL 内核,或者从您自己的 CentOS ISO 重新安装您的实例(我在 Vultr 上就是这么做的)。可能仍然可以使用自定义内核修复防火墙,但最好使用官方内核。
无论如何,如果firewalld 确实可以运行,只是没有区域,只需创建区域并添加服务。
firewall-cmd --new-zone=public --permanent
firewall-cmd --reload
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --reload
注意:您必须在同一个会话中执行这些操作,否则您可能会被锁定在 SSH 之外,并且需要依靠控制台访问来修复您的防火墙。