IPtables icmp模块

icmp模块


  • icmp横块∶可以控制其他主机无法ping同本机,但本机可以ping同其他主机
  • 默认情况当禁止ping后,其他主机无法ping通本主机,本主机也无法ping通其他主机,现需要本主机可以ping通其他主机,而其他主机依然无法ping同本主机.

--icmp-type {type[/code] I typename}

指定ICMP类型,echo-request(8请求)、echo-reply(O回应)

[root@localhost ~]# iptables -t filter -I INPUT -p icmp  -j DROP 
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1004ms

对方ping不通我,但是我为什么不能够去ping通别人呢?我去ping它的时候通过output出去了,它在返回的得从input链进来,input进来一匹配就是icmp被拒绝了,所以别人ping不通我,我也ping不通别人。

但是我希望别人ping不通我,我可以ping通别人。

ping的过程当中会发送请求,然后对端回复响应,请求类型为request,响应类型为reply。

[root@localhost ~]# tcpdump -i eno16777736 -p icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes
13:59:02.522658 IP 192.168.111.134 > 180.101.49.11: ICMP echo request, id 12104, seq 1, length 64
13:59:02.536373 IP 180.101.49.11 > 192.168.111.134: ICMP echo reply, id 12104, seq 1, length 64
13:59:03.536333 IP 192.168.111.134 > 180.101.49.11: ICMP echo request, id 12104, seq 2, length 64
13:59:03.553146 IP 180.101.49.11 > 192.168.111.134: ICMP echo reply, id 12104, seq 2, length 64

[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11: icmp_seq=1 ttl=128 time=13.7 ms
64 bytes from 180.101.49.11: icmp_seq=2 ttl=128 time=16.8 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1013ms
rtt min/avg/max/mdev = 13.766/15.330/16.895/1.569 ms

我们只拒绝request,不拒绝reply的。

[root@localhost ~]# iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT 
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12: icmp_seq=1 ttl=128 time=16.6 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1006ms
rtt min/avg/max/mdev = 16.636/16.636/16.636/0.000 ms

回应的是reply,reply进入input链不符合上面的需求,因为只过滤request的,往下走没有匹配的规则那就走input的默认策略就是accept,就是通过的。 

<think>好的,我现在需要帮助用户解决如何配置iptables来防御ICMP Flood攻击的问题。首先,我得回忆一下关于ICMP Flood攻击的基本知识。ICMP Flood通常是通过发送大量的Ping请求(ICMP类型8代码0)来耗尽目标系统的资源,导致服务不可用。因此,防御的关键在于限制ICMP请求的速率,防止过多的请求涌入。 接下来,我需要参考用户提供的引用内容。引用[2]提到使用iptables的limit模块来限制ICMP的速率,例如每秒允许2个请求,突发5个。这应该是有效的配置方法。同时,引用[4]中也提到了使用hping3进行ICMP洪水攻击的例子,进一步确认了这种攻击方式的特点。 然后,我需要确保配置步骤正确。首先设置默认策略为DROP,这样可以阻止所有未明确允许的流量。然后,针对ICMP类型8的请求应用limit模块,限制速率。同时,引用[3]中的实验显示,通过查看SYN_RECV状态的数量来验证防御效果,这可能也适用于ICMP Flood的情况,但需要具体命令来监控ICMP流量。 另外,需要注意iptables规则的顺序,因为规则是按顺序匹配的。确保ACCEPT规则在DROP之前,否则可能导致规则不生效。引用[1]中提到了设置默认规则为丢弃一切报文,然后添加具体规则,这符合最佳实践。 用户可能需要具体的配置命令和验证方法。例如,使用iptables -L -v查看规则是否生效,或者使用tcpdump监控ICMP流量。此外,可能还需要考虑持久化配置,避免重启后规则丢失,这可以通过iptables-save和iptables-restore来实现。 最后,要检查是否有遗漏的步骤,比如是否允许必要的ICMP类型,如目标不可达(类型3)或超时(类型11),这些对于网络诊断是重要的。同时,提醒用户测试配置后的效果,确保不会影响正常业务。 总结一下,配置步骤应括设置默认策略、限制ICMP请求速率、验证规则和持久化配置。同时,提供相关问题帮助用户深入理解防御机制和其他攻击类型的防护。</think>### 如何配置iptables防御ICMP Flood攻击 #### 一、ICMP Flood攻击原理 ICMP Flood通过发送大量ICMP请求(类型8代码0的Ping请求)消耗目标网络带宽或系统资源,形成拒绝服务攻击[^2]。攻击特征表现为单位时间内ICMP数量异常激增。 --- #### 二、iptables防御配置步骤 1. **设置默认策略** ```bash # 清除旧规则 sudo iptables -F # 设置默认策略为丢弃所有流量 sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # 若需严格防御可设为DROP ``` 2. **限制ICMP请求速率** ```bash # 允许每秒2个ICMP请求,突发允许5个(缓冲突发流量) sudo iptables -A INPUT -p icmp --icmp-type 8 \ -m limit --limit 2/sec --limit-burst 5 -j ACCEPT # 超出限制的ICMP请求直接丢弃 sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP ``` 3. **保留必要ICMP类型** 允许关键ICMP类型(如目标不可达、超时报文): ```bash sudo iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT # 目标不可达 sudo iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT # 超时报文 ``` 4. **持久化规则(防止重启失效)** ```bash sudo apt-get install iptables-persistent sudo iptables-save > /etc/iptables/rules.v4 ``` --- #### 三、验证配置有效性 1. **查看规则状态** ```bash sudo iptables -L -v -n # 观察ICMP规则计数是否增长 ``` 2. **模拟攻击检测** 使用`hping3`发起测试攻击: ```bash hping3 --flood -1 目标IP # 发送ICMP洪水攻击[^4] ``` 通过`tcpdump`监控流量: ```bash tcpdump -i eth0 icmp and src 攻击者IP # 观察是否触发限速规则 ``` --- #### 四、进阶优化建议 1. **结合QoS限速** 使用`tc`工具对ICMP流量进行带宽限制: ```bash tc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit tc filter add dev eth0 protocol ip parent 1:0 u32 match ip protocol 1 0xff flowid 1:1 ``` 2. **联动日志监控** 记录被丢弃的ICMP: ```bash sudo iptables -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "ICMP Flood: " ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值