CentOS从零开始设置防火墙的技巧
导读:CentOS 从零开始设置防火墙的实用技巧 一 版本选择与准备 CentOS 7/8/9 默认使用 firewalld 管理防火墙,基于“区域 Zone”组织策略,支持运行时与永久配置分离,便于动态调整。 开始前先确认与启动服务: 查看...
CentOS 从零开始设置防火墙的实用技巧
一 版本选择与准备
- CentOS 7/8/9 默认使用 firewalld 管理防火墙,基于“区域 Zone”组织策略,支持运行时与永久配置分离,便于动态调整。
- 开始前先确认与启动服务:
- 查看状态:
firewall-cmd --state(返回 running/not running) - 启动/开机自启:
systemctl start firewalld、systemctl enable firewalld - 停止/禁用:
systemctl stop firewalld、systemctl disable firewalld
- 查看状态:
- 若系统为 CentOS 6 或必须沿用传统工具,可改用 iptables(见文末对照与迁移要点)。
二 firewalld 快速上手
- 规划原则:仅开放必需端口与服务,优先使用“服务名”(如 ssh/http/https)而非裸端口,便于维护与审计。
- 常用操作一览(示例均为 public 区域,生产可按需替换为 dmz/trusted 等):
| 目标 | 命令示例 |
|---|---|
| 启动/开机自启 | `systemctl start |
| 查看状态 | firewall-cmd --state |
| 查看规则 | firewall-cmd --list-all(指定区域:--zone=public) |
| 开放单端口 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
| 开放端口范围 | firewall-cmd --zone=public --add-port=10000-10010/tcp --permanent |
| 开放常用服务 | firewall-cmd --zone=public --add-service=ssh --permanent;... http ...;... https ... |
| 使永久规则生效 | firewall-cmd --reload |
| 删除端口/服务 | firewall-cmd --zone=public --remove-port=80/tcp --permanent;... --remove-service=http ... |
| 查询端口/服务 | firewall-cmd --query-port=80/tcp;firewall-cmd --query-service=ssh |
| 查看支持的服务 | firewall-cmd --get-services |
- 提示:
- 加
--permanent写入持久配置,务必reload使其立即生效。 - 修改前用
--list-all核对当前生效规则,避免误放通。
- 加
三 进阶配置与典型场景
- 源地址白名单与端口放行(富规则)
- 仅允许 192.168.1.100 访问 22/TCP:
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent & & firewall-cmd --reload - 拒绝某网段访问某端口:
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="3306" protocol="tcp" drop' --permanent & & firewall-cmd --reload
- 仅允许 192.168.1.100 访问 22/TCP:
- 端口转发(DNAT)
- 将外网 80/TCP 转发至内网 192.168.1.10:8080:
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 --permanent & & firewall-cmd --reload
- 将外网 80/TCP 转发至内网 192.168.1.10:8080:
- NAT 上网(Masquerade)
- 为出口接口(如 eth0)启用伪装,使内网共享公网:
firewall-cmd --zone=public --add-masquerade --permanent & & firewall-cmd --reload
- 为出口接口(如 eth0)启用伪装,使内网共享公网:
- 区域与接口绑定
- 将接口 eth1 加入 trusted(高信任)区域:
firewall-cmd --permanent --zone=trusted --change-interface=eth1 & & firewall-cmd --reload
- 将接口 eth1 加入 trusted(高信任)区域:
- 日志与审计
- 记录被拒绝的数据包:
firewall-cmd --set-log-denied=xml;查看日志:journalctl -u firewalld -f。
- 记录被拒绝的数据包:
四 安全加固与运维建议
- 最小暴露面:仅开放 22/80/443 等必要端口;删除不再使用的端口/服务;定期
firewall-cmd --list-all巡检。 - 变更可回滚:重要变更前备份规则或导出当前配置;必要时用
firewall-cmd --runtime-to-permanent固化运行时规则。 - 防暴力破解:结合 fail2ban 与 firewalld 动作(如
banaction=firewallcmd-ipset),对 SSH 等高风险服务做自动封禁。 - 连接速率限制:对高并发端口(如 80/443)设置速率限制,缓解简单 DoS:
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" rate-limit burst=30' --permanent & & firewall-cmd --reload - 测试验证:变更后用
nmap -sV -p 22,80,443 < IP>校验端口可达性与服务指纹。
五 使用 iptables 的对照与迁移要点
- 适用场景:CentOS 6 或必须使用 iptables 的环境。
- 基本流程:
- 安装与启动:
yum install -y iptables-services;systemctl start iptables;systemctl enable iptables - 放行端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT - 保存与恢复:
service iptables save(写入 /etc/sysconfig/iptables);iptables-restore < /etc/sysconfig/iptables
- 安装与启动:
- 与 firewalld 的差异与建议:
- firewalld 支持“运行时/永久”双栈与“区域”模型,变更更安全、回滚更方便;iptables 规则顺序敏感、维护成本更高。
- 若从 firewalld 切换到 iptables,建议先停用 firewalld 并持久化保存 iptables 规则,避免规则真空。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS从零开始设置防火墙的技巧
本文地址: https://pptw.com/jishu/785114.html
