防火墙是把控系统安全的大门,我们以firewalld为例,通过实例方式讲解firewalld防火墙的安装和基本配置。
切记!切记!切记!
如果您已经安装了宝塔、1Panel等Linux服务器运维管理面板,建议直接使用面板中的功能,以免自建防火墙与面板防火墙功能产生冲突。
1Panel 集成了两种广泛使用的 Linux 防火墙软件:Firewalld 和 UFW。
firewalld、ufw和iptables都是Linux上的常见防火墙工具,各有其优点和适用的场景:
- iptables:这是最传统且功能最强大的防火墙工具。它直接操作 Linux 内核中的网络堆栈,因此可以非常详细地控制网络流量。然而,
iptables的语法非常复杂,对新手不太友好。
- ufw (Uncomplicated Firewall):这是一个为了简化
iptables 的操作而创建的工具。它提供了一个更简单的命令行界面,对于简单的防火墙规则管理非常方便。如果你是 Linux 新手,或者你不需要 iptables 的高级功能,那么 ufw 是一个很好的选择。
- firewalld:这个工具是许多 Red Hat 系统(包括 Fedora 和 CentOS)的默认防火墙管理工具。
firewalld 使用了区域(Zones)和服务(Services)的概念,使得管理复杂的防火墙规则变得更简单。此外,firewalld 支持动态地添加或修改防火墙规则,无需重启防火墙或清空整个规则集。
选择哪种防火墙工具取决于你的具体需求和你的熟悉程度。如果你需要一些高级的网络过滤功能,或者你已经熟悉 iptables 的语法,那么 iptables 可能是最好的选择。如果你需要一种可以动态调整规则的防火墙工具,那么 firewalld 可能是最好的选择。如果你只需要做一些基本的端口开放和关闭,那么 ufw 可能会让你的工作更简单。
难易程度:iptables > firewalld > ufw。
一、安装防火墙
1
|
apt-get install firewalld
|
二、开启防火墙
1、首先查看防火墙是否开启,如未开启,需要先开启防火墙并作开机自启。
1
|
systemctl status firewalld ## 查看 firewalld 服务状态
|
2、开启防火墙并设置开机自启
1
2
3
|
systemctl enable firewalld ## 开启开机自启 [系统启动后,firewalld也随之开启]
systemctl start firewalld ## 启动 firewalld 服务
systemctl restart firewalld ## 重启 firewalld 服务 [先停止,再启动]
|
一般需要重启一下机器,不然后面做的设置可能不会生效。
三、预定义区简介
firewalld一共有9个官方的预定义区,用户还可以自定义区域,对于小白来说,重点记住public、trusted、drop 这三个区。
流入 drop 区的流量全部丢弃;
流入 trusted 区的流量全部通过;
流入 public 区的流量根据规则响应。
注意,默认情况下,public区是默认区,除非用户重新设置过默认区。
1
2
3
|
firewall-cmd --set-default-zone=home ## 设置默认区为home区
firewall-cmd --get-default-zone # 查看默认区
firewall-cmd --get-zones # 查看系统中目前已有的所有区
|

四、防火墙基本配置
firewalld防火墙,在图形界面是firewall-config工具,在命令行模式下是firewall-cmd命令。常用的命令如下:

