ufw命令

ufw 命令 #

ufw(Uncomplicated Firewall)是一个用户友好的 iptables 前端工具,旨在简化防火墙配置过程。它提供了一个简单的命令行界面,用于管理基于主机的防火墙规则,特别适合那些不熟悉复杂防火墙配置的用户。

语法 #

ufw [--dry-run] [选项] [规则语法]

常用选项 #

选项 描述
enable 启用防火墙
disable 禁用防火墙
status 显示防火墙状态和规则
status verbose 显示详细的防火墙状态
status numbered 显示带编号的规则列表
reload 重新加载防火墙
reset 重置防火墙到默认设置
default allow|deny|reject 设置默认策略
logging on|off|LEVEL 设置日志级别
allow|deny|reject [规则] 添加允许/拒绝/拒绝并通知的规则
delete [规则|编号] 删除规则
insert [编号] [规则] 在指定位置插入规则
route [规则] 添加路由规则
show 显示防火墙报告
show raw 显示原始防火墙信息
show listening 显示监听端口
show added 显示添加的规则
show builtins 显示内置规则
show before-rules 显示前置规则
show user-rules 显示用户规则
show after-rules 显示后置规则
show logging 显示日志配置
--version 显示版本信息

常见用法 #

基本操作 #

1. 检查防火墙状态 #

ufw status

2. 启用防火墙 #

ufw enable

3. 禁用防火墙 #

ufw disable

4. 重置防火墙 #

ufw reset

5. 重新加载防火墙 #

ufw reload

管理规则 #

1. 允许特定端口 #

ufw allow 22

或指定协议:

ufw allow 22/tcp

2. 拒绝特定端口 #

ufw deny 23

3. 拒绝并通知(发送 ICMP 拒绝消息) #

ufw reject 23

4. 允许特定服务 #

ufw allow ssh

可用服务列表位于/etc/services文件中。

5. 允许特定 IP 地址 #

ufw allow from 192.168.1.100

6. 允许特定 IP 地址访问特定端口 #

ufw allow from 192.168.1.100 to any port 22

7. 允许特定 IP 范围 #

ufw allow from 192.168.1.0/24

8. 允许特定网络接口的流量 #

ufw allow in on eth0

9. 允许特定网络接口上的特定端口 #

ufw allow in on eth0 to any port 80

10. 删除规则(按编号) #

首先查看带编号的规则:

ufw status numbered

然后删除特定规则:

ufw delete 2

11. 删除规则(按规则内容) #

ufw delete allow 22

12. 在特定位置插入规则 #

ufw insert 1 allow from 192.168.1.100

默认策略 #

1. 设置默认入站策略 #

ufw default deny incoming

2. 设置默认出站策略 #

ufw default allow outgoing

日志管理 #

1. 启用日志 #

ufw logging on

2. 设置日志级别 #

ufw logging medium

可用级别:offlowmediumhighfull

3. 禁用日志 #

ufw logging off

应用配置 #

1. 查看可用的应用配置 #

ufw app list

2. 查看应用详情 #

ufw app info PROFILE

3. 允许应用 #

ufw allow "Apache Full"

高级用法 #

1. 限制连接速率 #

ufw limit ssh

这将限制 SSH 连接尝试,默认为每 30 秒 6 次连接。

2. 转发规则 #

首先启用转发:

# 编辑/etc/default/ufw
# 设置DEFAULT_FORWARD_POLICY="ACCEPT"

然后添加转发规则:

ufw route allow from 192.168.1.0/24 to 192.168.2.0/24

3. NAT 规则 #

/etc/ufw/before.rules文件中添加 NAT 规则:

# NAT表规则
*nat
:POSTROUTING ACCEPT [0:0]

# 转发来自eth1的流量到eth0
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# 提交规则
COMMIT

4. 端口转发 #

/etc/ufw/before.rules文件中添加端口转发规则:

# 端口转发
*nat
:PREROUTING ACCEPT [0:0]

# 将外部80端口转发到内部服务器
-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

# 提交规则
COMMIT

5. 使用 IPv6 #

确保在/etc/default/ufw中启用 IPv6:

IPV6=yes

然后添加 IPv6 规则:

ufw allow from 2001:db8::/32 to any port 22

6. 自定义规则 #

/etc/ufw/before.rules/etc/ufw/after.rules中添加自定义 iptables 规则。

配置文件 #

ufw 的主要配置文件和目录:

  • /etc/default/ufw:主配置文件
  • /etc/ufw/ufw.conf:高级配置
  • /etc/ufw/sysctl.conf:内核参数配置
  • /etc/ufw/before.rules:在用户规则之前应用的规则
  • /etc/ufw/after.rules:在用户规则之后应用的规则
  • /etc/ufw/before6.rules:IPv6 版本的 before.rules
  • /etc/ufw/after6.rules:IPv6 版本的 after.rules
  • /etc/ufw/applications.d/:应用配置目录

与其他防火墙工具的比较 #

工具 优点 缺点 适用场景
ufw 简单易用、配置快速 功能相对有限 个人电脑、小型服务器
iptables 功能强大、灵活 配置复杂 需要精细控制的环境
firewalld 动态、基于区域 配置较复杂 企业环境、多网络接口
nftables 现代、高性能 学习曲线陡峭 高性能环境、复杂规则

常见问题排查 #

1. 防火墙状态问题 #

systemctl status ufw  # 检查服务状态
ufw status  # 检查防火墙状态

2. 规则不生效 #

可能的原因:

  • 防火墙未启用
  • 规则顺序问题
  • 配置文件错误

解决方法:

ufw enable  # 确保防火墙已启用
ufw status numbered  # 检查规则顺序
ufw reload  # 重新加载配置

3. 锁定自己 #

如果意外锁定了 SSH 访问,可以在服务器控制台执行:

ufw disable

为避免这种情况,可以在启用防火墙前添加 SSH 规则:

ufw allow ssh
ufw enable

4. 日志查看 #

UFW 日志通常位于/var/log/ufw.log

grep UFW /var/log/ufw.log

提示 #

  • 在启用防火墙前,始终确保添加了 SSH 访问规则,以避免锁定自己
  • 使用ufw status numbered查看规则顺序,规则按顺序评估
  • 对于临时测试,可以使用--dry-run选项模拟规则添加
  • 定期备份防火墙配置
  • 使用应用配置文件可以简化常见服务的防火墙配置
  • 在服务器上,通常建议默认拒绝所有入站连接,然后明确允许需要的服务
  • 使用ufw limit可以防止暴力破解攻击
  • 在生产环境中更改防火墙规则前,先在测试环境中验证
  • 对于复杂的防火墙需求,考虑使用 iptables 或 firewalld
  • 使用gufw图形界面可以更直观地管理 UFW 防火墙