Ubuntu防火墙(UFW)配置得当,能成为抵御恶意攻击的第一道坚实屏障。作为一款默认预装的防火墙管理工具,UFW的核心优势就在于“简单”——它帮你把复杂的数据包过滤规则封装成了几条直观的命令。不过,简单不代表随便设置两下就能万事大吉,这里有一套组合拳值得认真过一遍。
1. 安装与启用UFW
UFW全称Uncomplicated Firewall,大部分Ubuntu新系统已自带。如果尚未安装,执行以下命令即可搞定:
sudo apt update
sudo apt install ufw
sudo ufw enable # 启用防火墙,系统会提示确认
启用后,默认策略自动生效:拒绝所有传入连接,允许所有传出连接。这本身就是防止外部恶意流量进入的基础姿态。
2. 设置默认策略:拒绝所有未明确允许的入站连接
默认策略是防火墙的第一道防线,务必保持如下配置:
sudo ufw default deny incoming # 拒绝所有传入连接(防止未授权访问)
sudo ufw default allow outgoing # 允许所有传出连接(不影响系统正常上网)
这个策略看起来“粗暴”,但正是它帮你从源头大幅缩小了潜在攻击面。
3. 仅允许必要的服务端口
接下来,根据实际需求开放必要的端口。比如Web服务器至少要开80和443,SSH远程管理需要22。而像Telnet(23端口)这类明文协议,最好直接封锁。示例:
sudo ufw allow 22/tcp # SSH(远程管理)
sudo ufw allow 80/tcp # HTTP(Web服务)
sudo ufw allow 443/tcp # HTTPS(加密Web服务)
sudo ufw deny 23/tcp # 拒绝Telnet(明文传输,易被窃听)
切记:只开必要的端口,关掉一切不用的服务入口,攻击者的目标数量就少了一大半。
4. 基于IP地址控制访问:仅允许可信IP
对于SSH这类敏感服务,光设个端口开放还不够——最好把访问来源限制在可信IP范围内。举个例子,只允许公司内网IP 192.168.1.100连接SSH:
sudo ufw allow from 192.168.1.100 to any port 22
这条规则一加,任何陌生IP的暴力破解请求都会被直接挡在门外,相当管用。
5. 限制连接速率:防止DDoS与暴力破解
高频恶意攻击(比如SSH暴力破解、DDoS)往往靠大量并发请求来消耗资源。UFW提供了limit规则,能限制单个IP的连接速率——例如限制SSH每分钟最多3次,超出的暂时拒绝:
sudo ufw limit ssh/tcp
# 等同于:sudo ufw limit from any to any port 22 proto tcp
别小看这个简单的速率限制,很多高频扫描脚本碰到它就会自动退散。
6. 启用日志记录:监控可疑活动
防火墙干得好不好,还得看日志记录。开启UFW日志后,所有匹配规则的连接尝试都会被记录下来,方便事后分析和回溯。设置日志级别为medium可以在详细程度和性能之间取得平衡:
sudo ufw logging on
sudo ufw logging medium # 可选:low/medium/high/full
日志默认存于/var/log/ufw.log,用tail -f /var/log/ufw.log可实时跟踪活动。
7. 高级防护:使用iptables扩展功能
如果UFW的规则能力不够用(比如需要精确限制端口范围或过滤特定协议),可以借助iptables进行补充。例如限制1000-2000端口的TCP连接:
sudo iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT
需注意,iptables规则默认不会持久化,需手动保存才能重启后生效:sudo iptables-sa ve > /etc/iptables/rules.v4。
8. 结合其他安全措施:提升整体防护
防火墙并非万能,单独靠它撑不起整套安全防线。必须配合以下措施才能形成纵深防御:
- 定期更新系统:
sudo apt update && sudo apt upgrade安装最新安全补丁,封堵已知漏洞; - 强化SSH安全:禁用root登录(
PermitRootLogin no)、强制密钥认证(PasswordAuthentication no)、更改默认SSH端口(比如2222); - 监控与分析:部署
fail2ban自动封禁多次尝试失败的IP,配合journalctl分析服务日志。
把上述配置走一遍,Ubuntu的防火墙就能在DDoS、暴力破解、非法端口扫描等常见攻击面前展现出不错的防御力。当然,安全配置不能一成不变,需要根据实际业务和威胁变化定期复盘、调整规则。毕竟,真正的防护永远是动态的。
