草梅 Auth 是一个基于 Nuxt 全栈框架的统一登录平台。
支持 OAuth2.0 协议,集成邮箱、用户名、手机号、验证码、社交媒体(GitHub、Google、QQ、微博 等)等多种登录注册方式。

0%

如何配置UFW防火墙:从入门到实战

如何配置 UFW 防火墙:从入门到实战

(注:文档内容由 AI 生成)

引言

在 Linux 系统中,防火墙是保护服务器安全的重要组成部分。UFW(Uncomplicated Firewall)作为一款简单易用的防火墙管理工具,为用户提供了直观的命令行界面,使得即使是初学者也能轻松配置和管理防火墙规则。本文将从基础概念开始,详细介绍如何使用 UFW 配置防火墙,包括基础规则设置、Docker 网络放行、配置备份等实用技巧。

什么是 UFW

UFW(Uncomplicated Firewall)是 Linux 系统中的一款轻量级防火墙管理工具,它基于 iptables(或 nftables)构建,旨在简化防火墙规则的配置过程。UFW 提供了简洁的命令行接口,让用户能够轻松地管理网络流量,控制进出站连接。

UFW 的核心特点

  • 易用性:命令语法简洁明了,无需深入了解 iptables 的复杂规则链

  • 灵活性:支持 IPv4 和 IPv6

  • 安全性:可以设置默认策略,提供基础的安全防护

  • 兼容性:与 Docker 等容器化平台良好兼容

安装 UFW

UFW 在大多数 Debian/Ubuntu 系统中默认预装,但在其他发行版中可能需要手动安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Debian/Ubuntu系统(通常已预装)

sudo apt install ufw

# CentOS/RHEL 7+

sudo yum install ufw

# Fedora

sudo dnf install ufw

# Arch Linux

sudo pacman -S ufw

基础配置

1. 启用和禁用 UFW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 启用UFW

sudo ufw enable

# 禁用UFW

sudo ufw disable

# 查看UFW状态

sudo ufw status

# 查看详细状态(带序号)

sudo ufw status numbered

2. 设置默认策略

默认策略决定了未明确匹配任何规则的流量的处理方式:

1
2
3
4
5
6
7
# 默认拒绝所有入站流量

sudo ufw default deny incoming

# 默认允许所有出站流量

sudo ufw default allow outgoing

3. 基本规则配置

放行特定端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 允许SSH(22端口)

sudo ufw allow 22/tcp

# 允许HTTP(80端口)

sudo ufw allow 80/tcp

# 允许HTTPS(443端口)

sudo ufw allow 443/tcp

# 允许特定端口范围

sudo ufw allow 1000:2000/tcp

拒绝特定端口

1
2
3
# 拒绝特定端口

sudo ufw deny 3306/tcp

基于 IP 地址的规则

1
2
3
4
5
6
7
8
9
10
11
# 允许特定IP访问所有端口

sudo ufw allow from 192.168.1.100

# 允许特定IP访问特定端口

sudo ufw allow from 192.168.1.100 to any port 22/tcp

# 拒绝特定IP

sudo ufw deny from 10.0.0.5

删除规则

1
2
3
4
5
6
7
# 按序号删除规则(先通过sudo ufw status numbered查看序号)

sudo ufw delete 3

# 按规则内容删除

sudo ufw delete allow 80/tcp

高级配置

1. 配置 Docker 网络

当系统中运行 Docker 容器时,需要特别配置 UFW 以允许 Docker 网络通信。Docker 会创建多个网络子网,通常在172.16.0.0/12192.168.0.0/16范围内。

查看 Docker 网络

1
2
3
4
5
6
7
# 查看所有Docker网络

docker network ls

# 查看Docker网络详细信息(包括子网)

docker network inspect $(docker network ls -q) --format '{{range .IPAM.Config}}{{.Subnet}} {{end}}' | tr ' ' 'n' | sort -u

批量放行 Docker 网络

1
2
3
4
5
6
7
# 放行所有172.16.0.0/12网段(覆盖所有172.16.x.x到172.31.x.x的Docker子网)

sudo ufw allow in from 172.16.0.0/12

# 放行所有192.168.0.0/16网段(覆盖所有192.168.x.x的Docker子网)

sudo ufw allow in from 192.168.0.0/16

2. IPv6 支持

UFW 默认禁用 IPv6,需要手动开启:

1
2
3
4
5
6
7
8
9
10
11
# 编辑UFW配置文件

sudo nano /etc/default/ufw

# 将IPV6=no改为IPV6=yes

IPV6=yes

# 重启UFW使配置生效

sudo ufw disable && sudo ufw enable

3. 端口转发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启用内核IP转发

sudo sysctl -w net.ipv4.ip_forward=1

# 永久启用内核转发(编辑/etc/sysctl.conf)

