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
可用级别:off
、low
、medium
、high
、full
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 防火墙