arptables 用于管理arp包过滤的软件
基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理.arptables可用于灵
活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能放只本机病毒或错误程序向其他机器发起
arp攻击.
arptalbes用于建立、获取、修改内核的arp包处理表.有几个不同的表,每个表分别含有几条内建的处理链,同时允许用户自定义处理链
每条链是一些规则的列表,每条规则匹配特定的包.每条规则指定一个对匹配的包的操作.这个操作
也叫做‘目标’,这个目标也可是跳转到同一个表中的另外的链
内建目标:ACCEPT, DROP, QUEUE,
RETURN.是几个最基本的目标,ACCEPT指接受这个包,DORP指丢掉这个包,QUEUE指把包传到用户空间(如果内核指定了的
话),RETURN指返回到上一条链,接着执行上一条链跳转过来哪条规则的下一个规则.每条链都有一个默认目标,当包经过所有规则都没被匹配,则发给默认目标
表:一边至少有一个内建的表(filter表)-t常常用于指定要操作的表.filter表有两个
内建的链,IN和OUT,IN用于处理目标为发给本机目标为本机的包,OUT处理本机发出去的包.
参数分两类:
一、命令类
-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计数
实例1:=--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--====
1. 安装arptables
arptables的图形下载页面是:
2.下载并安装:
# wget -c
# tar zxvf arptables-v0.0.3-4.tar.gz
# cd arptables-v0.0.3-4
# make
# make install
生成的命令是/usr/local/sbin/arptables、/usr/local/sbin/arptables-save、/usr
/local
/sbin/arptables-restore,系统启动脚本/etc/rc.d/init.d/arptables,这个脚本读的配置文件必须放在
/etc/sysconfig/arptables里。
3.打开arptables服务:
#chkconfig arptables on
4.配置SERVER的arptables:
SERVER网关MAC是XX:XX:XX:XX:XX:01,同网段另一台服务器192.168.0.3(主机名是host1)的MAC地址是XX:XX:XX:XX:XX:02。
命令行配置arp防火墙:
在eth0上如果源IP是192.168.0.3,并且源MAC不是XX:XX:XX:XX:XX:0,就禁止这个数据桢。
#/usr/local/sbin/arptables -A INPUT -i eth0 --src-ip 192.168.0.3
--src-mac ! XX:XX:XX:XX:XX:02 -j DROP
在eth0上如果源MAC不是00:24:51:E9:C7:10(网关的MAC地址),就禁止这个数据桢,这一条针对外网过来的访问。
#/usr/local/sbin/arptables -A INPUT -i eth0 --src-mac ! XX:XX:XX:XX:XX:01
-j DROP
注意:添加arp防火墙策略的次序不能错,针对网关MAC地址的语句必须放在最后,否则本网段IP的访问策略不能生效。
把以上策略写入配置文件:
#/usr/local/sbin/arptables-save > /etc/sysconfig/arptables
/etc
/sysconfig/arptables文件的内容:
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A
INPUT -j DROP -i eth0 -o any -s host1 ! --src-mac
XX:XX:XX:XX:XX:02
-A INPUT -j DROP -i eth0 -o any ! --src-mac
XX:XX:XX:XX:XX:01
用命令/etc/init.d/arptables restart重启arptables的时候提示出错:
Stopping Arp filtering (arptables): [ OK ]
Starting
Arp filtering (arptables): arptables v0.0.3-4: Can't use -o with INPUT
Try
`arptables -h' or 'arptables --help' for more information.
ERROR(line
5):
[FAILED]
修改/etc/sysconfig/arptables文件以后的内容:
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A
INPUT -j DROP -i eth0 -s host1 ! --src-mac
XX:XX:XX:XX:XX:02
-A INPUT -j DROP -i eth0 ! --src-mac
XX:XX:XX:XX:XX:01
再重启arp防火墙就没有错误。查看arp防火墙状态/etc/init.d/arptables status:
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A
INPUT -j DROP -i eth0 -o any -s host1 ! --src-mac
XX:XX:XX:XX:XX:02
-A INPUT -j DROP -i eth0 -o any ! --src-mac
XX:XX:XX:XX:XX:01
5.配置PC的arptables:
#arptables -A INPUT --src-mac ! 网关物理地址 -j DROP
#arptables -A INPUT -s ! 网关IP -j DROP
#arptables -A OUTPUT --destination-mac ff:ff:ff:ff:ff:ff -j
ACCEPT
SHELL如下:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
arptables -A INPUT --src-mac ! 网关物理地址 -j DROP
arptables -A INPUT -s ! 网关IP -j DROP
arptables -A OUTPUT --destination-mac ff:ff:ff:ff:ff:ff -j ACCEPT
注意:这样局域网内的资源不能使用,如需使用清空规则
#arptables -F
实例2:=--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--====
将源为X目的不是XX的转发包伪装为源地址是XXX
#iptables -t nat -A POSTROUTING -s X ! -d XXX -j SNAT --to XX
将源不是XXX,目的是X的包丢掉
#arptables -A IN ! -s XXX -d X -j DROP
将源是X,目的不是XXX的请求包发给XX
#arptables -A OUT -s X ! -d XXX -j mangle --mangle-ip-s XX