iptables/netfilter基礎(chǔ)

前言

防火墻工作與主機(jī)或者網(wǎng)絡(luò)邊緣箱歧,對(duì)于進(jìn)出本主機(jī)或本網(wǎng)絡(luò)的報(bào)文根據(jù)事先的檢查規(guī)則做匹配檢查矾飞,對(duì)于能夠匹配上的數(shù)據(jù)包做出相應(yīng)處理動(dòng)作。

在防火墻的工作范圍可以分為“主機(jī)防火墻”和“網(wǎng)絡(luò)防火墻”主機(jī)防火墻主要作用于在進(jìn)入或流出本機(jī)的報(bào)文呀邢;網(wǎng)絡(luò)防火墻通常設(shè)置在網(wǎng)關(guān)位置洒沦,對(duì)進(jìn)出或流出本網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)行檢驗(yàn),現(xiàn)在很多的硬件防火墻驼鹅,大部分都用作網(wǎng)絡(luò)防火墻微谓,用于保護(hù)本地整個(gè)網(wǎng)絡(luò),而網(wǎng)絡(luò)防火墻也由硬件和軟件之分输钩,不差錢的看中效率的很多都會(huì)去選擇硬件防火墻豺型,但其實(shí)軟件和硬件防火墻的作用和原理都是差不多的。

在鏈路層买乃、網(wǎng)絡(luò)層姻氨、傳輸層和應(yīng)用層都可以使用防火墻進(jìn)行判斷是否處理。
在鏈路層剪验,防火墻可以對(duì)MAC地址進(jìn)行控制肴焊;在網(wǎng)絡(luò)層,可以對(duì)源IP,目的IP功戚,ICMP進(jìn)行控制娶眷;在傳輸層,可以對(duì)源端口啸臀,目的端口届宠,甚至TCP報(bào)文中的flags位的控制;在應(yīng)用層中乘粒,可以對(duì)報(bào)文拆開檢查后控制豌注。

iptable和netfilter的關(guān)系
iptable工作在用戶空間中,就iptable自身而言灯萍,它的工作就是定義規(guī)則轧铁,可以讓內(nèi)核空間當(dāng)中的netfilter讀取這些規(guī)則,并且實(shí)現(xiàn)讓防火墻工作旦棉。
簡(jiǎn)單來講齿风,iptable工作在用戶空間,用于編寫規(guī)則绑洛,netfilter工作在內(nèi)核聂宾,根據(jù)規(guī)則匹配數(shù)據(jù)包。

netfilter

netfilter簡(jiǎn)介

介紹netfilter之前應(yīng)該先看看協(xié)議棧(TCP/IP協(xié)議棧)底層大致機(jī)制
![][1]

如圖诊笤,數(shù)據(jù)從流入之后系谐,經(jīng)過A點(diǎn),然后根據(jù)路由決策判斷數(shù)據(jù)是否需要進(jìn)入用戶空間讨跟,如果是留入用戶空間纪他,會(huì)經(jīng)過B點(diǎn),如果僅僅是經(jīng)由本機(jī)轉(zhuǎn)發(fā)的則經(jīng)過C點(diǎn)然后到達(dá)E點(diǎn)晾匠,最后流出茶袒;對(duì)于用戶空間產(chǎn)生的數(shù)據(jù)包,先經(jīng)由路由判決凉馆,決定從那個(gè)網(wǎng)卡出去薪寓,經(jīng)過D點(diǎn)亡资,然后到達(dá)E點(diǎn),最后流出向叉。
netfilter其實(shí)就是對(duì)這數(shù)據(jù)報(bào)必經(jīng)的5個(gè)點(diǎn)锥腻, 做了5個(gè)鉤子函數(shù),分別是prerouting母谎、input瘦黑、output、forword奇唤、postrouting只要數(shù)據(jù)包到達(dá)某個(gè)點(diǎn)后幸斥,就去調(diào)用我們的鉤子函數(shù),我們?cè)阢^子函數(shù)中設(shè)定了各種表,表中有鏈,鏈中有規(guī)則省容。如果有數(shù)據(jù)包被表中的鏈內(nèi)的規(guī)則命中渔扎,則執(zhí)行相應(yīng)動(dòng)作。

