CentOS 虚拟机防火墙配置方法
一、选择防火墙工具与版本差异
- CentOS 7/8/9:默认使用 firewalld,基于“区域 zone”的动态管理,命令为 firewall-cmd,适合日常快速配置与运行时调整。
- CentOS 6:默认使用 iptables,规则直接作用于内核表,命令为 iptables,适合精确控制但维护成本更高。
- 如处于云环境或虚拟化平台,还需确认宿主机/安全组策略是否放行对应端口,否则虚拟机内放行仍无法从外部访问。
二、使用 firewalld 的标准操作(CentOS 7/8/9 推荐)
- 服务管理
- 启动/停止/重启/查看状态:systemctl start|stop|restart|status firewalld
- 开机自启/禁用:systemctl enable|disable firewalld
- 基础查询
- 查看状态:firewall-cmd --state
- 查看默认区域:firewall-cmd --get-default-zone
- 查看某区域规则:firewall-cmd --zone=public --list-all
- 端口与服务
- 开放端口(永久生效):firewall-cmd --zone=public --add-port=80/tcp --permanent
- 按服务开放(如 http/https):firewall-cmd --zone=public --add-service=http --permanent
- 使配置生效:firewall-cmd --reload
- 查询端口是否已放行:firewall-cmd --query-port=80/tcp
- 关闭端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent && firewall-cmd --reload
- 网络与 ICMP
- 作为网关/NAT时开启伪装:firewall-cmd --zone=public --add-masquerade --permanent && firewall-cmd --reload
- 屏蔽 ping(ICMP echo-request):firewall-cmd --zone=public --add-icmp-block=echo-request --permanent && firewall-cmd --reload
以上命令覆盖日常所需:启动、开机自启、端口/服务放行、重载与查询、以及 NAT 与 ICMP 控制。
三、使用 iptables 的配置方法(CentOS 6 或需要精细控制时)
- 常用命令
- 查看规则:iptables -L -n -v
- 清空规则:iptables -F;清空 NAT 表:iptables -t nat -F
- 放行 SSH(端口 22):iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 放行 HTTP/HTTPS(端口 80/443):iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
- 默认拒绝入站(谨慎,确保已放行 SSH):iptables -P INPUT DROP
- NAT 与端口转发(示例:将 8080 转发到本机 80)
- 端口转发:iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:80
- 出口伪装:iptables -t nat -A POSTROUTING -j MASQUERADE
- 规则持久化
- 保存规则:service iptables save(不同发行版保存路径与方式可能不同)
iptables 适合需要手写规则链与复杂匹配的场景,但务必在变更前保留一条可用的回退路径(如先放行 SSH)。
四、虚拟机常见场景与命令示例
- 场景一:仅开放 Web 访问(HTTP/HTTPS)
- firewalld:firewall-cmd --zone=public --add-service=http --permanent && firewall-cmd --zone=public --add-service=https --permanent && firewall-cmd --reload
- 场景二:作为网关/NAT 转发
- 开启转发:临时 echo 1 > /proc/sys/net/ipv4/ip_forward;永久在 /etc/sysctl.conf 设置 net.ipv4.ip_forward = 1 后执行 sysctl -p
- firewalld 伪装:firewall-cmd --zone=public --add-masquerade --permanent && firewall-cmd --reload
- 场景三:限制 SSH 来源网段(示例仅允许 192.168.1.0/24)
- iptables:iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT;随后按需丢弃其他来源
- 场景四:屏蔽 ping
- firewalld:firewall-cmd --zone=public --add-icmp-block=echo-request --permanent && firewall-cmd --reload
以上覆盖虚拟机作为 Web 主机、NAT 网关与访问控制的常见需求。
五、安全与排错要点
- 变更前先放行 SSH 22/TCP,避免远程断开;必要时在控制台预留回退方式。
- 规则修改后执行 firewall-cmd --reload 或重启服务;使用 –permanent 参数确保重启后仍生效。
- 遵循“最小暴露面”原则:仅开放必需端口与服务;定期审计与清理过期规则。
- 云上/虚拟化环境需同时检查宿主机与云平台安全组是否放行对应端口与协议。