iptables防火牆介紹+實戰

第1章 iptables防火牆簡介

Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾的防火牆工具,它的功能十分強大,使用很是靈活,能夠對流入和流出服務器的數據包進行很精細的控制。特別是它能夠在一臺很是低的硬件配置下跑的很是好。iptables+zebra+squidlinux

Iptables是linux2.4及2.6內核中集成的服務。其功能與安全性比其老一輩ipfwadm,ipchains強大的多,Iptables主要工做在OSI七層的2、三四層,若是從新編譯內核,Iptables也能夠支持7層控制(squid代理+iptables)。web

1.1 iptables企業應用場景

  主機防火牆(filter表的INPUT鏈)安全

  局域網共享上網(nat表的POSTROUTING鏈)。半個路由器,NAT功能。服務器

  端口及IP(一對一)映射(nat表的PREROUTING鏈),硬防的NAT功能。網絡

1.2 iptables的工做流程

iptables是採用數據包過濾機制工做的,因此它會對請求的數據包的包頭數據進行分析,並根據咱們預先設定的規則進行匹配來決定是否能夠進入主機。併發

1.2.1 iptables工做流程小結

一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。app

二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。tcp

三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。工具

四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。測試

1.3 基於安全基本優化

1.儘量不給服務器配置外網IP,能夠經過代理轉發或者經過防火牆映射。

2.併發不是特別大狀況再外網IP的環境,要開啓iptables防火牆。

1.4 iptables的規則表和鏈

      表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。

     鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中能夠有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否知足規則所定義的條件。若是知足,系統就會根據 該條規則所定義的方法處理該數據包;不然iptables將繼續檢查下一條規則,若是該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。

       Iptables採用「表」和「鏈」的分層結構。在REHL4中是三張表五個鏈。如今REHL5成了四張表五個鏈了,不過多出來的那個表用的也不太多,因此基本仍是和之前同樣。下面羅列一下這四張表和五個鏈。注意必定要明白這些表和鏈的關係及做用。

1.4.1 規則表

  filter表——三個鏈:INPUT、FORWARD、OUTPUT

做用:過濾數據包  內核模塊:iptables_filter.

  Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT

做用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat

  Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

做用:修改數據包的服務類型、TTL、而且能夠配置路由實現QOS內核模塊:iptable_mangle(別看這個表這麼麻煩,我們設置策略時幾乎都不會用到它)

  Raw表——兩個鏈:OUTPUT、PREROUTING

做用:決定數據包是否被狀態跟蹤機制處理  內核模塊:iptable_raw

1.4.2 規則鏈

  INPUT——進來的數據包應用此規則鏈中的策略

  OUTPUT——外出的數據包應用此規則鏈中的策略

  FORWARD——轉發數據包時應用此規則鏈中的策略

  PREROUTING——對數據包做路由選擇前應用此鏈中的規則

(記住!全部的數據包進來的時侯都先由這個鏈處理)

  POSTROUTING——對數據包做路由選擇後應用此鏈中的規則

1.5 規則表之間的優先順序

規則表之間的優先順序:

Raw——mangle——nat——filter

規則鏈之間的優先順序(分三種狀況)

1.5.1 第一種狀況:入站數據流向

    從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),以後會進行路由選擇(判斷該數據包應該發往何處),若是數據包 的目標主機是防火牆本機(好比說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否容許通 過等),經過之後再交給系統上層的應用程序(好比Apache服務器)進行響應。

1.5.2 第二衝狀況:轉發數據流向

       來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,以後會進行路由選擇,若是數據包的目標地址是其它外部地址(好比局域網用戶經過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),而後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。

