溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

netfilter基礎(chǔ)及iptables基本應(yīng)用

發(fā)布時(shí)間:2020-06-29 01:32:55 來(lái)源:網(wǎng)絡(luò) 閱讀:843 作者:plx1985 欄目:安全技術(shù)

防火墻及netfilter基礎(chǔ)

firewall

工作于主機(jī)或網(wǎng)絡(luò)的邊緣,對(duì)于進(jìn)出的報(bào)文根據(jù)事先定義的規(guī)則作檢查,對(duì)能夠被規(guī)則匹配的報(bào)文作出相應(yīng)處理的組件。

可分為主機(jī)防火墻和網(wǎng)絡(luò)防火墻

可以是軟件,也可以是硬件,專業(yè)的硬件防火墻:checkpoint, netscreen

 

iptables:規(guī)則管理工具,是工作于用戶空間的程序,可自動(dòng)檢查語(yǔ)法錯(cuò)誤;

netfilter: 網(wǎng)絡(luò)過(guò)濾器, 是工作于內(nèi)核空間TCP/IP網(wǎng)絡(luò)協(xié)議棧上的框架;

 

IDS:Intrusion Detecting System,即***檢測(cè)系統(tǒng)

NIDS:網(wǎng)絡(luò)***檢測(cè)系統(tǒng)

HIDS:主機(jī)***檢測(cè)系統(tǒng)

 

IPS: Intrusion Protec System,即***防御系統(tǒng)

 

HoneyPot: 蜜罐

 

Iptables

 

發(fā)展歷程

ipfw --> ipchains--> iptables/netfilter

 

Linux本無(wú)防火墻系統(tǒng),參考OpenBSD移植而來(lái),取名ipfw;后發(fā)現(xiàn)firewall的防護(hù)功能依賴于眾多串在一起的規(guī)則鏈來(lái)實(shí)現(xiàn),故改名ipchains;再后來(lái)規(guī)則被規(guī)劃的越來(lái)越詳細(xì),防護(hù)功能依賴于多條鏈結(jié)合來(lái)實(shí)現(xiàn),最終定名iptables/netfilter

 

路由發(fā)生的時(shí)刻

報(bào)文進(jìn)入本機(jī)后:

判斷目標(biāo)地址

報(bào)文離開(kāi)本機(jī)之前:

判斷經(jīng)由哪個(gè)接口發(fā)出;

 

報(bào)文流向經(jīng)由的位置

到本內(nèi)部:prerouting, input

由本機(jī)發(fā)出:output, postrouting

由本機(jī)轉(zhuǎn)發(fā):prerouting, forward, postrouing

 

規(guī)則的組成部分

報(bào)文的匹配條件, 匹配之后如何處理

 

匹配條件:基本匹配條件、擴(kuò)展匹配條件

如何處理:內(nèi)建處理機(jī)制、自定義處理機(jī)制(自定義的鏈)

 

注意:報(bào)文不可能經(jīng)由自定義鏈,自定義鏈只有在內(nèi)置鏈上被引用才能生效(即做為自定義目標(biāo))

 

netfilter規(guī)則的功能

filter:過(guò)濾

NAT Server(Network Address Translation):地址轉(zhuǎn)換

mangle:修改報(bào)文首部中的某些信息

raw:關(guān)閉nat表上啟用的連接追蹤功能

 

以上即iptables四表

 

hooks function(鉤子函數(shù))

prerouting:

進(jìn)入本機(jī)后路由功能發(fā)生前

①:raw,mangle,nat

input:

到達(dá)本機(jī)內(nèi)部

②:mangle,filter

output:

由本機(jī)發(fā)出

③:raw,mangle,nat,filter

forward:

由本機(jī)轉(zhuǎn)發(fā)

④:mangle,filter

postrouting:

路由功能發(fā)生后,即將離開(kāi)本機(jī)前

⑤:mangle,nat

 

以上即iptables五鏈CHAIN),組合起來(lái)即構(gòu)成內(nèi)核中專門用于實(shí)現(xiàn)報(bào)文檢查功能的框架--netfilter

各鉤子存有眾多規(guī)則,按功能存放,具有相同功能的規(guī)則集中存放,而不同功能的規(guī)則單獨(dú)存放,報(bào)文到達(dá)后會(huì)按照功能的優(yōu)先級(jí)按次序依次檢查,由此組成iptables的表

 

各功能實(shí)現(xiàn)位置

filter:input, forward, output

nat:prerouting(修改目標(biāo)主機(jī)地址), output, postrouting(修改源主機(jī)地址)

mangle:prerouting, input, forward, output, postrouting

raw:prerouting, output,nat的補(bǔ)充功能,只能發(fā)生在nat的前半段

 

功能的優(yōu)先級(jí)

由高而低:raw --> mangle --> nat --> filter

 

數(shù)據(jù)包過(guò)濾匹配流程示意圖

