发布于2026-07-12 阅读(0)
扫一扫,手机访问
在生产环境中,防火墙从来都不是孤立存在的——它需要与入侵检测、访问控制、日志审计等各种安全工具协同作战,才能构建起真正的纵深防御体系。今天,我们就来聊聊CentOS环境中,如何将firewalld与常见的几种安全工具进行集成实操。

开始实际操作之前,我们先理清楚整体的集成思路,这样后面实施起来才不会跑偏。
首先是策略编排中心的问题。我强烈建议以 firewalld 作为统一的策略编排中心,核心逻辑很简单:优先使用它的 zones、rich rules 和 ipset 能力来处理动态封禁与业务放行。这么做的好处是避免直接去操作底层的 iptables 链表,复杂度能降低不少,风险也小得多。
然后是自动化威胁处置。这里需要引入 fail2ban,把它当作自动化处置引擎。它的工作模式是:扫描日志中的异常事件,然后通过 firewalld 的专用动作(比如 firewallcmd-ipset 或 firewallcmd-rich-rules)来触发封禁,形成“检测→处置”的闭环。
接下来是与 SELinux 的协同。这两个东西分工很明确:SELinux 管的是进程和资源的强制访问控制,防火墙管的则是网络层的边界控制。它们一内一外,形成互补。排查问题时也别乱,记得同时检查 /var/log/audit/audit.log 和防火墙日志。
最后是日志层面。启动防火墙的拒绝日志,然后通过 rsyslog 或 journald 输出到 SIEM 系统(比如 Splunk、ELK),实现集中分析与审计。
这部分是日常运维中最常见的需求——防暴力破解,FTP和SSH这两块尤其高频。
先确认 firewalld 已经在正常运行,直接检查状态:
firewall-cmd --state
别忘了提前放行业务端口,举个例子:
firewall-cmd --zone=public --add-port=22/tcp --permanent && firewall-cmd --reload
然后安装组件:
yum -y install epel-release && yum -y install fail2ban-firewalld
新建 jail 配置 /etc/fail2ban/jail.d/jail.local,压箱底的内容来了:
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s
[sshd]
enabled = true
filter = sshd
port = 22
logpath = /var/log/secure
启动并验证效果:
systemctl enable --now fail2ban
fail2ban-client status sshd
fail2ban-client set sshd unbanip 1.2.3.4 # 解封示例
如果想用 rich rules 替代 ipset,可以在 /etc/fail2ban/jail.d/00-firewalld.conf 中设置:
[DEFAULT]
banaction = firewallcmd-rich-rules[actiontype=]
banaction_allports = firewallcmd-rich-rules[actiontype=]
如果被 CC 攻击搞得头疼,可以用内置或自定义的 filter(比如 nginx-limit-req 或者自己写 nginx-cc.conf),在 jail 中启用并指向对应的日志路径,就能实现对短时高频请求的自动封禁。操作很灵活,完全取决于你的业务日志格式。
很多人在这个环节容易翻车——防火墙明明配好了,但服务就是访问不了,最后发现是 SELinux 在背后悄悄拦着。
基本策略是:保持 SELinux 的 Enforcing 状态,只对确有需要的服务做最小限度的策略放宽。管理状态就用这几个命令:getenforce、setenforce、/etc/selinux/config。
当你要新增服务端口或协议时,记住用 semanage port 把端口和正确的类型关联起来。比如你想用8080端口跑HTTP服务,这样做:
semanage port -a -t http_port_t -p tcp 8080
排查问题时,区分是什么层面的拒绝很关键:网络层被拒就看 firewalld 和系统日志;权限被拒就看 /var/log/audit/audit.log,必要时用 ausearch 或 sealert 进行分析,不要瞎猜。
日志是安全审计的基础,也是合规的必要条件。
先启用防火墙拒绝日志,这个操作非常简单:
firewall-cmd --permanent --set-log-denied=all && firewall-cmd --reload
实时查看的话,可以用 journalctl -u firewalld -f。
接下来,把 firewalld 和系统日志统一接入 rsyslog,再由 Logstash 或 Filebeat 送到 Elasticsearch/Kibana 或者 Splunk 做集中分析与告警。这套方案非常成熟,和 SIEM 集成完全没问题。
如果不想用 fail2ban,或者想作为它的补充,可以尝试轻量级的 ipset 方案:
先定义一个 ipset:
firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
然后关联丢弃规则:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset=blacklist port port=22 protocol="tcp" drop'
最后通过脚本定时解析 /var/log/secure 里登录失败的 IP,写入 ipset,再执行 firewall-cmd --reload 生效——搞定。这种方式适合轻量场景,可以对 fail2ban 做个补充,或者用在资源有限的机器上。
最后说几点实操层面的提醒。定期更新 firewalld、fail2ban、SELinux 以及规则和病毒库,这是在安全这条路上不能偷懒的底线。封禁策略一定要设置合理的阈值和白名单,误封业务可比漏封更让人头疼。
规则变更前一定要备份,最好先在测试环境验证再去生产落地。对于关键业务端口和服务,遵循最小暴露面原则——不用的端口一个都不要开,能不开的绝对不开,这是最基本的安全意识。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8