温馨提示×

centos虚拟机防火墙配置指南

小樊
40
2025-11-29 16:28:01
栏目: 云计算

CentOS 虚拟机防火墙配置指南

一 版本选择与准备

  • 确认系统版本与防火墙工具:
    • CentOS 7/8/9:默认使用 firewalld(动态防火墙,基于区域与服务管理)。
    • CentOS 6:默认使用 iptables(静态规则表)。
  • 基本检查与启动(firewalld):
    • 查看状态:sudo firewall-cmd --state
    • 启动/开机自启:sudo systemctl start firewalld && sudo systemctl enable firewalld
    • 停止/禁用:sudo systemctl stop firewalld && sudo systemctl disable firewalld
  • 如系统未安装 firewalld(极少见):sudo yum install -y firewalld

二 firewalld 快速上手

  • 核心概念
    • 区域 Zone:如 public、internal、trusted、dmz,不同网络环境对应不同规则集合。
    • 运行时/永久配置:加 --permanent 为永久生效;不加为运行时生效,变更后需 firewall-cmd --reload 使永久配置生效。
  • 常用操作
    • 查看与切换区域:sudo firewall-cmd --get-default-zonesudo firewall-cmd --set-default-zone=public
    • 接口绑定区域:sudo firewall-cmd --zone=public --add-interface=eth0
    • 开放端口:sudo firewall-cmd --zone=public --add-port=80/tcp --permanent && sudo firewall-cmd --reload
    • 开放服务:sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reload
    • 查询与删除:
      • 查询端口:sudo firewall-cmd --zone=public --query-port=80/tcp
      • 删除端口:sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent && sudo firewall-cmd --reload
    • 查看规则:sudo firewall-cmd --list-all
    • ICMP 控制(如禁止 ping):sudo firewall-cmd --zone=public --add-icmp-block=echo-request --permanent && sudo firewall-cmd --reload

三 常见场景与命令示例

  • 场景一 Web 服务器(HTTP/HTTPS)

    • 开放端口或服务:
      • sudo firewall-cmd --zone=public --add-service=http --permanent
      • sudo firewall-cmd --zone=public --add-service=https --permanent
      • 或端口方式:sudo firewall-cmd --zone=public --add-port=80/tcp --permanentsudo firewall-cmd --zone=public --add-port=443/tcp --permanent
    • 使配置生效:sudo firewall-cmd --reload
  • 场景二 仅允许指定网段访问某端口(白名单)

    • 富规则示例(允许 192.168.1.0/24 访问 8080/tcp):
      • sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080" accept' --permanent
      • sudo firewall-cmd --reload
  • 场景三 端口转发与 NAT(虚拟机网关/路由场景)

    • 启用伪装(MASQUERADE,用于出网 NAT):
      • sudo firewall-cmd --zone=public --add-masquerade --permanent && sudo firewall-cmd --reload
    • DNAT 端口转发(将宿主机/外部访问 8080 转发到内网 80):
      • sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.100.10 --permanent
      • sudo firewall-cmd --reload
    • 如作为网关需开启转发:
      • 临时:echo 1 > /proc/sys/net/ipv4/ip_forward
      • 永久:echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p

四 从 firewalld 切换到 iptables(可选)

  • 停止并禁用 firewalld:
    • sudo systemctl stop firewalld && sudo systemctl disable firewalld && sudo systemctl mask firewalld
  • 安装并启用 iptables-services:
    • sudo yum install -y iptables-services
    • sudo systemctl enable iptables && sudo systemctl start iptables
  • 规则示例(请先放行 SSH 22/tcp,避免失联):
    • 放行 SSH/HTTP/HTTPS:
      • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      • sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      • sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    • 默认策略(谨慎,确保已放行 SSH):
      • sudo iptables -P INPUT DROP
    • 保存规则(CentOS 6/7 常见方式):sudo service iptables save(规则持久化到 /etc/sysconfig/iptables

五 运维与安全建议

  • 坚持最小化开放:仅开放必要端口(如 SSH 22、HTTP 80、HTTPS 443),变更前在测试环境验证。
  • 使用白名单富规则限制来源 IP,对管理口(SSH)尤其重要。
  • 区分运行时/永久配置,变更后用 firewall-cmd --reload 生效,并定期 firewall-cmd --list-all 审计。
  • 在虚拟机网关/路由场景,按需开启 IP 转发MASQUERADE,并限制转发范围与端口。
  • 避免在生产环境使用 firewall-cmd --panic-on(紧急阻断),以免锁定远程会话。

0