环境:CentOS5
arptables 可以当作是linux下的ARP防火墙
arptables is a user space tool, it is used to set up and maintain the tables of ARP rules in the Linux kernel. These rules inspect the ARP frames which theysee. arptables is analogous to the iptables user space tool, but arptables is less complicated.
arptables 是一个用户空间,用于管理内核中的ARP规则表,规则检查处理的是ARP数据帧。(arptables 类似 iptable,但比iptables简单,它需要载入内核模块arptable_filter)。
正常情况下,arptable_filter 只有一个表filter ,不指定-t 表名 时默认就是filter 表。
filter 表有两个链,一个是IN,表示外面发进来的ARP包;另外一个是OUT ,表示本机发出的ARP包。
内建的动作:ACCEPT 放行ARP包;DROP 丢掉ARP包;CONTINUE 继续下一规则;RETURN 不在这个链中继续进行匹配,返回到上一条链的下一条规则.
扩展动作:mangle: mangle ARP包
--mangle-ip-s IP address
Mangles Source IP Address to given value.
--mangle-ip-d IP address
Mangles Destination IP Address to given value.
--mangle-mac-s MAC address
Mangles Source MAC Address to given value.
--mangle-mac-d MAC address
Mangles Destination MAC Address to given value.
--mangle-target target
Target of ARP mangle operation (DROP, CONTINUE or ACCEPT -- default is ACCEPT).
来自百度百科:
有两类,一类为命令类,包括
-A, --append chain rule-specification追加规则
-D, --delete chain rule-specification删除指定规则
-D, --delete chain rulenum删除指定位置的规则
-I, --insert chain [rulenum] rule-specification插入规杂
-R, --replace chain rulenum rule-specification替换规则
-L, --list [chain]列出规则
-F, --flush [chain]删除所有规则
-Z, --zero [chain]清空所有计数
-N, --new-chain chain新建链
-X, --delete-chain [chain]删除链
-P, --policy chain target指定默认目标
-E, --rename-chain old-chain new-chain重命名链
-h,帮助
另一类为参数
-s, --source [!] address[/mask]源地址
-d, --destination [!] address[/mask]目的地址
-z, --source-hw [!] hwaddr[mask]源mac
-y, --target-hw [!] hwaddr[mask]目的mac
-i, --in-interface [!] name受到这个包的网卡
-o, --out-interface [!] name要发送这个包的网卡
-a, --arhln [!] value[mask]
-p, --arpop [!] value[mask]
-H, --arhrd [!] value[mask]
-w, --arpro [!] value[value]
-j, --jump target跳到目标
-c, --set-counters PKTS BYTES计数
结合一些应用来熟悉arptables
arptables -F 清除filter 所有规则
arptables -L -n 列表filter 所有规则
1. 防止某些ARP欺骗
(1) 用作ARP防火墙,防止某些ARP欺骗(要完全防止ARP欺骗只能在网关和本机上都互相绑定MAC)
假设网关MAC是00:0C:29:C7:01:13 IP: 192.168.1.1
发进来的ARP包中,如果源IP是192.168.1.1,源MAC不是00:0C:29:C7:01:13的,丢掉
arptables -A IN -s 192.168.1.1--source-hw !00:0C:29:C7:01:13-j DROP
发进来的ARP包中,如果源MAC是00:0C:29:C7:01:13,源IP不是192.168.1.1的,丢掉
arptables -A IN --source-hw 00:0C:29:C7:01:13-d !192.168.1.1-j DROP
这2 条规则很好解决了某些ARP欺骗,还有很多灵活的规则,如可以设置只允许网关和某些主机的ARP包通过,可以根据源IP、MAC或者两结合判断。
注:另外一种绑定网关MAC的方法是:arp -f /etc/mac (mac文件中的内容是:IP MAC)
(2) 解决LVS中的ARP问题(处理ARP问题的另一种方法)
arptables -A IN -d <virtual_ip>-j DROP
arptables-A OUT -s <virtual_ip>-j mangle --mangle-ip-s <real_ip>
它的意思是:进来的ARP,如果目的IP是VIP的,丢弃; 发出去的ARP包,如果源IP是VIP的,改成realserver的IP。
与内核ARP参数arp_ignore=1,arp_announce=2的作用是一样的。
特别注意:arptables 只是过虑了ARP广播包,如果手动绑定IP和MAC,或者存在正确的MAC缓存,也是可以和主机通信的