一. ebtables簡介
ebtables的全稱是Ethernet bridge frame table administration。ebtables是一個應用程式,用于設定和維護規則表,這些表中的規則用于檢查以太網幀。和iptables是類似的,但是使用比iptables使用更簡單。
ebtables有三個表,分别是filter,nat,broute。filter是指令預設操作的表,使用"-t table"來指定要操作的表,-t參數也必須是ebtables指令行的第一個參數。
ebtables也有鍊,和iptables一樣,當資料幀比對到鍊中的一條規則時,資料幀将按照該規則被處理,如果不比對,将測試鍊中的下一條規則。
ebtables和iptables一樣,有多個目标,分别是ACCEPT,DROP,CONTINUE和RETURN。ACCEPT意味着讓資料幀通過,DROP意味着資料幀将被丢棄,在BROUTING鍊中,ACCEPT和DROP代表不同的含義。CONTINUE意味着下一條規則被檢查,RETURN表示停止周遊此鍊,跳回到調用該鍊的鍊的下一條規則。
二. ebtables指令
1. 基本指令
-A,--append:
在指定的鍊後追加一條規則。
-D,--delete:
在指定的鍊中删除一條規則。删除有兩種方法,第一種是通過序号删除,文法是start_nr[:end_nr]。當start_nr和end_nr都指定時,則删除它們之間包括自己的所有規則,如果end_nr被忽略,則删除從start_nr開始的所有規則。第二種是通過指定要删除指令的完整形式。如果有多條相同的指令,一次執行隻删除其中第一條。
-I,--insert:
插入一條規則到指定的鍊中。用法同iptables。
-P,--policy:
修改指定鍊的預設目标,可以是ACCEPT,DROP和RETURN。用法同iptables。
-F,--flush:
清空指定的鍊。如果不指定鍊,則指定的表的所有鍊都被清空。用法同iptables。
-Z,--zero:
設定指定鍊的計數為0。用法同iptables。
-L,--list:
列出指定鍊的所有規則,如果不指定鍊,則是所有鍊。
-N,--new-chain:
建立一條新的使用者自定義鍊。用法同iptables。
-X,--delete-chain:
删除指定的使用者自定義鍊。
-E,--rename-chain:
重命名指定的鍊。舉例如下:
~ # ebtables -t nat -E PREROUTING PREFORWARDING
~ # ebtables -t nat -L
Bridge table: nat
Bridge chain: PREFORWARDING, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: POSTROUTING, entries: 0, policy: ACCEPT
2. 規則使用規範
-p,--protocol [!] protocol:
指定幀的協定。這個使用16進制數指定,要高于0x0600,或者名字,例如ARP,也可以是LENGTH。當使用名字時,/etc/ethertypes檔案必須存在。
-i,--interface [!] name:
幀被接收的接口。此選項在INPUT,FORWARD,PREROUTING和BROUTING才有用。如果接口名後面以"+"結尾,以該name開始的接口名都将被比對。
--logical-in [!] name:
接收幀的(邏輯)橋接口。此選項在INPUT,FORWARD,PREROUTING和BROUTING才有用。如果接口名後面以"+"結尾,以該name開始的接口名都将被比對。
-o,--out-interface [!] name:
發送幀的接口。此選項在OUTPUT,FORWARDING和POSTROUTING才有用。如果接口名後面以"+"結尾,以該name開始的接口名都将被比對。
--logical-out [!] name:
發送資料幀的(邏輯)橋接口。對應的是--logical-in。
-s,--source [!] address[/mask]:
源MAC位址。address和mask用6個16進制的數,中間用冒号隔開的數組成。可選的MAC位址有單點傳播,多點傳播和廣播和BGA(bridge Group Address):
Unicast=00:00:00:00:00:00/01:00:00:00:00:00
Multicast=01:00:00:00:00:00/01:00:00:00:00:00
Broadcast=ff:ff:ff:ff:ff:ff/ff:ff:ff:ff:ff:ff
BGA=01:80:c2:00:00:00/ff:ff:ff:ff:ff:ff
-d,--destination:
目的MAC位址,相對應的是-s選項。
3. ebtables 擴充用法
ebtables擴充是通過動态庫,加載到使用者空間工具中的。不要像iptables那樣使用"-m"選項明确加載,這些擴充也是核心支援的子產品,是對ebtables的補充。
among:将一個MAC位址或MAC/IP位址對與一個MAC位址和MAC/IP位址對的清單相比對。
清單條目有以下格式:XX:XX:XX:XX:XX:XX[=ip.ip.ip.ip][,]。多個清單條目用逗号隔開,指定與MAC位址對應的IP位址是可選的。可以指定具有相同MAC位址但不同IP位址(反之亦然)的多個MAC/IP位址對。如果MAC位址與清單中的任何條目不比對,則該幀不符合該規則(除非使用了"!")
--among-dst [!] list:
将目的MAC位址與給定的清單進行比較。如果以太網幀有IPv4或ARP類型,那麼與清單中的MAC/IP目标位址對進行比較。
--among-src [!] list:
将源MAC位址與給定的清單進行比較。如果以太網幀具有IPv4或ARP類型,那麼與清單中的MAC/IP源位址對進行比較
--among-dst-file [!] file:
同--among-dst,隻不過是從檔案中讀取。
--among-src-file [!] file:
同--among-src,隻不過是從檔案中讀取。
arp:指定(R)ARP字段,協定必須指定為ARP或RARP。
--arp-opcode [!] opcode:
(R)ARP操作碼(十進制或字元串),如下:
opcode strings:
1 = Request
2 = Reply
3 = Request_Reverse
4 = Reply_Reverse
5 = DRARP_Request
6 = DRARP_Reply
7 = DRARP_Error
8 = InARP_Request
9 = ARP_NAK
hardware type string: 1 = Ethernet
protocol type string: see /etc/ethertypes
--arp-ptype [!] protocol type:
指定(R)ARP使用的協定類型(十六進制或字元串IPv4,表示0x0800)。大多數(R)arp資料包的協定類型為IPv4。
--arp-ip-src [!] address[/mask]:
指定(R)ARP的源IP位址。
--arp-ip-dst [!] address[/mask]:
指定(R)ARP的目的IP位址。
--arp-mac-src [!] address[/mask]:
指定 (R)ARP的源MAC位址。
--arp-mac-dst [!] address[/mask]:
指定 (R)ARP的目的MAC位址。
ip:指定IPv4字段,協定必須指定為IPv4
--ip-source [!] address[/mask]:
指定源IP位址。
--ip-destination:
指定目的IP位址。
--ip-tos [!] tos:
指定IP資料包的Tos值,16進制格式。
--ip-protocol [!] protocol:
指定IP協定。必須為TCP,UDP,DCCP或SCTP。
--ip-source-port [!] port1[:port2]:
指定IP協定的源端口或端口範圍,6(TCP),17(UDP),33(DCCP)或132(SCTP)。如果port1省略,則使用0:port2,如果port2省略,則使用1:65535。
--ip-destination-port [!] port1[:port2]:
目的端口或端口範圍。用法同--ip-source-port。
ip6:指定IPv4字段,協定必須指定為IPv6
--ip6-source [!] address[/mask]:
指定源IPv6位址。
--ip6-destination [!] address[/mask]:
指定目的IPv6位址。
--ip6-class [!] tclass:
指定IPv6 tc值,16進制數。
--ip6-protocol [!] protocol:
指定IP協定,同--ip-protocol。
--ip6-source-port:
指定源端口,同--ip-source-port。
--ip6-destination-port:
指定目的端口,同--ip-destination-port。
--ip6-icmp-type [!] {type[:type]/code[:code]|typename}:
指定IPv6的ICMP類型和代碼。
vlan:指定802.1Q TCI(Tag Control Information)字段,協定必須指定為802_1Q (0x8100)
--vlan-id [!] id:
指定VLAN ID。10進制數0-4095。
--vlan-prio [!] prio:
指定優先級字段,10進制數0-7。此時VLAN ID應該被設定為0。
--vlan-encap [!] type:
封裝的以太網幀類型/長度。指定為十六進制數字,從0x0000到 0xFFFF或/etc/ethertypes的符号名稱。
limit:該子產品使用令牌桶過濾器以有限的速度進行比對。
使用這個擴充的規則将比對,直到達到這個限制。它可以與--日志觀察器一起使用,例如,提供有限的日志記錄。參數有--limit和--limit-burst,它的用途與iptables的限制比對相同。
三. 總結
本文隻要介紹了ebtables的作用以及用法。ebtables中有三張表filter,nat,broute,六條鍊INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING和BROUTING。ebtables不僅包含了一些常用的規則參數,例如-p,-i,-o,-s,-d等,還有一些擴充子產品,例如among,arp,ip,vlan等等。