sudo nano /etc/sysctl.conf

# 取消注释 net.ipv4.ip_forward=1

sudo sysctl -p

# 配置端口转发规则(如将8080端口转发到192.168.1.200的80端口)

sudo ufw allow 8080/tcp

sudo ufw route allow proto tcp from any to 192.168.1.200 port 80

4. 日志功能

1
2
3
4
5
6
7
8
9
10
11
# 启用UFW日志

sudo ufw logging on

# 启用详细日志

sudo ufw logging full

# 查看UFW日志

sudo tail -f /var/log/ufw.log

配置备份和恢复

备份 UFW 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建备份目录

mkdir -p ~/ufw_backups

# 备份所有UFW配置文件

sudo cp /etc/ufw/after.rules* ~/ufw_backups/

sudo cp /etc/ufw/after6.rules* ~/ufw_backups/

sudo cp /etc/ufw/before.rules* ~/ufw_backups/

sudo cp /etc/ufw/before6.rules* ~/ufw_backups/

sudo cp /etc/ufw/ufw.conf ~/ufw_backups/

sudo cp /etc/ufw/sysctl.conf ~/ufw_backups/

sudo cp -r /etc/ufw/applications.d ~/ufw_backups/

恢复 UFW 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 恢复配置文件

sudo cp ~/ufw_backups/after.rules* /etc/ufw/

sudo cp ~/ufw_backups/after6.rules* /etc/ufw/

sudo cp ~/ufw_backups/before.rules* /etc/ufw/

sudo cp ~/ufw_backups/before6.rules* /etc/ufw/

sudo cp ~/ufw_backups/ufw.conf /etc/ufw/

sudo cp ~/ufw_backups/sysctl.conf /etc/ufw/

sudo cp -r ~/ufw_backups/applications.d /etc/ufw/

# 重启UFW使配置生效

sudo ufw disable && sudo ufw enable

常见问题解决

1. 规则文件不存在的问题

1
2
3
4
5
6
7
8
9
# 如果遇到 "cp: cannot stat '/etc/ufw/rules.v4': No such file or directory"

# 原因:UFW尚未生成规则文件

# 解决方法:启用UFW并添加至少一条规则

sudo ufw enable

sudo ufw allow 22/tcp

2. Docker 与 UFW 的兼容性问题

1
2
3
4
5
# Docker可能会修改iptables规则,导致UFW规则被覆盖

# 解决方法:重启Docker服务

sudo systemctl restart docker

3. SSH 连接中断问题

1
2
3
4
5
# 启用UFW前务必先允许SSH端口,否则会导致远程连接中断

sudo ufw allow 22/tcp

sudo ufw enable

实战案例:Web 服务器安全配置

以下是一个典型的 Web 服务器 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
# 1. 重置UFW规则

sudo ufw reset

# 2. 设置默认策略

sudo ufw default deny incoming

sudo ufw default allow outgoing

# 3. 允许必要的端口

sudo ufw allow 22/tcp # SSH

sudo ufw allow 80/tcp # HTTP

sudo ufw allow 443/tcp # HTTPS

# 4. 允许Docker网络

sudo ufw allow in from 172.16.0.0/12

sudo ufw allow in from 192.168.0.0/16

# 5. 启用UFW

sudo ufw enable

# 6. 查看配置结果

sudo ufw status numbered

配置完成后,UFW 状态应如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Status: active

  To Action From

  -- ------ ----

[ 1] 22/tcp ALLOW IN Anywhere  

[ 2] 80/tcp ALLOW IN Anywhere  

[ 3] 443/tcp ALLOW IN Anywhere  

[ 4] Anywhere ALLOW IN 172.16.0.0/12  

[ 5] Anywhere ALLOW IN 192.168.0.0/16  

[ 6] 22/tcp (v6) ALLOW IN Anywhere (v6)  

[ 7] 80/tcp (v6) ALLOW IN Anywhere (v6)  

[ 8] 443/tcp (v6) ALLOW IN Anywhere (v6)

总结

UFW 是一款功能强大且易于使用的防火墙管理工具,通过本文的介绍,您应该已经掌握了从基础配置到高级应用的全部要点。正确配置 UFW 防火墙对于保护 Linux 服务器安全至关重要,建议:

  1. 始终保持 UFW 启用状态

  2. 采用最小权限原则,只开放必要的端口

  3. 定期备份 UFW 配置

  4. 结合其他安全措施(如 fail2ban、SSH 密钥认证等)

  5. 定期检查和更新防火墙规则

通过合理配置 UFW,您可以有效保护服务器免受网络攻击,为您的应用和数据提供可靠的安全保障。

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/938ecac6.html
版权声明:本文采用 CC BY-NC-SA 4.0 协议 进行分发,转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!