iptables規則

Packets Filter Firewall; 


Firewall:隔離工具;工作於主機或網絡的邊緣,對經由的報文根據預先定義的規則(識別條件)進行檢測,對於能夠被規則匹配到的報文實行某預定義的處理機制的一套組件;

        硬件防火牆:在硬件級別能部分防火牆,另一部分功能基於軟件實現; 

        軟件防火牆:應用軟件處理邏輯運行通用硬件實現的防火牆;

        主機防火牆:服務範圍爲當前主機;

        網絡防火牆:服務範圍爲局域網;

        iptables/netfilter:軟件實現的主機或網絡防火牆; 

            iptables:規則編寫工具;

            netfilter:防火牆框架;framework;

        所提供的機制(鉤子):hook function

                路由前:prerouting

                入站:input

                轉發:forward

                出站:output

                路由後:postrouting

        iptables:

            chain:

                PREROUTING

                INPUT

                FORWARD

                OUTPUT

                POSTROUTING

        tables:

                filter:過濾,防火牆;

                nat:network address translation;用於修改報文的源地址或目標地址,甚至是端口;

                mangle:拆解報文,做出修改,並重新封裝起來;

                raw:關閉nat表上啓用的連接追蹤機制;

                優先級次序(由高而低):

                        raw --> mangle --> nat --> filter

功能<-->鉤子:

raw:PREROUTING,OUTPUT

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat:PREROUTING,INPUT,OUTPUT,POSTRUTING

filter:INPUT,FORWARD,OUTPUT

報文流向:

到本機某進程的報文:PREROUTING --> INPUT

由本轉發的報文:PREROUTING --> FORWARD --> POSTROUTING

由本某進程發出的:OUTPUT --> POSTROUTING 

規則的組成的部分:

匹配條件:

網絡層首部屬性值; 

傳輸層首部屬性值;

附加的條件;

處理動作:

                                access;

                                drop;

...

TCP/IP協議棧:

數據鏈接層:物理到物理設備之間的通信;(MAC,Media Access Control)

網絡層:源主機到目標主機之間的通信;

傳輸層:進程到進程之間的通信;

                netfilter:位於內核中的tcp/ip協議棧的報文處理框架;

                iptables:用戶空間的命令行程序(系統中需要安裝iptables後纔可使用);

                        CentOS 5/6:iptables命令編寫規則;

                        CentOS 7:基於firewalld命令生成iptables規則; 

                                若需要直接使用iptables,則需要要關閉systemctl disable firewalld.service 


iptables命令:

規則:根據指定的匹配條件來嘗試匹配每個流經此處的報文,一旦匹配成功,就由規則後面指明的處理動作進行處理;

匹配條件:

基本匹配條件:簡單檢查IP、TCP、UDP等報文的某屬性進行匹配的機制;

擴展匹配條件:需要藉助於擴展模塊進行的匹配條件指定即爲擴展匹配;

處理動作:

基本動作:ACCEPT,DROP, ...

擴展動作:需要藉助擴展模塊進行的動作;

添加規則之時需要考量的問題:

(1) 報文的流經路徑,判斷添加規則至哪個鏈上;

(2) 確定要實現的功能,判斷添加規則至哪個表上;

(3) 要指定的匹配條件,以用於匹配目標報文;

iptables/netfilter:包過濾型防火牆;帶狀態檢測的包過濾型防火牆;連接追蹤(connection tracking);

