我需要阻止 LAN 上的某些主機(多作業系統)存取網際網路。我決定嘗試透過 iptables 透過 mac 位址封鎖某些主機,但我無法使用工作站的 mac 位址,因為它穿過 L3 交換機,並且使用交換器的介面 mac 重建訊框。我已經使用wireshark 的tshark
實用程式確認了這一點。
我知道我可以透過 IP 位址進行阻止,但我無法控制使用者是否更改他/她的 IP,從而繞過該阻止。我認為可以透過執行以下操作的腳本來實現解決方案:
- 使用 fping 更新 arp 表:
fping -c 1 -g 10.10.10.0/24
- grep arp 表以從 MAC 位址清單中取得 IP,例如在檔案中:
arp -n | grep "00:11:22:aa:bb:cc" | awk '{print $1}'
- 建立哈希或數組並使用需要阻止的 IP 位址動態更新 iptables。我可能會使用一個文件並執行類似的操作
iptables-restore < ips_to_deny
。 - 比如說每 5 分鐘左右運行一次這個腳本。 (不確定時間)
所以...問題。您認為這種方法有什麼缺陷嗎?或者有什麼辦法可以讓它變得更好?
- 我想到了 Mac 欺騙,但主機使用者沒有管理員存取權限。
如果這很重要的話,我會使用 perl 或 ruby 作為腳本。
答案1
在組織大型 LAN 聚會(> 500 個使用者)時,我必須處理類似的情況,您無法控制工作站,這非常有趣。
如果您的L3 交換器(從技術上講是路由器)相當高等級,則可能可以透過SNMP 進行管理,並且您可以讀取對應子網路(直接連接到網站的子網路)的ARP 表,以檢索有效的mac/ip映射。
但是,如果您擔心機器未經您同意更改 IP,您可能還應該擔心機器更改 MAC。如果您相信電腦不會更改 MAC,我們使用的另一個選項是解析 DHCP 伺服器的日誌。作為獎勵,您還可以關聯 DHCP 日誌和 ARP 表來偵測欺騙者。
如果您的交換器支持,您也可以使用 802.1x 身份驗證。在此模式下,機器在開始實際交換資料包之前必須透過 Radius 向交換器進行身份驗證,並且對於每次驗證,Radius 伺服器都會接收該站的身份、實體位置和 MAC。
答案2
這一切對我來說似乎過於複雜,並且可能成為那些“定制”解決方案之一,而這些解決方案往往會在未來成為一個問題(即“某某在離開公司之前很久就設置了這個,沒有人知道如何更改”)。因此,我個人會考慮一些更基於標準的東西。
除非您需要具有 Internet 存取權限的裝置和不具有 Internet 存取權限的裝置位於同一 L2 網段,否則我會實作 802.1X mac 驗證旁路 (MAB)。您可以執行此操作,以便為經過驗證的裝置指派一個 VLAN,而無法通過驗證的裝置則放置在第二個 VLAN 中。
如果您的交換器不支援僅MAB(即MAB僅在IEEE 802.1X認證失敗後才生效),您可以將IEEE認證的重試次數和逾時值減少到最小值。由於您不關心 IEEE 身份驗證,而且它會很快失敗,因此您不需要配置任何類型的請求者,除非您選擇這樣做。
為了更安全,您可以為所有應具有 Internet 存取權限的裝置設定 MAC 位址,僅允許這些裝置進行驗證並放入提供 Internet 存取權限的 VLAN 中。但是,如果您只關心限制某些設備(並讓新設備自動連接到Internet),則可以將其配置為將失敗的身份驗證放入可訪問Internet 的VLAN,而將成功的身份驗證放入無法訪問Internet 的VLAN。
您沒有給出為什麼要這樣做的原因,但是如果有任何理由這樣做,這也將提供輕鬆限制兩組主機之間的存取的機會。