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

一、工具选择与配置前准备
- 常见防火墙方案:iptables(底层规则引擎)、firewalld(适用于 CentOS/RHEL 7+/Fedora 的动态防火墙管理工具)、ufw(Ubuntu 常用的简化防火墙前端)。
- 正式操作前建议务必做好以下准备:
- 保留一条当前会话连接(如 SSH 登录),防止误配置防火墙规则后导致远程失联。
- 提前备份现有规则(iptables 示例:
iptables-sa ve > /root/iptables-$(date +%F).bak)。 - 确认虚拟机网络模式(桥接/NAT)以及实际访问来源网段,避免端口开放范围过大带来安全风险。
二、不同 Linux 发行版的常用配置方法
- firewalld(CentOS 7+/RHEL/Fedora)
- 启动服务并设置开机自启:
sudo systemctl start firewalld && sudo systemctl enable firewalld - 开放指定端口并永久生效:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent - 开放预定义服务:
sudo firewall-cmd --zone=public --add-service=http --permanent - 重新加载配置使规则生效:
sudo firewall-cmd --reload - 查看当前防火墙配置:
sudo firewall-cmd --list-all - 启用 NAT/地址伪装(适合虚拟机充当网关或路由转发场景):
sudo firewall-cmd --zone=public --add-masquerade --permanent && sudo firewall-cmd --reload
- 启动服务并设置开机自启:
- ufw(Ubuntu/Debian 家族)
- 启用防火墙:
sudo ufw enable - 放行常用端口:
sudo ufw allow 22/tcp,80/tcp,443/tcp - 仅允许指定网段访问 SSH:
sudo ufw allow from 192.168.1.0/24 to any port 22 - 查看防火墙状态与详细信息:
sudo ufw status verbose
- 启用防火墙:
- iptables(通用底层防火墙)
- 允许本地回环和已建立连接:
sudo iptables -A INPUT -i lo -j ACCEPT;sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - 放行 SSH 端口:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT - 放行 HTTP/HTTPS 访问:
sudo iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT - 设置默认拒绝所有入站连接:
sudo iptables -P INPUT DROP - 保存防火墙规则:
- Debian/Ubuntu:
sudo apt-get install iptables-persistent && sudo netfilter-persistent sa ve - CentOS/RHEL:
sudo service iptables sa ve或sudo iptables-sa ve > /etc/sysconfig/iptables
- Debian/Ubuntu:
- 恢复已保存规则:
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(务必先放行当前管理端口,再修改默认策略,并保留现有会话)
- firewalld:
- 场景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
- firewalld:
- 场景C:限制 SSH 登录来源网段(白名单访问)
- iptables:
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT;sudo iptables -A INPUT -p tcp --dport 22 -j DROP
- iptables:
- 场景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
- 启用 NAT:
四、配置验证与故障排查方法
- 端口连通性检测:
- TCP 连通测试:
nc -vz或80 telnet443 - 查看本机监听端口:
ss -tulpen | grep -E '(:80|:443|:22)'
- TCP 连通测试:
- 核对防火墙状态与规则:
- firewalld:
sudo firewall-cmd --state、sudo firewall-cmd --list-all - ufw:
sudo ufw status verbose - iptables:
sudo iptables -L -n -v
- firewalld:
- 检查云平台安全组与宿主机防火墙:需要同时确认云服务器控制台和宿主机系统(例如 VMware Workstation 所在主机的防火墙)也已放行对应端口(如 22/80/443),否则即使 Linux 虚拟机内部防火墙已开放,外部依然无法正常访问。
五、安全加固与日常维护建议
- 基本原则:只开放必要端口,默认拒绝未授权访问,遵循最小权限原则;关键规则变更建议先在测试环境验证。
- 安全加固建议:限制 SSH 来源网段、增加连接速率限制(如
iptables -I INPUT -p tcp --dport 22 -m limit --limit 10/min -j ACCEPT)、开启日志记录并定期审计防火墙策略。 - 规则持久化:每次防火墙配置变更后要及时保存(firewalld 使用
--permanent并执行reload;iptables 则使用对应发行版提供的持久化方式)。 - 备份与回滚机制:修改前先备份防火墙规则,同时保留可快速恢复的脚本或虚拟机快照,便于故障时及时回滚。