netfilter的結(jié)構(gòu)

netfilter作為內(nèi)核模塊運(yùn)行在內(nèi)存中,它自己維護(hù)這一塊內(nèi)存區(qū)域,這塊區(qū)域中,保存著4張表

netfilter的4表5鏈

前面說了netfilter在數(shù)據(jù)包的必經(jīng)之路上設(shè)置了5個(gè)鉤子函數(shù)钠至,對(duì)應(yīng)著5條鏈,分別是PREROUTING胎源、INPUT棉钧、OUTPUT、FORWORD涕蚤、POSTROUTING
并且根據(jù)不同功能為其配備了4個(gè)表宪卿,分別是raw、mangle万栅、nat佑钾、filter,這些表有先后順序烦粒,順序?yàn)椋簉wa-->mangle-->nat-->filter休溶。舉例說明,在PREROUTING鏈上扰她,有3張表兽掰,分別是raw、mangle和nat,那么先由raw處理徒役,然后再由mangle表處理孽尽。

三個(gè)用于防火的鏈:INPUT/OUTPUT/FORWORD

根據(jù)報(bào)文流向,報(bào)文分為三種情況
1.流入本機(jī)的報(bào)文
PREROUTING-->INPUT
2.由本機(jī)流出的報(bào)文
OUTPUT-->POSTROUTING
3.由本機(jī)轉(zhuǎn)發(fā)的報(bào)文
PREROUTING-->FORWORD-->POSTROUTING

五表的作用

nat表:顧名思義network address translation忧勿,根據(jù)設(shè)定改變數(shù)據(jù)包地址杉女,屬于一個(gè)流的包只會(huì)經(jīng)過第一個(gè)包被允許做NAT瞻讽,那么余下的包都會(huì)自動(dòng)地被做相同的操作,也就是說余下的包不會(huì)通過這個(gè)表熏挎,一個(gè)個(gè)地被NAT速勇,而是自動(dòng)完成。
mangle
raw
filter:內(nèi)建三個(gè)鏈婆瓜,INPUT、OUTPUT贡羔、FORWORD廉白,其中FORWORD所過濾的不是本機(jī)接受或產(chǎn)生的,而是經(jīng)過本機(jī)轉(zhuǎn)發(fā)的數(shù)據(jù)包乖寒。

iptables

  • 組成部分:根據(jù)規(guī)則匹配條件來嘗試匹配報(bào)文猴蹂,一旦匹配成功,就由規(guī)則定義的處理動(dòng)作作出處理
  • 匹配條件:有內(nèi)建的匹配條件和需要模塊的擴(kuò)展匹配條件
  • 處理動(dòng)作:有內(nèi)建的處理動(dòng)作楣嘁,如ACCEPT磅轻、DROP或需要模塊的處理動(dòng)作,如REJECT逐虚,還可以使用自定義鏈來處理聋溜。

iptable的鏈

iptables內(nèi)置了5個(gè)鏈,對(duì)應(yīng)著5個(gè)鉤子函數(shù)叭爱,還可以自定義鏈用于內(nèi)置鏈的擴(kuò)展和補(bǔ)充撮躁,可實(shí)現(xiàn)更靈活的規(guī)則管理機(jī)制

iptable命令:

語法:iptables [-t table] COMMAND chain [-m match] -j target
-t是指明要操作那個(gè)表,操作由COMMAND指定买雾,如增加把曼、刪除或修改、查看漓穿,作用與那個(gè)表中那個(gè)鏈上嗤军,如果是增加規(guī)則,則需要指明匹配條件晃危,與匹配命中之后的動(dòng)作

