防火牆--iptables

iptables只是Linux防火牆的管理工具而已。真正實現防火牆功能的是netfilter,它是Linux內核中實現包過濾的內部結構。linux

iptables具體是如何去過濾各類規則的呢?請看下面的四表五鏈bash

四表五鏈概念網絡

  • filter表——過濾數據包
  • Nat表——用於網絡地址轉換(IP、端口)
  • Mangle表——修改數據包的服務類型、TTL、而且能夠配置路由實現QOS
  • Raw表——決定數據包是否被狀態跟蹤機制處理
  • INPUT鏈——進來的數據包應用此規則鏈中的策略
  • OUTPUT鏈——外出的數據包應用此規則鏈中的策略
  • FORWARD鏈——轉發數據包時應用此規則鏈中的策略
  • PREROUTING鏈——對數據包做路由選擇前應用此鏈中的規則(全部的數據包進來的時侯都先由這個鏈處理)
  • POSTROUTING鏈——對數據包做路由選擇後應用此鏈中的規則(全部的數據包出來的時侯都先由這個鏈處理)

當主機收到一個數據包後,數據包先在內核空間中處理,若發現目的地址是自身,則傳到用戶空間中交給對應的應用程序處理,若發現目的不是自身,則會將包丟棄或進行轉發。app

iptables實現防火牆功能的原理是:在數據包通過內核的過程當中有五處關鍵地方,分別是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,稱爲鉤子函數,iptables這款用戶空間的軟件能夠在這5處地方寫規則,對通過的數據包進行處理,規則通常的定義爲「若是數據包頭符合這樣的條件,就這樣處理數據包」。tcp

iptables中定義有5條鏈,說白了就是上面說的5個鉤子函數,由於每一個鉤子函數中能夠定義多條規則,每當數據包到達一個鉤子函數時,iptables就會從鉤子函數中第一條規則開始檢查,看該數據包是否知足規則所定義的條件。若是知足,系統就會根據該條規則所定義的方法處理該數據包;不然iptables將繼續檢查下一條規則,若是該數據包不符合鉤子函數中任一條規則,iptables就會根據該函數預先定義的默認策略來處理數據包函數

iptables中定義有表,分別表示提供的功能,有filter表(實現包過濾)、nat表(實現網絡地址轉換)、mangle表(實現包修改)、raw表(實現數據跟蹤),這些表具備必定的優先級:raw-->mangle-->nat-->filter工具

一條鏈上可定義不一樣功能的規則,檢查數據包時將根據上面的優先級順序檢查性能

wKiom1fD9SHiFulVAAFG31wO9vs466.png

小結一下:spa

wKioL1fD-LzQLXN1AACb9oWWVug429.png

數據包先通過PREOUTING,由該鏈肯定數據包的走向:.net

    一、目的地址是本地,則發送到INPUT,讓INPUT決定是否接收下來送到用戶空間,流程爲①--->②;

    二、若知足PREROUTING的nat表上的轉發規則,則發送給FORWARD,而後再通過POSTROUTING發送出去,流程爲: ①--->③--->④--->⑥

主機發送數據包時,流程則是⑤—>⑥

iptables安裝配置

linux通常默認都已經安裝iptables,只須要開啓服務便可:service iptables start

iptables規則書寫

基本語法:iptables [-t 表] [操做命令] [鏈][規則匹配器][-j 目標動做]

說明 支持的鏈
raw 通常是爲了避免再讓iptables對數據包進行跟蹤,提升性能 PREROUTING、OUTPUT
mangle 對數據包進行修改 五個鏈均可以
nat 進行地址轉換 PREROUTING、OUTPUT、POSTROUTING
filter(默認) 對包進行過濾 INPUT、FORWARD、OUTPUT

經常使用操做命令

說明
-A 在指定鏈尾部添加規則
-D 刪除匹配的規則
-R 替換匹配的規則
-I

在指定位置插入規則


例:iptables -I INPUT 1 --dport 80 -j ACCEPT


(將規則插入到filter表INPUT鏈中的第一位上)

-L/S 列出指定鏈或全部鏈的規則
-F

刪除指定鏈或全部鏈的規則

-N

建立用戶自定義鏈


例:iptables -N allowed

-X

刪除指定的用戶自定義鏈

-P

爲指定鏈設置默認規則策略,對自定義鏈不起做



例:iptables -P OUTPUT DROP

-Z 將指定鏈或全部鏈的計數器清零
-E

更改自定義鏈的名稱


例:iptables -E allowed disallowed

-n

ip地址和端口號以數字方式顯示


例:iptables -Ln

常見規則匹配器 說明
-p tcp|udp|icmp|all 匹配協議,all會匹配全部協議
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目標地址
--sport port1[:port2] 匹配源端口(可指定連續的端口)
--dport port1[:port2] 匹配目的端口(可指定連續的端口)
-o interface

匹配出口網卡,只適用FORWARD、POSTROUTING、OUTPUT。


例:iptables -A FORWARD -o eth0

-i interface

匹配入口網卡,只使用PREROUTING、INPUT、FORWARD。

--icmp-type  匹配icmp類型(使用iptables -p icmp -h可查看可用的ICMP類型)
--tcp-flags mask comp

匹配TCP標記,mask表示檢查範圍,comp表示匹配mask中的哪些標記。


例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT


(表示匹配SYN和ACK標記的數據包)

目標動做 說明
ACCEPT 容許數據包經過
DROP 丟棄數據包
REJECT 丟棄數據包,而且將拒絕信息發送給發送方
SNAT

源地址轉換(在nat表上)


例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1 

DNAT

目標地址轉換(在nat表上)


例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT

目標端口轉換(在nat表上)


例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK

將數據包打上標記


例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要點:

    一、目標地址轉換通常在PREROUTING鏈上操做

    二、源地址轉換通常在POSTROUTING鏈上操做

 

保存和恢復iptables規則

    使用iptables-save能夠保存到特定文件中

 


1


    iptables-save > /etc/sysconfig/iptables_save

 

    使用iptables-restore能夠恢復規則

 


1


    iptables-restore< /etc/sysconfig/iptables_save

 

iptables的進階使用

   一、limit限制流量:

        -m limit --limit-burst 15        #設置一開始匹配的最���數據包數量

        -m limit --limit 1000/s            #設置最大平均匹配速率

        -m limit --limit 5/m --limit-burst 15     #表示一開始能匹配的數據包數量爲15個,每匹配到一個,   

                                                                    limit-burst的值減1,因此匹配到15個時,該值爲0,之後每過   

                                                                    12s,limit-burst的值會加1,表示又能匹配1個數據包

例子:

 


1

2


iptables -A INPUT -i eth0 -m limit --limit 5 /m  --limit-burst 15 -j ACCEPT 

iptables -A INPUT -i eth0 -j DROP

 

    注意要點:

        一、--limit-burst的值要比--limit的大

        二、limit自己沒有丟棄數據包的功能,所以,須要第二條規則一塊兒才能實現限速的功能

    二、time :在特定時間內匹配

-m time  說明
--monthdays day1[,day2] 在每月的特定天匹配
--timestart hh:mm:ss 在天天的指定時間開始匹配
--timestop hh:mm:ss 在天天的指定時間中止匹配
--weekdays day1[,day2] 在每一個星期的指定工做日匹配,值能夠是1-7

例子:

 


1

2


iptables -A INPUT -i eth0 -m  time  --weekdays 1,2,3,4 -jACCEPT

iptables -A INPUT -i eth0 -j DROP

 

    三、ttl:匹配符合規則的ttl值的數據包

參數 說明
--ttl-eq 100 匹配TTL值爲100的數據包
--ttl-gt 100 匹配TTL值大於100的數據包
--ttl-lt 100 匹配TTL值小於100的數據包

例子:

 


1


iptables -A OUTPUT -m ttl --ttl- eq  100 -j ACCEPT

 

    四、multiport:匹配離散的多個端口

參數 說明
--sports port1[,port2,port3] 匹配源端口
--dports port1[,port2,port3] 匹配目的端口
--ports port1[,port2,port3] 匹配源端口或目的端口

例子:

 


1


iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP

 

   

    五、state:匹配指定的狀態數據包

參數 說明
--state value value能夠爲NEW、RELATED(有關聯的)、ESTABLISHED、INVALID(未知鏈接)

例子:

 


1


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

 

    六、mark:匹配帶有指定mark值的數據包

參數 說明
--mark value 匹配mark標記爲value的數據包

例子:

 


1


iptables -t mangle -A INPUT -m mark --mark 1 -j DROP

 

    七、mac:匹配特定的mac地址

例子:

 


1


iptables -A FORWARD -m mac --mac- source  00:0C:24:FA:19:80 -j DROP
相關文章
相關標籤/搜索