一般來說,企業用戶目前使用無線路由器有兩種模式,一種是NAT模式,即將墻點出來的網線接入WAN口,而無線終端則通過無線路由器自帶的DHCP服務分配一個私網地址(一般為192.168 .X .X或者10 .X.X .X),所有接入的無線終端通過WAN口IP共享上網。另外一種則是網橋模式,即不使用WAN口,將墻點出來的網線接入某個LAN口中,無線終端通過公司的DHCP服務器分配IP地址。針對這些情況,本文給出了兩種解決方案。

圖1 無線管控設備部署圖
在企業Internet出口處部署無線管控設備,通過分析訪問Internet的流量找出無線路由器和無線終端,并對其進行針對性的管控,具體部署圖如圖1所示。
從上圖1可以看出,無線管控設備(AC)部署于內網核心交換機和防火墻之間,以透明模式接入,能夠對訪問Internet的流量進行全面分析。
(1)上網行為管理技術已經較為成熟,針對無線IP和應用的管控效果較好。
(2)設備直接以透明模式接入,部署簡單,網絡架構無需大的變更。
(3)能管控以NAT模式接入的無線路由器,還能管控以網橋模式接入的無線路由器下接入的終端。
(4)能夠自動收集數據,有比較成熟的報表系統供分析和決策。
(1)只能針對上外網的無線路由器進行管控,即如果某個無線路由器接入了公司局域網,只訪問公司內網資源,不訪問Internet,那么該設備將無法發現該終端。
(2)只能識別出無線路由器的WAN口IP,無法取得無線路由器的其他信息,如品牌、MAC地址和接入交換機端口等信息。
(3)部署在網關處,存在單點故障的風險。
(4)需要一定的投資來購買硬件設備。
與方案一中使用純技術手段不同,方案二結合企業自身IT基礎架構,采用技術+管理的方式來實施無線管控。技術方面自主研發檢測腳本程序,實時檢測無線路由器接入情況。管理方面建議完善無線路由器出庫登記制度,結合檢測軟件檢測出的結果,找出非法接入的無線路由器。
下面將對檢測腳本程序和無線路由器登記制度分別進行介紹。
首先對無線路由器自動檢測程序進行介紹。該檢測程序的工作原理是搜集無線MAC地址庫,從網關設備(核心交換機或者路由器)的ARP信息庫中查詢到無線路由器的相關信息。腳本程序是采用大多數網絡管理人員熟悉的VBScript語言開發,后臺數據庫采用的是MySQL,整個檢測程序主要包括四個模塊:IEEE MAC入庫模塊、無線MAC庫查詢模塊、網關ARP數據抓取模塊及無線節點掃描模塊,這四個模塊之間屬于順序執行的關系,每個模塊功能各由一個腳本程序來完成。下面將對四個模塊分別進行介紹。
(1)IEEE MAC入庫模塊
IEEE組織發布了一個權威的全球MAC地址分配表,下載地址為http://standards.ieee .org/regauth/oui/oui.txt,表里詳細記錄了網絡設備廠商與MAC地址段的分配關系,這是一個文本文件,需要使用寫字板打開,文件內格式如下所示:

從上述例子可以看出,MAC地址是按段分配給各個廠家的,以00-19-E0開頭的這段MAC地址分配給廠家TP-Link。這個MAC地址分配文件內容就是由這些分配段組成。為了方便在程序中調用,我們需要將這個MAC分配表導入MySQL數據庫中。本模塊正是利用腳本程序將這些記錄自動導入到MySQL數據庫中,如果未來該分配表發生變化,即可重新利用該模塊將新的分配表導入數據庫中。
下面將對該模塊的關鍵部分進行介紹,由于需要進行數據庫操作,所以必須先安裝MySQL數據庫,然后定義數據庫連接字符串,MySQL數據庫連接字符串內容主要包括數據源名、Driver名稱、數據庫服務器 IP、User、Password、目的數據庫名稱及數據庫端口(MySQL端口一般為3306)組成。
數據庫連接成功后,就需要創建數據庫及相關的表,本文創建了network_db數據庫,該數據庫用于存放所有模塊所涉及到的表,在本模塊中需要創建Mac_lib表,用于存放MAC地址分配表中的所有信息,該表包含序號、MAC分配段、公司名稱三個屬性。創建數據庫和表都需要使用SQL語句,語句“create database if not exists network_db”即可創建數據庫network_db,其他表的創建與此類似。
利用SQL語句創建完相應的數據庫和表后,就需要將文件中的內容讀入數據庫MAC_lib表中,基本原則是采用循環,逐行進行選擇性讀入,關鍵代碼如下:串的那一行


