iptables

一.防火牆是什麼? web

防火牆分爲網絡防火牆和應用層防火牆 算法

  1. 網絡防火牆

    網絡防火牆就是一個位於計算機和它所鏈接的網絡之間的防火牆。 服務器

2.應用層防火牆 網絡

        應用層防火牆是在 TCP/IP 堆棧的"應用層"上運做,應用層防火牆能夠攔截進出某應用程序的全部封包,而且封鎖其餘的封包(一般是直接將封包丟棄)。 架構

 

總之應用層防火牆的算法會更復雜,過慮更爲嚴格,因此在部署防火牆的時候,要把應用層防火牆部署到網絡防火牆的裏邊。 app

二.iptables的錶鏈結構 tcp

1.iptables介紹 工具

    平時說iptables是防火牆,其實iptables是iptables/netfilter組合中的一個,只有iptables/netfilter才應該叫作防火牆,它是基於軟件方式工做的網絡防火牆。iptables工做於用戶空間,是防火牆的規則編寫工具,使用iptables編寫規則而且發送到netfilter;防火牆的規則剛放到netfilter中,它是一個可以讓規則生效的網絡架構,工做於內核空間。 post

 

  1. iptables的表、鏈結構

    iptables是由四表五鏈組成的。 spa

            四表的優先級: raw表  >  mangle表 >  nat表  >  filter表

     

                RAW表只使用在PREROUTING鏈和OUTPUT鏈上,由於優先級最高,從而能夠對收到的數據包在鏈接跟蹤前進行處理。 raw內含有兩個鏈:PREROUTING和OUTPUT

                mangle表通常是對數據包進行修改用的, mangle表中含五個鏈:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

                nat表內含三個鏈:PREROUTING、POSTROUTING、OUTPUT

                filter表內含三個鏈:INPUT、FORWARD、OUTPUT

            

            五鏈

                PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING

三.規則的屬性定義:

1.網絡層協議

主要集中在ip協議報文上

2.傳輸層協議屬性:

主要集中在

tcp

udp

icmp  icmp其並非真正意義傳輸層的,而是工做在網絡層和傳輸層之間的一種特殊的協議

3.ip報文的屬性:

IP報文的屬性爲: 源地址.目標地址

4.iptables規則匹配

iptables如何查看錶和鏈

大寫字母選項:能夠實現某種功能,好比添加刪除清空規則鏈;

小寫字母選項:用來匹配及其餘;

-L :list 列表

    -n :數字格式顯示ip和端口;

    --line-numbers:顯示行號;

    -x : 顯示精確值,不要作單位換算;

   

-t :  指定表

     -t{fillter|nat|mangle|raw}

-v : 顯示詳細信息 -v -vvv -vvvv ..能夠顯示更詳細的信息

   

5.其餘子命令:

管理鏈:

-F :清空鏈

清空nat表中的input鏈,格式以下:

#iptables-t nat -F INPUT

#清空fllter表全部鏈:

#iptables-F

-P : 設定默認策略,爲指定鏈設置默認策略,格式以下:

#設置fllter表input鏈的默認規則爲丟棄

iptables-t fllter -P INPUT DROP

-N : 新建一條自定義鏈(內置鏈不能刪除,若是太多,能夠自定義鏈)

#自定義連只能被調用才能夠發揮做用

iptables-N fillter_web

-X : 刪除自定義空鏈,若是鏈內有規則,則沒法刪除

-Z :計算器清零

iptables-Z

-E :重命名自定義鏈

   

iptables管理規則:

-A   :append附加規則,將新增的規則添加到鏈的尾部

-I[n] :插入爲第n條規則

-D   : 刪除第n條規則

-R[n] : 替換第N條

表和鏈的對應關係:

fillter :INPUT FORWORD OUTPUT

nat : PREROUTING POSTROUTING  OUTPUT

使用-t指定表來查看指定表內的規則:

#iptables-t nat -L -n

raw : prerouting output

iptables-t raw -L -n

mangle: prerouting input forword output postrouting

iptables-t mangle -L -n

#查看規則

