温馨提示×

CentOS从零开始设置防火墙的技巧

小樊
32
2025-12-31 11:03:45
栏目: 智能运维

CentOS 从零开始设置防火墙的实用技巧

一 版本选择与准备

  • CentOS 7/8/9 默认使用 firewalld 管理防火墙,基于“区域 Zone”组织策略,支持运行时与永久配置分离,便于动态调整。
  • 开始前先确认与启动服务:
    • 查看状态:firewall-cmd --state(返回 running/not running
    • 启动/开机自启:systemctl start firewalldsystemctl enable firewalld
    • 停止/禁用:systemctl stop firewalldsystemctl disable firewalld
  • 若系统为 CentOS 6 或必须沿用传统工具,可改用 iptables(见文末对照与迁移要点)。

二 firewalld 快速上手

  • 规划原则:仅开放必需端口与服务,优先使用“服务名”(如 ssh/http/https)而非裸端口,便于维护与审计。
  • 常用操作一览(示例均为 public 区域,生产可按需替换为 dmz/trusted 等):
目标 命令示例
启动/开机自启 `systemctl start
查看状态 firewall-cmd --state
查看规则 firewall-cmd --list-all(指定区域:--zone=public
开放单端口 firewall-cmd --zone=public --add-port=80/tcp --permanent
开放端口范围 firewall-cmd --zone=public --add-port=10000-10010/tcp --permanent
开放常用服务 firewall-cmd --zone=public --add-service=ssh --permanent... http ...... https ...
使永久规则生效 firewall-cmd --reload
删除端口/服务 firewall-cmd --zone=public --remove-port=80/tcp --permanent... --remove-service=http ...
查询端口/服务 firewall-cmd --query-port=80/tcpfirewall-cmd --query-service=ssh
查看支持的服务 firewall-cmd --get-services
  • 提示:
    • --permanent 写入持久配置,务必 reload 使其立即生效。
    • 修改前用 --list-all 核对当前生效规则,避免误放通。

三 进阶配置与典型场景

  • 源地址白名单与端口放行(富规则)
    • 仅允许 192.168.1.100 访问 22/TCP
      firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent && firewall-cmd --reload
    • 拒绝某网段访问某端口:
      firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="3306" protocol="tcp" drop' --permanent && firewall-cmd --reload
  • 端口转发(DNAT)
    • 将外网 80/TCP 转发至内网 192.168.1.10:8080
      firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 --permanent && firewall-cmd --reload
  • NAT 上网(Masquerade)
    • 为出口接口(如 eth0)启用伪装,使内网共享公网:
      firewall-cmd --zone=public --add-masquerade --permanent && firewall-cmd --reload
  • 区域与接口绑定
    • 将接口 eth1 加入 trusted(高信任)区域:
      firewall-cmd --permanent --zone=trusted --change-interface=eth1 && firewall-cmd --reload
  • 日志与审计
    • 记录被拒绝的数据包:firewall-cmd --set-log-denied=xml;查看日志:journalctl -u firewalld -f

四 安全加固与运维建议

  • 最小暴露面:仅开放 22/80/443 等必要端口;删除不再使用的端口/服务;定期 firewall-cmd --list-all 巡检。
  • 变更可回滚:重要变更前备份规则或导出当前配置;必要时用 firewall-cmd --runtime-to-permanent 固化运行时规则。
  • 防暴力破解:结合 fail2ban 与 firewalld 动作(如 banaction=firewallcmd-ipset),对 SSH 等高风险服务做自动封禁。
  • 连接速率限制:对高并发端口(如 80/443)设置速率限制,缓解简单 DoS:
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" rate-limit burst=30' --permanent && firewall-cmd --reload
  • 测试验证:变更后用 nmap -sV -p 22,80,443 <IP> 校验端口可达性与服务指纹。

五 使用 iptables 的对照与迁移要点

  • 适用场景:CentOS 6 或必须使用 iptables 的环境。
  • 基本流程:
    • 安装与启动:yum install -y iptables-servicessystemctl start iptablessystemctl enable iptables
    • 放行端口:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    • 保存与恢复:service iptables save(写入 /etc/sysconfig/iptables);iptables-restore < /etc/sysconfig/iptables
  • 与 firewalld 的差异与建议:
    • firewalld 支持“运行时/永久”双栈与“区域”模型,变更更安全、回滚更方便;iptables 规则顺序敏感、维护成本更高。
    • 若从 firewalld 切换到 iptables,建议先停用 firewalld 并持久化保存 iptables 规则,避免规则真空。

0