1. 程式人生 > >IPTABLES學習筆記

IPTABLES學習筆記

iptables

學習的視頻:http://edu.51cto.com/course/12914.html


IPTABLES LINUX防火墻

引言:
iptables作為一款老牌的Linux防火墻,給Linux系統提供了基於內核的安全防護機制。
優點:系統自帶,無需安裝,工作在OS底層(內核)從理論上說安全性更高;
缺點:學習難度高,配置項含義比較抽象,需要先搞清楚來龍去脈才能開始實際操作;

  • 防火墻的概念是什麽
  • iptables是什麽?做什麽用?
  • iptables過濾型防火墻和win的對比
  • iptables4個表(tables)代表什麽意思
  • iptables5個鏈(chain)代表什麽意思
  • iptables鏈和內核功能塊的關系
  • 通過數據包走向 分上下路 學習內核五個鏈的具體的功能以深入理解“五鏈”
  • PREROUTING上路判定(離開內核)學習 ->filter功能
  • PREROUTING下路判定(內核保留)學習 ->nat功能

防火墻的概念是什麽

防火墻說白了其實是一種隔離技術,就是把從外面進來的訪問按照事先定義好的一套規則進行過濾,合格的允許通過,不合格的就直接丟棄。
防火墻有硬件的、有軟件的,有應用層的、有底層的。

iptables是什麽?做什麽用?

iptables其實是經過幾個階段發展而來的,ipfirewall > ipchains > iptables;

iptables在Linux系統中身份比較特殊

第一:表面上iptables是一個命令,也是一個服務;
iptables -h 查看使用手冊
chkconfig --list | grep iptables
service iptables start/stop
然而使用ps或top命令是看不到iptables服務或進程的
為什麽會出現這種現象呢?
因為iptables防火墻其實是系統內核的一部分,真正幹活的實際上是內核當中一個叫做Netfilter的功能框架,也就是Linux內核利用其自身對於網絡數據包的流向判斷來間接起到防火墻的功能。
iptables只是作為方便我們用戶隨時控制內核中Netfilter功能的一個平臺,可以理解為是一個“bash”。

iptables過濾型防火墻和win的對比

iptables -A input -s 172.16.0.0/16 -j DROP
iptables -L 查看規則
iptables -A input -s 192.168.0.0/16 -j ACCEPT
兩個很簡單的入門級設置

iptables4個表(tables)代表什麽意思

“過濾型”防火墻是用得比較多的
過濾型防火墻規則,在iptables當中,實際上對應的是iptables當中的一個“表”,也就是filter表;
iptables中有4種標準化預定義的表:
filter/nat/mangle/raw
filter table主要是起到過濾的作用,根據一定的規則,把即將發送到OS的請求或者是即將發送出OS的請求(或者是轉發的請求)預先做一個判斷,根據判斷結果,決定是否放行。這個是防火墻最基礎也是使用頻率最高的用法。
filter為默認表,-t table 常省略。
nat table network address translation 網絡地址轉換,是一種對數據包的特殊處理,主要的目的是把發送過來的請求,更改其原始的目的地址/端口或者更改其來源地址,達到數據轉發的目的。
很多架構的應用,也是基於這種原理實現的,比如:反向代理,負載均衡等等。
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --192.168.102.37:22

iptables5個鏈(chain)代表什麽意思

表在防火墻中是一個邏輯的大分類,在種類定下來後,才是真正開始定制規則了,在Linux當中,真正定義和實現防火墻功能的是五個鏈,可以理解為鏈是附屬於每個表下面的。
定義防火墻規則,先按實現的功能不同,定義出不同的表,再在表下添加鏈,再加上對鏈的修飾,就最終組成了防火墻規則。
表+鏈+鏈修飾(規則)=一條防火墻規則

iptables一共有5種鏈,這5種鏈實際上對應著一個數據包的每個步驟:
PREROUTING:數據包進入路由表之前
INPUT:通過路由表後目的地為本機
FORWARDING:通過路由表後,目的地不為本機
OUTPUT:由本機產生,向外轉發
POSTROOUTING:發送到網卡接口之前

iptables鏈和內核功能塊的關系

                                              用戶空間
                                    input          output
            請求  >  prerouting     內核空間         postrouting      出去
                                                forward

數據包剛剛到達時,不會立刻進入用戶空間,必須先經過內核的篩選,才會進入(不管你是否設定iptables)。
重點:

  • 內核有FORWARD路由功能, ip v4 forward=1;
  • 內核還有針對路由功能的防火墻鏈,FORWARD鏈;
    這是兩個概念,還是兩個是直接相關的概念,
    5個鏈有好幾層含義:
  • 命令行中,可以定義配置這5個鏈
  • 對應內核中Netfilter框架的5個功能塊
  • 這5個功能塊,對應的是內核代碼中的5個鉤子函數

最重要的一個核心理念:
誤區:認為iptables本身是一個服務,把這個服務起來,防火墻就起來了。
執行service iptables stop命令時,只是改變了表下所有鏈的規則都設置成允許罷了,就跟沒有防火墻一樣了,但是內核的防火墻功能塊始終都存在,你永遠不可能關閉的。

通過數據包走向 分上下路 學習內核五個鏈的具體的功能以深入理解“五鏈”

第一個要經過的是內核中的PREROUTING鏈
可以拆為 PRE ROUTING 路由前
該鏈對數據包的判斷,只會有2中結果:1.不需要經過路由轉發2.需要路由轉發;簡單的說就是1.發給我本機的,2.發給別的地方的。
PREROUTING鏈作為第一道關卡,它檢查數據包的機制就是判斷數據包的目的地址、端口。

既然一個數據包都已經被我這臺機器收到了,那它的原本的目的地址一定是我這臺機器啊,怎麽可能還會是發給別的地址呢?其實這就要說到PREROUTING鏈的功能的本質了,PREROUTING鏈和POSTROUTING這兩個鏈其最終的目的,都是用來修改數據包的地址和端口的(在匹配上了規則之後)
PREROUTING鏈負責修改目的地址和端口
POSTROUTING鏈負責修改來源地址和端口
數據包到達第一個PREROUTING鏈時,PREROUTING鏈會根據它下面的事先定義好的規則(修飾)先來判斷,這個數據包是否要被我修改目的地址和端口。
例子:
iptables -t nat -A PREROUTING -s 172.16.0.0/8 -d 192.168.56.102 -p tcp -j DNAT --to-destination 192.168.56.103
如果符合了上面的規則,則目標地址會被修改
如果不符合上面的規則,則目標地址不會被修改
如果發現這個數據包並不符合任何鏈下面的規則的話,這個包的目的地址和端口都不會被修改
那麽這種情況下數據包就會被PREROUTING鏈判定為這個數據包不需要被修改,這個一個進入主機的數據包,相反的,這個數據包符合其中一條PREROUTING鏈的規則,就會判定這個數據包需要被修改,並且這是個要遞交給路由的數據包。看是走“上路”進入input還是“下路”進入forward。

PREROUTING最終判定上路(離開內核)學習 ->filter功能

進入用戶空間,INPUT鏈,是一個內核空間和用戶空間的關卡,就是最常配置的鏈了。防住任何對用戶空間有害的請求。
走“上路”實際上就是過濾型的防火墻;
filter表可以配置的鏈有3個:input, output, forward。

PREROUTING最終判定下路(內核保留)學習 ->nat功能

走”上路”的有個特殊的,比如port修改了IP不變,IP是本機的IP,這個雖然是修改port的,但還是走“上路”。
重要知識點:
數據包提交給FORWARD鏈,FORWARD鏈判斷後提交給路由表,但提交給路由表不一定執行所謂的路由功能,要取決於目的地址在路由表的判定,有可能直連,有可能路由,有可能丟棄。
完整的“下路”數據包流程:
PREROUTING鏈->FORWARD鏈->路由表->路由功能判定->POSTROUTING鏈->下一層網絡目的地。

IPTABLES學習筆記