歡迎光臨
每天分享高質量文章

Linux的銅牆鐵壁:防火牆之iptables

來自:編程無界(微信號:qianshic),作者:假不理

【來源】

所謂防火牆,實質上是指由軟硬體組合成的一個在內外網之間構造的一種保護屏障,它是一種隔離技術。因此從物理上區分,可以分為軟體和硬體防火牆,從邏輯上區分,可以分為主機和網絡防火牆,而我們現在要講到的iptables,是屬於防火牆中的軟體防火牆的範疇,但它只是一個命令列工具或者說是一種客戶端代理,並不是真正的防火牆,用戶通過這個代理,把安全設定執行到真正的防火牆框架中,這個框架叫做Netfilter


【原理】

Netfilter是Linux中的一個子專案,它的主要功能是進行資料包過濾、連接跟蹤、地址轉換等,而iptables則是netfilter提供的對用戶資料包進行過濾、修改等操作的一種命令列工具,當資料包通過網卡進入進入內核時,它得先經過iptables的五條鏈,這些鏈都有相應的處理資料包的規則,而我們正是通過在這些鏈上設置規則來控制管理資料包,從而達到防火牆的功能。每當資料包到達一個鏈時,iptables就會從鏈中的所有規則逐一開始校驗該資料包是否符合規則中限定的條件。若滿足,系統就會根據每個規則定義的方法來處理該資料包;若不滿足,iptables則繼續檢查下一條規則,如果該資料包不符合鏈中的任意規則,iptables則會該鏈的預設策略去處理該資料包。

 

【四個表】

iptables的結構是由tables組成,而tables是由鏈組成,鏈又是由具體的規則組成。因此我們在編寫iptables的規則時,通過要先指定表,再指定鏈。tables的作用是區分不同功能的規則,並且儲存這些規則。

tables的型別分別有:

表名

功能

優先級

內建鏈

filter

資料包的過濾功能

4

INPUT

OUTPUT

FORWARD

nat

網絡地址轉換功能

3

PREROUTING

POSTROUTING

OUTPUT

mangle

資料包的修改功能,拆解資料包,進行修改,然後重新組裝成資料包

2

PREROUTING

OUTPUT

FORWARD

INPUT

POSTROUTING

raw

資料跟蹤

1

PREROUTING

OUTPUT

【五條鏈】

鏈,也稱為鉤子函式,它是一系列規則的一個組合,當資料包經過這些狗子函式時,她必須完全匹配每一個鉤子函式中的所有規則,方能進入下一個鉤子函式。

鉤子函式的型別分別有:

鏈型別

作用域

PREROUTING

資料包進入路由表之前

INPUT

通過路由表後目的地為本機

OUTPUT

由本機產生,向外轉發

FORWARD

通過路由表後,目的地不為本機

POSTROUTING

發送到網卡接口之前

【語法規則】

語法:iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 標的動作或跳轉]


1)常用的命令選項:

-t:指定要操縱的表(四個表);

-A:向規則鏈中添加條目;

-D:從規則鏈中刪除條目;

-i:向規則鏈中插入條目;

-R:替換規則鏈中的條目;

-L:顯示規則鏈中已有的條目;

-F:清楚規則鏈中已有的條目;

-Z:清空規則鏈中的資料包計算器和位元組計數器;

-N:創建新的用戶自定義規則鏈;

-P:定義規則鏈中的預設標的;

-h:顯示幫助信息;

-p:指定要匹配的資料包協議型別;

-s:指定要匹配的資料包源


2)常用的處理動作:

ACCEPT:允許資料包通過

DROP:直接丟棄資料包,不給任何回應信息

REJECT: 拒絕資料包通過,必要時會給資料發送端一個響應的信息。

LOG:在/var/log/messages檔案中記錄日誌然後將資料包傳遞給下一條規則

REDIRECT:  端口映射。

SNAT :源地址轉換,修改包來源IP為某IP或IP範圍,做內網和公網之間的轉換。

DNAT::標的地址轉換。 修改資料包目的地IP為某 Ip 或 IP 範圍。


3)常用的條件匹配:

1、狀態匹配:-m state –state 連接狀態

NEW:與任何連接無關的

ESTABLISHED:響應請求或已建立連接的

RELATED:與已有連接有相關性的,如FTP資料連接

2、MAC地址匹配:-m mac –mac-source MAC地址

eg:iptables -A INPUT -m mac –mac-source f0:1b:12:12:22:4f -j DROP

3、IP範圍匹配:-m iprange –src-range  IP範圍

eg:iptables -A FORWARD -p tcp -m iprange –src-range 192.168.0.1-192.168.0.10 -j ACCEPT

4、多端口匹配:-m multiport –sports 源端口串列  和  -m multiport –sports 目的端口串列

eg:iptables -A INPUT -p tcp -m multiport –dport 11,29,116,121 -j ACCEPT


4)常用的一些iptables策略:

1、拒絕轉發來自192.168.2.33主機的資料

iptables -A FORWARD -s 192.168.2.33 -j REJECT 

2、允許轉發來自192.168.2.1/99網段的資料

iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT

3、允許本機開放從TCP端口20-1024提供的應用服務。

iptables -A INPUT -p tcp –dport 20:1024 -j ACCEPT 

iptables -A OUTPUT -p tcp –sport 20:1024 -j ACCEPT

4、只允許管理員從202.13.0.0/16網段使用SSH遠程登錄防火牆主機。

iptables -A INPUT -p tcp –dport 22 -s 202.13.0.0/16 -j ACCEPT 

iptables -A INPUT -p tcp –dport 22 -j DROP

5、 允許轉發來自192.168.0.0/24局域網段的DNS解析請求資料包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp –dport 53 -j ACCEPT 

iptables -A FORWARD -d 192.168.0.0/24 -p udp –sport 53 -j ACCEPT

6、屏蔽ip 110.1.1.1的訪問

iptables -I INPUT -s 110.1.1.1 -j DROP

7、屏蔽從123.0.0.1到123.255.255.254iptables -I INPUT -s 123.0.0.0/8 -j DROP

8、屏蔽從從123.45.0.1到123.45.255.254iptables -I INPUT -s 124.45.0.0/16 -j DROP

9、屏蔽從從123.45.6.1到123.45.6.254iptables -I INPUT -s 123.45.6.0/24 -j DROP

10、允許所有本機向外的訪問iptables -A OUTPUT -j ACCEPT

11、允許訪問22端口iptables -A INPUT -p tcp –dport 22 -j ACCEPT


5)常用的iptables命令:

1、查看當前 IPTABLES 規則

service iptables status

2、 將所有iptables以序號標記顯示

iptables -L -n –line-numbers

3、 比如要刪除INPUT里序號為22的規則

iptables -D INPUT 22


●編號616,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

 

運維

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