CentOS 虚拟机防火墙配置指南
一、准备与版本选择
- 确认系统版本:执行命令查看是否为 CentOS 7/8/9(默认使用 firewalld)或 CentOS 6(使用 iptables)。
- 原则:优先使用 firewalld 管理服务与端口,避免直接长期关闭防火墙;变更规则后记得重载使其生效。
二、使用 firewalld 的标准配置步骤
- 启动与开机自启
- 启动:sudo systemctl start firewalld
- 开机自启:sudo systemctl enable firewalld
- 查看状态:sudo systemctl status firewalld 或 firewall-cmd --state
- 区域与基础查看
- 查看默认区域:firewall-cmd --get-default-zone
- 查看活动区域与接口:firewall-cmd --get-active-zones
- 开放端口(永久生效并热加载)
- 开放端口示例:sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
- 重新加载:sudo firewall-cmd --reload
- 查询端口: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 --zone=public --add-service=http --permanent && sudo firewall-cmd --reload
- 常用查询
- 查看已开放端口:firewall-cmd --zone=public --list-ports
- 查看完整规则:firewall-cmd --list-all
- 可选:ICMP 控制(如禁止 ping)
- 禁止 ping:sudo firewall-cmd --zone=public --add-icmp-block=echo-request --permanent && sudo firewall-cmd --reload
三、常见场景与命令示例
- 场景A:开放 Web 服务(HTTP/HTTPS)
- 命令:sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --zone=public --add-service=https --permanent && sudo firewall-cmd --reload
- 场景B:开放自定义端口(如 8080/TCP)
- 命令:sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent && sudo firewall-cmd --reload
- 场景C:仅允许内网网段访问 SSH(如 192.168.1.0/24)
- 说明:firewalld 的富规则可精确控制来源;示例:sudo firewall-cmd --zone=public --permanent --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“22” protocol=“tcp” accept’ && sudo firewall-cmd --reload
- 场景D:使用 VMware NAT/桥接从外部访问
- 虚拟机内放行对应端口(如 22/TCP 或 8080/TCP):sudo firewall-cmd --zone=public --add-port=22/tcp --permanent && sudo firewall-cmd --reload
- 如使用 NAT 端口转发,还需确保宿主机防火墙放行对应主机端口,或临时测试时关闭宿主机防火墙(不建议生产环境)。
四、故障排查与安全建议
- 排查三步
- 服务是否监听:执行 netstat -tulpen | grep <端口> 或 ss -tulpen | grep <端口>,确认有进程在对应端口监听。
- 防火墙是否放行:执行 firewall-cmd --zone=public --query-port=<端口>/tcp,返回 yes 表示已放行。
- 外部连通性:从客户端执行 telnet <虚拟机IP> <端口> 或 nc -vz <虚拟机IP> <端口> 验证连通。
- 安全建议
- 遵循最小化原则:仅开放必要端口(如 22/80/443),避免使用 –panic-on 等极端手段。
- 变更可回滚:使用 –permanent 规则并 –reload,变更前可先导出规则备份:firewall-cmd --list-all > fw-$(date +%F).bak。
- 云环境注意:除系统防火墙外,还需检查云平台安全组/NACL 是否放行对应端口。
五、CentOS 6 的 iptables 简要用法(如仍在使用)
- 启动/停止/保存
- 启动:service iptables start
- 停止:service iptables stop
- 保存:service iptables save
- 开放端口示例(放行 80/TCP)
- 命令:iptables -I INPUT -p tcp --dport 80 -j ACCEPT
- 注意:CentOS 6 默认使用 iptables,与 firewalld 命令不同。