如何在CentOS上有效配置防火墙策略?

代码编程 2025-08-23 1187

CentOS防火墙策略配置全攻略:从入门到精通

最近帮朋友处理服务器安全时,发现很多人对CentOS的防火墙配置还是一头雾水,要么直接关闭防火墙图省事,要么配置规则后连自己都访问不了服务,今天就结合我踩过的坑和实际案例,手把手教大家如何科学配置CentOS防火墙策略。

为什么必须重视防火墙?

去年有家电商公司因为没配置防火墙,被黑客扫描到22端口弱密码,直接植入挖矿程序,等发现时服务器CPU已经100%运行了三天,订单系统完全瘫痪,这个教训告诉我们:防火墙不是摆设,而是服务器的第一道安全门

CentOS配置防火墙策略-更新日志-更新日志

CentOS 7/8默认使用firewalld作为防火墙管理工具(之前版本用iptables),它采用区域(zone)概念管理规则,比传统iptables更直观,但很多新手看到firewall-cmd的参数就头晕,其实掌握核心逻辑后非常简单。

基础操作:先会走再会跑

  1. 状态检查
    先执行systemctl status firewalld确认服务是否运行,如果显示inactive,用systemctl start firewalld启动,记得设置开机自启:systemctl enable firewalld

  2. 区域概念
    firewalld把网络环境分为9个区域,常用的是:

    • public:默认区域,允许SSH和DHCP
    • trusted:允许所有流量(慎用)
    • drop:直接丢弃所有包(调试用)

    查看当前区域:firewall-cmd --get-default-zone
    修改默认区域(例如改为internal):firewall-cmd --set-default-zone=internal

  3. 基础放行规则
    放行80端口(HTTP):

    CentOS配置防火墙策略-更新日志-更新日志
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --reload

    注意--permanent参数表示永久生效,不加的话重启后规则消失,最后必须执行--reload使规则生效。

进阶配置:按需定制规则

  1. 服务级管理
    firewalld预定义了很多服务(如http、ssh、mysql),直接放行服务比写端口更规范:

    firewall-cmd --zone=public --add-service=http --permanent

    查看所有可用服务:firewall-cmd --get-services

  2. 富规则(高级过滤)
    需要限制特定IP访问时,富规则就派上用场,例如只允许192.168.1.100访问SSH:

    firewall-cmd --add-rich-rule='
    rule family="ipv4"
    source address="192.168.1.100"
    port protocol="tcp" port="22" accept
    ' --permanent

    拒绝其他所有SSH连接:

    firewall-cmd --add-rich-rule='
    rule family="ipv4"
    source not address="192.168.1.100"
    port protocol="tcp" port="22" reject
    ' --permanent
  3. 端口转发实战
    某次需要把外部8080端口转发到内部80端口,配置如下:

    firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 --permanent

    如果是转发到另一台服务器(192.168.1.200的80端口):

    firewall-cmd --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.200:toport=80 --permanent

常见问题解决方案

  1. 配置后不生效
    检查是否漏了--permanent--reload,可以用firewall-cmd --list-all查看当前生效规则。

  2. 误封自己IP
    建议先在测试环境配置,或保留一个备用SSH会话,真被封了可以通过控制台登录,用firewall-cmd --remove-service=ssh --permanent解除限制。

  3. 与SELinux冲突
    如果配置了端口但服务仍无法访问,可能是SELinux阻止,临时解决方案:setenforce 0(不推荐生产环境使用),正确做法是为端口添加SELinux上下文:

    semanage port -a -t http_port_t -p tcp 8080

最佳实践建议

  1. 最小化原则:只开放必要端口,定期审查规则
  2. 日志监控:启用防火墙日志/var/log/firewalld/,分析异常连接
  3. 备份规则:修改前用firewall-cmd --list-all > firewall_backup.txt备份
  4. 自动化工具:复杂环境可考虑使用Ansible等工具管理防火墙规则

记得去年给某金融公司做安全加固时,通过精细化的firewalld配置,成功拦截了98%的恶意扫描请求,其实只要掌握核心逻辑,CentOS防火墙配置并没有想象中复杂,希望这篇文章能帮大家少走弯路,真正把服务器安全掌握在自己手中。

CentOS中traceroute命令该如何正确使用?
« 上一篇 2025-08-23
CentOS中tcpdump抓包工具有哪些服务使用建议?
下一篇 » 2025-08-23

文章评论

按教程配置CentOS防火墙后,网络访问安全又高效!