1.5.3 第三種狀況:出站數據流向

     防火牆本機向外部地址發送的數據包(好比在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,以後進行路由選擇,而後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。

1.6 iptables的基本語法

iptables [-t 表名] 命令選項 [鏈名][條件匹配] [-j 目標動做或跳轉]

說明:表名、鏈名用於指定 iptables命令所操做的表和鏈,命令選項用於指定管理iptables規則的方式(好比:插入、增長、刪除、查看等;條件匹配用於指定對符合什麼樣 條件的數據包進行處理;目標動做或跳轉用於指定數據包的處理方式(好比容許經過、拒絕、丟棄、跳轉(Jump)給其它鏈處理。

1.7 iptables命令管理控制選項

-A 在指定鏈的末尾添加(append)一條新的規則

-D  刪除(delete)指定鏈中的某一條規則,能夠按規則序號和內容刪除

-I  在指定鏈中插入(insert)一條新的規則,默認在第一行添加

-R  修改、替換(replace)指定鏈中的某一條規則,能夠按規則序號和內容替換

-L  列出(list)指定鏈中全部的規則進行查看

-E  重命名用戶定義的鏈,不改變鏈自己

-F  清空(flush)

-N  新建(new-chain)一條用戶本身定義的規則鏈

-X  刪除指定表中用戶自定義的規則鏈(delete-chain)

-P  設置指定鏈的默認策略(policy)

-Z 將全部表的全部鏈的字節和數據包計數器清零

-n  使用數字形式(numeric)顯示輸出結果

-v  查看規則表詳細信息(verbose)的信息

-V  查看版本(version)

-h  獲取幫助(help)

1.8 防火牆處理數據包的四種方式

ACCEPT 容許數據包經過

DROP 直接丟棄數據包,不給任何迴應信息

REJECT 拒絕數據包經過,必要時會給數據發送端一個響應的信息。

LOG在/var/log/messages文件中記錄日誌信息,而後將數據包傳遞給下一條規則

第2章 實戰

2.1 查看系列

2.1.1 啓動並查看默認規則

[root@web01 ~]# /etc/init.d/iptables start

iptables: Applying firewall rules:                         [  OK  ]

[root@web01 ~]# iptables -nL

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination   

2.1.2 查看順序

[root@web01 ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          

3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          

4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain FORWARD (policy ACCEPT)

num  target     prot opt source               destination        

1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination 

2.1.3 查看nat表

[root@web01 ~]# iptables -nL -t nat

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination        

 

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

2.2 參數

-A -I -D

iptables [-t table] -A chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -D chain rulenum   #<==根據規則號刪除。

iptables [-t table] -D chain rule-specification

註釋:

-t 指定表d(efault: `filter')

-A  #<==把規則添加到指定的鏈上,默認添加到最後一行。

-I  #<==插入規則,默認插入到第一行。

-D  #<==刪除鏈上的規則

2.2.1 根據規則號刪除

iptables -D INPUT 4 #<==4是規則號。

 

-F #<==清除一個鏈或全部鏈上的規則

-Z #<==鏈的記數器清零

-X #<==刪除用戶自定義的鏈。

實例:

實踐:

[root@web02 ~]# iptables -Z

[root@web02 ~]# iptables -X

[root@web02 ~]# iptables -F

[root@web02 ~]# iptables -nL

2.3 封22端口命令

[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

規則註釋:

-p       #<==指定過濾的協議-p(tcp,udp,icmp,all)

--dport  #<==指定目標端口(用戶請求的端口)。

-j       #<==對規則的具體處理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)

--sport #<==指定源端口。

2.4 禁止10.0.0.253訪問

[root@web01 ~]# iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP

[root@web02 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.2 -i eth0 -j DROP

-s       #<==指定源地址。 ! 取反。

-d       #<==指定目的地址。

-i       #<==進入的網絡接口(eth0,eth1)。

-o       #<==出去的網絡接口(eth0,eth1)。

2.5 匹配端口範圍

iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP

iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT

iptables -I INPUT -p tcp --dport 18:80 -j DROP  #<==最佳

2.6 匹配ICMP類型

iptables -A INPUT -p icmp --icmp-type 8

實例:

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

2.7 匹配網絡狀態

-m state --state

    NEW:已經或將啓動新的鏈接

    ESTABLISHED:已創建的鏈接

    RELATED:正在啓動的新鏈接

    INVALID:非法或沒法識別的

#容許關聯的狀態包 ftp協議

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

2.8 限定時間系列

2.8.1 限制指定時間的容許經過數量及併發數

-m limit --limit n/{second/minute/hour}:

2.8.2 指定時間內的請求速率"n"爲速率,後面爲時間分別爲:秒、分、時

iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP

2.8.3 --limit-burst [n]

在同一時間內容許經過的請求"n"爲數字,不指定默認爲5

iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT

2.9 部署一個最安全的企業級防火牆(案例)

修改默認規則

iptables -P INPUT DROP 

iptables -P FORWARD DROP  

iptables -P OUTOP ACCEPT

相關文章
相關標籤/搜索