为什么需要设置防火墙规则
你有没有遇到过半夜收到服务器被爆破登录的告警?或者发现某个服务莫名其妙地响应变慢?这些问题,很可能是因为你的服务器“大门敞开”,没做好访问控制。防火墙就是那道门卫,决定谁可以进、谁必须拦下。
比如你开了一个网站,只需要让外界访问80和443端口,但SSH管理端口(默认22)如果也对所有人开放,黑客就会不断尝试暴力破解密码。这时候,正确的防火墙规则就能帮你挡住这些骚扰。
常用防火墙工具介绍
Linux服务器上最常见的防火墙工具是iptables和firewalld。Ubuntu用户更习惯用ufw,简单直观。下面以CentOS 7+常用的firewalld为例,讲怎么设置规则。
启用并启动firewalld
新装系统可能默认没开防火墙,先确认状态:
sudo systemctl status firewalld如果没运行,启动并设为开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld查看当前规则
想知道现在哪些端口开着,执行:
sudo firewall-cmd --list-all输出会显示当前区域(通常是public)允许的服务和端口。比如看到ssh、http、https,说明这几个服务是放行的。
添加允许的服务或端口
你想让网站能被访问,就得放行HTTP和HTTPS:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https改完记得重载配置:
sudo firewall-cmd --reload如果你运行的是自定义端口的应用,比如Node.js服务跑在3000端口,那就直接加端口:
sudo firewall-cmd --permanent --add-port=3000/tcp限制SSH访问,提高安全性
别让全世界都能连你的SSH。假设你公司固定IP是203.0.113.10,只允许这个IP访问SSH端口:
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" accept'这样其他IP连22端口会被直接拒绝,减少日志里的暴力破解记录。
屏蔽恶意IP
发现某个IP一直扫描你的端口,可以直接拉黑:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'把192.168.1.100换成你要封禁的IP。也可以用drop,比reject更彻底,不回复任何信息。
删除规则
加错了规则怎么办?比如想删掉3000端口的放行:
sudo firewall-cmd --permanent --remove-port=3000/tcp
sudo firewall-cmd --reload注意一定要加上--permanent,否则重启后规则还在。
实际应用场景举例
小李负责公司的测试服务器,开发团队要用MySQL(3306)、Redis(6379),但他不想全网开放。他的做法是:
- 只允许办公室公网IP访问3306
- Redis只绑定内网IP,外加防火墙限制,双重保险
- 临时开放6379给某位远程开发人员调试,用完立刻删规则
这样做既满足需求,又不会把数据库暴露在公网。
一些实用建议
改防火墙规则时,别把自己踢出去。尤其是远程操作,务必确保至少有一条通路能连进去。比如修改SSH端口前,先测试新端口是否生效,再关旧端口。
定期检查日志,看看/var/log/audit/audit.log或journalctl里有没有异常连接尝试。配合fail2ban这类工具,能自动封禁多次失败的IP。
规则不是越多越好,越复杂越容易出错。保持简洁清晰,只开必要的端口,是最稳妥的做法。