前段時間,我使用iptables實現了針對IP地址與MAC地址的白名單功能,即將INPUT鏈的預設規則設為DROP:
iptables -P INPUT DROP
這樣就能拒絕一切外來報文。隨後只需要新增規則,將IP地址和MAC地址設為ACCEPT,即加入白名單:
iptables -A INPUT -m mac --mac-source 98:FC:84:E8:BA:C5 -j ACCEPT
iptables -A INPUT -s 192.168.2.7 -j ACCEPT
刪除的方法也很簡單:
iptables -D INPUT -m mac --mac-source 98:FC:84:E8:BA:C5 -j ACCEPT
iptables -D INPUT -s 192.168.2.7 -j ACCEPT
但我發現使能後,造成了一個功能的阻塞。深入程式碼探究發現,是因為該功能使用了本地套接字,而該套接字的connect請求被iptables的INPUT鏈的預設規則攔下來了。解決方法也很簡單,新增一條規則把回送地址加入白名單中:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
這樣就可以解決本地套接字的阻塞問題。最好將該語句新增到開機執行的配置檔案中,避免以後每次開機需要手動設定。