概述
绑定网关的mac
arp -s 192.168.1.1 00-1d-0f-2a-7f-e2
arp -s 192.168.1.12 00-1f-d0-de-2c-2b
配置 :防止ARP最有效的方法是只允许网关的ARP包 ,我现在的环境网关IP:59.37.172.1 MAC: 00:23:89:4D:29:12
本机IP: 59.37.172.81 MAC: 00:E0:81:D2:75:C5
另外一台机器IP:59.37.172.80
要求 只允许和网关通信(这象是费话,不和网关通信数据怎么才能够出去呢)
# arptables -A INPUT --src-ip 59.37.172.81 --src-mac 00:23:89:4D:29:12 -j ACCEPT
#arptables -A INPUT --src-ip 59.37.172.1 --src-mac00:E0:81:D2:75:C5 -j ACCEPT
#arptables –P INPUT DROP
打开arptables服务:chkconfig arptables on
arptables 可以当作是linux下的ARP防火墙
arptables 是一个用户空间,用于管理内核中的ARP规则表,规则检查处理的是ARP数据帧。(arptables 类似 iptable,但比iptables简单,它需要载入内核模块arptable_filter)。
正常情况下,arptable_filter 只有一个表filter ,不指定-t 表名 时默认就是filter 表。
filter 表有两个链,一个是IN,表示外面发进来的ARP包;另外一个是OUT ,表示本机发出的ARP包。
INPUT(发送帧的源主机),OUTPUT(本地产生的帧),FORWARD(由桥代码转发的帧).
内建的动作: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 所有规则
2. 配置arptables
linux服务器的网关MAC是00:24:51:E9:C7:10,同网段另一台服务器192.168.1.10(主机名是nh-blade-67)的MAC地址是00:17:A4:A8:68:11。
用命令行配置arp防火墙:
在eth0上如果源IP是192.168.1.10,并且源MAC不是00:17:A4:A8:68:11的话,就禁止这个数据桢。
在eth0上如果源MAC不是00:24:51:E9:C7:10(网关的MAC地址),就禁止这个数据桢,这一条针对外网过来的访问。
注意:添加arp防火墙策略的次序不能错,针对网关MAC地址的语句必须放在最后,否则本网段IP的访问策略不能生效。
把以上策略写入配置文件:
/usr/local/sbin/arptables-save > /etc/sysconfig/arptables
为什么以及如何使用arptables
之前一直都只有去搞IPTABLES,由于昨天又疯了,对安全又谨慎了,于是来看了下防止ARP欺骗。
记得以前有个arp的类似iptables的东西,于是谷歌了一下,是arptables,安装完之后看了网上的教程,感觉跟iptables的命令很像,都是那么
root@LK:/home/cclove # [ip|arp]tables -A INPUT –-src-mac ! [MAC Address] -j DROP
然后就有个感觉,用iptables能不能实现arptables的功能呢?
当然不能。
因为当需要发送一个数据包到未知目的MAC地址的时候,数据包完成网络层的封装,封装到数据链路层 ,因为不知道目的MAC地址,会触发ARP请求,请求目的IP地址的MAC地址。
由此可见ARP协议是当 数据包在数据链路层需要往外发送的时候体现它的作用的,而iptables只是工作在网络层的,对这个根本不能控制。
看了下iptables的man手册,只能指定源地址
mac
[!] --mac-source address
Match source MAC address. It must be of the form
XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets
coming from an Ethernet device and entering the PREROUTING, FOR‐
WARD or INPUT chains.
就是说,只能在INPUT链上指定mac地址以限制数据包进入本机,虽然那mac地址是数据链路层的东西,但是在Linux设备驱动的内核代码中有个sk_buff结构,它里面包含了目的地址的mac地址,所以iptables是可以指定源mac地址过滤数据包的,但是由于数据包被封装的时候在网络层是没有MAC地址的,所以不能在OUTPUT链指定目的MAC地址来限制数据包。
看来必须得用arptables了。
首先安装arptables, 在ubuntu:
root@LK:/home/cclove # apt-get install arptables
然后设置默认策略,默认拒绝所有主机的arp查询:
root@LK:/home/cclove # arptables -P INPUT DROP
查看路由表确定网关IP,有UG标志的就是了:
root@LK:/home/cclove # route -n
内核 IP 路由表
目标 网关 子网掩码 标志 跃点 引用 使用 接口
10.0.33.0 0.0.0.0 255.255.255.128 U 1 0 0 eth0
172.16.37.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
0.0.0.0 10.0.33.1 0.0.0.0 UG 0 0 0 eth0
然后查看网关的MAC地址:
root@LK:/home/cclove # arp -n | grep 10.0.33.1
10.0.33.1 ether 00:23:89:4d:27:e1 C eth0
添加一条记录允许网关的arp查询:
root@LK:/home/cclove# arptables -A INPUT --src-mac 00:23:89:4d:27:e1 -j ACCEPT
这样就可以了,局域网其它计算机的arp查询都被过滤掉了,当然,ftp、samba等的文件共享就不能进行了。
然后也可以把其它需要联系的计算机的MAC地址添加可以arp查询,就像添加网关地址可以一样。
或者也不只是只指定MAC地址,也可以像IPTABLES那样指定IP段:
root@LK:/home/cclove # arptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
最后
以上就是无奈黑米为你收集整理的Linux下用arptables防arp攻击的全部内容,希望文章能够帮你解决Linux下用arptables防arp攻击所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复