前言:公司閘道器為一台linux伺服器,文中均為例項!
一、概述
1、linux的防火牆體系工作在網路層,針對tcp/ip資料報實施過濾和限制,屬於典型的包過濾防火牆。
2、種類:netfilter和iptables通常都可以用來指linux防火牆,但二者區別如下:
netfilter:指的是linux核心中實現包過濾防火牆的內部結構,不以程式或檔案的形式存在,屬於「核心態」的防火牆功能體系,使用較少。iptables:指的是管理linux防火牆的命令工具,程式通常位於/sbin/iptables,由使用者直接使用,屬於「使用者態」的防火牆功能體系,通常使用的就是這個。
3、規則表(見圖1.1)
filter表:包含三個規則鏈:input、forward、outputfilter表主要用於對資料報進行過濾,根據具體的規則決定是否放行該資料報。
filter表對應的核心模組為iptable_filter。
nat表:包含三個規則鏈:prerouting、posrtouing、outputnat表主要用於修改資料報的ip位址,埠號等資訊。
nat表對應的核心模組為iptable_nat
mangle表:包含五個規則鏈:、prerouting、postrouting、input、output、forwardmangle表主要用於修改資料報的tos、ttl、以及為資料報設定mark標記,以實現qos調整及策略路由等應用。
mangle表對應的核心模組為iptable_mangle
raw表:包含兩條規則鏈:output、preroutingraw表是iptables新增加的表,主要用於決定資料報是否被狀態跟蹤機制處理。
raw表對應的核心模組為iptable_raw
4、規則鏈
input鏈:當接收到訪問防火牆本機位址的資料報(入站)時,應用此鏈中的規則。output鏈:當防火牆向外傳送資料報(出站)時,應用此鏈中的規則。
forward鏈:當接受到需要通過防火牆傳送給其他位址的資料報**發)時,應用此鏈結中的規則。
prerouting鏈:在對資料報作路由現在之前,應用此鏈中的規則。
postrouting鏈:在對資料報作路由選擇之後,應用此鏈中的規則。
注:其中input、output鏈更多應用在訪問本機的進出資料的安全控制中,而forward、prerouting、postrouing更多應用在當使用linux做閘道器的時候。
二、工作原理
首先我們需要了解當使用iptables作閘道器時,資料報的主要途徑。
iptables的大體結構如下圖1.2所示,這個圖是資料報流經iptables的路徑圖。
假如資料報a流經這個閘道器,首先進入prerouting鏈,順序匹配這裡的規則(包括預設規則);從這裡開始需要分支:
如果這個資料報a是發給localhost本機的(也就是閘道器本身),那麼資料報a的下一站是input鏈,同樣順序匹配這裡的規則(包括預設規則),然後進去localhost本地程序進行處理這個資料報a;
處理完成後需要回應資料報a,localhost發出的資料報b第一站是output,然後進入postrouting,
從而離開閘道器伺服器。
如果這個資料報a不是發給loc alhost,那麼資料報a的下一站是forward,順序匹配這裡的規則;然後資料報a的下一站是postrouting,從而資料報a離開閘道器伺服器;
在這個過程中,資料報a每次經過乙個鏈,都會順序匹配這個鏈的規則,所以資料在每乙個鏈中都有可能被丟掉。
三、管理設定iptables
1、基本語法
iptables [-t 表命] 命令選項 [鏈名] [匹配條件] [-j 動作]表名、鏈名用於指定iptables命令所操作的表和鏈,沒有指定的話,預設使用filter表;
命令選項用於指定管理iptables規則的方式,比如插入,刪除,增加,檢視;
條件匹配用於指定對符合什麼樣條件的資料報進行處理;
動作指的就是對資料報的動作,如**、丟棄、拒絕。
2、命令選項
-a 在指定鏈的末尾新增一條新的規則-d 刪除指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則
-i 在指定鏈中插入一條新的規則,若未指定插入位置,則預設在鏈的開頭插入
-r 修改、替換指定鏈中的某一條規則,按規則序號或內容確定要替換的規則
-l 列出指定鏈中所有的規則進行檢視,未指定鏈名,則列出表中所有的鏈
-f 清空指定鏈中的的所有規則,未指定鏈名,則清空表中所有鏈的規則
-n 新建一條使用者自己定義的規則鏈
-x 刪除指定表中使用者自定義的規則鏈
-p 設定指定鏈的預設策略
-n 使用數字形式顯示輸出結果
-v 檢視規則烈表示顯示詳細的資訊
-v 檢視iptables命令工具的版本資訊
-h 檢視命令幫助資訊
四、閘道器例項
1、如下圖1.3,client-a的ip位址為192.168.150.10/24,閘道器為192.168.150.254和client-b址為 192.168.150.254/24,閘道器gw的第二塊網絡卡eth1的ip位址為192.168.20.254/24, client-a需要通過閘道器gw訪問client-b,做法如下:
開啟linux系統的路由**開關
[root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward0 [root@extmail ~]# echo 1 >
/proc/sys/net/ipv4/ip_forward
[root@extmail ~]# cat /proc/sys/net/ipv4/ip_forward
1 [root@extmail ~]#sysctl -p
我們在client-a上測試一下,如下圖1.4所示,
然後我們在client-b上進行抓包看看,如下圖1.5
通過ping和抓包證明,只要在閘道器上開啟路由**之後,兩個不同網段就可以相互通訊了。
2、當linux作為閘道器的時候,nat也是較常用到的,例項如下:
現在公司網路大部分都是通過nat上網的,所謂nat,簡單來講就是將私網位址轉換成公網位址,從而使使用者能夠訪問internet,大大節省了公網ip。
測試:環境如圖1.3相同,我們把client-a所有出去的包的源位址都轉換成閘道器的外網位址,也就是192.168.20.254,在閘道器上執行如下命令:
[root@extmail ~]# iptables -t nat -a postrouting -s 192.168.150.0/24 -j snat --to \192.168.20.254檢視下iptables的狀態如圖1.6
iptables 閘道器上設定之後,我們在用client-a ping client-b ,網路依舊是暢通的圖1.7
並且我們在client-b上抓包,如圖1.8
儘管client-a(192.168.150.10)一直在ping client-b ,但是我們在client-b上並沒有抓到任何client-a的資料報。
我們抓下client-b上icmp的資料報如圖1.9
我們看到所有的ping的資料報都是來自192.168.20.254了,這就是nat,準確的說是snat,實現了對源位址的轉換,對外只是乙個ip,既保護了內網,又節約了ip。
五、結論
使用linux結合iptables作為閘道器時,實際上就相當於一台單臂路由器,把各個網路節點打通,在根據不同的需求寫入不同的策略,既方便又安全。
iptables學習筆記
一 三個表 1 filter 1 input 2 output 3 forward 2 nat 1 prerouting 2 postrouting 3 output 3 mangle 二 iptables 語法 iptables ai 鏈 input output forward log io 網...
iptables學習筆記 表
iptables中包含三種表項 1 filter表 iptables最基本的表項,用於進行包過濾 2 nat表 用於源位址和目的位址以及源埠目的埠的轉換 3 mangle表 用於設定路由標誌,以便被後面的filter表進行檢查匹配 filter表 包含如下規則鏈 input output forwa...
linux學習筆記 iptables命令
iptables命令是linux上常用的防火牆軟體,是netfilter專案的一部分。可以直接配置,也可以通過許多前端和圖形介面配置 語法 iptables 選項 引數 選項 t 表 指定要操縱的表 a 向規則鏈中新增條目 d 從規則鏈中刪除條目 i 向規則鏈中插入條目 r 替換規則鏈中的條目 l ...