如果iptables是linux下工作于网络层和传输层的防火墙软件,那么arptables就是工作于数据链路层的防火墙软件。arptables主要是基于IP地址和MAC地址来匹配数据包,并进行相应的处理。arptables的命令格式与iptables十分类似,了解iptables的朋友可以秒懂arptables的使用。
arp数据包通常不会跨路由器传播,因此主要的防护目标是局域网。身边人最可怕,原因有二,其一:身边人难于防范,身边人几乎了解你的一切并可以直接接触你的一切。其二:身边人一旦决定作出某种对你不利的行为,其伤害值往往极大,甚至足以造成毁灭性打击的后果。社会环境下如此,网络环境下尤其如此。arp欺骗就是一个典型例子,本博客不打算详细介绍arp欺骗的原理,只想说arp欺骗的危害堪比电信诈骗,甚至比电信诈骗更可恶。
本博客直接给出arptables的一个配置。本配置的作用是阻止除了局域网网关之外的全部局域网数据包,即在数据链路层实现了360网络防火墙的局域网保护功能。本配置仅仅在主机端屏蔽了任何来自局域网中非网关的arp请求与应答数据包。如果需要完全阻止arp欺骗,还需要在网管上进行类似的配置,即进行各个主机的ip地址和arp地址的绑定的设定工作。
同时,在本主机上还可以使用arp -s 命令静态绑定网关的ip地址和mac地址。
为了避免泄露网络隐私,本文涉及的所有ip地址和mac地址全部以aa,bb之类的字母代替。
1 [u@11 ~]$ sudo cat /etc/arptables-rules 2 [sudo] password for u: 3 #!/bin/bash 4 5 MAC_OFFSET=1 6 MAC_SIZE=17 7 IP_OFFSET=19 8 IP_SIZE=15 9 10 11 ETH_WAN=eth1 12 IP_ME_WAN=11.bb.bb.bb 13 MAC_ME_WAN=xx:xx:xx:xx:xx:xx 14 15 #局域网网管的IP地址和MAC地址。 16 IP_GW_WAN=11.aa.aa.aa 17 MAC_GW_WAN=yy:yy:yy:yy:yy:yy 18 19 #本机的IP地址和MAC地址。 20 ETH_LAN=eth0 21 IP_ME_LAN=11.cc.cc.cc 22 MAC_ME_LAN=zz:zz:zz:zz:zz:zz 23 24 25 #本机允许访问的局域网其它主机或本机的IP地址和MAC地址。 26 ARPTABLE_LAN="aa:aa:aa:aa:aa:[email protected] bb:bb:bb:bb:bb:[email protected] cc:cc:cc:cc:cc:[email protected]" 27 28 #清空和重置各个规则链、计数器。 29 arptables -F 30 arptables -X 31 arptables -Z 32 33 #初始化默认设定为DROP。 34 arptables -P INPUT DROP 35 arptables -P OUTPUT DROP 36 arptables -P FORWARD DROP 37 38 #允许与网关之间的数据包。必须允许,否则无法通信。 39 arptables -A INPUT -i ${ETH_WAN} --src-ip ${IP_GW_WAN} --src-mac ${MAC_GW_WAN} --dst-ip ${IP_ME_WAN} --dst-mac ${MAC_ME_WAN} -j ACCEPT 40 arptables -A OUTPUT -o ${ETH_WAN} --src-ip ${IP_ME_WAN} --src-mac ${MAC_ME_WAN} --dst-ip ${IP_GW_WAN} -j ACCEPT 41 42 #添加一个arp规则的函数 43 function arp_rule_lan 44 { 45 eth=$1 46 meip=$2 47 memac=$3 48 shift 3 49 50 arptable=$* 51 for macip in ${arptable} 52 do 53 mac=$(expr substr ${macip} ${MAC_OFFSET} ${MAC_SIZE}) 54 ip=$(expr substr ${macip} ${IP_OFFSET} ${IP_SIZE}) 55 arptables -A INPUT -i ${eth} --src-ip ${ip} --src-mac ${mac} --dst-ip ${meip} --dst-mac ${memac} -j ACCEPT 56 arptables -A OUTPUT -o ${eth} --src-ip ${meip} --src-mac ${memac} --dst-ip ${ip} --dst-mac ${mac} -j ACCEPT 57 done 58 59 60 } 61 62 63 64 arp_rule_lan ${ETH_LAN} ${IP_ME_LAN} ${MAC_ME_LAN} "${ARPTABLE_LAN}" 65 66 67 68 69 arptables-save > /etc/sysconfig/arptables 70 arptables -L -n -v --line-numbers