----------------------
#COMMAND: #有三類叙赚,對(duì)鏈管理的命令、對(duì)規(guī)則管理的命令和查看
#鏈管理命令
-N:new, 自定義一條新的規(guī)則鏈僚饭;
-X: delete纠俭,刪除自定義的規(guī)則鏈;
    注意:僅能刪除 用戶自定義的 引用計(jì)數(shù)為0的浪慌、空的鏈冤荆;
-P:Policy,設(shè)置默認(rèn)策略权纤;對(duì)filter表中的鏈而言钓简,其默認(rèn)策略有:
    ACCEPT:接受
    DROP:丟棄
    REJECT:拒絕
-E:重命名自定義鏈乌妒;引用計(jì)數(shù)不為0的自定義鏈不能夠被重命名,也不能被刪除外邓;

#規(guī)則管理命令
-A: append撤蚊,追加,在鏈中追加一條規(guī)則损话;
-I:insert侦啸,插入,后面跟上序號(hào)丧枪,為空為插入第一條光涂;
-D:delete,刪除拧烦,可以用以下兩種方法刪除忘闻;               
    (1) 指明規(guī)則序號(hào);
    (2) 指明規(guī)則本身恋博;
-R:replace,替換指定的規(guī)則齐佳;
-F:flush,清空指定規(guī)則鏈债沮,為空則清空表中所有鏈
-Z:zero炼吴,置零;iptables的每條規(guī)則有2個(gè)計(jì)數(shù)器
    (1) 匹配到的報(bào)文的個(gè)數(shù)疫衩;
    (2) 匹配到的所有報(bào)文的大小之和缺厉;
----------------------
#match匹配條件
#如果是基本匹配條件,無需加載任何模塊隧土,有iptables/netfilter提供提针。
[!] -s, --source  address[/mask][,...]:檢查報(bào)文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, --destination address[/mask][,...]:檢查報(bào)文中的目標(biāo)IP地址是否符合此處指定的地址或范圍曹傀;
注意:如果要匹配所有IP辐脖,則可以使用0.0.0.0
[!] -p, --protocol protocol #protocol可以是tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, 或者使用all表示全部,也可以使用協(xié)議代碼皆愉,協(xié)議代碼和協(xié)議對(duì)應(yīng)關(guān)系在/etc/protocols中可以查看

[!] -i, --in-interface name:數(shù)據(jù)報(bào)文流入的接口(網(wǎng)卡接口)嗜价;只能應(yīng)用于數(shù)據(jù)報(bào)文流入的環(huán)節(jié),只能應(yīng)用于PREROUTING幕庐,INPUT和FORWARD鏈久锥;
[!] -o, --out-interface name:數(shù)據(jù)報(bào)文流出的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流出的環(huán)節(jié)异剥,只能應(yīng)用于FORWARD瑟由、OUTPUT和POSTROUTING鏈; 

iptables的匹配條件

iptables支持兩種擴(kuò)展匹配:隱式擴(kuò)展和顯示擴(kuò)展冤寿,隱式擴(kuò)展在使用-p選項(xiàng)指明了特定的協(xié)議時(shí)歹苦,無需再同時(shí)使用-m選項(xiàng)指明青伤;顯示擴(kuò)展需要用-m來指定;擴(kuò)展可以包含多個(gè)子選項(xiàng)殴瘦。

