Linux防火墙允许IP段访问:详细配置指南与安全实践(2025最新版)

在企业级服务器运维和网络安全管理中,合理配置防火墙规则是保障系统安全的第一道防线。随着远程办公、分布式架构的普及,我们常常需要只允许特定IP段访问指定端口,例如:仅允许公司内网IP段通过SSH登录服务器,或只让数据中心的IP访问数据库端口(如1521、3306等)。本文将深入讲解如何使用 firewalld 在 Linux 系统中实现 IP段白名单访问控制,并提供完整操作命令与安全注意事项,助你构建更安全的网络环境。

Linux防火墙允许IP段访问:详细配置指南与安全实践(2025最新版)


为什么需要限制IP段访问?

默认情况下,开放的端口对所有公网IP可见,极易成为黑客扫描和攻击的目标。通过设置 IP段白名单,你可以:

  • ✅ 提高服务器安全性,防止暴力破解

  • ✅ 避免敏感服务(如数据库、管理后台)暴露在公网

  • ✅ 实现精细化访问控制,符合最小权限原则

  • ✅ 满足企业安全合规要求

📌 典型应用场景
允许 192.168.1.0/24 网段访问Web服务器的80/443端口,或仅让 10.0.0.0/8 内网访问数据库的3306端口。


使用 firewalld 配置IP段访问规则(CentOS/RHEL/Fedora)

现代 Linux 发行版普遍使用 firewalld 作为默认防火墙管理工具。它支持“富规则”(rich rules),可精确控制IP、端口、协议等访问权限。

✅ 1. 检查并启动防火墙

首先确认 firewalld 是否已安装并运行:

# 查看防火墙状态
systemctl status firewalld

# 启动防火墙(若未运行)
sudo systemctl start firewalld

# 设置开机自启
sudo systemctl enable firewalld

⚠️ 重要提醒:如果你是通过SSH远程连接服务器,务必先添加当前IP的访问规则,否则开启防火墙后可能导致连接中断!


✅ 2. 关闭全局端口开放(避免冲突)

如果你之前已通过 --add-port 开放了某个端口(如1521),需先关闭,否则规则会冲突:

# 查看当前开放的端口
sudo firewall-cmd --zone=public --list-ports

# 关闭全局开放的1521端口(示例)
sudo firewall-cmd --zone=public --remove-port=1521/tcp --permanent

# 重新加载配置
sudo firewall-cmd --reload

✅ 3. 添加IP段访问特定端口规则

使用 --add-rich-rule 命令添加IP段白名单规则。

🔹 示例1:允许整个IP段访问指定端口

# 允许 192.168.1.0/24 网段访问 TCP 1521 端口
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='1521' accept"

# 重新加载防火墙
sudo firewall-cmd --reload

🔹 示例2:允许单个IP访问指定端口

# 允许单个IP 10.0.0.100 访问 22 端口(SSH)
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.100' port protocol='tcp' port='22' accept"
sudo firewall-cmd --reload

🔹 示例3:允许IP段访问多个端口(批量设置)

# 方法1:逐个添加
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='80' accept"
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='443' accept"

# 方法2:使用端口范围(如1001-1005)
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='1001-1005' accept"

# 一次性重载
sudo firewall-cmd --reload

✅ 4. 查看与验证规则

配置完成后,务必检查规则是否生效:

# 查看所有富规则(rich rules)
sudo firewall-cmd --zone=public --list-rich-rules

# 查看防火墙完整配置(包含端口、服务、规则等)
sudo firewall-cmd --list-all

# 检查特定端口是否开放
sudo firewall-cmd --zone=public --query-port=1521/tcp

预期输出应包含你设置的IP段规则,例如:

rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="1521" accept

✅ 5. 删除或修改规则

如需调整策略,可删除旧规则后重新添加:

# 删除允许 192.168.1.0/24 访问1521的规则
sudo firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='1521' accept"

# 重新加载
sudo firewall-cmd --reload

高级技巧与安全建议

🔐 1. 使用 reject 替代 drop(可选)

默认 accept 表示允许,你也可以使用 reject 明确拒绝非法请求,便于排查:

# 拒绝特定IP段访问
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.2.0/24' port protocol='tcp' port='22' reject"

📁 2. 直接编辑配置文件(适用于批量管理)

规则最终保存在 /etc/firewalld/zones/public.xml 中,可直接编辑:

sudo vi /etc/firewalld/zones/public.xml

添加如下内容:

<rule family="ipv4">
  <source address="192.168.1.0/24"/>
  <port protocol="tcp" port="1521"/>
  <accept/>
</rule>

保存后执行 firewall-cmd --reload 即可。


常见问题与排查

问题解决方案
规则不生效检查是否使用 --permanent,并执行 --reload
SSH连接中断立即通过控制台登录,检查规则是否误封自己IP
IP段格式错误确保使用 CIDR 格式(如 /24),避免空格或引号错误
防火墙未启动运行 systemctl start firewalld 并设为开机启动

通过 firewalld 的富规则功能,我们可以轻松实现 Linux防火墙只允许指定IP段访问特定端口 的安全策略。关键步骤总结如下:

  1. ✅ 启用并配置 firewalld

  2. ✅ 关闭全局端口开放

  3. ✅ 使用 --add-rich-rule 添加IP段白名单

  4. ✅ 执行 --reload 使配置永久生效

  5. ✅ 定期审查规则,确保策略合规

🌐 安全无小事:每一次开放端口都是一次风险暴露。建议结合 Fail2BanSSH密钥登录定期日志审计 等手段,构建多层防御体系。


📌 本文适用系统:CentOS 7/8/Stream、RHEL、Fedora、Ubuntu(需安装 firewalld)等使用 firewalld 的 Linux 发行版。

📢 欢迎收藏+转发,关注我获取更多 Linux 安全与运维实战技巧!你还在用 iptables 吗?欢迎在评论区分享你的防火墙管理经验!

发表评论

评论列表

还没有评论,快来说点什么吧~