netfilter基礎(chǔ)及iptables基本應(yīng)用

 

添加規(guī)則時(shí)的考量點(diǎn)

(1) 要實(shí)現(xiàn)的功能:判斷添加在哪個(gè)表上;

(2) 報(bào)文流向及經(jīng)由路徑:判斷添加在哪個(gè)鏈上;

 

鏈上的規(guī)則次序即為檢查次序,因此有一定的法則

(1) 同類規(guī)則,匹配范圍小的放上面;

(2) 不同類規(guī)則,匹配報(bào)文幾率較大的放上面;

(3) 應(yīng)該設(shè)置默認(rèn)策略;


iptables基本用法

iptables命令

生成規(guī)則,送往netfilter;

規(guī)則通過(guò)內(nèi)核接口直接送至內(nèi)核;立即生效,但不會(huì)永久有效;

要想永久有效需保存至配置文件,且此配置文件需開(kāi)機(jī)自動(dòng)加載或由用戶手動(dòng)加載

 

語(yǔ)法格式

iptables[-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

 

常用選項(xiàng)

-t TABLE:指明要操作的表,省略時(shí)默認(rèn)為filter, 共有filter, nat, mangle, raw四個(gè)表可用;

SUBCOMMAND:子命令

CHAIN:指明要操作的鏈

CRETERIA:指明匹配條件

-j TARGET:指明處理動(dòng)作

 

SUBCOMMAND(子命令)

 

對(duì)鏈的操作

-F:flush,清空指定表的指定鏈上所有規(guī)則,省略鏈名時(shí),清空默認(rèn)表中所有鏈的所有規(guī)則;

 

-N:new, 新建一個(gè)用戶自定義的鏈,自定義鏈只能作為默認(rèn)鏈上的跳轉(zhuǎn)對(duì)象,即在默認(rèn)鏈上通過(guò)引用來(lái)生效自定義鏈;

 

-X:drop,刪除用戶自定義的空鏈,內(nèi)置鏈無(wú)法刪除;

 

-Z:zero,將規(guī)則的計(jì)數(shù)器置0;每個(gè)鏈上的每條規(guī)則都有兩個(gè)計(jì)數(shù)器,一個(gè)記錄被當(dāng)前規(guī)則所匹配到的報(bào)文個(gè)數(shù),另一個(gè)記錄被當(dāng)前規(guī)則所匹配到的報(bào)文大小之和;

 

-P:policy,設(shè)置鏈的默認(rèn)處理機(jī)制,當(dāng)所有鏈都無(wú)法匹配,或能匹配到但無(wú)法做出有效處理機(jī)制時(shí),默認(rèn)處理機(jī)制即生效;

filter表的可用策略:ACCEPT、DROP、REJECT

 

-E:rename,重命名自定義鏈;

 

注意:被引用中的鏈,無(wú)法刪除和改名

netfilter基礎(chǔ)及iptables基本應(yīng)用

 

對(duì)鏈上規(guī)則的操作

-A:append,在鏈尾追加一條規(guī)則;

-I:insert,在指定位置插入一條規(guī)則;

-Ddelete,刪除指定的規(guī)則;                

-R:replace,替換指定的規(guī)則;

 

查看操作

-L:list,列出指定鏈上的所有規(guī)則;

-n:numeric,以數(shù)字格式顯示地址和端口號(hào),即不反解;

-v:verbose,詳細(xì)格式,顯示規(guī)則的詳細(xì)信息,包括規(guī)則計(jì)數(shù)器等;

--line-numbers:顯示規(guī)則編號(hào);

-x:exactly,顯示計(jì)數(shù)器的精確值,即不做單位換算;

netfilter基礎(chǔ)及iptables基本應(yīng)用

pktsbytes target     prot opt in     out    source      destination

pkts:被本規(guī)則所匹配到的報(bào)文個(gè)數(shù);

bytes:被本規(guī)則所匹配到的所有報(bào)文的大小之和;

target: 處理目標(biāo) (目標(biāo)可以為用戶自定義的鏈);

prot: 協(xié)議 {tcp, udp, icmp};

opt:可選項(xiàng);

in:數(shù)據(jù)包流入接口;

out:數(shù)據(jù)包流出接口;

source:源地址;

destination:目標(biāo)地址;

 

CRETERIA(匹配條件)

檢查IP首部,檢查TCP、UDP或ICMP首部;

基于擴(kuò)展機(jī)制,也可以進(jìn)行額外的檢查,如做連接追蹤等;

可同時(shí)指定多個(gè)匹配條件,此時(shí)指定的所有條件要都滿足才能被匹配到;

 

通用匹配

-s, --src, --source  IP|Network:檢查報(bào)文源IP地址;

-d, --dst,--destination:檢查報(bào)文目標(biāo)IP地址;

-p,--protocol:檢查報(bào)文中的協(xié)議,即ip首部中的protocols所標(biāo)識(shí)的協(xié)議(tcp、udp、icmp三者之一);

-i,--in-interface:檢查報(bào)文的流入接口;通常只用于PREROUTING, INPUT,FORWARD鏈上的規(guī)則;

-o,--out-interface:檢查報(bào)文的流出接口;通常只用于FORWARD,  OUTPUT, POSTROUTING鏈上的規(guī)則;

 

注意:可以取反,在選項(xiàng)前加“!

 

擴(kuò)展匹配

使用iptables的模塊實(shí)現(xiàn)擴(kuò)展性檢查機(jī)制

隱式擴(kuò)展

如果在通用匹配上使用-p選項(xiàng)指明了協(xié)議的話,[-m 模塊名稱]可省略

tcp

--dport:目標(biāo)端口

--sport:源端口

--tcp-flags LIST1 LIST2

LIST1:要檢查的標(biāo)識(shí)位

LIST2:在LIST1中出現(xiàn)過(guò)的,且必須為1標(biāo)記位,而余下的則必須為0

示例:“--tcp-flags syn,ack,fin,rst   syn”:表示只檢查4個(gè)標(biāo)識(shí)位syn,ack,fin,rst,且syn必須=0,而ack,fin,rst必須=1

--syn:用于匹配tcp會(huì)話三次握手的第一次

 

udp

--dport

--sport

 

icmp

--icmp-type

8:echo request(ping請(qǐng)求)

0:echo reply(ping響應(yīng))

 

示例:配置本機(jī)的dns服務(wù),并放行之;默認(rèn)策略為drop

netfilter基礎(chǔ)及iptables基本應(yīng)用

注意:規(guī)則12只能放行外機(jī)指向本機(jī)做解析,若無(wú)規(guī)則34,本機(jī)自己請(qǐng)求的解析將無(wú)法被放行

  

顯式擴(kuò)展

必須指明使用的擴(kuò)展機(jī)制

格式:-m模塊名稱,每個(gè)模塊會(huì)引入新的匹配機(jī)制

查詢可用的模塊命令

rpm -ql iptables

小寫(xiě)字母,以“.so”結(jié)尾

 

multiport擴(kuò)展

以離散定義多端口匹配;最多指定15個(gè)端口;

 

專用選項(xiàng):

--source-ports,--sports PORT[,PORT,...]

--destination-ports,--dports PORT[,PORT,...]

--portsPORT[,PORT,...]

 

示例

# iptables -I INPUT 1 -d 172.16.100.11 -ptcp -m multiport --dports 22,80,443 -j ACCEPT

# iptables -I OUTPUT 1 -s 172.16.100.11 -ptcp -m multiport --sports 22,80,443 -j ACCEPT

 

iprange擴(kuò)展

指定連續(xù)的ip地址范圍;在匹配非整個(gè)網(wǎng)絡(luò)地址時(shí)使用;

 

專用選項(xiàng):

[!]--src-range IP[-IP]

[!]--dst-range IP[-IP]

 

示例

# iptables -A INPUT -d 172.16.100.11 -p tcp--dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.11 -p tcp--sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

 

string擴(kuò)展

檢查報(bào)文中出現(xiàn)的字符串,與給定的字符串作匹配;

 

字符串匹配檢查算法:

kmp,bm

 

專用選項(xiàng):

--algo{kmp|bm}

--string"STRING"

--hex-string "HEX_STRING":HEX_STRING為編碼成16進(jìn)制格式的字串;

 

示例

# iptables -I OUTPUT 1 -s 172.16.100.11 -ptcp --sport 80 -m string --string "sex" --algo kmp -j REJECT

 

time擴(kuò)展

基于時(shí)間區(qū)間做訪問(wèn)控制

 

專用選項(xiàng):

--datestartYYYY[-MM][-DD][hh[:mm[:ss]]]

--dattestop

 

--timestart

--timestop

 

--weekdaysDAY1[,DAY2,...]

 

示例

#iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT

 

connlimit擴(kuò)展

基于連接數(shù)作限制;對(duì)每個(gè)IP能夠發(fā)起的并發(fā)連接數(shù)作限制;

 

專用選項(xiàng):

--connlimit-above[n]

 

示例:

#iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit--connlimit-above 5 -j REJECT

 

limit擴(kuò)展

基于發(fā)包速率作限制;

 

專用選項(xiàng):令牌桶算法

--limit  n[/second|/minute|/hour|/day]

--limit-burstn

 

示例:

# iptables -R INPUT 3 -d 172.16.100.11 -picmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

 

state擴(kuò)展

 

 

-j TARGET

-j(jump),跳轉(zhuǎn)目標(biāo)

內(nèi)置目標(biāo)

ACCEPT:接受

DROP:丟棄

REJECT:拒絕

 

自定義連接


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI