在CentOS7上添加防火墙端口允许访问

在CentOS 7中引入了新的防火墙管理工具firewalld,安装方法如下:

sudo yum install firewalld

激活firewalld

sudo systemctl enable firewalld

启动firewalld

sudo systemctl start firewalld

操作

  • 检查default zone

firewall-cmd --get-default-zone

显示输出:

public
  • 检查激活的zone

firewall-cmd --get-active-zones

注意:如果还没有配置接口的zone,此时会没有任何zone显示激活,这里就没有输出。当执行了将某个interface分配给某个zone,就会有输出。例如,后面演示的命令sudo firewall-cmd --zone=public --change-interface=eth0之后,就会显示激活了public zone。

  • 检查所有zone

sudo firewall-cmd --list-all

显示输出:

此时可以看到,默认只有2个服务端口可以访问ssh dhcpv6-client

  • 例如在dmz区域设置端口允许端口2888

如果是常用的web端口,可以使用

  • 例如在public区域设置允许端口2888

注意 要使得配置生效需要重新加载配置

如果没有使用firewalld还是使用iptables的话,命令如下

检查可用zones

  • 列出所有zone

输出显示

检查指定zone可以使用参数--zone=:

输出显示:

选择接口使用的zone

除非你配置了网络接口,否则每个接口都会在firewall启动时放入default zone

  • 选择接口的zone

例如,这里将eth0接口设置publiczone:

检查zone:

此时显示输出

设置应用规则

最基本的设置是允许服务访问,例如http服务。

  • 检查可以添加的服务名称:

此时会提供已经内置的服务列表。详细的服务配置可以检查/usr/lib/firewalld/services目录下的.xml配置文件。

  • 添加http服务允许

  • 检查添加结果

可以看到输出:

  • 为了能够持久化配置,需要再增加--permanent参数:

检查结果:

  • 添加特定端口方法:

检查

也可以添加端口范围:

定义服务

可以模仿系统默认的服务配置,自己定义服务。首先把系统定义的ssh服务配置文件ssh.xml复制到/etc/firewalld/services目录下:

然后修改这个example.xml配置:

然后重新加载规则

此时使用firewall-cmd --get-services就会看到自己定义的example服务

创建自己的区域zone

也可以自己定制zone,例如自己定义一个对外的web zone,命名为publicweb,定义一个对内到DNS zone,命名为privateDNS:

此时检查可用permanent zone

但是要生效还需要reload

然后给publicweb增加服务定义:

privateDNS增加定义:

然后修改接口

持久化:

规则生效

检查zone

检查zone的服务

如果你想把这个publicweb设置为默认zone

加IP白名单

注意:服务允许先于IP添加的话,则服务先生效。即,如果先添加了http允许,然后再添加IP白名单,则即使IP不在白名单范围,但还是可以访问web服务。

参考

Last updated

Was this helpful?