iptables介紹


1  iptables介紹

iptables的文章很多,作者的寫法也都不一樣,下面的內容從好幾篇文章總結而來

1.1  用途

iptables是Linux下的防火牆軟件,用於實現Linux下的網絡訪問控制,即針對網絡包(packet)進行檢測、轉發、丟棄、修改、流控等控制。

 

1.2  工作層次

主要在L2、L3、L4層。

 

1.3  工作空間

規則配置在用戶空間(由/sbin/iptables配置,iptables規則信息在/etc/sysconfig/iptables)

規則執行在內核空間(由內核模塊netfilter執行)

 

1.4  iptables的主要功能

包過濾(packet filtering)

連接跟蹤(connection track)

網絡地址轉換(NAT)

重整包頭(Mangling packet header fields)

 

2 iptables的工作模型

2.1  參考資料

iptables的權威資料是“man iptables”。

學習iptables最重要的是理解iptables的工作原理,下文旨在總體上把握iptables的工作模型,然后給出部分典型應用,對具體參數的用法不作過多闡述。實際應用中,用到哪一部分再去仔細閱讀權威資料的相關部分,然后去實踐調試,即可達到目的。

 

2.2   命令模型

注:該表較寬,切換到WEB版式視圖查看。

 

命令

控制點

匹配條件

執行動作

 

表(控制類型)

鏈(控制點)

規則號

通用匹配

擴展匹配

     
               

--sport P1[-P2]

     
   

-L

[chain] -n -x

     

tcp

--dport P1[-P2]

     
   

-S

[chain] -v

       

--tcp-flags SYN,ACK,FIN,RST

 

REDIRECT

 
   

-F

[chain]

       

--syn

 

RETURN

 
   

-Z

[chain][n]]

     

udp

--sport P1[-P2]

 

MARK

 
   

-P

chain target

 

-S IP/net

   

--dport P1[-P2]

 

LOG

--log-prefix

 

[-t filter]

-A

INPUT

 

-d IP/net

 

icmp

--icmp-type {8|0}

 

ACCEPT

 

iptables

-t nat

-I

OUTPUT

rulenum

-p {tcp|udp|icmp}

-m

multiports

--dports PORT[,PORT,...]

-j

DROP

 
 

-t mangle

-R

FORWARD

 

-i if -o of

   

--ports PORT[,PORT,...]

 

REJECT

 
 

-t raw

-X

PREROUTING

     

iprange

--src-range IP1-IP2

 

自定義鏈

 
     

POSTROUTING

       

--dst-range IP1-IP2

 

SNAT

--to-source

   

-D

chain rulenum

     

string

--string STR --algo {kmp|bm}

 

DNAT

--to-destination

   

-N

自定義鏈

       

--hex-string

 

MASQUERADE

--to-port

   

-E

舊名 新名

     

connlimit

--conlimit-above [n]

 

TPROXY

--on-port

             

limit

--limit rate --limit-burst b

     
             

state

--state NEW,ESTABLISHED,RELATED

     

-m :擴展匹配, 擴展匹配的模塊見2.5介紹

如: 匹配tcp目的端口123: -p tcp -m tcp --dport 123,  當有通用匹配參數-p {tcp|udp|icmp}時,可不加“-m {tcp|udp|icmp}”,即:-p tcp -m tcp --dport 123 ==> -p tcp --dport 123

理解iptables對包的控制,就要掌握控制的三個要素:

1、在哪里?——控制點,對應table+chain+rule

2、對哪些?——匹配條件,對應match

3、怎么做?——執行動作,對應target

 

2.3  表和鏈(控制點)

包在表和鏈中的流轉圖,如下圖所示。

      image.png                                       

 

5種鏈:PREROUTING、INPUT、OUTPUT、FORWAD、POSTROUTING

4種表:優先級raw > mangle > nat > filter

 

【請求-響應流程】

如本機收到一個HTTP請求,然后發送一個HTTP響應,根據流轉圖可知流程為:

  raw.PREROUTING -> mangle.PREROUTING -> nat.PREROUTING

-> mangle.INPUT -> filter.INPUT

-> raw.OUTPUT -> mangle.OUTPUT -> nat.OUTPUT -> filter.OUTPUT

-> mangle.POSTROUTING -> nat.POSTROUTING

 

【轉發流程】

如本機作為代理/路由器來轉發包,根據流轉圖可知流程為:

  raw.PREROUTING -> mangle.PREROUTING -> nat.PREROUTING

-> mangle.FORWARD -> filter.FORWARD

