ICMP的全名是Internet Control and Message Protocal即因特网控制消息/错误报文协议这个协议主要是用来进行错误信息和控制信息的传递例如着名的Ping和Tracert工具都是利用ICMP协议中的ECHO request报文进行的(请求报文ICMP ECHO类型代码应答报文ICMP ECHOREPLY类型代码) ICMP协议有一个特点它是无连结的也就是说只要发送端完成ICMP报文的封装并传递给路由器这个报文将会象邮包一样自己去寻找目的地址这个特点使得ICMP协议非常灵活快捷但是同时也带来一个致命的缺陷易伪造(邮包上的寄信人地址是可以随便写的)任何人都可以伪造一个ICMP报文并发送出去伪造者可以利用SOCK_RAW编程直接改写报文的ICMP首部和IP首部这样的报文携带的源地址是伪造的在目的端根本无法追查(攻击者不怕被抓那还不有恃无恐?)根据这个原理外面出现了不少基于ICMP的攻击软件有通过网络架构缺陷制造ICMP风暴的有使用非常大的报文堵塞网络的有利用ICMP碎片攻击消耗服务器CPU的甚至如果将ICMP协议用来进行通讯可以制作出不需要任何TCP/UDP端口的木马(参见相关文章)既然ICMP协议这么危险我们为什么不关掉它呢? 我们都知道Win在网络属性中自带了一个TCP/IP过滤器我们来看看能不能通过这里关掉ICMP协议桌面上右击网上邻居>属性>右击你要配置的网卡>属性>TCP/IP>高级>选项>TCP/IP过滤这里有三个过滤器分别为TCP端口UDP端口和IP协议我们先允许TCP/IP过滤然后一个一个来配置先是TCP端口点击只允许然后在下面加上你需要开的端口一般来说WEB服务器只需要开(www)FTP服务器需要开(FTP Data)(FTP Control)邮件服务器可能需要打开(SMTP)(POP)以此类推接着是UDPUDP协议和ICMP协议一样是基于无连结的一样容易伪造所以如果不是必要(例如要从UDP提供DNS服务之类)应该选择全部不允许避免受到洪水(Flood)或碎片(Fragment)攻击最右边的一个编辑框是定义IP协议过滤的我们选择只允许TCP协议通过添加一个(是TCP在IP协议中的代码IPPROTO_TCP=)从道理上来说只允许TCP协议通过时无论UDP还是ICMP都不应该能通过可惜的是这里的IP协议过滤指的是狭义的IP协议从架构上来说虽然ICMP协议和IGMP协议都是IP协议的附属协议但是从网络层结构上ICMP/IGMP协议与IP协议同属一层所以微软在这里的IP协议过滤是不包括ICMP协议的也就是说即使你设置了只允许TCP协议通过ICMP报文仍然可以正常通过所以如果我们要过滤ICMP协议还需要另想办法 刚刚在我们进行TCP/IP过滤时还有另外一个选项IP安全机制(IP Security)我们过滤ICMP的想法就要着落在它身上 打开本地安全策略选择IP安全策略在这里我们可以定义自己的IP安全策略 一个IP安全过滤器由两个部分组成过滤策略和过滤操作过滤策略决定哪些报文应当引起过滤器的关注过滤操作决定过滤器是允许还是拒绝报文的通过要新建IP安全过滤器必须新建自己的过滤策略和过滤操作右击本机的IP安全策略选择管理IP过滤器在IP过滤器管理列表中建立一个新的过滤规则ICMP_ANY_IN源地址选任意IP目标地址选本机协议类型是ICMP切换到管理过滤器操作增加一个名为Deny的操作操作类型为阻止(Block)这样我们就有了一个关注所有进入ICMP报文的过滤策略和丢弃所有报文的过滤操作了需要注意的是在地址选项中有一个镜像选择如果选中镜像那么将会建立一个对称的过滤策略也就是说当你关注any IP>my IP的时候由于镜像的作用实际上你也同时关注了my IP>any IP你可以根据自己的需要选择或者放弃镜像 再次右击本机的IP安全策略选择新建IP过滤策略建立一个名称为ICMP Filter的过滤器通过增加过滤规则向导我们把刚刚定义的ICMP_ANY_IN过滤策略指定给ICMP Filter然后在操作选框中选择我们刚刚定义的Deny操作退出向导窗口右击ICMP Filter并启用它现在任何地址进入的ICMP报文都会被丢弃了 虽然用IP sec能够对ICMP报文进行过滤不过操作起来太麻烦而且如果你只需要过滤特定的ICMP报文还要保留一些常用报文(如主机不可达网络不可达等)IP sec策略就力不从心了我们可以利用Win的另一个强大工具路由与远程访问控制(Routing & Remote Access)来完成这些复杂的过滤操作 路由与远程访问控制是Win用来管理路由表配置VPN控制远程访问进行IP报文过滤的工具默认情况下并没有安装所以首先你需要启用它打开管理工具>路由与远程访问右击服务器(如果没有则需要添加本机)选择配置并启用路由及远程访问这时配置向导会让你选择是什么样的服务器一般来说如果你不需要配置VPN服务器那么选择手动配置就可以了配置完成后主机下将出现一个IP路由的选项在常规中选择你想配置的网卡(如果你有多块网卡你可以选择关闭某一块的ICMP)在网卡属性中点击输入筛选器添加一条过滤策略from:ANYto:ANY协议:ICMP类型: :编码:丢弃就可以了(类型编码就是Ping使用的ICMP_ECHO报文如果要过滤所有的ICMP报文只需要将类型和编码都设置为) |