UFW 防火墙命令完全指南

一、基础命令

1. 启动/关闭 UFW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 开启防火墙
sudo ufw enable

# 关闭防火墙
sudo ufw disable

# 查看状态
sudo ufw status

# 详细状态(显示规则应用情况)
sudo ufw status verbose

# 带编号的状态(便于删除规则)
sudo ufw status numbered

2. 默认策略

1
2
3
4
5
6
# 设置默认策略(最安全的方式)
sudo ufw default deny incoming # 默认拒绝所有入站
sudo ufw default allow outgoing # 默认允许所有出站

# 查看当前默认策略
sudo ufw show raw | grep default

二、端口管理

1. 开放/关闭端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 开放端口(TCP)
sudo ufw allow 80/tcp
sudo ufw allow 443

# 开放端口范围
sudo ufw allow 3000:4000/tcp
sudo ufw allow 8000:9000/udp

# 关闭端口
sudo ufw deny 80
sudo ufw delete allow 80 # 删除允许规则

# 按协议指定
sudo ufw allow 53/udp # DNS
sudo ufw allow 67:68/udp # DHCP

2. 常用服务端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# SSH (22)
sudo ufw allow 22/tcp
sudo ufw allow ssh # 使用服务名

# HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 'Apache' # 使用服务名

# 数据库
sudo ufw allow 3306/tcp # MySQL
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw allow 27017/tcp # MongoDB

# 其他常用
sudo ufw allow 21/tcp # FTP
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 110/tcp # POP3
sudo ufw allow 143/tcp # IMAP
sudo ufw allow 465/tcp # SMTPS
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 995/tcp # POP3S

三、IP地址管理

1. 允许/拒绝特定IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 允许单个IP所有访问
sudo ufw allow from 192.168.1.100

# 允许IP访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw allow from 192.168.1.100 to any port 80

# 拒绝IP
sudo ufw deny from 203.0.113.4
sudo ufw deny from 203.0.113.0/24

# 允许IP段
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 10.0.0.0/8 to any port 22

2. 指定网卡接口

1
2
3
4
5
6
7
8
9
10
# 只在特定网卡生效
sudo ufw allow in on eth0 to any port 80
sudo ufw allow in on eth1 from 10.0.0.0/8

# 限制出口
sudo ufw allow out on eth0 to 8.8.8.8 port 53

# 多网卡配置
sudo ufw allow in on eth0 to any port 443
sudo ufw allow in on eth1 to any port 22

四、高级规则

1. 限速规则

1
2
3
4
5
6
7
8
9
# 限制SSH连接频率(防止暴力破解)
sudo ufw limit 22/tcp

# 限制HTTP连接
sudo ufw limit 80/tcp
sudo ufw limit 443/tcp

# 查看限速规则
sudo ufw status | grep limit

2. 应用配置文件

1
2
3
4
5
6
7
8
9
10
11
# 查看可用应用配置
sudo ufw app list

# 查看应用详情
sudo ufw app info 'Apache'
sudo ufw app info 'OpenSSH'

# 按应用名配置
sudo ufw allow 'Apache'
sudo ufw allow 'Apache Secure'
sudo ufw allow 'OpenSSH'

3. 日志管理

1
2
3
4
5
6
7
8
9
10
11
12
13
# 开启日志(级别:low/medium/high/full)
sudo ufw logging on
sudo ufw logging medium

# 关闭日志
sudo ufw logging off

# 查看日志位置和级别
sudo ufw status verbose | grep Logging

# 查看实时日志
sudo tail -f /var/log/ufw.log
sudo grep -i "UFW" /var/log/syslog

五、规则管理

1. 添加规则

1
2
3
4
5
6
7
8
9
10
11
12
# 基本语法
sudo ufw [规则] [方向] [协议] [端口] [来源]

# 入站规则
sudo ufw allow in proto tcp from 192.168.1.0/24 to any port 22

# 出站规则
sudo ufw allow out to 8.8.8.8 port 53 proto udp

# 拒绝特定协议
sudo ufw deny in proto tcp to any port 135:139 # 禁用SMB
sudo ufw deny in proto udp to any port 135:139

2. 删除规则

1
2
3
4
5
6
7
8
9
10
# 方法1:使用规则编号(推荐)
sudo ufw status numbered
sudo ufw delete [编号]

