Linux資料包路由原理、Iptables/netfilter入門學習

來源:互聯網
上載者:User

標籤:des   style   blog   class   code   java   

相關學習資料

https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.htmlhttp://zh.wikipedia.org/wiki/Netfilterhttp://www.netfilter.org/projects/iptables/http://linux.vbird.org/linux_server/0250simple_firewall.phphttp://linux.vbird.org/linux_server/0250simple_firewall.phphttp://www.vpser.net/security/linux-iptables.html

 

目錄

1. Iptables/Netfilter原理分析2. Linux資料包路由原理3. Iptables規則編寫原則

 

1. Iptables/Netfilter原理分析

在文章的最開頭,我們首先要明確一個概念,Iptables/Netfilter到底是什麼,它們之間的關係是怎樣的。

我們可以這樣簡單地理解:

1. Netfilter是Linux作業系統核心層內部的一個資料包處理模組,它具有如下功能:    1) 網路位址轉譯(Network Address Translate)    2) 資料包內容修改    3) 以及資料包過濾的防火牆功能Netfilter平台中制定了五個資料包的掛載點(Hook Point,我們可以理解為回呼函數點,資料包到達這些位置的時候會主動調用我們的函數,使我們有機會能在資料包路由的時候有機會改變它們
的方向、內容),這5個掛載點分別是 1) PRE_ROUTING 2) INPUT 3) OUTPUT 4) FORWARD 5) POST_ROUTING2. IptablesNetfilter所設定的規則是存放在核心記憶體中的,Iptables是一個應用程式層(Ring3)的應用程式,它通過Netfilter放出的介面來對存放在核心記憶體中的Xtables(Netfilter的配置表)進行修改
(這是一個典型的Ring3和Ring0配合的架構)

Xtables

我們知道Netfilter是負責實際的資料流改變工作的核心模組,而Xtables就是它的規則設定檔,Netfilter依照Xtables的規則來運行,Iptables在應用程式層負責修改這個規則檔案。

Xtables由"表"、"鏈"、"規則rule"組成

1. Filter(表)filter表是專門過濾包的,內建三個鏈,可以毫無問題地對包進行DROP、LOG、ACCEPT和REJECT等操作     1) INPUT(鏈)    INPUT針對那些目的地是本地的包        1.1) 規則rule        ..    2) FORWARD(鏈)    FORWARD鏈過濾所有不是本地產生的並且目的地不是本地(即本機只是負責轉寄)的包        2.1) 規則rule        ..    3) OUTPUT(鏈)    OUTPUT是用來過濾所有本地產生的包        3.1) 規則rule        ..2. Nat(表)Nat表的主要用處是網路位址轉譯,即Network Address Translation,縮寫為NAT。做過NAT操作的資料包的地址就被改變了,當然這種改變是根據我們的規則進行的。屬於一個流的包(因為包的大小限制導致資料可能會被分成多個資料包)只會經過這個表一次。如果第一個包被允許做NAT或Masqueraded,那麼餘下的包都會自動地被做相同的操作。也就是說,餘下的包不會再通過這個表,一個一個的被NAT,而是自動地完成    1) PREROUTING(鏈)    PREROUTING 鏈的作用是在包剛剛到達防火牆時改變它的目的地址        1.1) 規則rule        ..    2) INPUT(鏈)        2.1) 規則rule        ..    3) OUTPUT(鏈)    OUTPUT鏈改變本地產生的包的目的地址        3.1) 規則rule        ..    4) POSTROUTING(鏈)    POSTROUTING鏈在包就要離開防火牆之前改變其源地址。        4.1) 規則rule        ..3. Mangle(表) 這個表主要用來mangle資料包。我們可以改變不同的包及包 頭的內容,比如 TTL,TOS或MARK。 注意MARK並沒有真正地改動資料包,它只是在核心空間為包設了一個標記。防火牆內的其他的規則或程式(如tc)可以使用這種標記對包進行過濾或進階路由。注意,mangle表不能做任何NAT,它只是改變資料包的TTL,TOS或MARK,而不是其源目地址。NAT必須在nat表中操作的。    1) PREROUTING(鏈)    PREROUTING在包進入防火牆之後、路由判斷之前改變 包        1.1) 規則rule        ..    2) INPUT(鏈)    INPUT在包被路由到本地之後,但在使用者空間的程式看到它之前改變包        2.1) 規則rule        ..    3) FORWARD(鏈)    FORWARD在最初的路由判斷之後、最後一次更改包的目的之前mangle包        3.1) 規則rule        ..    4) OUTPUT(鏈)    OUTPUT在確定包的目的之前更改資料包        4.1) 規則rule        ..    5) POSTROUTING(鏈)    POSTROUTING是在所有路由判斷之後        5.1) 規則rule        ..

