服务器防火墙怎么配:iptables、firewalld与云安全组分层设计实战 核心要点图解,防火墙应分层:云安全组做边界粗筛,firewalld/iptables做主机细控。;云安全组默认拒绝入站,仅开放必要端口,并限制源IP。;firewalld适合动态管理,iptables适合精细规则,按需选择。;配置后必须用nmap或telnet从外部验证端口暴露情况。
服务器防火墙怎么配:iptables、firewalld与云安全组分层设计实战 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 防火墙应分层:云安全组做边界粗筛,firewalld/iptables做主机细控。
  • 云安全组默认拒绝入站,仅开放必要端口,并限制源IP。
  • firewalld适合动态管理,iptables适合精细规则,按需选择。
  • 配置后必须用nmap或telnet从外部验证端口暴露情况。

痛点引入:防火墙配置混乱,安全形同虚设

很多运维人员认为“云上有安全组,主机防火墙多余”,结果安全组放行了0.0.0.0/0的22端口,主机防火墙又没开,导致SSH被暴力破解;或者firewalld和iptables同时启用,规则互相覆盖,排查半天。服务器防火墙方案必须分层设计:云安全组做边界粗筛,firewalld/iptables做主机细控,才能形成有效纵深防御。本文给出具体命令和检查清单,帮你一次性配对。

分层设计原理:安全组与主机防火墙各司其职

云安全组工作在虚拟网络层,控制进出云主机的流量,规则简单、性能高,但无法感知主机内部进程;主机防火墙(firewalld/iptables)工作在系统内核,可基于端口、协议、源IP甚至用户做精细控制。两者是互补关系,不是替代关系。推荐分层策略:

  • 第一层(云安全组):默认拒绝所有入站,仅开放业务必需端口(如80/443),管理端口(22/3389)限制为办公IP。
  • 第二层(主机防火墙):默认拒绝入站,放行安全组已授权的端口,并增加连接限制(如SSH防暴力破解)。

这样即使安全组误放行,主机防火墙仍能拦截;即使主机防火墙规则错误,安全组也能兜底。

具体排查:检查当前防火墙状态与暴露端口

在配置前,先摸清现状。执行以下命令:

# 查看firewalld状态
systemctl status firewalld
firewall-cmd --list-all

# 查看iptables规则
iptables -L -n -v --line-numbers

# 从外部扫描端口(在另一台机器执行)
nmap -sS -p- <服务器IP>

检查清单:

  • 安全组入站规则是否有0.0.0.0/0的22或3306端口?
  • 主机防火墙是否未启用或规则为空?
  • 是否有服务监听在0.0.0.0而非127.0.0.1?

若发现异常,立即收紧规则。例如安全组将22端口源IP改为公司出口IP,主机防火墙增加SSH连接频率限制。

分步解决:iptables与firewalld配置实战

方案一:使用firewalld(推荐CentOS/RHEL 7+)

1. 启动并设置开机自启:systemctl enable --now firewalld

2. 设置默认区域为drop(拒绝所有入站):firewall-cmd --set-default-zone=drop

3. 放行必要端口(以HTTP/HTTPS为例):firewall-cmd --permanent --add-service=http --add-service=https

4. 限制SSH源IP(假设办公IP为1.2.3.4):firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="22" protocol="tcp" accept'

5. 重载生效:firewall-cmd --reload

6. 验证:firewall-cmd --list-all

方案二:使用iptables(适合精细控制)

1. 清空现有规则(谨慎):iptables -F && iptables -X

2. 设置默认策略:iptables -P INPUT DROP && iptables -P FORWARD DROP && iptables -P OUTPUT ACCEPT

3. 允许已建立的连接:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

4. 允许本地回环:iptables -A INPUT -i lo -j ACCEPT

5. 放行HTTP/HTTPS:iptables -A INPUT -p tcp --dport 80 -j ACCEPT && iptables -A INPUT -p tcp --dport 443 -j ACCEPT

6. 限制SSH源IP并防暴力破解:iptables -A INPUT -p tcp --dport 22 -s 1.2.3.4 -m state --state NEW -m recent --set --name SSH && iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

7. 保存规则:iptables-save > /etc/iptables/rules.v4(需安装iptables-persistent)

云安全组配置要点

以阿里云为例:入站规则添加两条——授权对象为办公IP的22端口,授权对象为0.0.0.0/0的80/443端口。出站规则默认全部允许。注意安全组规则是有状态的,无需额外配置返回流量。

检查清单与对比表格

检查项安全组firewalldiptables
默认策略拒绝所有入站drop区域INPUT DROP
管理端口限制源IP白名单rich-rule限制源IP-s指定源IP
防暴力破解不支持需结合fail2banrecent模块限制频率
规则持久化自动保存--permanentiptables-save

配置完成后,务必从外部执行nmap -sS -p- <IP>验证仅开放预期端口。若使用AegisX,其主机入侵检测可实时监控异常端口监听和暴力破解行为,与防火墙形成联动防护。

行动建议

立即执行三步:1)登录云控制台,收紧安全组管理端口源IP;2)在服务器启用firewalld或iptables,设置默认拒绝;3)用nmap从外部扫描验证。建议将防火墙规则纳入版本管理,每次变更后重载并测试。记住:分层防御不是堆叠工具,而是让每层做最擅长的事。

常见问题(FAQ)

云服务器已经用了安全组,还需要在系统内配置防火墙吗?

需要。云安全组是网络层边界防护,只能控制进出云主机的流量,无法防御主机内部横向移动或误配置。系统防火墙(firewalld/iptables)提供进程级、用户级访问控制,两者分层互补。建议安全组做粗粒度端口过滤,系统防火墙做细粒度规则,形成纵深防御。

iptables和firewalld到底用哪个好?

firewalld是iptables的前端管理工具,支持动态更新和区域概念,适合需要频繁调整规则的场景;iptables更底层,适合需要精细控制或脚本化管理的环境。CentOS 7+默认使用firewalld,若追求简单易用选firewalld,若需要复杂NAT或自定义链选iptables。两者不要同时启用,避免规则冲突。

如何检查服务器端口是否意外暴露?

从外部使用nmap扫描:nmap -sS -p- ,或使用telnet 测试连通性。同时检查防火墙规则:firewall-cmd --list-all 或 iptables -L -n -v,确认没有0.0.0.0/0的宽泛放行。云安全组需在控制台查看入站规则,确保仅授权IP可访问管理端口。

防火墙规则配置后不生效怎么办?

首先确认防火墙服务运行状态:systemctl status firewalld 或 iptables -L。检查规则顺序,iptables按从上到下匹配,firewalld需重载生效:firewall-cmd --reload。云环境还需检查安全组是否放行,以及网卡是否绑定正确区域。使用iptables -t nat -L -n -v检查NAT规则,确保没有冲突。

如何防止防火墙规则被误改或丢失?

使用配置管理工具(如Ansible)固化规则,或定期备份:iptables-save > /etc/iptables/rules.v4,firewalld备份/etc/firewalld。设置文件权限600,并加入版本控制。启用审计日志监控规则变更,如auditctl -w /etc/sysconfig/iptables -p wa。云安全组可通过API定期导出配置比对。