UFW防火墙黑名单,封禁恶意IP网段
服务器突然返回503错误,通常是资源被恶意IP大量占用导致的。
本文面向零基础用户,讲解如何使用UFW防火墙封禁恶意IP网段,从安装、配置到验证一步步操作,帮你快速恢复服务可用性。
准备工作:检查环境与UFW状态
首先确认你的服务器是Ubuntu或Debian系统(UFW默认支持较好)。
登录SSH后,执行以下命令查看UFW是否已安装并启用:
sudo ufw status verbose
如果显示Status: inactive,说明防火墙未启用。
若提示command not found,需要先安装:
sudo apt update
sudo apt install ufw -y
重要:在启用UFW前,务必先放行SSH端口(默认22),否则可能把自己关在门外:
sudo ufw allow 22/tcp
然后启用防火墙:
sudo ufw enable
系统会提示确认,输入y即可。
再次运行sudo ufw status,看到Status: active表示成功。
封禁单个恶意IP与整个网段
假设你从Nginx访问日志中发现某个IP(如192.0.2.100)频繁请求导致503,可以用以下命令封禁:
sudo ufw deny from 192.0.2.100
如果要封禁整个C类网段(例如192.0.2.0/24),使用:
sudo ufw deny from 192.0.2.0/24
注意:网段写法遵循CIDR格式,/24代表前24位是网络号,即192.0.2.0到192.0.2.255。
你可以根据日志中的IP分布调整掩码,比如/16封禁更大范围,但需谨慎避免误伤正常用户。
执行后,UFW会立即生效。
你可以用sudo ufw status numbered查看规则列表,每条规则前有编号,方便后续删除。
批量封禁与规则管理技巧
当恶意IP较多时,手动一条条添加效率低。
可以先将IP列表保存到文件,再用脚本批量添加。
例如创建/tmp/block_ips.txt,每行一个IP或网段,然后运行:
while read ip; do sudo ufw deny from $ip; done < /tmp/block_ips.txt
如果发现误封,用编号删除规则:
sudo ufw status numbered
sudo ufw delete [规则编号]
或者按规则内容删除:
sudo ufw delete deny from 192.0.2.0/24
避坑提醒:UFW规则按顺序匹配,但deny规则优先级较高。
如果同时有allow和deny冲突,以更具体的规则为准。
建议定期用sudo ufw status检查,避免规则堆积影响性能。
验证封禁效果与503恢复
封禁后,如何确认恶意IP已被拦截?
可以从另一台机器(非封禁IP)尝试访问服务器端口,应能正常连接。
如果条件允许,用被封禁的IP测试,会看到连接超时或被拒绝。
同时观察Nginx或应用日志,503错误是否减少。
例如:
tail -f /var/log/nginx/error.log | grep 503
若503依然频繁,可能是攻击源换了IP,需要结合日志分析新出现的异常IP,重复上述封禁步骤。记住:UFW只是基础防护,对于大规模DDoS,建议配合云厂商的高防IP或CDN清洗。
常见疑问与注意事项
UFW和iptables有什么区别? UFW是iptables的前端工具,命令更简单,适合新手。
底层仍调用iptables,规则会保存到/etc/ufw/目录下。
封禁网段会误伤正常用户吗? 如果该网段内有真实用户,确实可能被误封。
建议先封禁单个IP,观察日志确认攻击源集中后再考虑网段。
重启服务器后规则会丢失吗? UFW规则默认持久化,重启后自动加载。
但如果你手动修改了/etc/ufw/下的文件,需运行sudo ufw reload使配置生效。
如何临时关闭UFW? 执行sudo ufw disable,但关闭期间服务器将失去防护,建议仅在调试时短时使用。
最后提醒:
任何防火墙规则都应以实际业务为准,
操作前最好备份当前规则(sudo ufw status > ufw_backup.txt),
遇到异常时优先检查SSH端口是否放行,
避免无法远程连接。