1. 介紹
防火墻就是實現Linux下訪問控制功能的,分為軟件防火墻和硬件防火墻兩種。
我們需要得定義防火墻的規則和策略去實現網絡的IP,數據的檢測。
目前市場上常見的有3,4層的防火墻,叫做網絡層的防火墻,還有7層的防火墻,其實是代理層的網關。
對于TCP/IP的七層模型來講,我們知道第三層是網絡層,三層的防火墻會在這層對源地址和目標地址進行檢測。但是對于七層的防火墻,不管你源端口或者目標端口,源地址或者目標地址是什么,都將對你所有的東西進行檢查。所以,對于設計原理來講,七層防火墻更加安全,但是這卻帶來了效率更低。所以市面上通常的防火墻方案,都是兩者結合的。而又由于我們都需要從防火墻所控制的這個口來訪問,所以防火墻的工作效率就成了用戶能夠訪問數據多少的一個最重要的控制,配置的不好甚至有可能成為流量的瓶頸。
2. iptables的工作機制
netfilter的五個規則鏈
- PREROUTING(路由前)
- INPUT(數據包流入口)
- FORWARD(數據包轉發)
- OUTPUT(數據包流出口)
- POSTROUTING(路由后)
任何一個數據包只要經過本機,必須經過這五個鏈中的其中一個鏈
3. 防火墻策略
防火墻策略一般分為兩種:
- 通策略:必須定義誰可以進
- 堵策略:必須有身份認證,否則不能進
當我們定義的策略的時候,要分別定義多條功能,其中:定義數據包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。
我們比較常用的功能主要有三個:
- filter:定義允許或者不允許
- nat:定義地址轉換
- mangle:修改報文原數據
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING,OUTPUT,POSTROUTING
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
iptables/netfilter(這款軟件)是工作在用戶空間的,它可以讓規則進行生效的,本身不是一種服務,而且規則是立即生效的。而我們iptables現在被做成了一個服務,可以進行啟動,停止的。啟動,則將規則直接生效,停止,則將規則撤銷。
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。
iptables定義規則的方式比較復雜:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :filter nat mangle
COMMAND:定義如何對規則進行管理
chain:指定你接下來的規則到底是在哪個鏈上操作的
CRETIRIA:指定匹配標準
-j ACTION :指定如何進行處理
iptables命令詳解
當然可以通過man iptables來查看詳細的解釋。常用的命令選項有:
-P:設置默認策略的(設定默認門是關著的還是開著的)如:iptables -P INPUT (DROP|ACCEPT)
-F: FLASH,清空規則鏈的(注意每個鏈的管理權限)
-N:NEW 支持用戶新建一個鏈,比如:iptables -N inbound_tcp_web 表示附在tcp表上用于檢查web的。
-X:用于刪除用戶自定義的空鏈
-Z:清空鏈
-A:追加
-I num : 插入,把當前規則插入為第幾條
-R num:Replays替換/修改第幾條規則
-D num:刪除,明確指定刪除第幾條規則
-L:查看規則詳細信息,比如"iptables -L -n -v"