如何配置 Linux 防火墙防御基于 icmp 的网络攻击

浅婷君_2950

浅婷君_2950

2026-06-28

442人浏览

原创

防御icmp攻击需分层控制:优先用raw表prerouting链拦截外网echo-request,再在input链按源ip限速(3/sec+burst 6),放行type 3/11等必要icmp类型,并启用rp_filter、禁广播响应等内核参数加固。

如何配置 linux 防火墙防御基于 icmp 的网络攻击

防御基于 ICMP 的网络攻击,不能只靠“关 Ping”或一条防火墙规则。核心是分层控制:在包进入内核协议栈前快速过滤,在 INPUT 链按源限速,在内核层堵住伪造和劫持路径。三层配合,才能兼顾安全、可用与排障能力。

优先用 raw 表拦截,避免无效包进协议栈

ICMP 洪水攻击本质是海量报文压垮软中断和 CPU。iptables 的 filter 表(如 INPUT 链)生效较晚,此时包已触发连接跟踪、日志、路由查找等开销。真正高效的做法是在 raw 表的 PREROUTING 链 就丢弃明确不需要的 echo-request:

  • 直接丢弃所有外网口的 Ping 请求(保留内网调试):
    sudo iptables -t raw -A PREROUTING -i eth0 -p icmp --icmp-type 8 -j DROP
  • 若使用 nftables(推荐新系统):
    nft add rule ip filter prerouting iifname "eth0" ip protocol icmp icmp type echo-request drop
  • 注意:不要只加在 INPUT 链;raw 表位置更早,能显著降低 CPU 软中断压力

对允许的 ICMP 请求做源 IP 级限速

完全禁止 ICMP 会影响 MTU 发现、traceroute 和基础连通性诊断。更合理的方式是允许低频请求,但限制单个源 IP 的频率,防扫描也防慢速洪泛:

Alpine Linux
Alpine Linux

获取最新发布版本;聚合最新版本架构

下载
  • 每秒最多 3 个 echo-request,突发允许 6 个(够运维,挡洪峰):
    sudo iptables -A INPUT -p icmp --icmp-type 8 -m hashlimit --hashlimit-above 3/sec --hashlimit-burst 6 --hashlimit-mode srcip --hashlimit-name icmp_limit -j ACCEPT
  • 紧接一条兜底规则(顺序不能颠倒):
    sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP
  • 必须用 --hashlimit-mode srcip,避免一个攻击者占满全部配额

放行必要 ICMP 类型,保障基础网络功能

ICMP 不只是 Ping。禁掉关键类型会导致路径不可达、超时、重定向等错误无法通知上层,引发静默断连或 TCP 连接卡死:

  • 务必放行以下类型(放在 DROP 规则之前):
    sudo iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT(destination-unreachable)
    sudo iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT(time-exceeded,traceroute 所需)
  • 可选:放行参数问题(type 12),辅助诊断 MTU 或选项异常
  • 不建议放行重定向(type 5)、时间戳(type 13/14)等易被滥用类型

配合内核参数加固底层行为

防火墙管“怎么处理包”,内核参数管“系统怎么响应”。仅靠 iptables 无法防御伪造源 IP、广播放大或路由劫持类攻击:

  • 编辑 /etc/sysctl.conf,追加以下内容并执行 sudo sysctl -p:
    net.ipv4.icmp_echo_ignore_broadcasts = 1(防 Smurf 放大)
    net.ipv4.icmp_ignore_bogus_error_responses = 1(忽略畸形错误包)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0(非网关服务器必须关)
    net.ipv4.conf.all.rp_filter = 1(反向路径过滤,防 IP 伪造)
  • 特别注意:net.ipv4.icmp_echo_ignore_all = 0(保持开启响应),否则限速规则失效,且包仍进协议栈消耗资源

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux 防火墙

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4345

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

395

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3790

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3273

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2393

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5730

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5382

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3193

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2685

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习