天天看點

ebtables使用介紹

一. 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等等。

繼續閱讀