
Ubuntu 系统防火墙命令详解
Ubuntu 系统中主要使用两种防火墙工具:UFW (Uncomplicated Firewall) 和 iptables。UFW 是一个对 iptables 的前端简化工具,旨在使防火墙配置更加简单。下面将详细讲解这两种工具的相关命令。
一、UFW (Uncomplicated Firewall)
UFW 是 Ubuntu 默认的防火墙配置工具,设计简单易用,适合初学者。
1. 基本操作命令
# 检查 UFW 状态
sudo ufw status
sudo ufw status verbose # 显示详细信息
sudo ufw status numbered # 显示规则编号
# 启用/禁用 UFW
sudo ufw enable
sudo ufw disable
# 重置 UFW(删除所有规则)
sudo ufw reset
2. 管理防火墙规则
# 允许/拒绝特定端口
sudo ufw allow 22 # 允许 SSH 连接
sudo ufw deny 23 # 拒绝 Telnet 连接
# 允许/拒绝特定服务(根据服务名)
sudo ufw allow ssh
sudo ufw deny telnet
# 允许/拒绝特定协议
sudo ufw allow http # 允许 HTTP 流量
sudo ufw allow https # 允许 HTTPS 流量
# 指定协议类型
sudo ufw allow 53/tcp # 允许 TCP 协议的 53 端口
sudo ufw allow 53/udp # 允许 UDP 协议的 53 端口
# 指定来源 IP 地址
sudo ufw allow from 192.168.1.100 # 允许来自特定 IP 的所有连接
sudo ufw allow from 192.168.1.0/24 # 允许来自特定网段的所有连接
# 指定来源 IP 和目标端口
sudo ufw allow from 192.168.1.100 to any port 22 # 允许特定 IP 访问 SSH
# 删除规则
sudo ufw delete allow 80 # 删除允许 80 端口的规则
sudo ufw delete 3 # 删除规则编号为 3 的规则(需先使用 numbered 查看编号)
3. 高级规则配置
# 限制连接次数(防止暴力破解)
sudo ufw limit ssh # 限制 SSH 连接尝试次数
# 允许特定范围的端口
sudo ufw allow 6000:6007/tcp # 允许 TCP 端口范围
sudo ufw allow 6000:6007/udp # 允许 UDP 端口范围
# 转发端口
sudo ufw route allow in on eth0 out on eth1 # 允许从 eth0 到 eth1 的流量转发
4. 应用配置和日志
# 应用配置(当修改了配置文件后)
sudo ufw reload
# 查看日志
sudo ufw logging on # 开启日志
sudo ufw logging off # 关闭日志
sudo ufw logging low|medium|high # 设置日志级别
二、iptables 命令
iptables 是 Linux 系统中强大的防火墙工具,比 UFW 更复杂但功能更强大。
1. 基本查看命令
# 查看当前 iptables 规则
sudo iptables -L # 列出所有规则
sudo iptables -L -v # 显示详细信息
sudo iptables -L -n # 显示 IP 地址和端口号(不解析为名称)
sudo iptables -L --line-numbers # 显示规则编号
2. 链和表的操作
# 查看特定链的规则
sudo iptables -L INPUT # 查看 INPUT 链规则
sudo iptables -L OUTPUT # 查看 OUTPUT 链规则
sudo iptables -L FORWARD # 查看 FORWARD 链规则
# 清空某个链的规则
sudo iptables -F INPUT # 清空 INPUT 链
sudo iptables -F # 清空所有链
# 设置链的默认策略
sudo iptables -P INPUT DROP # 设置 INPUT 链默认策略为 DROP(拒绝所有)
sudo iptables -P OUTPUT ACCEPT # 设置 OUTPUT 链默认策略为 ACCEPT(允许所有)
3. 添加规则
# 允许特定端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH 连接
# 允许特定 IP 地址
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 允许来自特定 IP 的连接
# 根据状态进行过滤
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许已建立的连接
# 拒绝特定端口
sudo iptables -A INPUT -p tcp --dport 23 -j DROP # 拒绝 Telnet 连接
# 添加规则到特定位置
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT # 在 INPUT 链的第一位添加规则
4. 删除规则
# 通过规则匹配删除
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 删除允许 80 端口的规则
# 通过规则编号删除
sudo iptables -D INPUT 3 # 删除 INPUT 链中第 3 条规则
5. 保存和恢复规则
# 保存 iptables 规则
sudo sh -c "iptables-save > /etc/iptables.rules"
# 恢复 iptables 规则
sudo sh -c "iptables-restore < /etc/iptables.rules"
三、常见防火墙配置示例
1. 基本的服务器安全配置
# 使用 UFW
sudo ufw default deny incoming # 默认拒绝所有入站连接
sudo ufw default allow outgoing # 默认允许所有出站连接
sudo ufw allow ssh # 允许 SSH 连接
sudo ufw allow http # 允许 HTTP 连接
sudo ufw allow https # 允许 HTTPS 连接
sudo ufw enable # 启用防火墙
# 使用 iptables
sudo iptables -P INPUT DROP # 设置默认策略为拒绝
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
sudo iptables -A INPUT -i lo -j ACCEPT # 允许本地回环接口
2. 防止 DoS 攻击配置
# 使用 iptables 限制连接数
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
四、防火墙管理工具
除了命令行,Ubuntu 还提供了一些图形化的防火墙管理工具:
-
gufw:UFW 的图形界面
sudo apt install gufw
-
fwbuilder:功能更丰富的防火墙配置工具
sudo apt install fwbuilder
五、故障排查技巧
-
查看防火墙是否阻止了连接
sudo ufw status sudo iptables -L
-
临时禁用防火墙进行测试
sudo ufw disable sudo iptables -P INPUT ACCEPT sudo iptables -F
-
检查防火墙日志
sudo tail -f /var/log/ufw.log sudo journalctl -f | grep UFW
六、防火墙最佳实践
- 遵循最小权限原则:只开放必要的端口
- 定期审查防火墙规则:移除不需要的规则
- 使用限制规则:防止暴力破解攻击
- 记录防火墙活动:开启日志功能
- 备份防火墙规则:定期导出规则配置
通过以上命令和配置示例,您应该能够灵活管理 Ubuntu 系统上的防火墙,保护您的服务器安全。