Linux 服务器防火墙从入门到实战:不重启不中断,手把手教你用 firewalld 和 iptables 守住你的线上业务

为什么你的服务器总在被扫描?先别急着装面板

💡 推荐阅读:Linux服务器真的需要防病毒吗?这份最全加固实操指南请收好

很多站长刚买了一台云服务器,装上 Nginx、MySQL,业务跑起来没两天,一看日志吓一跳——满屏的 SSH 爆破尝试、未知 IP 的端口探测。这时候才想起来,哦,防火墙还没配。其实这真不怪云厂商,默认的安全组只是第一道闸门,系统内部的防火墙才是你真正能掌控的“贴身保镖”。

笔者自己踩过不少坑,早期图省事直接 systemctl stop firewalld 然后裸奔,结果数据库端口被扫到,差点被勒索。后来老老实实把防火墙规则梳理清楚,世界瞬间清净了。今天这篇不聊虚的,直接上手,带你从零把 Linux 服务器防火墙玩明白,全程实操,命令直接复制就能用。

动手前,你需要知道的两套班子

🔥 【限时特惠福利】高性价比独享云服务器限时 1 折起

搭建网站或部署容器推荐选择高稳定性独享云服务器。限时特惠通道开放中,点击即可领取专属满减代金券与特惠折扣:

👉 立刻领取云服务器限时优惠券

💡 延伸阅读:Docker容器化部署到底是个啥?新手部署项目总报错,多半是没搞懂这几个核心问题

现在的 Linux 发行版(CentOS 7+、Rocky Linux、Ubuntu 18.04+)基本都预装了两套防火墙工具:firewalldiptables。很多人搞不清区别,其实很简单:

  • 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 起步就够个人站跑得很舒服了。毕竟,防火墙规则写得再好,服务器三天两头宕机也是白搭。希望这篇实操能帮你把基础打牢,少走些弯路。

相关技术专题与延伸阅读

📦 【资源免费领】本文全套实操配置文件与避坑手册下载

本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:

👉 点击前往夸克网盘免费极速转存(手机端领 1TB 空间)

💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。

滚动至顶部