Linux安全提升--firewalld防火墙的安装和常用操作命令

防火墙是把控系统安全的大门,我们以firewalld为例,通过实例方式讲解firewalld防火墙的安装和基本配置。

切记!切记!切记!

如果您已经安装了宝塔、1Panel等Linux服务器运维管理面板,建议直接使用面板中的功能,以免自建防火墙与面板防火墙功能产生冲突。

1Panel 集成了两种广泛使用的 Linux 防火墙软件:Firewalld 和 UFW。

firewalldufwiptables都是Linux上的常见防火墙工具,各有其优点和适用的场景:

  1. iptables:这是最传统且功能最强大的防火墙工具。它直接操作 Linux 内核中的网络堆栈,因此可以非常详细地控制网络流量。然而,iptables的语法非常复杂,对新手不太友好。
  2. ufw (Uncomplicated Firewall):这是一个为了简化 iptables 的操作而创建的工具。它提供了一个更简单的命令行界面,对于简单的防火墙规则管理非常方便。如果你是 Linux 新手,或者你不需要 iptables 的高级功能,那么 ufw 是一个很好的选择。
  3. 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个官方的预定义区,用户还可以自定义区域,对于小白来说,重点记住publictrusteddrop个区。

流入 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、宝塔等)配置防火墙,对于小白来说,操作更加友好。

切记!切记!切记!

对于阿里云等厂商提供的云服务器,厂家还提供了“安全组”等虚拟防护墙,这与服务器里面的防火墙不是一回事,属于两个防火墙。

需要在 厂家虚拟防火墙 和 服务器自建防火墙 中都放行对应的端口,才可以正常访问。

0%