Netfilter的Hook點

Netfilter的架構就是在整個網路流程的若干位置放置了一些檢測點(HOOK)(或者說是回呼函數),而在每個檢測點上登記(callback)了一些處理函數進行處理(如包過濾,NAT等,甚至可以是 使用者自訂的功能)

1. NF_IP_PRE_ROUTING:剛剛通過資料連結層解包,進入網路層的資料包通過此點(剛剛進行完版本號碼,校正和等檢測),目的地址轉換在此點進行2. NF_IP_LOCAL_IN經路由尋找後,送往原生通過此檢查點,INPUT包過濾在此點進行3. NF_IP_FORWARD要轉寄的包通過此檢測點,FORWARD包過濾在此點進行4. NF_IP_POST_ROUTING所有馬上便要通過網路裝置出去的包通過此檢測點,內建的源地址轉換功能(包括地址偽裝)在此點進行5. NF_IP_LOCAL_OUT本機進程發出的包通過此檢測點,OUTPUT包過濾在此點進行

可以看到:

Iptables/Netfilter的工作是針對網路的資料包進行修改的,所以,Iptables/Netfilter在某種程度上可以算是一種網路層的路由器/防火牆

我們可以看到,通過"5個代表不同階段的Hook點"、"表、鏈、規則"這種"松耦合"、"規則型"的結構,我們作為管理員可以獲得最大程度的控制靈活性、可以有非常巨大的想象空間

Netfilter是由Rusty Russell提出的Linux 2.4核心防火牆架構,該架構既簡潔又靈活,可實現安全性原則應用中的許多功能,如資料包過濾、資料包處理、地址偽裝、透明代理、動態網路位址轉譯(Network Address Translation,NAT),以及基於使用者及媒體存取控制(Media Access Control,MAC)地址的過濾和基於狀態的過濾、包速率限制等
Iptables/Netfilter的這些規則可以通過靈活組合,形成非常多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想

 

2. Linux資料包路由原理

我們已經知道了Netfilter和Iptables的架構和作用,並且學習了控制Netfilter行為的Xtables表的結構,那麼這個Xtables表是怎麼在核心協議棧的資料包路由中起作用的呢?

網口資料包由底層的網卡NIC接收,通過資料連結層的解包之後(去除資料鏈路幀頭),就進入了"TCP/IP協議棧(本質就是一個處理網路資料包的核心驅動)和Netfilter混合"的"資料包處理流程"中了。

資料包的接收、處理、轉寄流程構成一個有限狀態向量機,經過一些列的核心處理函數、以及Netfilter Hook點,最後被轉寄、或者本次上層的應用程式消化掉

從這張圖中,我們可以總結出以下規律:

1. 當一個資料包進入網卡時,資料包首先進入PREROUTING鏈,在PREROUTING鏈中我們有機會修改資料包的DestIP(目的IP),然後核心的"路由模組"根據"資料包目的IP"以及"核心中的路由表"判斷是否需要轉送出去(注意,這個時候資料包的DestIP有可能已經被我們修改過了)2. 如果資料包就是進入原生(即資料包的目的IP是原生網口IP),資料包就會沿著圖向下移動,到達INPUT鏈。資料包到達INPUT鏈後,任何進程都會收到它3. 本機上啟動並執行程式也可以發送資料包,這些資料包經過OUTPUT鏈,然後到達POSTROTING鏈輸出(注意,這個時候資料包的SrcIP有可能已經被我們修改過了)4. 如果資料包是要轉寄出去的(即目的IP地址不再當前子網中),且核心允許轉寄,資料包就會向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出(選擇對應子網的網口發送出去)

