2021-05-12 14:32:11
Linux防火牆iptables詳解
1 Linux防火牆概述
Linux防火牆實際指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux核心整合的IP資訊包過濾系統。
檢視Linux核心版本
Netfilter/Iptables 資訊包過濾系統可以當成一個整體,netfilter是核心的模組實現,iptables是對上層操作工具。
Netfilter是Linux核心中的一個通用架構,工作於核心空間。
Netfilter支援一下方式對封包進行分類:
- 源IP地址
- 目標IP地址
- 使用介面
- 使用協定
- 埠號
- 連線狀態
其提供了一系列的表(tables),每個表由若干個鏈(chains)組成,每條鏈可以由一條或若干條規則(rules)組成,其規則由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。
chain的本質是Netfilter定義的不同過濾點。總共定義了5個過濾點。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。
Table的本質是Netfilter定義的不同功能的劃分。
filter用於執行基本過濾。
nat是對資料IP進行修改。
mangle是對封包進行高階修改。
不同的Table只能用於特定的Chain。
Iptables 是一個管理核心包過濾的工具,可以用來設定核心包過濾表格中的規則。執行於使用者空間。
更多iptables相關教學見以下內容:
CentOS 7.0關閉預設防火牆啟用iptables防火牆 http://www.linuxidc.com/Linux/2015-05/117473.htm
Iptables工作原理使用詳解 http://www.linuxidc.com/Linux/2016-09/134945.htm
iptables使用範例詳解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux防火牆iptables詳細教學 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables的備份、恢復及防火牆指令碼的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux下iptables防火牆設定 http://www.linuxidc.com/Linux/2015-10/123843.htm
1.1 Linux防火牆的應用
Linux防火牆在企業應用中非常有用,舉例如下:
- 中小企業與網咖裡有iptables作為企業的NAT路由器,可以用來代替傳統路由器,而節約成本。
- IDC機房一般沒有硬體防火牆,IDC機房的伺服器可以用Linux防火牆代替硬體防火牆。
- iptables可以結合squid作為企業內部上網的透明代理。傳統代理需要在瀏覽器裡設定代理伺服器資訊,而iptables+squid的透明代理則可以把用戶端的請求重定向到代理伺服器的埠。用戶端不要作任何設定,而感覺不到代理的存在。
- 將iptables作為企業NAT路由器時,可以使用iptables的擴充套件模組遮蔽P2P流量,還可以禁止非法網頁。
- iptables可以用於外網IP向內網IP對映。
- iptables可以輕鬆防止輕量級DOS攻擊,比如ping攻擊及SYN洪水攻擊。
綜述,Iptables有兩種應用模式:主機防火牆,NAT路由器。
1.2 iptables的基本元件
1.2.1 規則
規則(rules)是管理員預定義的條件,規則一般的定義為“如果封包頭符合這樣的條件,就這樣處理這個封包”。規則儲存在核心空間的資訊包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協定(如TCP、UDP、ICMP)和服務型別(如HTTP、FTP和SMTP)等。當封包與規則匹配時,iptables就根據規則所定義的方法來處理這些封包,如放行(accept)、拒絕(reject)和丟棄(drop)等。設定防火牆的主要工作就是新增、修改和刪除這些規則。
1.2.2 鏈
鏈(chains)是封包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個封包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該封包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該封包;否則iptables將繼續檢查下一條規則,如果該封包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的預設策略來處理封包。
每個鏈上都有預設的規則。
- PREROUTING:封包進入本機,進入路由器之前。可以用於目標地址轉換(DNAT)。
- INPUT:通過路由表後目的地為本機。
- FORWARDING:通過路由表後,目的地不為本機。可以用於轉發資料。
- OUTPUT:由本機產生,向外轉發。
- POSTROUTIONG:通過路由表後,傳送到網絡卡介面之前。可以用於轉發資料(SNAT,MASQUERADE)
1.2.3 表
表(tables)提供特定的功能,iptables有4個表,即raw表、filter表、nat表和mangle表,分別用於實現包過濾,網路地址轉換和包重構的功能。表中的規則寫在鏈上。
filter表
主要用於資料包文過濾。該錶根據系統管理員預定義的一組規則過濾符合條件的封包。對於防火牆而言,主要利用在filter表中指定的規則來實現對封包的過濾。filter表是預設的表,如果沒有指定哪個表,iptables 就預設使用filter表來執行所有命令,filter表包含了INPUT鏈,RORWARD鏈,OUTPUT鏈。在filter表中只能允許對封包進行接受,丟棄的操作,而無法對封包進行更改。
nat表
主要用於網路地址轉換NAT,該錶可以實現一對一,一對多,多對多等NAT工作(SNAT,DNAT,PNAT),iptables就是使用該表實現共用上網的,NAT表包含了PREROUTING鏈,POSTROUTING鏈,OUTPUT鏈。
nat規則表擁有 prerouting 和 postrouting 兩個規則鏈,主要功能為進行一對一、一對多、多對多等網址轉換工作(SNAT,DNAT),由於轉換的特性,需進行目的地網址轉換的封包,就不需要進行來源網址轉換,反之亦然,因此為了提升改寫封包的效率,在防火牆運作時,每個封包只會經過這個規則表一次。如果我們把封包過濾的規則定義在這個資料表裡,將會造成無法對同一包進行多次比對,因此這個規則表除了作網址轉換外,請不要做其它用途。
mangle表
主要用作功能修改資料包文的屬性。比如TCP報文的6個標誌位。在核心版本2.4.18 後的linux版本中該表包含的鏈為:INPUT鏈(處理進入的封包),RORWARD鏈(處理轉發的封包),OUTPUT鏈(處理本地生成的封包)POSTROUTING鏈(修改即將出去的封包),PREROUTING鏈(修改即將到來的封包)
mangle表主要用於對指定封包進行更改,在核心版本2.4.18 後的linux版本中該表包含的鏈為:INPUT鏈(處理進入的封包),RORWARD鏈(處理轉發的封包),OUTPUT鏈(處理本地生成的封包)POSTROUTING鏈(修改即將出去的封包),PREROUTING鏈(修改即將到來的封包)。
raw表
只使用在PREROUTING鏈和OUTPUT鏈上,優先順序最高,可以對收到的封包在連線跟蹤前進行處理。一但使用者使用了RAW表,在某個鏈上RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即不再做地址轉換和封包的連結跟蹤處理了。
規則表之間的優先順序:
raw > mangle > nat > filter
1.3 Linux防火牆基本原理
Linux防火牆的原理主要是對封包的控制,看下圖(以下圖片均來自網際網路):netfilter五條鏈相互關係,即iptables封包轉發流程圖。
(1)封包進入網絡卡時,先進入PREROUTING(路由前)鏈,之後做路由判斷封包應發往何處,本機或其他機器。
(2)若封包原目標地址是本機的,封包會前往INPUT鏈。到達INPUT鏈後,任何進程都會收到它。
(3)本機程式傳送出封包,封包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
(4)若封包原目標地址非本機,則需要轉發出去的,且核心允許轉發,封包前往 FORWARD鏈,然後到達POSTROUTING(路由後)鏈輸出。
Netfilter在五個鏈上,使用HOOK技術做規則檢查。
1.4 iptables規則執行
iptables執行規則時,是從規則表中從上至下順序執行的。
若沒遇到匹配的規則,就一條一條往下匹配;
若完全沒有匹配的規則,則執行該鏈上的預設規則;
若遇到匹配的規則,則執行規則,執行後根據本規則的動作(accept,reject,log,drop等),決定下一步執行的情況,後續執行一般有三種情況:
- 繼續執行當前規則佇列內的下一條規則。比如執行過Filter佇列內的LOG後,還會執行Filter佇列內的下一條規則。
- 中止當前規則佇列的執行,轉到下一條規則佇列。比如從執行過accept後就中斷Filter佇列內其它規則,跳到nat佇列規則去執行。
- 中止所有規則佇列的執行。
透過這種機制所帶來的好處是,可以進行複雜、多重的封包過濾,簡單的說,iptables可以進行縱橫交錯式的過濾(tables)而非鏈狀過濾(chains)。
1.5 封包的狀態
包的狀態依據IP所包含的協定不同而不同,但在核心外部,也就是使用者空間裡,只有4種 狀態:NEW,ESTABLISHED,RELATED 和INVALID。它們主要是和狀態匹配一起使用。
封包在使用者空間的狀態:
- NEW:表示資訊包已經或將啟動新的連線,或者它與尚未用於傳送和接收資訊包的連線相關聯。若主機向遠端機器傳送一個連線請求,這個封包的狀態是NEW。
- ESTABLISHED:狀態指出該資訊包屬於已建立的連線,該連線一直用於傳送和接收資訊包並且完全有效。在連線建立之後(完成TCP的三次握手之後),遠端主機和主機通訊資料狀態為ESTABLISHED。
- RELATED:和現有聯機相關的新聯機封包。像FTP這樣的服務,用21埠傳送命令,而用20埠(port模式)或其他埠(PASV模式)傳送資料。在已有的21埠上建立好連線後傳送命令,用20或其他埠傳送的資料(FTP-DATA),其狀態是RELATED。
- INVALID:狀態指出該資訊包與任何已知的流或連線都不相關聯,它可能包含錯誤的資料或頭。即無效的封包,不能被識別屬於哪個連線或沒有任何狀態,通常這種狀態的封包會被丟棄。
這些狀態可以一起使用,以便匹配封包。這可以使防火牆非常強壯和有效。
2 iptables實戰概述
iptables的實驗請盡量在虛擬機器或非遠端的系統中操作,避免不小心的誤操作可能導致ssh無法使用。
一般來講,iptables防火牆已經內建於CentOS 6及其他Linux版本中,而且iptables服務預設都是啟動的。 iptables應用於IPv4, 如果要用IPv6,需要使用ip6tables。
iptables和ip6_tables、arp_tables一同都是建構在Xtables的架構下,這個方案讓系統管理員定義“表(tables)”、“鏈(chain)”、“規則(rules)”三個資料來處理封包的運送。每一個“表”都和不同的封包處理有關、決定封包是否可以穿越的是“鏈”、而一條“規則”在鍵裡面則可以決定是否送往下一條鏈(或其它的動作),這個處理可以在巢狀的結構裡面重複使用。每一個網路封包從抵達到離開該計算機至少會經過一個鏈(亦即轉送或本機路由)。
檢視有沒有安裝iptables:rpm -qa | grep iptables
若機器上安裝了man命令。則使用man iptables檢視iptables的幫助文件。
2.1 iptables服務相關
2.1.1 開啟iptables服務
service iptables start
#或
/etc/init.d/iptables start
2.1.2 關閉iptables服務
service iptables stop
#或
/etc/init.d/iptables stop
2.1.3 設定iptables開機時預設啟動
#啟動時開啟
chkconfig iptables on
#啟動時關閉
chkconfig iptables off
2.1.4 使用setup設定防火牆
在終端執行 setup,選擇 firewall 回車。
按Tab鍵切換到Enablede項,然後按空格鍵選擇。然後再按Tab鍵切換到OK,按空格鍵或確認鍵選擇。按Tab鍵切換到quit,退出setup。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-12/138474p2.htm
相關文章