Linux下iptables的簡介和自己的記錄

84223932發表於2014-08-08
本文簡單描述了Linux下 iptables 的原理介紹 和 自己在使用過程中的小小總結。


歡迎轉載,請註明作者、出處。

作者:張正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑問,歡迎聯絡。


一、iptables基礎:(封包過濾、封包重定向、NAT等功能)

->規則(rules)

->(chains)

->(tables)

->iptables傳輸資料包的過程

 

1.規則:

->規則一般的定義為:如果資料包頭符合這樣的條件,就這樣處理這個資料包

->規則儲存在核心空間的資訊包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議和服務型別

->當資料包與規則匹配時,iptables就根據規則所定義的方法來處理這些資料包,如放行(accept)、拒絕(reject)和丟棄(drop)等。

->配置防火牆的主要工作就是新增、修改、刪除這些規則

 

2.

->鏈是資料包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。

->當資料包到達鏈時,會從鏈中的第一條規則開始檢查。如果滿足條件,就會根據該條規則所定義的方法處理該資料包,否則就繼續檢查下一條規則。如果資料包不符合鏈中任意一條規則,就會按照預先定義的預設策略來處理資料包。

 

3.

a.filter表:包過濾(iptables的預設表)

包含:

->INPUT(處理進入的資料包)

->FORWARD(處理轉發的資料包)

->OUTPUT(處理本地生成的資料包)

filter表中,只允許對資料包進行接受、丟棄的操作,無法對資料包進行更改

 

b.nat表:網路地址轉換

包含:

->PREROUTING(修改即將到來的資料包)

->OUTPUT(修改在路由之前本地生成的資料包)

->POSTROUTING(修改即將出去的資料包)

 

c.mangle表:(對指定包進行修改,使用相對較少)

包含:

->PREROUTING

->INPUT

->FORWARD

->OUTPUT

->POSTROUTING

 

 

 

二、資料包的傳輸過程:

__________________________________________________________

|                                                                                                               |

|   進入的資料包                                     輸出的資料包 |

|                 |                                            |

|                                                                                         |       |

|    PREROUTING ------&gtFORWARD鏈條 ---&gt  POSTROUTING |

|                 |                                            |

|                                                                                         |       |

|      INPUT    ------&gt內部處理過程 --&gt   OUTPUT鏈條   |

|________________________________________________________|

1.當一個資料包進入網路卡時,首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去

2.如果是進入本機的,資料包就會達到INPUT鏈,經過內部處理,然後經過OUTPUT鏈,最後到達POSTROUTING鏈輸出

3.如果資料包是要轉發出去的,且核心允許轉發,資料包就會到達FORWARD鏈,然後到達POSTROUTING鏈輸出

 

 

 

三、iptables命令格式

一般格式:iptables [ -t  ] -命令  匹配  [ -j 動作 ]

1.表選項

指定命令應用於哪個表:filternatmangle

 

2.命令選項

-P(--policy) <鏈名>  :定義預設策略

-L(--list)   <鏈名>  :檢視iptables規則列表

-A(--append) <鏈名>  :在規則列表的最後增加1條規則

-I(--insert) <鏈名>  :在指定位置插入1條規則

-D(--delete) <鏈名>  :從規則列表中刪除1條規則

-R(--replace)<鏈名>  :替換規則列表中的某條規則

-F(--flush)  <鏈名>  :刪除表中所有規則

-Z(--zero)   <鏈名>  :將表中資料包計數器和流量計數器歸零

 

3.匹配選項

-i <網路介面名>       :指定資料包從哪個網路介面進入,如eth0eth1

-o <網路介面名>     :指定資料包從哪個網路介面輸出,如eth0eth1

-p <協議型別>          :指定資料包匹配的協議,如TCPUDPICMP

-s <源地址或子網>   :指定資料包匹配的源地址

--sport <源埠號>  :執行資料包匹配的源埠號,可用"起始埠號:結束埠號"

-d <目標地址或子網:指定資料包匹配的目標地址

--dport <目標埠號>:指定資料包匹配的目標埠號,可用"起始埠號:結束埠號"

 

4.動作選項

ACCEPT  接受資料包

DROP      丟棄資料包

REJECT    拒絕資料包

REDIRECT將資料包重新轉到本機或另一臺主機的某個埠

SNAT      源地址轉換

DNAT      目標地址轉換

MASQUERADE  NAT技術

LOG        將符合規則的資料包的相關資訊記錄在日誌中

 

 

 

四、iptables命令示範

1.filter表預設接收

iptables -P INPUT ACCEPT

(沒有-t <表名則預設為filter)

 

2.nat表預設丟棄

iptable -t nat -P OUTPUT DROP

 

3.檢視規則

iptables [ -t  表名 ] -L [ 鏈名 ]

iptables -L

iptables -t nat

iptables -t mangle

 

4.禁止訪問百度:

iptables -A INPUT -s  -j DROP

 

說明:

在訪問百度網站的例子中

對於INPUT (s)源地址,本機是(d)目的地址

對於OUTPUT:本機是(s)源地址,(d)目的地址

因此禁止訪問百度網站的方法有兩種:

iptables -A INPUT -s  -j DROP

iptables -A OUTPUT -d  -j DROP

 

修改防火牆的檔案:/etc/sysconfig/iptables

 

 
================================================================
防火牆設定-案例

開放22、80、6114、6115埠,其他埠預設關閉:

iptables -A INPUT -p icmp -j ACCEPT                    #允許ping
iptables -A INPUT -p tcp --dport 22 -j ACCEPT     #開放22埠,ssh
iptables -A INPUT -p tcp --dport 6114 -j ACCEPT #開放6114埠,mysql使用
iptables -A INPUT -p tcp --dport 6115 -j ACCEPT #開放6115埠,mysql使用
iptables -A INPUT -p tcp --dport 80 -j ACCEPT     #開放80埠
#iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT  #對80埠 新建立和已經建立的連線 開放
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT   #對所有已經建立的連線開放
#此條很重要,如果不設定,機器上的一些對網頁的連線或者資料庫的連線就無法正常 。設定此條後,就不用設定上面那條。

iptables -A INPUT -s 192.168.101.207 -j ACCEPT    
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT     #開放DNS ,否則iptables對域名解析很慢
iptables -A INPUT -p tcp --sport 53 -j ACCEPT

iptables -P INPUT DROP    # 設定 預設INPUT鏈 丟失所有連線,此條慎重,一定要 開啟22埠後才能設定此條。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26355921/viewspace-1248086/,如需轉載,請註明出處,否則將追究法律責任。

相關文章