曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3337|回复: 0
打印 上一主题 下一主题

使用 --icmp-type 类型进行 icmp 过滤

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2012-5-19 01:02:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设你不想别人 ping 你,你可能会使用下面的规则:
[Plain Text] 纯文本查看 复制代码
iptables -A INPUT -p icmp -j DROP

但是这样一来,却有点伤人伤己的意思。比如你可能只希望别人 ping 不到你,而你却想能 ping 到别人,但如果硬生生的用上面的规则,那么这样的愿望不能达到。其原因是,当你去 ping 别人时,若是 ping 得通,那么对方也会给你返回一个 icmp 包,以表示被 ping 者对你有了响应。然而,就是上面这个规则,使这个响应包也被过滤掉了。解决办法是利用 --icmp-type 指定 icmp 类型参数进行过滤便可达到目的。

ICMP 报文可分为 2 个种类,一种是“差错报告报文”,另一种是“查询报文”。其中个种类又可细分为几种小类型,如下表所示:
种类 类型报文
差错报告报文
3 终点不可达
~
4 源点抑制
~
11 超时
~
12 参数问题
~
5 改变路由
查询报文 8 或 0
回送请求或回答
~ 13 或 14
时间戳请求或回答
~ 17 或 18
地址掩码请求或回答
~ 10 或 9
路由器询问和通告
这个类型码位于 ICMP 报文首部的第 1 个字节。
如上所说明,当代码号为 8 时是源主机发出“回送请求”(echo request)报文。换句话就是说,别人要 ping 我们时,它发来的 icmp 包的类型号为 8,而我们应答时的类型为 0 。因此,如果想屏蔽别人 ping ,而又能 ping 别人,那么可以只需要添加如下规则即可:
[Plain Text] 纯文本查看 复制代码
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

添加完后,在 Linux 主机上 ping 一下 IP 为 192.168.1.100 的 Windows :
[root@beyes   beyes]# ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_req=1 ttl=64 time=1.25 ms
64 bytes from 192.168.1.100: icmp_req=2 ttl=64 time=0.211 ms
然后在 Windows 上 ping 一下 Linux :
C:\Users\Administrator>ping 192.168.1.104

正在 Ping 192.168.1.104 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

192.168.1.104 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
关于 ICMP 包更多信息可参考 RFC 793 和 RFC 2463 。
关于 ping 工具的结果信息还可以参考:《ping 结果浅析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-7 00:52 , Processed in 0.107272 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表