(2)無線MAC庫查詢模塊
本模塊是從(1)中生成的MAC地址庫中抽取出相應的無線設備生產廠商的MAC地址記錄,如TP-Link、D-Link等,這個庫是動態變化的,由用戶決定無線MAC庫的內容。具體實現就是根據廠商的名稱在Mac_lib表中進行查詢,找到對應的表項,插入到Macwireless_lib表中,該模塊也涉及到數據庫操作,SQL語 句"create table if not exists network_db.Macwireless_lib (Mac_num int(4),Mac_id varchar(12)NOT NULL,company_id varchar(100) NOT NULL)"創建了Macwireless_lib表,語句"insert into network_db .Macwireless_lib select* from network_db .Mac_lib where company_id like'%tp-link%'"將對應的廠商MAC分配項插入到Macwireless_lib表中。這里暫時只加入了TP-Link廠家,未來可以根據需求重新定義SQL語句進行擴展。
(3)網關ARP數據抓取模塊
本模塊通過調用SecureCRT,執行對應的腳本程序從網關實時抓取出ARP信息,然后將信息存入數據庫供程序分析。由于從核心交換機(型號為Cisco 6509)利用“show ip arp”抓取出來的ARP信息是按行分布的,為方便起見,先將這些信息存入一個過渡文件arp_switch6509.rtf中,然后再將這個文件內容再逐行寫入network_db數據庫的arp_switch6509表中,這里就涉及到導出數據和寫數據庫兩步操作。
我們采用Cisco交換機中的管道和tee命令,將對應的ARP信息分離出來,然后采用TFTP上傳的方式,將抓取的信息上傳至TFTP服務器上,即可完成數據從核心交換機導出的工作,當然,這都是腳本程序自動完成的,其中還涉及到自動登錄、自動輸入、自動識別等系列流程,關鍵代碼如下:
crt .Session .Connect “/TELNET " & hexin_ip”
hexin_ip為核心交換機的IP地址,這條命令啟動SecureCRT自動Telnet到核心交換機上。

其中temp_user為登錄交換機的用戶名,上述這兩條命令可以監控SecureCRT交互界面,出現“Username:”后,就自動輸入用戶名,然后回車。后續輸入密碼、enable密碼以及各類交換機命令,都可以采用類似的方式。
ARP數據導出到文件后,即可寫入數據庫中供后續掃描模塊使用。這一部分相對簡單,就是常規的寫數據庫操作,通過循環逐行將文件中的ARP信息寫入數據庫,關鍵代碼如下:

上述代碼就是通過insert語句將ARP信息寫入數據庫中的arp_switch6509表,寫入的屬性包括序號、MAC地址,IP地址和所屬VLAN。
(4)無線節點掃描模塊
本模塊根據(2)和(3)獲得的無線MAC地址庫和網關ARP信息庫進行分析,判斷ARP庫中每條記錄的MAC字段是否屬于無線MAC地址庫中的地址段,如果屬于無線MAC,則查詢并記錄下相關的信息,信息包括無線路由器的MAC地址、WAN口IP地址、接入交換機的端口、制造商及檢測時間。由于企業網絡架構一般呈樹形結構分布,交換機之間通過Trunk口進行互聯,接入端交換機通過Access接口與終端進行連接,無線路由器作為終端處于這棵樹的末梢位置,所以在搜索無線路由器的具體位置時,我們采用了樹的搜索算法,能夠直接定位到接入層交換機的某個端口,然后通過綜合布線的點位圖,即可定位到無線路由器的物理位置。
下面將對該模塊的關鍵代碼進行介紹。
本文將掃描出的無線路由器信息都存放于數據表wirelessInfo_switch6509中,該數據表的屬性包括序號、MAC地址、IP地址、位置、制造商、掃描時間等。由于搜索無線路由器的位置相對比較復雜,但是無線路由器的其他信息獲取相對簡單,所以整個模塊分為獲取位置信息和獲取其他信息兩部分。
(1)如何獲取其他信息
首先介紹如何獲取其他信息(除位置屬性以外的其他屬性),這些信息通過arp_switch6509和Macwireless_lib兩個表的匹配就可以獲取,具體方法是將兩個數據表中的MAC字段進行循環比較,如果兩表中的MAC字段相同,說明arp_switch6509表中對應的表項即為某個無線路由器的信息,將對應的信息寫入wirelessinfo_switch6509數據表中即可,關鍵代碼如下:

