Akemi

Linux软件防火墙-红帽防火墙Firewalld与ubuntu防火墙ufw使用

2026/02/11

firewalld 红帽防火墙

firewalld是 红帽从rhel7开始提供的一种防火墙工具,是一种iptables的前端,但是层次更高,支持命令行或者图形化两种管理方式

从一开始firewalld使用iptables作为后端,后面将默认后端切换为了nftables

firewalld使用zone(区域)概念,和华为的防火墙差不多,相当于策略模板,不同的场景可以选择不同的策略模板,以实现策略之间的快速切换:
比如一个网卡eth0绑定了A区域,A区域绑定了eth0 1 2网卡

注:如果想要使用iptables-nft,需要停止防火墙服务,否则可能导致防火墙规则冲突

firewall-cmd基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1. 区域与状态查询
firewall-cmd --list-all
firewall-cmd --get-active-zones # 查看当前所有激活的区域及其绑定的网卡
firewall-cmd --state

2. 服务(Service)管理
firewall-cmd --permanent --add-service=http # 永久允许 HTTP 服务通过
firewall-cmd --permanent --remove-service=https
firewall-cmd --list-services

3. 端口(Port)管理
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --remove-port=3306/udp
firewall-cmd --list-ports

4. 源地址与网卡
firewall-cmd --permanent --add-source=192.168.1.0/24
firewall-cmd --permanent --zone=internal --add-interface=eth0 # 将 eth0 网卡绑定到internal区域

5. NAT 与端口转发
firewall-cmd --permanent --add-masquerade # 开启NAT转发功能
(1)本地端口转发(将访问 80 端口的流量转到 8080)
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
(2)端口转发(暴露内网服务
firewall-cmd --permanent --zone=public --add-forward-port=port=3306:proto=tcp:toaddr=192.168.1.10:toport=3306
# 公网3306端口转发到内网192.168.1.10:3306
(3)删除转发规则
firewall-cmd --permanent --zone=public --reove-forward-port=port=80:proto=tcp:toaddr=127.0.0.1:toport=8080

6.开启流量转发开关
firewall-cmd --permanent --zone=public --set-forward=yes # 启用public区域的forward转发

富规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.限制特定 IP 访问特定端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept'

iptables -A INPUT -p tcp -s 192.168.1.10 --dport 22 -j ACCEPT

2.拒绝特定网段的流量
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" reject'

iptables -A INPUT -s 10.0.0.0/24 -j REJECT

3.基于服务名(Service)的访问控制
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.1.5" service name="http" accept'

iptables -A INPUT -p tcp -s 172.16.1.5 --dport 80 -j ACCEPT

4. 带有日志记录和速率限制的规则
firewall-cmd --permanent --add-rich-rule='rule service name="ssh" log prefix="ssh_log" level="info" limit value="3/m" accept'

5.端口转发
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" forward-port port="80" protocol="tcp" to-port="8080"'

ufw ubuntu防火墙

ufw简单易用,命令直观,适合新手,默认拒绝所有传入,允许所有传出,但功能相对简单

ufw的设计理念是简单有效,对大部分场景来说够用了,但复杂功能上不如firewalld和iptables

2020年后ufw底层从iptables换成了nftables

ufw的基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 启动/禁用ufw
sudo ufw enable
sudo ufw disable

# 查看ufw状态/规则
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered

# 默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 配置规则
1.允许服务
sudo ufw allow ssh
sudo ufw allow http

2.允许端口
sudo ufw allow 22
sudo ufw allow 80/tcp
sudo ufw allow 3000:4000/tcp

3.拒绝连接
sudo ufw deny 23
sudo ufw deny from 192.168.1.100

4.删除规则
sudo ufw delete allow ssh
sudo ufw delete deny 23

sudo ufw status numbered # 查看序号
sudo ufw delete 2 # 序号删除

# 高级规则
1.允许特定IP访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw allow from 192.168.1.0/24 to any port 80

2.允许特定IP访问所有端口
sudo ufw allow from 192.168.1.100

3.限制特定网卡
sudo ufw allow in on eth0 to any port 22

4.拒绝与记录
sudo ufw deny log from 192.168.10.0/24

5.速率限制
sudo ufw limit ssh
sudo ufw limit 22/tcp

# 日志管理
sudo ufw logging on
sudo ufw logging off
sudo ufw logging low|medium|high|full # 设置日志级别
sudo tail -f /var/log/ufw.log # 查看日志

# 重置配置
sudo ufw reset
sudo ufw disable # 禁用并重置
sudo ufw --force reset
CATALOG
  1. 1. firewalld 红帽防火墙
    1. 1.1. firewall-cmd基础命令
      1. 1.1.1. 富规则
  2. 2. ufw ubuntu防火墙
    1. 2.0.1. ufw的基本使用