在CentOS 7中引入了新的防火墙管理工具firewalld
,安装方法如下:
Copy sudo yum install firewalld
激活firewalld
Copy sudo systemctl enable firewalld
启动firewalld
Copy sudo systemctl start firewalld
操作
Copy firewall-cmd --get-default-zone
显示输出:
Copy firewall-cmd --get-active-zones
注意:如果还没有配置接口的zone
,此时会没有任何zone显示激活,这里就没有输出。当执行了将某个interface分配给某个zone,就会有输出。例如,后面演示的命令sudo firewall-cmd --zone=public --change-interface=eth0
之后,就会显示激活了public zone。
Copy sudo firewall-cmd --list-all
显示输出:
Copy public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
此时可以看到,默认只有2个服务端口可以访问ssh dhcpv6-client
Copy firewall-cmd --zone=dmz --add-port=2888/tcp --permanent
如果是常用的web端口,可以使用
Copy firewall-cmd --zone=public --add-service=http --permanent
Copy firewall-cmd --zone=public --add-port=2888/tcp --permanent
注意 要使得配置生效需要重新加载配置
Copy firewall-cmd --reload
如果没有使用firewalld
还是使用iptables的话,命令如下
Copy sudo iptables -I INPUT -p tcp --dport 2888 -j ACCEPT
sudo service iptables save
检查可用zones
Copy firewall-cmd --get-zones
输出显示
Copy block dmz drop external home internal public trusted work
检查指定zone可以使用参数--zone=
:
Copy sudo firewall-cmd --zone=home --list-all
输出显示:
Copy home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
选择接口使用的zone
除非你配置了网络接口,否则每个接口都会在firewall启动时放入 default
zone
例如,这里将eth0
接口设置public
zone:
Copy sudo firewall-cmd --zone=public --change-interface=eth0
检查zone:
Copy firewall-cmd --get-active-zones
此时显示输出
Copy public
interfaces: eth0
设置应用规则
最基本的设置是允许服务访问,例如http服务。
Copy firewall-cmd --get-services
此时会提供已经内置的服务列表。详细的服务配置可以检查/usr/lib/firewalld/services
目录下的.xml
配置文件。
Copy sudo firewall-cmd --zone=public --add-service=http
Copy sudo firewall-cmd --zone=public --list-services
可以看到输出:
Copy ssh dhcpv6-client http
为了能够持久化配置,需要再增加--permanent
参数:
Copy sudo firewall-cmd --zone=public --permanent --add-service=http
检查结果:
Copy sudo firewall-cmd --zone=public --permanent --list-services
Copy sudo firewall-cmd --zone=public --add-port=5000/tcp
检查
Copy sudo firewall-cmd --zone=public --list-ports
也可以添加端口范围:
Copy sudo firewall-cmd --zone=public --add-port=4990-4999/udp
定义服务
可以模仿系统默认的服务配置,自己定义服务。首先把系统定义的ssh
服务配置文件ssh.xml
复制到/etc/firewalld/services
目录下:
Copy sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml
然后修改这个example.xml
配置:
Copy <?xml version="1.0" encoding="utf-8"?>
<service>
<short>Example Service</short>
<description>This is just an example service. It probably shouldn't be used on a real system.</description>
<port protocol="tcp" port="7777"/>
<port protocol="udp" port="8888"/>
</service>
然后重新加载规则
Copy sudo firewall-cmd --reload
此时使用firewall-cmd --get-services
就会看到自己定义的example
服务
创建自己的区域zone
也可以自己定制zone,例如自己定义一个对外的web zone,命名为publicweb
,定义一个对内到DNS zone,命名为privateDNS
:
Copy sudo firewall-cmd --permanent --new-zone=publicweb
sudo firewall-cmd --permanent --new-zone=privateDNS
此时检查可用permanent zone
Copy sudo firewall-cmd --permanent --get-zones
但是要生效还需要reload
Copy sudo firewall-cmd --reload
firewall-cmd --get-zones
然后给publicweb
增加服务定义:
Copy sudo firewall-cmd --zone=publicweb --add-service=ssh
sudo firewall-cmd --zone=publicweb --add-service=http
sudo firewall-cmd --zone=publicweb --add-service=https
sudo firewall-cmd --zone=publicweb --list-all
给privateDNS
增加定义:
Copy sudo firewall-cmd --zone=privateDNS --add-service=dns
sudo firewall-cmd --zone=privateDNS --list-all
然后修改接口
Copy sudo firewall-cmd --zone=publicweb --change-interface=eth0
sudo firewall-cmd --zone=privateDNS --change-interface=eth1
持久化:
Copy sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
sudo firewall-cmd --zone=publicweb --permanent --add-service=http
sudo firewall-cmd --zone=publicweb --permanent --add-service=https
sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns
规则生效
Copy sudo systemctl restart network
sudo systemctl reload firewalld
检查zone
Copy firewall-cmd --get-active-zones
检查zone的服务
Copy sudo firewall-cmd --zone=publicweb --list-services
sudo firewall-cmd --zone=privateDNS --list-services
如果你想把这个publicweb
设置为默认zone
Copy sudo firewall-cmd --set-default-zone=publicweb
加IP白名单
Copy firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
注意:服务允许先于IP添加的话,则服务先生效。即,如果先添加了http允许,然后再添加IP白名单,则即使IP不在白名单范围,但还是可以访问web服务。
参考