# 方法2:按原规则删除
sudo ufw delete allow 80
sudo ufw delete allow from 192.168.1.100

# 批量删除
sudo ufw status numbered | awk '/^\[/ {print $1}' | tr -d '[]' | xargs -I {} sudo ufw delete {}

3. 插入规则

1
2
3
4
5
# 在指定位置插入规则
sudo ufw insert 1 allow from 192.168.1.1 # 插入为第一条规则

# 在特定规则前插入
sudo ufw insert 3 deny from 10.0.0.0/8

六、配置文件管理

1. 配置文件位置

1
2
3
4
5
6
7
8
9
10
11
12
13
# 主配置文件
/etc/default/ufw

# 规则文件目录
/etc/ufw/
├── ufw.conf # 主要配置
├── before.rules # 原始规则前
├── before6.rules # IPv6原始规则前
├── after.rules # 原始规则后
├── after6.rules # IPv6原始规则后
├── user.rules # 用户规则(IPv4)
├── user6.rules # 用户规则(IPv6)
└── applications.d/ # 应用定义

2. 手动编辑规则

1
2
3
4
5
6
7
8
9
# 备份当前规则
sudo cp /etc/ufw/user.rules ~/user.rules.backup
sudo cp /etc/ufw/user6.rules ~/user6.rules.backup

# 重新加载配置
sudo ufw reload

# 重置所有规则
sudo ufw --force reset

七、实用脚本

1. 快速设置脚本

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
#!/bin/bash
# ufw-quick-setup.sh

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

# 开放基本服务
sudo ufw allow ssh
sudo ufw limit ssh # 限制SSH连接频率
sudo ufw allow http
sudo ufw allow https

# 自定义端口
sudo ufw allow 3000/tcp # Node.js开发
sudo ufw allow 8080/tcp # 备用HTTP
sudo ufw allow 9000/tcp # PHP-FPM

# 数据库(按需开放)
# sudo ufw allow 3306/tcp # MySQL
# sudo ufw allow 5432/tcp # PostgreSQL
# sudo ufw allow 6379/tcp # Redis
# sudo ufw allow 27017/tcp # MongoDB

# 启用并查看状态
sudo ufw enable
sudo ufw status verbose

2. 批量管理脚本

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
#!/bin/bash
# ufw-batch-manage.sh

ACTION=$1
PORTS=$2

case $ACTION in
"open")
for port in $(echo $PORTS | tr ',' ' '); do
sudo ufw allow $port/tcp
echo "Opened port: $port"
done
;;
"close")
for port in $(echo $PORTS | tr ',' ' '); do
sudo ufw delete allow $port/tcp
echo "Closed port: $port"
done
;;
"list")
sudo ufw status numbered
;;
*)
echo "Usage: $0 {open|close|list} [ports]"
echo "Example: $0 open 80,443,3000"
;;
esac

3. 监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# ufw-monitor.sh

# 监控UFW日志
echo "=== UFW 实时监控 ==="
echo "当前时间: $(date)"
echo ""

# 显示最近10条拒绝记录
echo "最近拒绝的连接:"
sudo grep "UFW BLOCK" /var/log/ufw.log | tail -10

echo ""
echo "按来源统计拒绝次数:"
sudo grep "UFW BLOCK" /var/log/ufw.log | awk '{print $12}' | sort | uniq -c | sort -nr | head -20

echo ""
echo "当前活跃规则:"
sudo ufw status numbered

八、场景实例

1. Web服务器配置

1
2
3
4
5
6
7
8
# Web服务器最小配置
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw limit ssh # 防止SSH暴力破解
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable

2. 数据库服务器配置

1
2
3
4
5
6
7
8
# MySQL服务器
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw limit ssh
sudo ufw allow from 192.168.1.0/24 to any port 3306 # 内网访问
sudo ufw allow from 10.0.0.0/8 to any port 3306 # 办公网访问
sudo ufw enable

3. 开发服务器配置

1
2
3
4
5
6
7
8
9
# 开发环境
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 3000:5000/tcp # 开发端口范围
sudo ufw allow 8000:9000/tcp # 测试端口范围
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw allow 27017/tcp # MongoDB
sudo ufw enable