我們在寫Iptables規則的時候,要時刻牢記這張路由次序圖,根據所在Hook點的不同,靈活配置規則

 

3. Iptables規則編寫原則

我們前面說過,使用Iptables是一個非常靈活的過程,我們在寫規則的時候,一定要時刻牢記上面的這張"資料包路由圖",明白在5個Hook點,3種"表"分別所處的位置,以及結合在這個5個Hook點可以實現的功能,來理解規則。理解規則的原理比強記規則本身效果要好得多

0x1: 提出需求

在正式編寫Iptables規則之前,我們一定是有一個實現某個功能、目的的需求,我們必須先將它整理出來,為下一步抽象化作準備,這裡我以我項目中的需求為例,大家在自己的實驗中可以舉一反三

1. 網口at0(10.0.0.1)是一個偽AP的網口,勘探端串連到偽AP網口at0之後會發起DHCPDISCOVER過程,監聽在at0上的DHCPD會進行回應,為用戶端分配10.0.0.100的IP地址,並設定客戶
端的預設閘道為10.0.0.1(即at0的IP地址)、預設DNS伺服器為10.0.0.1(即at0的IP地址)2. 需要將網口at0(10.0.0.1)的入口流量牽引到真正串連外網的網卡介面eth0(192.168.159.254)上,做一個NAT服務3. 對網口at0(10.0.0.1)的DHCP流量(目的連接埠67的廣播資料包)予以允許存取,因為我們需要在偽AP所在的伺服器上假設DHCP伺服器4. 對網口at0(10.0.0.1)的DNS流量(目的連接埠53)予以允許存取,因為我們需要在偽AP所在的伺服器上假設DNS伺服器

0x2: 逐步抽象化我們的需求

我們根據我們的需求進行抽象化,即用規則來抽象化描述我們的目的,在編寫的過程中要注意不同的Hook點所能做的修改是不同的

//開啟Linux路由轉寄開關,由於本機對資料包進行轉寄echo "1" > /proc/sys/net/ipv4/ip_forward//將用戶端的HTTP流量進行NAT,改變資料包的SrcIP,注意,是在POSTROUTING(資料包即將發送出去之前進行修改)iptables -t nat -A POSTROUTING -p tcp -s 10.0.0.0/24 --dport 80 -j SNAT --to-source 192.168.159.254//將遠程WEB伺服器返回來的HTTP流量進行NAT,回引回用戶端,注意,是在PREROUTING(資料包剛進入協議棧之後馬上就修改)iptables -t nat -A PREROUTING -p tcp -d 192.168.159.254 -j DNAT --to 10.0.0.100

我們在DHCP伺服器中指定用戶端的預設DNS伺服器是10.0.0.1(本機),即偽DNS,但我目前還沒有在本機架設DNS,所以目前還需要將53號連接埠的DNS資料包NAT出去,牽引到Google的DNS: 8.8.8.8上去

iptables -t nat -A PREROUTING -p udp -s 10.0.0.0/24 --dport 53 -j DNAT --to 8.8.8.8iptables -t nat -A POSTROUTING -p udp -s 10.0.0.0/24 --dport 53 -j SNAT --to-source 192.168.159.254iptables -t nat -A PREROUTING -p udp -d 192.168.159.254 --sport 53 -j DNAT --to 10.0.0.100iptables -t nat -A POSTROUTING -p udp -s 8.8.8.8 --sport 53 -j SNAT --to-source 10.0.0.1

 

 

 

Copyright (c) 2014 LittleHann All rights reserved

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.