Linux下arp防火墙

1370阅读 0评论2014-11-20 dzlhappy123
分类:

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
上一篇:iptable指南之(2)准备阶段
下一篇:ubuntu命令安装内核源码及升级内核源码