注意,每次使用--permanent参数设置防火墙后,都需要使用下面的命令重新载入防火墙设置,使设置生效。
1
|
firewall-cmd --reload ##让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
|
--permanent 参数可以永久生效,原理是修改了配置文件。
如果修改时没有加 –permanent 参数,则不需要 firewall-cmd –reload 命令,规则立即生效,但是firewalld服务重启后将丢失规则。
1、管理端口port
开启端口
1
2
3
4
5
|
firewall-cmd --permanent --zone=public --add-port=22/tcp #开启 22 端口
firewall-cmd --permanent --zone=public --add-port={22,8080}/tcp #开启 22 和 8080 端口
firewall-cmd --permanent --zone=public --add-port=100-500/tcp #批量开启 100 到 500 之间的端口
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
关闭端口
1
2
3
4
5
|
firewall-cmd --permanent --zone=public --remove-port=22/tcp #关闭 22 端口
firewall-cmd --permanent --zone=public --remove-port={80/tcp,8080/tcp} #关闭 22 和 8080 端口
firewall-cmd --permanent --zone=public --remove-port=100-500/tcp #批量关闭100 到 500 之间的端口
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
--permanent 的作用是使设置永久生效,不加的话机器重启之后失效。
查看端口状态
1
2
|
firewall-cmd --zone=public --query-port=22/tcp #查看22端口是否生效
firewall-cmd --zone=public --list-ports #查看当前生效的所有端口
|
2、管理服务service
查看预先定义的服务
1
|
firewall-cmd --get-services #查看预先定义的服务
|
允许访问服务
1
2
3
4
|
firewall-cmd --permanent --zone=public --add-service=mysql #允许访问mysql服务
firewall-cmd --permanent --zone=public --add-service={http,https} #允许访问http和https服务
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
禁止访问服务
1
2
3
4
5
|
firewall-cmd --permanent --zone=public --remove-service=ssh #禁止访问ssh服务
firewall-cmd --permanent --zone=public --remove-service=mysql #禁止访问mysql服务
firewall-cmd --permanent --zone=public --remove-service={http,https} #禁止访问http和https服务
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
查看服务状态
1
|
firewall-cmd --zone=public --list-services #查看当前生效的所有服务
|
3、管理源ip地址source
添加源ip地址
1
2
3
4
|
firewall-cmd --permanent --zone=trusted --add-source=192.168.20.20 #将192.168.20.20加入白名单
firewall-cmd --permanent --zone=trusted --add-source=192.168.20.0/24 #将192.168.20.0网段加入白名单
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
删除源ip地址
1
2
3
4
|
firewall-cmd --zone=trusted --permanent --remove-source=192.168.20.20
firewall-cmd --zone=trusted --permanent --remove-source=192.168.20.0/24
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
查看源ip地址
1
2
|
firewall-cmd --query-source=192.168.20.20 #查看源为192.168.20.20是否存在
firewall-cmd --list-sources #查看默认区的所有源ip地址
|
五、防火墙高级配置
服务和端口适用于基本配置,但对于高级情景可能会限制较多。
rich-rule富规则允许你为任何端口、协议、地址和操作向任何区域添加完全自定义的防火墙规则。
拒绝访问
1
2
3
4
5
6
7
8
9
|
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" reject' #禁止192.168.0.200访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject' #禁止192.168.0.200访问80端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" service name="ssh" reject' # 禁止192.168.0.200访问ssh服务
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" protocol value="icmp" reject' # 禁止192.168.0.200访问icmp协议,即禁止192.168.0.200主机ping
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject' #禁止 10.0.0.0-10.0.0.255 这一整个段的 IP禁止访问80端口
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
允许访问
1
2
3
4
5
6
7
8
9
|
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" accept' #允许192.168.0.200访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept' # 允许192.168.0.200访问80端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" service name="ssh" accept' # 允许192.168.0.200访问ssh服务
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.200" protocol value="icmp" accept' # 允许192.168.0.200访问icmp协议,即允许192.168.0.200主机ping
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept' # 允许 10.0.0.0-10.0.0.255 这一整个段的 IP 访问80端口
firewall-cmd --reload #让永久生效(permanent)的配置规则立即生效,并覆盖当前的配置规则
|
查看富规则状态
1
|
firewall-cmd --list-rich-rules #查看当前生效的所有富规则
|
六、其他注意事项
除了通过命令方式配置Firewalld防火墙,也可以直接使用运维管理面板(如1Panel、宝塔等)配置防火墙,对于小白来说,操作更加友好。
切记!切记!切记!
对于阿里云等厂商提供的云服务器,厂家还提供了“安全组”等虚拟防护墙,这与服务器里面的防火墙不是一回事,属于两个防火墙。
需要在 厂家虚拟防火墙 和 服务器自建防火墙 中都放行对应的端口,才可以正常访问。