綁定網關的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的東西,於是Google了一下,是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