#隱式擴(kuò)展選項(xiàng)
-p tcp的子選項(xiàng):
[!] --source-port, --sport port[:port]:匹配報(bào)文的源端口狠角;可以是端口范圍;
[!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口蚪腋;可以是端口范圍丰歌;
[!] --tcp-flags  mask  comp
匹配指定的flags,mask是需要檢查的flags屉凯,comp是必須為1的flags,沒在comp指定上的flags則必須為0
例如:“-p tcp --tcp-flags  SYN,ACK,FIN,RST  SYN”表示立帖,要檢查的標(biāo)志位為SYN,ACK,FIN,RST四個(gè),其中SYN必須為1神得,余下的必須為0厘惦;
[!] --syn:用于匹配第一次握手偷仿,相當(dāng)于`--tcp-flags  SYN,ACK,FIN,RST  SYN`哩簿; 
----------------
-p udp的子選項(xiàng)
udp 
[!] --source-port, --sport port[:port]:匹配報(bào)文的源端口;可以是端口范圍酝静;
[!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口节榜;可以是端口范圍;
-----------------
-p icmp的子選項(xiàng)
[!] --icmp-type {type[/code]|typename}
    echo-request:8 #icmp的請(qǐng)求類型代碼
    echo-reply:0   #icmp的回復(fù)類型代碼

顯式擴(kuò)展必須使用-m選項(xiàng)指明要調(diào)用的擴(kuò)展模塊的擴(kuò)展機(jī)制

1.multiport 以離散或連續(xù)的 方式定義多端口匹配條件别智,最多15個(gè)宗苍,注意:如45:800,雖然開放了45至800之間的所有端口薄榛,但Multiport只算2個(gè)
[!] --source-ports,--sports port[,port|,port:port]...:指定多個(gè)源端口讳窟;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多個(gè)目標(biāo)端口;

例如:
# iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
//允許訪問目標(biāo)為172.16.0.7的tcp,22,80,139,445,3306敞恋。5個(gè)端口

-------------------
2.iprange 以連續(xù)地址塊的方式來指定多個(gè)IP
[!] --src-range from[-to]
[!] --dst-range from[-to]

例如:
# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
//拒絕地址范圍172.16.0.61-172.16.0.70的主機(jī)去訪問目標(biāo)172.16.0.7丽啡,tcp的22,80,139,445,3306端口
---------------------------
3.time 匹配指定時(shí)間范圍

--timestart hh:mm[:ss]  #開始時(shí)間
--timestop hh:mm[:ss]   #結(jié)束時(shí)間
[!] --weekdays day[,day...] #也可以以周做單位來匹配
[!] --monthdays day[,day...]
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] #以日期做單位
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
 --kerneltz:使用內(nèi)核配置的時(shí)區(qū)而非默認(rèn)的UTC
------------------------
4.string  通過某中模式來匹配字符串,需要內(nèi)核大于或等于2.6.14

--algo {bm|kmp} #指定匹配模式策略
[!] --string pattern
[!] --hex-string pattern
                    
--from offset
--to offset

另外此模塊對(duì)于加密傳輸?shù)男畔]辦法匹配硬猫,所以只能用于明文匹配

例子:
~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
//在OUTPUT鏈上加入規(guī)則补箍,拒絕string中包含有g(shù)ay字符串的數(shù)據(jù)包。使用bm模式策略來匹配
-------------------
5.connlimit 匹配單個(gè)IP最大連接數(shù)
--connlimit-upto n
--connlimit-above n

例如:
~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
//限制172.16.0.7的tcp 22單IP訪問數(shù)啸蜜,connlimit-above即超過2個(gè)就拒絕

6.limit 使用令牌桶來限制速率
--limit rate[/second|/minute|/hour|/day] #允許的平均數(shù)量坑雅,如1分鐘我只允許10個(gè)包,則10/minute
--limit-burst number    #令牌桶存儲(chǔ)的令牌數(shù)量
例如
允許每分鐘10次ping衬横,但第一次可以ping 20次裹粤。20次之后按照RATE計(jì)算。所以蜂林,前20個(gè)ping包每秒能正常返回蛹尝,從第21個(gè)ping包開始后豫,每6秒允許一次ping:
#iptables -A INPUT -d ServerIP -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 20 -j ACCEPT

限制本機(jī)某tcp服務(wù)接收新請(qǐng)求的速率:--syn, -m limit


7.state “state”擴(kuò)展是“conntrack”模塊的一個(gè)子集,通過數(shù)據(jù)包的連接追蹤狀態(tài)來設(shè)置防火墻突那。
[!] --state state   #有以下幾種狀態(tài)
INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
NEW: 新連接請(qǐng)求挫酿;
ESTABLISHED:已建立的連接;
INVALID:無法識(shí)別的連接愕难;
RELATED:相關(guān)聯(lián)的連接早龟,當(dāng)前連接是一個(gè)新請(qǐng)求,但附屬于某個(gè)已存在的連接猫缭;
UNTRACKED:未追蹤的連接葱弟;

