Linux防火墙如何防止内部威胁
导读:总体思路 面向内部威胁的防护要把“谁能访问什么、在哪儿能访问、访问多快多频繁”说清楚:以默认拒绝为基线,按源地址/区域细分策略,区分入站/出站/转发三类流量,优先放行已建立连接,对敏感服务(如数据库、管理口)实施最小权限与白名单,并对暴力尝...
总体思路
面向内部威胁的防护要把“谁能访问什么、在哪儿能访问、访问多快多频繁”说清楚:以默认拒绝为基线,按源地址/区域细分策略,区分入站/出站/转发三类流量,优先放行已建立连接,对敏感服务(如数据库、管理口)实施最小权限与白名单,并对暴力尝试与异常速率进行连接频率限制。在 Linux 上可通过 firewalld(基于区域与运行时/永久配置)或 iptables(基于链与表)落地这些策略。
策略设计要点
- 默认拒绝 + 显式放行:对未匹配到的流量统一丢弃/拒绝,仅对明确需求开放端口与协议,降低横向移动与数据外泄空间。
- 区域化与源地址绑定:用 firewalld 区域将不同来源的流量划分到不同规则集合,优先以“源地址→区域→规则”的顺序匹配,便于管理分段与隔离。
- 入站/出站/转发分离:服务器本机用 INPUT/OUTPUT,网关/跳板用 FORWARD;对出站流量同样做细粒度控制,防止“被控主机外联”。
- 状态检测:放行 ESTABLISHED,RELATED 状态,保证合法会话的回包与已建立连接不被中断,同时抑制非对称流量。
- 服务最小化:数据库、缓存、管理端口只对受控网段开放;对管理口(如带外管理)单独划分区域或物理隔离。
- 频率限制与异常阻断:对 SSH/RDP 等高价值入口设置登录速率限制与临时封禁,缓解暴力破解与脚本扫描。
- 日志与告警:对拒绝/限速事件与关键服务访问进行日志记录与集中分析,配合监控平台实现可观测与告警。
firewalld 落地示例
-
启用与基础
- 启动与开机自启:
systemctl start firewalld & & systemctl enable firewalld - 查看状态:
firewall-cmd --state;查看默认区域:firewall-cmd --get-default-zone
- 启动与开机自启:
-
只允许受控网段访问数据库(示例:仅 192.168.20.0/24 访问 3306/TCP)
- 命令行方式(永久生效并加载):
firewall-cmd --permanent --zone=public \ --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" port port="3306" protocol="tcp" accept' firewall-cmd --reload - 文件方式(/etc/firewalld/zones/public.xml 中添加):
< rule family="ipv4"> < source address="192.168.20.0/24"/> < port protocol="tcp" port="3306"/> < accept/> < /rule> - 验证:
firewall-cmd --list-rich-rules --zone=public或从外部主机测试连通性。
- 命令行方式(永久生效并加载):
-
出站与转发控制
- 限制本机出站到外网的 DNS 仅允许内网 192.168.1.53:
firewall-cmd --permanent --zone=public \ --add-rich-rule='rule family="ipv4" destination address="192.168.1.53" port port="53" protocol="udp" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port port="53" protocol="udp" drop' firewall-cmd --reload - 网关/跳板场景:对来自内网 eth1 的转发流量,仅放行访问外网 80/443,其余默认拒绝:
firewall-cmd --permanent --zone=internal --add-interface=eth1 firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" accept' firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" port port="443" protocol="tcp" accept' firewall-cmd --reload - 说明:firewalld 以“源地址→区域→规则”的顺序匹配,未匹配到的转发流量按该区域默认策略处理(建议设为 drop)。
- 限制本机出站到外网的 DNS 仅允许内网 192.168.1.53:
iptables 落地示例
-
服务器本机基线(默认拒绝,仅放行必要流量)
iptables -F iptables -X iptables -Z # 默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 本地回环与已建立连接 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 仅内网 192.168.1.0/24 访问 3306 iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT # SSH 端口(示例 2222),带速率限制 iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent \ --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP iptables -A INPUT -p tcp --dport 2222 -j ACCEPT -
网关/跳板转发(仅放行内网到外网的 80/443)
# 内网→外网 80/443 iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 443 -j ACCEPT # 其余转发默认拒绝 iptables -A FORWARD -j DROP # 可选:内网 DNS 放行(UDP 53) iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -p udp --sport 53 -j ACCEPT -
说明:上述示例体现了“默认拒绝 + 状态放行 + 源白名单 + 速率限制”的组合用法,可按业务继续细化到具体网段、端口与协议。
运维与加固建议
- 变更可回滚:规则变更遵循“先测试、再永久、再重载”的流程;firewalld 区分运行时与永久配置,变更后用
firewall-cmd --reload生效;iptables 建议使用脚本化管理并保留备份。 - 最小权限与职责分离:数据库、缓存、消息队列等后端仅对前端/应用子网开放;管理口与业务口物理或逻辑分离;对敏感端口使用非标准端口配合防火墙白名单。
- 强制访问控制配合:在 firewalld/iptables 做网络层限制的同时,启用 SELinux 或 AppArmor 做进程级强制访问控制,降低被攻破后的横向权限提升风险。
- 日志与监控:集中采集防火墙拒绝日志与关键服务访问日志,设置阈值告警(如 SSH 速率限制触发、异常外联),并结合资产与漏洞管理闭环处置。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux防火墙如何防止内部威胁
本文地址: https://pptw.com/jishu/773232.html
