我是靠谱客的博主 无奈黑米,最近开发中收集的这篇文章主要介绍Linux下用arptables防arp攻击,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 绑定网关的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的话,就禁止这个数据桢。

CODE:
/usr/local/sbin/arptables -A INPUT -i eth0 --src-ip 192.168.1.10 --src-mac ! 00:17:A4:A8:68:11 -j DROP

在eth0上如果源MAC不是00:24:51:E9:C7:10(网关的MAC地址),就禁止这个数据桢,这一条针对外网过来的访问

CODE:
/usr/local/sbin/arptables -A INPUT -i eth0 --src-mac ! 00:24:51:E9:C7:10 -j DROP

注意:添加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攻击所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部