温馨提示×

Linux虚拟机如何配置防火墙规则

小樊
41
2025-12-08 06:57:43
栏目: 云计算

Linux 虚拟机防火墙配置实操指南

一、选择工具与准备

  • 常见防火墙栈:iptables(底层规则引擎)、firewalld(CentOS/RHEL 7+/Fedora 动态管理)、ufw(Ubuntu 简易前端)。
  • 操作前务必:
    • 保留一条当前会话(如 SSH 连接),避免误封导致失联。
    • 备份现有规则(iptables 示例:iptables-save > /root/iptables-$(date +%F).bak)。
    • 明确虚拟机网络模式(桥接/NAT)与访问来源网段,避免放通过宽。

二、按发行版常用做法

  • firewalld(CentOS 7+/RHEL/Fedora)
    1. 启动与开机自启:sudo systemctl start firewalld && sudo systemctl enable firewalld
    2. 开放端口(永久生效):sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    3. 开放服务(预定义):sudo firewall-cmd --zone=public --add-service=http --permanent
    4. 使配置生效:sudo firewall-cmd --reload
    5. 查看:sudo firewall-cmd --list-all
    6. 启用 NAT/端口转发(虚拟机网关/路由场景):sudo firewall-cmd --zone=public --add-masquerade --permanent && sudo firewall-cmd --reload
  • ufw(Ubuntu/Debian 家族)
    1. 启用:sudo ufw enable
    2. 允许端口:sudo ufw allow 22/tcp,80/tcp,443/tcp
    3. 允许网段访问 SSH:sudo ufw allow from 192.168.1.0/24 to any port 22
    4. 查看状态:sudo ufw status verbose
  • iptables(通用底层)
    1. 允许回环与已建立连接:sudo iptables -A INPUT -i lo -j ACCEPTsudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    2. 允许 SSH:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    3. 允许 HTTP/HTTPS:sudo iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
    4. 默认拒绝入站:sudo iptables -P INPUT DROP
    5. 保存规则:
      • Debian/Ubuntu:sudo apt-get install iptables-persistent && sudo netfilter-persistent save
      • CentOS/RHEL:sudo service iptables savesudo iptables-save > /etc/sysconfig/iptables
    6. 恢复规则:sudo iptables-restore < /etc/iptables/rules.v4

三、常见场景与命令示例

  • 场景A:仅放通 SSH(安全加固)
    • firewalld:sudo firewall-cmd --zone=public --add-port=22/tcp --permanent && sudo firewall-cmd --reload
    • ufw:sudo ufw allow 22/tcp
    • iptables:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -P INPUT DROP(务必保留会话,先放行再改默认策略)
  • 场景B:Web 服务器(HTTP/HTTPS)
    • firewalld:sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --zone=public --add-service=https --permanent && sudo firewall-cmd --reload
    • ufw:sudo ufw allow 80,443/tcp
    • iptables:sudo iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
  • 场景C:限制 SSH 来源网段(白名单)
    • iptables:sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 22 -j DROP
  • 场景D:虚拟机作为网关/NAT 上网与端口转发
    • 启用 NAT:sudo firewall-cmd --zone=public --add-masquerade --permanent && sudo firewall-cmd --reload
    • 端口转发(示例:宿主机访问 8080 转发到虚拟机 80):sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent && sudo firewall-cmd --reload

四、验证与故障排查

  • 端口连通性测试:
    • TCP 探测:nc -vz <IP或域名> 80telnet <IP> 443
    • 本机监听:ss -tulpen | grep -E '(:80|:443|:22)'
  • 防火墙状态与规则核对:
    • firewalld:sudo firewall-cmd --statesudo firewall-cmd --list-all
    • ufw:sudo ufw status verbose
    • iptables:sudo iptables -L -n -v
  • 云平台安全组/宿主机防火墙:确保云平台控制台与宿主机(如 VMware Workstation 宿主防火墙)也放通对应端口(如 22/80/443),否则虚拟机内放行仍无法访问。

五、安全与维护建议

  • 原则:仅开放必要端口、默认拒绝、最小权限;对关键变更先在测试环境验证。
  • 加固:限制 SSH 来源网段、限制速率(如 iptables -I INPUT -p tcp --dport 22 -m limit --limit 10/min -j ACCEPT)、开启日志与定期审计。
  • 持久化:规则变更后及时保存(firewalld 用 --permanentreload;iptables 使用发行版提供的持久化机制)。
  • 备份与回滚:变更前备份规则,保留可快速恢复的脚本/快照。

0