(2)獲取無線路由位置信息
下面介紹如何獲取無線路由器位置信息,具體實現是針對wirelessinfo_switch6509表中的無線路由器MAC地址信息,利用循環,從樹根(核心交換機)開始,利用“show Mac-address”命令,從交換機的MAC地址轉發表中找到對應目的MAC地址的下一跳端口,然后利用“show cdp neighbors”命令,找到相鄰的交換機,如果結果為空,則說明該目的端口已經是無線路由器的接入端口,可以結束此次搜索;如果不為空,則繼續登錄對應交換機,采取同樣的操作。這樣通過遍歷整棵樹,直到找到最終的無線路由器接入端口。
當然,這個過程同樣需要使用交換機的自動登錄程序,這在前面已有介紹,在此不再贅述。
下面對關鍵代碼進行介紹:



圖2無線路由器檢測程序流程圖


整個檢測程序的流程圖如圖2所示。
利用上述的檢測程序檢測出局域網內的無線路由器后,我們如何去識別合法與非法的無線路由器呢?這就需要在管理上下功夫了。由于企業內部電子設備的領用一般都有嚴格的出庫流程,本文從完善此流程的角度出發,建立相應的無線路由器登記制度,當用戶申請無線路由器獲批后,需前往庫房管理處領取設備,而庫房管理員除了登記設備型號、序列號等信息,還需要登記無線路由器WAN口的MAC地址,登記后的無線路由器視為合法。完成上述登記內容后,方案二的整套流程如圖2所示。
(1)用戶提出無線路由器使用申請。
(2)申請審批通過后,用戶赴庫房領取設備,庫管人員分配設備,登記設備型號、SN和MAC地址等信息。
(3)客服人員為用戶部署無線路由器,交付給用戶使用。
(4)定期(如一個月)利用無線路由器檢測程序進行掃描,導出掃描結果。
(5)將掃描結果提交給庫管人員,庫管人員將無線路由器設備登記表與掃描結果進行對照,找出其中非法接入的無線路由器。
(6)將非法接入的無線路由器信息,包括IP、MAC以及位置(接入交換機的端口)提交給客服人員。
(7)客服人員根據上述信息,結合點位圖即可定位到無線路由器的具體位置,對其進行處理。
(1)方案優勢
檢測程序旁路部署,任意一臺連入局域網的PC機即可安裝,不占用任何資源,不會對網絡產生任何影響。
定位較為準確,不僅能獲知無線路由器的制造商,更能追蹤到無線路由器的物理位置。
檢測結果不受無線路由器是否上外網所限制,只要無線路由器與網關有過通訊,即可準確識別出來。
程序完全自主開發,無需任何投資費用;而且程序具有通用性,很容易移植到其他企業環境。
(2)方案缺陷
由于我們無法對數據流量進行深度的協議分析,所以該方案只能對以NAT模式接入的無線路由器進行檢測,無法檢測出以網橋模式接入的無線路由器下的終端。
暫時只能檢測,無法對無線路由器和無線終端進行技術上的管控。
必須收集廠商的無線MAC地址分配表才能進行準確檢測。對于TP-Link,D-Link等專業無線設備廠商,收集其MAC地址分配表相對簡單,但是對于其他一些綜合設備廠商,則需要花費更大的精力去收集。
上述兩種方案各有優劣,方案一較為成熟,更加側重于從技術上進行控制,很多廠商已經推出了一整套無線管控解決方案,IT預算充足的企業可以考慮。方案二更加側重于從管理上對用戶進行引導,更加靈活,而且不需要任何投資,掃描程序也很容易移植,自身管理和技術能力較強的企業可以參考。