安全网关之三:IPTables
IPtables是基于包過濾的防火墻軟件,可以在低配置的服務器上面運行良好,所有的Linux發行版都包含它。
在網絡設備上的安全規則,通常是順序匹配,例如Cisco設備的ACL。而IPTables的核心是Table Chain和Rules,數據包除了順序匹配之外,還可以通過設定目標Chain來自由跳轉。下圖描述了數據包經過Table和Chain時的順序。
- Table的優先級是:RAW>MANGLE>NAT>FILTER。 
- 數據包的Chain流向是:PREROUTING->INPUT->FORWARD->OUT->POSTROUTING。 
- 每個Chain包含若干規則。這些規則將會被從上到下順序匹配。 
- 規則一旦被匹配,數據包將會流向下一個Table和Chain。 
用戶訪問線上環境的基本流程如下:
- 用戶登錄Open×××系統,系統驗證通過后,用戶獲取一個私有IP地址,同時系統記錄其賬號名。 
- 連接建立后,Open×××系統調用Connect腳本。 
- IPtables將用戶所屬IP加入到對應的規則組Chain中。 
- 用戶獲取到相應的訪問權限。 
- 用戶完成訪問,斷開連接,IPTables將用戶占用IP地址從規則組Chain中去除。 
由于安全網關主要是要在公司內網和線上環境的內網之間進行網絡的轉發和限制,本文主要使用了Table FILTER和Chain FORWARD。Filter是默認的Table。
通常的一條規則如下:
| iptables -A FORWARD -s 1.1.1.1 -d 2.2.2.2 -p tcp --dport 80 -j DROP | 
在這個解決方案最初的時候,我嘗試一條一條寫規則,但是當我開始導入規則時,我碰到了×××煩。
當我導入了100個用戶,目標網段有50個,每個網段需要訪問10個端口。我發現我一下得到了100*50*10條,即50000條規則, FORWARD鏈的長度變得非常長。極端情況,用戶的數據包會經過50000條規則才被匹配到。
為了解決上面這個問題,我在系統中引入了組的概念,同時使用了自定義Chain進行規則的跳轉:
- 所有對象都被配置成組,例如:用戶組,網絡地址組,端口組。IPTables本身是沒有區分數據包的用戶或者用戶組機制的。想要實現用戶和用戶組的判定,需要額外的腳本程序和配置數據庫配合,這個解決方案建立了一個額外的配置數據庫,利用Open×××用戶帳號和用戶IP地址的映射關系,來實現用戶的權限設置。 
- FORWARD Chain中的規則為:iptables -A FORWARD -s 1.1.1.1 -j USERGROUP_1,假設每個用戶都同時屬于20個組,FORWARD規則數為:2000條規則。 
- USERGROUP_1 Chain中的規則為: iptables -A USERGROUP_1 -j RULE_1, 假設每個組同時有20個規則,USERGROUP_1中的規則數為:20條 
- RULE_1 Chain中的規則為:iptables -A RULE_1 -d 1.0.0.0/8 -j PORT_1,假設每個網段開放了10種不同組合的端口,SG_1規則數為:50*10=500條規則。 
- PORT_1 Chain中的規則為:iptables -A PORT_1 -p tcp --dport 80 -j ACCEPT,PORT_1規則數為10條。 
這樣,源地址為1.1.1.1的用戶訪問線上系統,最多會經過2000+20+500+10=2530條規則,這個長度已經比之前有了很大的改善。
轉載于:https://blog.51cto.com/wuliyasutai/1349830
總結
以上是生活随笔為你收集整理的安全网关之三:IPTables的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Setup a Windows Serv
- 下一篇: 仿Office的程序载入窗体
