为什么你的服务器总在被扫描?先别急着装面板
💡 推荐阅读:Linux服务器真的需要防病毒吗?这份最全加固实操指南请收好
很多站长刚买了一台云服务器,装上 Nginx、MySQL,业务跑起来没两天,一看日志吓一跳——满屏的 SSH 爆破尝试、未知 IP 的端口探测。这时候才想起来,哦,防火墙还没配。其实这真不怪云厂商,默认的安全组只是第一道闸门,系统内部的防火墙才是你真正能掌控的“贴身保镖”。
笔者自己踩过不少坑,早期图省事直接 systemctl stop firewalld 然后裸奔,结果数据库端口被扫到,差点被勒索。后来老老实实把防火墙规则梳理清楚,世界瞬间清净了。今天这篇不聊虚的,直接上手,带你从零把 Linux 服务器防火墙玩明白,全程实操,命令直接复制就能用。
动手前,你需要知道的两套班子
💡 延伸阅读:Docker容器化部署到底是个啥?新手部署项目总报错,多半是没搞懂这几个核心问题
现在的 Linux 发行版(CentOS 7+、Rocky Linux、Ubuntu 18.04+)基本都预装了两套防火墙工具:firewalld 和 iptables。很多人搞不清区别,其实很简单:
- iptables:老牌工具,直接操作内核 netfilter 规则,灵活但规则链复杂,适合精细控制。
- firewalld:基于 iptables 的“管家”,引入了 zone(区域)概念,动态管理,改规则不用重启服务,适合日常运维。
笔者的建议是:日常用 firewalld,排查复杂流量时用 iptables 看底层链。下面我们两条线都走一遍。
环境准备
💡 深度技术指南:云服务器越用越卡?性能瓶颈排查实战:从CPU飙高到磁盘IO耗尽,一篇讲透
本文实操环境为 CentOS Stream 9 / Rocky Linux 9,内核版本 5.14+。如果你是 Ubuntu,命令稍有差异(ufw),但核心思路完全一致。
# 检查系统版本
cat /etc/os-release
# 确保 firewalld 已安装(一般默认有)
rpm -qa | grep firewalld
# 如果没有,执行安装
yum install -y firewalld
# 启动并设置开机自启
systemctl start firewalld
systemctl enable firewalld
实战一:firewalld 快速上手(推荐日常使用)
1. 查看当前状态与默认区域
# 查看运行状态
systemctl status firewalld
# 查看默认区域(通常是 public)
firewall-cmd --get-default-zone
# 查看所有区域
firewall-cmd --get-zones
# 查看当前生效的规则
firewall-cmd --list-all
2. 放行常用服务端口
这是最高频的操作。比如你要开放 SSH(22)、Web(80/443)和 MySQL(3306,仅限内网)。
# 放行 HTTP 服务(永久生效,--permanent 是关键)
firewall-cmd --permanent --add-service=http
# 放行 HTTPS
firewall-cmd --permanent --add-service=https
# 放行指定端口(比如 SSH 改成了 2222)
firewall-cmd --permanent --add-port=2222/tcp
# 放行端口范围(比如游戏服务器)
firewall-cmd --permanent --add-port=27015-27030/tcp
# 重新加载配置(让永久规则生效,不中断现有连接)
firewall-cmd --reload
注意: 每次修改完规则,务必执行 --reload,否则不生效。而且千万别忘了加 --permanent,否则重启服务器规则就丢了。
3. 限制来源 IP(防爆破神器)
只允许公司 IP 访问 SSH,这是最有效的安全手段。
# 移除默认的 SSH 服务放行(先删掉宽泛规则)
firewall-cmd --permanent --remove-service=ssh
# 仅允许 192.168.1.100 访问 SSH 端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32" port protocol="tcp" port="22" accept'
# 拒绝某个恶意 IP 访问所有端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="45.155.205.123" drop'
# 重新加载
firewall-cmd --reload
4. 端口转发(内网穿透常用)
如果你有一台内网机器跑了服务,想在公网服务器上做个转发,firewalld 也能干。
# 开启内核转发(临时生效)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 将公网 8080 端口转发到内网 192.168.1.10 的 80 端口
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10
# 重新加载
firewall-cmd --reload
实战二:iptables 底层逻辑(排查疑难杂症)
有时候 firewalld 的规则看着没问题,但流量就是不通。这时候直接看 iptables 的链最直观。
# 查看当前所有规则(带行号)
iptables -L -n --line-numbers
# 查看 NAT 表规则(端口转发问题排查)
iptables -t nat -L -n --line-numbers
# 清空某条链的计数(用于测试是否命中规则)
iptables -Z INPUT
举个例子,你想临时封掉一个正在疯狂扫描的 IP,iptables 一条命令搞定:
# 立即丢弃该 IP 的所有流量(注意:此操作即时生效,但重启失效)
iptables -I INPUT -s 103.75.190.249 -j DROP
# 如果想保存规则(CentOS 需要安装 iptables-services)
yum install -y iptables-services
service iptables save
避坑清单:这些坑我替你踩过了
| 常见坑 | 后果 | 解决方案 |
|---|---|---|
改规则没加 --permanent |
服务器重启后规则丢失,业务裸奔 | 养成习惯,永久规则必加参数,然后 --reload |
| 先删了 SSH 服务再添加受限 IP,但 IP 写错了 | 远程连接直接断开,只能去机房或 VNC 救急 | 操作前先加一条当前 IP 的放行规则,或者用 firewall-cmd --runtime-to-permanent 先测试 |
| Docker 容器端口映射后,firewalld 不生效 | 容器端口暴露在外网 | Docker 会直接操作 iptables,绕过 firewalld。要么用 --iptables=false 启动 Docker,要么在 Docker 层面配置网络策略 |
| 云厂商安全组和系统防火墙双重限制 | 明明系统放行了,外网还是不通 | 先检查云控制台安全组入方向规则,再查系统防火墙,两者是“与”的关系 |
进阶技巧:动态封禁暴力破解 IP
手动封 IP 太累,我们可以结合 fail2ban 实现自动封禁。虽然这不算防火墙本身的功能,但它是防火墙的最佳拍档。
# 安装 fail2ban
yum install -y fail2ban
# 配置 SSH 保护
cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 3600
EOF
# 启动并设置开机自启
systemctl start fail2ban
systemctl enable fail2ban
配置完成后,同一个 IP 连续输错 3 次密码,会被自动封禁 1 小时。这比手动盯日志高效多了。
写在最后:别让防火墙成为业务瓶颈
防火墙这东西,配置得太松等于没配,配置得太紧又容易误伤业务。笔者的经验是:先最小化开放,再按需逐步放行。每次上线新服务前,先想清楚这个端口需要暴露给谁,而不是图省事直接 --add-port=1-65535/tcp。
另外提醒一句,如果你用的是云服务器,一定要把云厂商的安全组和系统防火墙当成两道独立的门禁。很多新手只改了系统防火墙,忘了安全组,结果外网还是访问不了;或者反过来,只开了安全组,系统防火墙没放行,一样白搭。
如果你还在为选哪家服务器发愁,建议优先考虑大厂的新用户活动机,配置不用太高,2核4G 起步就够个人站跑得很舒服了。毕竟,防火墙规则写得再好,服务器三天两头宕机也是白搭。希望这篇实操能帮你把基础打牢,少走些弯路。
相关技术专题与延伸阅读
- Linux服务器真的需要防病毒吗?这份最全加固实操指南请收好
- Docker容器化部署到底是个啥?新手部署项目总报错,多半是没搞懂这几个核心问题
- 云服务器越用越卡?性能瓶颈排查实战:从CPU飙高到磁盘IO耗尽,一篇讲透
- 被问烦了:云服务器测评和性能调优到底有没有关系?看完这篇别再瞎折腾了
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。