Iptables學習筆記

2021-09-21 12:34:54 字數 4022 閱讀 7656

前言:公司閘道器為一台linux伺服器,文中均為例項!

一、概述

1、linux的防火牆體系工作在網路層,針對tcp/ip資料報實施過濾和限制,屬於典型的包過濾防火牆。

2、種類:netfilter和iptables通常都可以用來指linux防火牆,但二者區別如下:

netfilter:指的是linux核心中實現包過濾防火牆的內部結構,不以程式或檔案的形式存在,屬於「核心態」的防火牆功能體系,使用較少。 

iptables:指的是管理linux防火牆的命令工具,程式通常位於/sbin/iptables,由使用者直接使用,屬於「使用者態」的防火牆功能體系,通常使用的就是這個。 

3、規則表(見圖1.1)

filter表:包含三個規則鏈:input、forward、output 

filter表主要用於對資料報進行過濾,根據具體的規則決定是否放行該資料報。 

filter表對應的核心模組為iptable_filter。 

nat表:包含三個規則鏈:prerouting、posrtouing、output 

nat表主要用於修改資料報的ip位址,埠號等資訊。 

nat表對應的核心模組為iptable_nat 

mangle表:包含五個規則鏈:、prerouting、postrouting、input、output、forward 

mangle表主要用於修改資料報的tos、ttl、以及為資料報設定mark標記,以實現qos調整及策略路由等應用。 

mangle表對應的核心模組為iptable_mangle 

raw表:包含兩條規則鏈:output、prerouting 

raw表是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_forward  

0 [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 ...