在Ubuntu服务器管理中,防火墙是安全防护的第一道防线,但很多用户开启UFW(Uncomplicated Firewall)后,发现重启系统或网络服务时规则丢失,这是因为没有进行规则持久化配置。本文将直接教你如何正确启用UFW并确保规则永久生效,避免安全漏洞。具体操作包括:激活UFW默认策略、添加自定义规则、使用iptables底层工具固化配置,以及处理常见网络服务如SSH、HTTP/HTTPS的访问控制。
理解UFW和持久化的重要性
UFW是Ubuntu上简化iptables配置的前端工具,默认状态为禁用,开启后仅临时生效。持久化指将防火墙规则保存到系统文件中,确保重启后自动加载。若不持久化,规则会丢失,导致端口意外暴露或服务中断。例如,生产服务器若SSH规则失效,可能引发未授权访问。持久化依赖iptables工具链,需通过保存和恢复规则文件实现。
步骤一:检查并激活UFW防火墙
首先更新系统并查看UFW状态。打开终端,执行以下命令:
sudo apt update sudo apt upgrade -y sudo ufw status
若显示"Status: inactive",则防火墙未启用。激活前需设置默认策略:拒绝所有入站、允许所有出站,这是安全最佳实践。
sudo ufw default deny incoming sudo ufw default allow outgoing
然后启用UFW,系统会提示可能影响SSH连接,需提前放行SSH端口(默认22):
sudo ufw allow ssh sudo ufw enable
执行后,防火墙立即生效,但此时规则未持久化。
步骤二:配置常用防火墙规则
根据服务需求添加规则。例如,允许HTTP(80端口)、HTTPS(443端口),并限制特定IP访问SSH:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow from 192.168.1.100 to any port 22
若需拒绝某端口(如关闭不安全的FTP端口21):
sudo ufw deny 21/tcp
规则添加后,可用sudo ufw status numbered查看编号列表,方便管理删除(如sudo ufw delete 2删除第二条规则)。
步骤三:实现规则持久化的核心方法
UFW本身不直接提供持久化命令,但可通过iptables工具实现。首先安装iptables-persistent包,它能在启动时自动加载规则:
sudo apt install iptables-persistent -y
安装过程中会提示保存当前IPv4/IPv6规则,选择"是"。之后,手动保存规则到文件:
sudo iptables-save > /etc/iptables/rules.v4 sudo ip6tables-save > /etc/iptables/rules.v6
这两文件是持久化的关键,系统重启时会通过systemd服务(netfilter-persistent)自动恢复。测试时可重启网络服务:
sudo systemctl restart netfilter-persistent
验证规则是否生效:sudo iptables -L应显示已配置规则。注意,每次修改UFW规则后,需重新运行iptables-save命令更新文件。
步骤四:高级配置与故障处理
复杂场景需直接编辑iptables规则。例如,设置端口速率限制防止DDoS攻击(限制SSH每分钟连接不超过5次):
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SSH -j DROP
保存到持久文件前,建议备份原配置:sudo cp /etc/iptables/rules.v4 ~/rules.v4.backup。常见问题包括规则冲突导致网络中断,可用sudo ufw disable临时关闭防火墙排查,或通过恢复模式重置。
步骤五:自动化脚本与监控建议
为简化维护,可创建脚本自动保存规则。新建文件/usr/local/bin/ufw-persist.sh:
#!/bin/bash sudo iptables-save > /etc/iptables/rules.v4 sudo ip6tables-save > /etc/iptables/rules.v6 echo "Rules persisted at $(date)" >> /var/log/ufw-persist.log
添加执行权限并设为定时任务(每日凌晨3点保存):
sudo chmod +x /usr/local/bin/ufw-persist.sh sudo crontab -e # 添加行:0 3 * * * /usr/local/bin/ufw-persist.sh
监控方面,建议用sudo ufw status verbose定期检查,并配置日志(UFW日志在/var/log/ufw.log),结合工具如Fail2ban增强防护。
总结:构建稳固的防火墙体系
Ubuntu安全不仅依赖UFW开启,更在于规则持久化。核心步骤为:启用UFW基础策略、添加服务规则、通过iptables-persistent固化配置。持久化本质是将内存规则写入文件,由系统服务自动加载。对于高安全环境,建议结合应用层防护和定期审计规则。记住,每次修改后运行iptables-save,并测试重启生效情况,才能确保服务器长期安全运行。
