arp包进入主机后要经过的过滤是:rp_filter
rp_filter会过滤网段
所以说不要在进行arp_ignore测试的时候把rp_filter设置成2, 此时就不会对源地址进行路由的检查了
然后进行试验
1) 设置arp_ignore = 1,此时网卡会会返回一个arp的回应信息;【注意,这里由于ICMP报文没有回应,所以从ping的角度看仍然是没有反应,可以直接看wireshark的结果】
2) 设置arp_ignore = 2,此时网卡不会回应;
这里的rp_filter是啥,为什么会有这么举足轻重的位置?
rp_filter是说内核是否开启对数据包源地址的校验;
说起来就是进行反向路径检查,如果没有反向路径的检查,即从本网卡能不能到目标的ip;
rp_filter可以设置三个值
0的话是不做任何的校验,这样应该安全通过才对呀,为啥还会被block住呢
1是进行严格的检查,即最后的路径就是我收到的接口;
2是进行松散的检查,这个源IP地址可以从本地路由出去;
按理说设置成0和2不就是最安全的了么,现在来看设置成2是很安全的,但是设置成1直接丢包了,设置成0,我理解是不做任何的校验了,为啥也不行呢?
别用systemTap抓了:
Current recommended practice in RFC3704 is to enable strict mode
to prevent IP spoofing from DDos attacks. If using asymmetric routing
or other complicated routing, then loose mode is recommended.
The max value from conf/{all,interface}/rp_filter is used
when doing source validation on the {interface}.
Default value is 0. Note that some distributions enable it
in startup scripts
使用all和interface中的最大值来作为这个值真正的设置,同理也对ignore生效;所以。。。。
The max value from conf/{all,interface}/arp_ignore is used when ARP request is received on the {interface}
所以我如果在我本地上做试验,还需要把all借口的这个值设置成0才好!!!!!!