[root@test3~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source              destination        

   

Chain FORWARD (policy ACCEPT)

target     prot optsource              destination        

   

Chain OUTPUT (policy ACCEPT)

target     prot optsource              destination  

經過以上能夠觀察到,每個鏈都有默認策略:policy ACCEPT

一般只須要修改fllter表的默認策略便可,由此若是有報文請求來訪問本機的某個服務,那麼則會通過input鏈,所以進來的報文都是須要作過濾的,那麼出去的報文則不須要過濾,在有些特定的場所下也須要作過濾

因此寫規則的時候必須放將規則寫在正確鏈上,意義很是重大

規則和默認策略都有2個計數器,經過-v選項能夠觀察規則的匹配狀況

#iptables -t nat -L -n -v

 

編寫規則語法:

iptables [-t 表] 大寫選項子命令 [規則號] 鏈名 匹配標準 -j 目標(規則)

目標:

DROP   :   丟棄

REJECT :   拒絕

ACCEPT :   接受

RETURN :  返回主鏈繼續匹配

REDIRECT:  端口重定向

MASQUERADE :地址假裝

DNAT :    目標地址轉換

SNAT :源地址轉換

MARK :打標籤

LOG  

自定義鏈

匹配標準

iptables的匹配標準大體分爲兩類:

1.通用匹配

-s | --src | --source [!] IP/NETWORK

-d ------------------------

-i :指定數據報文流入接口  input prerouting forward

-o :指定數據報文流出接口  output postrouting forward

-p :明確說明只放行哪一種協議的報文匹配規則

以當前主機爲例:

凡是來自於某個ip段的網絡訪問本機

[root@test3xtables-1.4.7]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.0/24 -j ACCEPT

[root@test3 xtables-1.4.7]# iptables -L -n -v

ChainINPUT (policy ACCEPT 10 packets, 1029 bytes)

pkts bytestarget    prot opt  in    out      source                destination

22  1660    ACCEPT     all  --  *      *       10.0.10.0/24                10.0.10.0/24 

   

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target     prot opt in    out       source                   destination 

   

Chain OUTPUT (policy ACCEPT 16 packets, 1536 bytes)

pkts bytes target     prot opt in    out       source                  destination    

pkts     被本機報文所匹配的個數

bytes   報文全部大小記起來之和

opt     額外的選項,--表示沒有

target   處理機制

prot     放行哪一種協議

source  源地址

destination  目標地址

   

對於嚴謹的規則,通常默認規則都是拒絕未知,容許已知

以下所示:

只放行信任IP地址段,其餘所有禁止

iptables-P INPUT DORP

iptables-A INPUT -s   10.0.10.0/24   -d  10.0.10.0/24 -j ACCEPT

iptables-P OUTPUT DORP

iptables-A OUTPUT -d   10.0.10.0/24  -s    10.0.10.0/24-j ACCEPT

保存規則

[root@test3~]# /etc/init.d/iptables save

iptables:Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

保存規則至其餘文件

[root@test3~]# iptables-save > /tmp/iptables  

加載iptables文件規則

[root@test3~]# iptables-resotre < /tmp/iptables  

1.2.規則的替換

首先來查看規則

[root@test3 ~]# iptables -L -n --line-number

ChainINPUT (policy ACCEPT)

num  target    prot opt source              destination        

1    ACCEPT    all  --  10.0.10.0/24         10.0.10.0/24        

   

ChainFORWARD (policy DROP)

num  target    prot opt source              destination        

   

ChainOUTPUT (policy ACCEPT)

num  target    prot opt source              destination

替換規則:將規則1替換爲 eth0只可以經過某個網段進來

[root@test3~]# iptables -R  INPUT 1 -s 10.0.10.0/24-d 10.0.10.62 -i eth0 -j ACCEPT

[root@test3~]# iptables -L -n --line-number

ChainINPUT (policy ACCEPT)

num  target    prot opt source              destination        

1    ACCEPT    all  --  10.0.10.0/24         10.0.10.62    

2.擴展匹配

#全部的擴展匹配表示要使用-m來指定擴展的名稱來引用,而每一個擴展模塊通常都會有本身特有的專用選項,在這些選項中,有些是必備的:

   

2.1隱含擴展

以下所示:

#端口之間必須是連續的

-p tcp--sport|--dport 21-80

#取反,非21-80的端口

-p tcp--sport|--dport !21-80

#檢測報文中的標誌位

--tcp-flagsSYN,ACK,RST,FIN, SYN

ALL                   #表示爲全部標誌位

NONE                    #表示沒有任何一個標誌位

#--tcp-flags ALL NONE   #表示全部標誌位都檢測,可是其中多有都爲0

#--tcp-flage ALL SYN,FIN #表示SYN,FIN都爲1(即握手又斷開)

#生成環境下tcp-flags 用的很是多,意義很是重要

例:放行本機對web的訪問

[root@test3~]# iptables -A INPUT -d 10.0.10.62  -ptcp --dport 80 -j ACCEPT

[root@test3~]# iptables -L -n

ChainINPUT (policy DROP)

target     prot opt source               destination        

ACCEPT     all --  10.0.10.0/24         10.0.10.62          

ACCEPT     tcp --  0.0.0.0/0            10.0.10.62          tcp dpt:80

放行出去的報文,源端口爲80

[root@test3~]# iptables -A OUTPUT -s 10.0.10.62 -p tcp --sport 80 -j ACCEPT

查看匹配規則

[root@test3 ~]# iptables -L -n --line-number

ChainINPUT (policy DROP)

num  target    prot opt source              destination        

1    ACCEPT    all  --  10.0.10.0/24         10.0.10.62          

2    ACCEPT    tcp  --  0.0.0.0/0            10.0.10.62          tcp dpt:80

   

ChainFORWARD (policy DROP)

num  target    prot opt source              destination        

   

ChainOUTPUT (policy DROP)

num  target    prot opt source              destination        

1    ACCEPT    all  --  10.0.10.0/24         10.0.10.0/24        

2    ACCEPT    tcp  --  10.0.10.62           0.0.0.0/0           tcp spt:80

考慮要點:

(1)規則爲放行出去的響應報文

(2)考慮源IP地址爲本機,目標爲訪問的時候拆開報文才能夠獲知,而寫規則的時候是面向全部主機,因此這裏不用寫

(3)源端口:80 ,由於用戶訪問的時候必定會訪問其80端口,無可非議的

(4)目標端口:請求到來的時候事先沒法判定對方的端口是多少,因此不用寫

   

2.2協議匹配

一般對協議作匹配則使用 -p 參數 來指定協議便可

匹配UDP:UDP只有端口的匹配,沒有任何可用擴展,格式以下

-p udp--sport | --dport

匹配ICMP格式以下

-picmp --icmp-[number]

icmp常見類型:請求爲8(echo-request),響應爲0(echo-reply)

例:默認規則input output 都爲DROP,使其本機能ping(響應的報文)的報文出去

經過此機器去ping網關10.0.10.1 , 可結果卻提示not permitted,使其能通10.0.10.0/24網段中的全部主機

[root@test3~]#iptables -A OUTPUT -s 10.0.10.62 -d 10.0.10.0/24 -p icmp --icmp-type8 -j ACCEPT

可看到沒法響應:0表示響應進來的報文規則,並無放行本身做爲服務端的的角色規則

[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.62 -p icmp --icmp-type0 -j ACCEPT

#ping 10.0.10.x

容許類型爲0(響應報文)出去

[root@test3~]# iptables -A OUTPUT -s 10.0.10.62 -d  10.0.10.0/24 -picmp --icmp-type 0 -j ACCEPT

例2:本機DNS服務器,要爲本地客戶端作遞歸查詢;iptables的input output默認爲drop 本機地址是10.0.10.62

[root@test3~]# iptables -A INPUT -d 10.0.10.62 -p udp --dprot 53 -j ACCEPT

[root@test3~]# iptables -A OUTPUT -S 10.0.10.62 -p udp --sprot 53 -j ACCEPT

客戶端請求能夠進來,響應也能夠出去,可是本身做爲客戶端請求別人是沒有辦法出去的,因此:

[root@test3~]# iptables -A OUTPUT -s 10.0.10.62 -p udp --dport 53 -j ACCEPT

[root@test3~]# iptables -A INPUT -d 10.0.10.62 -p udp --sprot 53 -j ACCEPT

若是爲tcp 則將以上udp改成tcp便可

相關文章
相關標籤/搜索