Centos 7防火墙策略配置指南

[复制链接]
发表于 2026-10-6 09:51:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

CentOS 7 默认用 firewalld 当防火墙,很多人卡在"服务起不来"或者"规则加完没效果"这两步。这篇把 firewalld 的日常操作按实际运维的顺序整理清楚:服务怎么管、端口怎么开关、怎么只放行指定 IP、rich rule 怎么写、常见命令有哪些坑。所有命令都以 root 或 sudo 执行为前提。

一、先把防火墙服务管明白

1. 切到 root

su root

或者直接全程加 sudo 前缀也行,效果一样。

2. 看状态

先看服务在不在、是不是开机自启:

systemctl status firewalld
systemctl is-enabled firewalld.service
firewall-cmd --state

firewall-cmd --state 会直接回一句 running 或 not running,最省事。

3. 启动 / 重启 / 关闭

systemctl start firewalld      # 启动
systemctl restart firewalld    # 重启
systemctl reload firewalld     # 只重载配置,不断连接
systemctl stop firewalld       # 关闭
systemctl enable firewalld     # 设为开机自启
systemctl disable firewalld    # 取消开机自启

记一个小区别:改配置通常用 firewall-cmd --reload,比 restart 温和——reload 只是重新读规则,已经建立的连接不断开;restart 会短暂中断。生产上优先 reload。

二、端口:开关查三件套

firewall-cmd --list-ports              # 已开放的端口
firewall-cmd --list-all                # 某 zone 的全部规则(服务、端口、富规则)
firewall-cmd --list-protocols          # 允许的协议
firewall-cmd --list-rich-rules         # 富规则列表

看端口也可以直接用 netstat 对照(注意 ntlp 里的 p 表示进程,别漏):

netstat -ntlp

开放一个端口的标准写法,关键是加 --permanent 再加 reload,否则重启就丢了:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=998/tcp
firewall-cmd --permanent --add-port=999/tcp
firewall-cmd --reload

查询和删除:

firewall-cmd --query-port=80/tcp                 # 查是否开放,返回 yes/no
firewall-cmd --permanent --remove-port=999/tcp   # 删掉端口
firewall-cmd --reload

几个参数释义:--permanent 永久生效(不加只在当前运行实例里生效);--zone 指定作用域(公网网卡一般是 public);--add-port=80/tcp 格式固定是"端口/协议"。加是 add、删是 remove,记住这一个字就够了。

三、只放行指定 IP:rich rule

比"开一个端口给全世界"更精细的做法是限来源。规则里的关键字:accept 是放行、drop 是拒绝。

1. 允许某个 IP 访问所有流量

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.43.100" accept'
firewall-cmd --reload

2. 只允许某个 IP 访问某个端口

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="8.8.8.8" port protocol="tcp" port="80" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.168.186.25" port protocol="tcp" port="22" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.168.186.25,10.168.186.211" port protocol="tcp" port="3306" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.168.186.0/24" port protocol="tcp" port="22" accept'
firewall-cmd --reload

这几条覆盖了四种常见形态:单个 IP、多 IP 逗号分隔、CIDR 网段(10.168.186.0/24 就是整个网段)。命令跑完回显 success 才说明写进去了。

3. 按协议限,比如禁 ping

firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" drop'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="120.12.23.136" protocol value="icmp" accept'

注意顺序:允许某台机器 ping 要通过,就先写总开关 drop、再写这条 accept(firewalld 对同一来源按匹配顺序处理)。真想精准控制,用 --add-icmp-block-inverse 更清晰。

4. 移除规则

firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="8.8.8.8" port port="80" protocol="tcp" accept'
firewall-cmd --reload

动手删之前先 firewall-cmd --list-rich-rules 把原文抄下来,去掉 --add- 换成 --remove- 就是删除命令,比自己重新拼一遍省事得多。

四、服务(service)级的开关

firewall-cmd --get-services                 # 看本机支持哪些服务名
firewall-cmd --add-service=http             # 临时放行 http 服务
firewall-cmd --remove-service=http          # 临时移除
firewall-cmd --query-service=http           # 查状态
firewall-cmd --permanent --add-service=nginx # 永久放行

所谓"服务"其实就是一组预定义好的端口(比如 http 对应 80/tcp),记不住端口时用它比较省心。

五、三个最容易踩的坑

  1. 加了端口忘 reload:不加 --permanent 或加完不 firewall-cmd --reload,重启服务/机器后全丢,排查时容易误判成"规则没生效"。
  2. 改完规则不验证:加完一定要用 firewall-cmd --list-all 回看一眼,确认规则真的在里面。
  3. 在公网 zone 里给全端口放行:端口开放前先想清楚来源,数据库这类端口只给内网或跳板机 IP,别写成 0.0.0.0/0。

六、小结

firewalld 的日常操作就三件事:服务(start/restart/reload/enable)、端口(add-port / remove-port + permanent + reload)、来源限制(rich rule 的 accept / drop)。记住一条主线——所有永久配置都必须带 --permanent,改完必须 --reload,能避开大部分"配置没生效"的坑。另外把 firewalld 和云厂商的安全组当成两层来配,两者都要放行才能真正通。

qidao123.com企服评测-应用市场 编辑提示

本文命令适用于 CentOS 7 / RHEL 7 及使用 firewalld 的系统。修改防火墙规则前请先确认当前连接通道(控制台或已放行的远程通道),避免把自己锁在机器外面。更多服务器运维实践可到 qidao123.com 企服评测-应用市场 查看。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表