對(duì)于匹配條件,在匹配條件前面的[!]意思是取反猜丹。

iptables的處理動(dòng)作

iptables的處理動(dòng)作是指如果數(shù)據(jù)包被規(guī)則命中之后芝加,做出什么樣的動(dòng)作,比如說射窒,ACCEPT藏杖、DROP等,以下是比較常見的規(guī)則脉顿。

DNAT:目標(biāo)地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
REDIRECT:端口重定向
MASQUERADE:地址偽裝(其實(shí)也是源地址轉(zhuǎn)換)蝌麸,適用于動(dòng)態(tài)源地址 RETURN:用于自定義鏈,自定義鏈中匹配完畢后返回到自定義的前一個(gè)鏈中繼續(xù)向下匹配

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艾疟,一起剝皮案震驚了整個(gè)濱河市来吩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔽莱,老刑警劉巖弟疆,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盗冷,居然都是意外死亡怠苔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門正塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘀略,“玉大人,你說我怎么就攤上這事乓诽≈难颍” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鸠天,是天一觀的道長(zhǎng)讼育。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么奶段? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任饥瓷,我火速辦了婚禮,結(jié)果婚禮上痹籍,老公的妹妹穿的比我還像新娘呢铆。我一直安慰自己,他們只是感情好蹲缠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布棺克。 她就那樣靜靜地躺著,像睡著了一般线定。 火紅的嫁衣襯著肌膚如雪娜谊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天斤讥,我揣著相機(jī)與錄音纱皆,去河邊找鬼。 笑死芭商,一個(gè)胖子當(dāng)著我的面吹牛派草,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蓉坎,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼澳眷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胡嘿!你這毒婦竟也來了蛉艾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤衷敌,失蹤者是張志新(化名)和其女友劉穎勿侯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴罗,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡助琐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了面氓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兵钮。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舌界,靈堂內(nèi)的尸體忽然破棺而出掘譬,到底是詐尸還是另有隱情,我是刑警寧澤呻拌,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布葱轩,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏靴拱。R本人自食惡果不足惜垃喊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袜炕。 院中可真熱鬧本谜,春花似錦、人聲如沸偎窘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽评架。三九已至眷茁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纵诞,已是汗流浹背上祈。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浙芙,地道東北人登刺。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗡呼,于是被迫代替她去往敵國(guó)和親纸俭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.安全技術(shù) (1)入侵檢測(cè)與管理系統(tǒng)(Intrusion Detection Systems): 特點(diǎn)是不阻斷任...
    尛尛大尹閱讀 2,473評(píng)論 0 2
  • iptables簡(jiǎn)介 netfilter/iptables(簡(jiǎn)稱為iptables)組成Linux平臺(tái)下的包過濾防...
    yshenhn閱讀 112,419評(píng)論 2 78
  • 1.1 防火墻的概念 Firewall(防火墻):組件南窗,工作在網(wǎng)絡(luò)邊緣(主機(jī)邊緣)揍很,對(duì)進(jìn)出網(wǎng)絡(luò)數(shù)據(jù)包基于一定的規(guī)則...
    扎啤閱讀 2,103評(píng)論 0 0
  • 1 前言 防火墻(Firewall),就是一個(gè)隔離工具,工作于主機(jī)或者網(wǎng)絡(luò)的邊緣,對(duì)于進(jìn)出本主機(jī)或本網(wǎng)絡(luò)的報(bào)文,根...
    魏鎮(zhèn)坪閱讀 6,987評(píng)論 1 23
  • 防火墻的概念iptables的簡(jiǎn)介iptables命令網(wǎng)絡(luò)防火墻NATfirewalld服務(wù) 一、防火墻的概念 (...
    哈嘍別樣閱讀 1,828評(píng)論 0 1