規則的編寫格式:iptables [-t table表明(可省略,省略表示filter表] COMMAND(字命令) 

chain(指明鏈) [-m matchname(指明擴展模塊) [per-match-options(指明模塊專用選項)]]  [-j targetname(處理動作) [per-target-options(處理動作選項)]]

                -t table:默認爲filter;其它可用的有raw, mangle, nat;

                COMMAND規則,鏈

鏈:

-P:policy,策略,定義默認策略; 一般有兩種選擇,ACCEPT和DROP;

-N:new,新建一條自定義的規則鏈;被內建鏈上的規則調用才能生效;[-j  chain_name];

-X:drop,刪除自定義的引用計數爲0的空鏈(鏈中不能有規則);

-F:flush,清空指定的鏈;(清空之前青雀表默認策略爲ACCESS,否則將無法連接服務器)

-E:重命名自定義的引用計數和爲0的鏈;

規則:規則處理自上而下,配上條規則拒絕後,將不匹配下條規則

-A:append,追加,在指定鏈的尾部追加一條規則;

-I:insert,插入,在指定的位置(省略位置時表示鏈首)插入一條規則;

-D:delelte,刪除,刪除指定的規則;

-R:replace,替換,將指定的規則替換爲新規則;不能僅修改規則中的部分,而是整條規則完全替換;

查看:

-L:list,列出表中的鏈上的規則;

-n:numeric,以數值格式顯示;

-v:verbose,顯示詳細格式信息; 

-vv, -vvv

-x:exactly,計數器的精確結果;

--line-numbers:顯示鏈中的規則編號;

計數器:

規則,以及默認策略有專用的計數器;

記錄被當前規則所匹配到的:

(1) 報文個數;

(2) 字節總數;

重置規則計數器:

-Z:zero,置0;

chain:

(1) 內建鏈;

(2) 自定義鏈;

iptables命令的使用格式:

iptables [-t table] {-A|-C|-D} chain rule-specification

-t table:指明添加至那條鏈

-A|-C|-D...:對鏈中規則操作命令

chain:鏈名稱

rule-specification:規則的規範或規格


ip6tables [-t table] {-A|-C|-D} chain rule-specification


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


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


iptables [-t table] -D chain rulenum


iptables [-t table] -S [chain [rulenum]]


iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]


iptables [-t table] -N chain


iptables [-t table] -X [chain]


iptables [-t table] -P chain target


iptables [-t table] -E old-chain-name new-chain-name


rule-specification = [matches...] [target]

matches...:匹配條件

target:處理動作


match = -m matchname [per-match-options]

-m:指明加載模塊

per-match-options:模塊專用選項


target = -j targetname [per-target-options]

-j:指明動作

targetname:動作名稱

per-target-options:處理動作選項

匹配條件:

多重條件:邏輯關係爲“與”;"!"表示取反

基本匹配條件:

[!] -s, --source address[/mask][,...]:檢查報文中的源IP地址是否符合此處指定的地址或範圍;

[!] -d, --destination address[/mask][,...]:檢查報文中的目標IP地址是否符合此處指定的地址或範圍;

[!] -p, --protocol protocol:

protocol:{tcp|udp|icmp}

[!] -i, --in-interface name:數據報文的流入接口;INPUT, FORWARD  and  PREROUTING 

[!] -o, --out-interface name:數據報文的流出接口; FORWARD, OUTPUT and POSTROUTING

擴展匹配條件

隱式擴展:不用-m選項指出matchname即可使用此match的專用選項進行匹配;

-p tcp:隱含了-m tcp;

[!] --source-port,--sport port[:port]:匹配報文中傳輸層的源端口;

[!] --destination-port,--dport port[:port]:匹配報文中傳輸層的目標端口;

[!] --tcp-flags mask comp

SYN,ACK,FIN,RST,URG,PSH;

mask:要檢查的標誌位列表,以逗號分隔;

comp:必須爲1的標誌位,餘下的出現在mask列表中的標誌位則必須爲0;

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

[!] --syn:

相當於--tcp-flags  SYN,ACK,FIN,RST  SYN 

-p udp:隱含了-m udp:

[!] --source-port,--sport port[:port]:匹配報文中傳輸層的源端口;

[!] --destination-port,--dport port[:port]:匹配報文中傳輸層的目標端口;

-p icmp:隱含了-m icmp:

 [!] --icmp-type {type[/code]|typename}

8:echo-request

0:echo-reply


顯式擴展:必須使用-m選項指出matchname,有的match可能存在專用的選項;

獲取幫助:

CentOS 7:man iptables-extensions

CentOS 6:man iptables

                        1、multiport擴展

以離散或連續的方式定義多端口匹配條件;

[!] --source-ports,--sports port[,port|,port:port]...:指定多個源端口;

[!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標端口;

[!] --ports port[,port|,port:port]...:指定多個端口;

 

2、iprange擴展

以連續的ip地址範圍指明連續的多地址匹配條件;

[!] --src-range from[-to]:源IP地址;

[!] --dst-range from[-to]:目標IP地址;

3、string擴展

對報文中的應用層數據做字符串匹配檢測;

[!] --string pattern:要檢測字符串模式;

[!] --hex-string pattern:要檢測的字符串模式,16進制編碼;

    --algo {bm|kmp}

4、time擴展

根據報文到達的時間與指定的時間範圍進行匹配度檢測;

                                                --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時間;

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結束日期時間;

                                                --timestart hh:mm[:ss]

--timestop  hh:mm[:ss]

[!] --monthdays day[,day...]

[!] --weekdays day[,day...]


5、connlimit擴展

根據每客戶端IP做併發連接數匹配;

--connlimit-upto n:連接數數量小於等於n,此時應該允許;

--connlimit-above n:連接數數量大於n,此時應該拒絕;


6、limit擴展

基於收發報文的速率進行匹配;

                                        --limit rate[/second|/minute|/hour|/day]:平均速率

--limit-burst number:峯值速率

7、state擴展

狀態檢測;連接追蹤機制(conntrack);

INVALID:無法識別的狀態; 

ESTABLISHED:已建立的連接;

NEW:新連接; 

RELATED:相關聯的連接;

UNTRACKED:未追蹤的連接;

 

nf_conntrack內核模塊;

追蹤到的連接:/proc/net/nf_conntrack文件中;

能追蹤的最大連接數量定義在:/proc/sys/net/nf_conntrack_max

此值可自行定義,建議必要時調整到足夠大;

不同的協議的連接追蹤的時長:

/proc/sys/net/netfilter/

[!] --state STATE

如何開放被模式的ftp服務: 

(1) 裝載追蹤ftp協議的模塊;

# modprobe nf_conntrack_ftp

        (2) 放行命令連接

                                                                

                                                                放行新的連接

~] # iptables -A INPUT -d IP -p tcp --dport PORT -m state --state NEW -j ACCEPT

                                                                放行已建立的連接

~] # iptables -A INPUT -d IP -p tcp -m state --state ESTABLISHED -j ACCEPT


        (3) 放行數據連接

~] iptables -A INPUT -d IP -p tcp -m state --state RELATED -j ACCEPT

處理動作(目標)

-j targetname [per-target-options]

targetname:

ACCEPT:接受;

DROP:丟棄;

REJECT:拒絕;

保存和重載規則:

iptables-save > /PATH/TO/SOME_RULE_FILE 

iptables-restore < /PATH/FROM/SOME_RULE_FILE

CentOS 6:

保存規則:

service iptables save

自動保存規則至/etc/sysconfig/iptables文件中;

重載規則:

server iptables restore

從/etc/sysconfig/iptables文件中重載規則; 

開機啓動直接讀取iptables規則

將規則保存至/etc/rc.d/init.d/中並設置開機啓動

chkconfig iptables on


規則優化:

(1) 可安全放行所有入站及出站,且狀態爲ESTABLISHED的連接;

(2) 服務於同一類功能的規則,匹配條件嚴格的放前面,寬鬆放後面;

(3) 服務於不同類功能的規則,匹配報文可能性較大擴前面,較小放後面;

(4) 設置默認策略;

(a) 最後一條規則設定;

(b) 默認策略設定;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章