-> mangle.POSTROUTING -> nat.POSTROUTING

 

【如何理解表和鏈】

1、“table”、“chain”的命名讓人有些費解,理解時可先不管其原本含義。

2、參照上圖來理解表和鏈代表的控制點。

3、鏈對應包的流轉階段:如PREROUTING指從網卡進入系統的最開始階段。

4、表對應包的控制/操作類型:

操作

raw

不進行連接跟蹤(conntrack),常-j NOTRACK

mangle

修改包頭字段

nat

NAT轉換

filter

允許或禁止

 

2.4  規則rule與策略 policy(鏈尾動作)

設定規則時,要指定所在的表和鏈,如iptables -t nat -A PREROUTING …。

鏈內可有多條規則,內置鏈的最后有一個策略,即鏈尾動作。

image.png

 

【包在鏈內的匹配流程】:

進入鏈后從第一條規則開始,依次匹配。

若包與規則不匹配,則與鏈中下一條規則進行匹配。

若匹配到一條規則就執行該規則的target動作(允許、拒絕、改寫包頭、NAT等),然后按該動作的“后續操作”(NextRule、NextChain、NextPacket、Return)繼續。

如果包與鏈中的任何規則都不匹配,即到達鏈尾,則執行該鏈的策略(鏈尾動作)。

 

2.5  match(匹配條件)

可分為通用匹配和擴展匹配(隱式和顯示),其差異僅體現在指定參數的方式上,在功能本質上是統一的。

匹配類型

說明

參數方式

通用匹配

最常用的匹配條件,僅包括入站網卡、出站網卡、源IP、目的IP、協議等條件

直接給出參數(-s, -d, -i, -o, -p)

擴展匹配

每種匹配方式對應一個模塊,以-m來設置

-m <匹配模塊> <模塊參數>

例:-m tcp --dport 80

隱式擴展匹配

當有通用匹配參數-p {tcp|udp|icmp}時,可不加“-m {tcp|udp|icmp}”,直接給出相關協議的參數,此為隱式匹配,實際上就是擴展匹配的一種省略“-m”的簡化寫法。

tcp:--sport --dport --tcp-flags

udp:--sport --dport

icmp:--icmp-type

例:-p tcp [-m tcp] --dport 80


SuSE12sp1自帶的iptables 1.4.21,共有60種擴展匹配,列舉常用的18種如下:

擴展匹配

說明

addrtype

地址類型:本地、廣播等

comment

注釋

connlimit

連接數

icmp

ICMP協議

length

IP凈荷長度

limit

流量(以包個數計)

mac

MAC地址

mark

標志(U32整形數)

multiport

多端口

sctp

SCTP協議

socket

內核socket

state

TCP連接狀態(NEW、ESTABLISHED、RELATED、INVALID)

string

字符串

tcp

TCP協議

tcpmss

建鏈時的TCP最大凈荷參數

time

時間

u32

包數據看做是U32數組

udp

UDP協議


iptables -m tcp  --help

可以查看tcp模塊 詳情, 其他模塊 類似

2.6  target(執行動作)

target就是iptables規則匹配之后執行的動作,分三類:

1、內置target(3個:ACCEPT/DROP/RETURN)

2、自定義鏈target

3、擴展target(40個)

 

target的“后續操作”是指執行完其本身動作后的下一步操作,分為以下4種:

1、【NextRule】匹配本鏈的下一條規則,若已到達本鏈末尾,則執行本鏈Policy。

2、【NextChain】結束本鏈(不受本鏈Policy約束),進入下一鏈。

3、【NextPacket】終止本包處理,繼續處理一下個包。

4、【Return】自定義鏈中的-j RETURN返回調用鏈,內置鏈中的-j RETURN執行內置鏈中的Policy。

 

內置target和常用擴展target如下:

target

本次操作

后續操作

-j ACCEPT(內置)

允許

NextChain

-j RETURN(內置)

 

Return

-j DROP(內置)

丟棄,無回應

NextPacket

-j REJECT

丟棄,給出ICMP回應

NextPacket

-j SNAT

SNAT

NextChain

-j MASQUERADE

源IP修改為網卡IP(SNAT特例)

NextChain

-j DNAT

DNAT

NextChain

-j REDIRECT

重定向到另一個端口(DNAT特例)

NextRule

-j MARK

打標記

NextRule

-j LOG

寫日志/var/log/message

NextRule

-j TPROXY

轉發到本機端口

NextChain

 

下面的web鏈接的介紹也很詳細

https://www.cnblogs.com/davidwang456/p/3540837.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM