防火墻iptables基本原理

一术吝、防火墻原理

  • 防火墻一種位于內(nèi)部網(wǎng)絡(luò)外部網(wǎng)絡(luò)之間的網(wǎng)絡(luò)安全系統(tǒng)弄痹。一項(xiàng)信息安全的防護(hù)系統(tǒng)。按照給定的規(guī)則哀蘑,允許或者限制網(wǎng)絡(luò)報(bào)文通過诚卸。
  • 防火墻根據(jù)其管理的范圍來分可以將其劃分為主機(jī)防火墻網(wǎng)絡(luò)防火墻;根據(jù)其工作機(jī)制來區(qū)分又可分為包過濾型防火墻(netfilter)代理服務(wù)器(Proxy)绘迁。
  • 主要工作在網(wǎng)絡(luò)層合溺,針對(duì) TCP/IP 數(shù)據(jù)包實(shí)施過濾和限制,屬于典型的包過濾防火墻(或稱為網(wǎng)絡(luò)層防火墻)缀台。
  • 在這里主要通過iptables工具添加“規(guī)則”棠赛,Linux主機(jī)防火墻由用戶態(tài)iptables工具內(nèi)核態(tài)netfilter模塊來實(shí)現(xiàn)。

二、包過濾型防火墻的工作原理

  • 包過濾型防火墻主要依賴于Linux內(nèi)核軟件netfilter睛约,它是一個(gè)Linux內(nèi)核“安全框架”鼎俘,而iptables是內(nèi)核軟件netfilter的配置工具,工作于用戶空間辩涝。iptables/netfilter組合就是Linux平臺(tái)下的過濾型防火墻贸伐,并且這個(gè)防火墻軟件是免費(fèi)的,可以用來替代商業(yè)防火墻軟件怔揩,來完成網(wǎng)絡(luò)數(shù)據(jù)包的過濾捉邢,修改,重定向以及網(wǎng)絡(luò)地址轉(zhuǎn)換(nat)等功能商膊。

  • Linux網(wǎng)絡(luò)管理員通過配置iptables規(guī)則以及對(duì)應(yīng)的網(wǎng)路數(shù)據(jù)包處理邏輯伏伐,當(dāng)網(wǎng)絡(luò)數(shù)據(jù)包符合這樣的規(guī)則時(shí),就做執(zhí)行預(yù)先定義好的相應(yīng)的處理邏輯晕拆∶牯幔可以簡單的總結(jié)為:

IF network_pkg match rule; THEN
    handler
FI
  • 其中規(guī)則可以包括匹配數(shù)據(jù)報(bào)文的源地址,目的地址实幕,傳輸層協(xié)議(TCP/UDP/ICMP/..)以及應(yīng)用層協(xié)議(HTTP/FTP/SMTP/..)等吝镣,處理邏輯就是根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)茬缩,拒絕(reject)赤惊,丟棄(drop)等。

三凰锡、關(guān)卡與鏈

  • 一個(gè)客戶端的數(shù)據(jù)報(bào)文和服務(wù)器的交互流程就如下圖所示:


    image.png
     所以為了使防火墻達(dá)到包過濾的目的,我們需要在數(shù)據(jù)報(bào)文流經(jīng)的路徑上圈暗,設(shè)置一些關(guān)卡: 只有讓所有進(jìn)出的報(bào)文都流經(jīng)這些關(guān)卡中掂为, 同時(shí)我們?cè)陉P(guān)卡上設(shè)置一些條件, 報(bào)文經(jīng)過檢查后员串,符合放行條件的才給放行, 而那些不符合不達(dá)標(biāo)的條件的報(bào)文則會(huì)被阻止勇哗,不能夠放行。
     在Linux主機(jī)中的防火墻“iptables”中寸齐,**關(guān)卡就稱之為【鏈】**欲诺,所謂的 **條件就稱之為【規(guī)則】**,**配置使用防火墻渺鹦,其實(shí)就是在相應(yīng)的鏈中添加規(guī)則**扰法。
    
  • Linux主機(jī)防火墻中設(shè)置了有5道關(guān)卡,即【5鏈】

netfilter是工作于內(nèi)核空間當(dāng)中的一系列網(wǎng)絡(luò)(TCP/IP)協(xié)議棧的鉤子(hook)毅厚,為內(nèi)核模塊在網(wǎng)絡(luò)協(xié)議棧中的不同位置注冊(cè)回調(diào)函數(shù)(callback)塞颁。也就是說,在數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)協(xié)議棧的不同位置時(shí)做相應(yīng)的由iptables配置好的處理邏輯。netfilter中的五個(gè)鉤子(這里也稱為五個(gè)關(guān)卡)PRE_ROUTING祠锣,INPUT酷窥,F(xiàn)ORWARD,OUTPUT伴网,POST_ROUTING蓬推,網(wǎng)絡(luò)數(shù)據(jù)包的流向圖如下圖所示:

image.png

  1. 當(dāng)主機(jī)/網(wǎng)絡(luò)服務(wù)器網(wǎng)卡收到一個(gè)數(shù)據(jù)包之后進(jìn)入內(nèi)核空間的TCP/IP協(xié)議棧進(jìn)行層層解封裝
  2. PRE_ROUTING: 剛剛進(jìn)入網(wǎng)絡(luò)層的數(shù)據(jù)包通過PRE_ROUTING關(guān)卡時(shí),要進(jìn)行一次路由選擇澡腾,當(dāng)目標(biāo)地址為本機(jī)地址時(shí)沸伏,數(shù)據(jù)進(jìn)入INPUT,非本地的目標(biāo)地址進(jìn)入FORWARD(需要本機(jī)內(nèi)核支持IP_FORWARD)蛋铆,所以目標(biāo)地址轉(zhuǎn)換通常在這個(gè)關(guān)卡進(jìn)行
  3. INPUT:經(jīng)過路由之后送往本地的數(shù)據(jù)包經(jīng)過此關(guān)卡馋评,所以過濾INPUT包在此點(diǎn)關(guān)卡進(jìn)行
  4. FORWARD:經(jīng)過路由選擇之后要轉(zhuǎn)發(fā)的數(shù)據(jù)包經(jīng)過此關(guān)卡,所以網(wǎng)絡(luò)防火墻通常在此關(guān)卡配置
  5. OUTPUT:由本地用戶空間應(yīng)用進(jìn)程產(chǎn)生的數(shù)據(jù)包過此關(guān)卡刺啦,所以O(shè)UTPUT包過濾在此關(guān)卡進(jìn)行
  6. POST_ROUTING:剛剛通過FORWARD和OUTPUT關(guān)卡的數(shù)據(jù)包要通過一次路由選擇由哪個(gè)接口送往網(wǎng)絡(luò)中留特,經(jīng)過路由之后的數(shù)據(jù)包要通過POST_ROUTING此關(guān)卡,源地址轉(zhuǎn)換通常在此點(diǎn)進(jìn)行

除input 和 output 兩個(gè)鏈玛瘸,其他三個(gè)鏈?zhǔn)亲鳛橐恍┚W(wǎng)關(guān)路由器設(shè)備時(shí)才會(huì)使用蜕青。

根據(jù)實(shí)際的場(chǎng)景,數(shù)據(jù)報(bào)文的流向:

  1. PREROUTING -> INPUT -> Process -> OUTPUT -> POSTROUTING(外網(wǎng) 到本機(jī)的報(bào)文)
  2. PREROUTING -> FORWARD -> POSTROUTING(由本機(jī)路由器 轉(zhuǎn)發(fā)的報(bào)文)
  3. OUTPUT -> POSTROUTING(本機(jī)進(jìn)程發(fā)出的報(bào)文)

四糊渊、4表5鏈N規(guī)則

  • 鏈和規(guī)則之間的關(guān)系:
    當(dāng)報(bào)文經(jīng)過某一個(gè)關(guān)卡時(shí)右核,這個(gè)關(guān)卡上的“規(guī)則”不止一條,很多條規(guī)則會(huì)按照順序逐條匹配渺绒,將在此關(guān)卡的所有規(guī)則組織稱“鏈”就很適合贺喝,對(duì)于經(jīng)過的數(shù)據(jù)包按照順序逐條匹配“規(guī)則”。如下圖所示:


    image.png

    規(guī)則:就是是滿足某個(gè)條件宗兼,就做什么事情躏鱼,由條件+操作組合而成。其操作: -j ACCEPT|DROP(允許/不允許)來表示殷绍。
    每個(gè)關(guān)卡中可以設(shè)置多條“規(guī)則”染苛, 每一個(gè)關(guān)卡中由多條規(guī)則串在一起的就叫“鏈”。

    每一條“鏈”上的一串規(guī)則里面有些功能是相似的主到,比如茶行,A類規(guī)則都是對(duì)IP或者端口進(jìn)行過濾,B類規(guī)則都是修改報(bào)文登钥,我們考慮能否將這些功能相似的規(guī)則放到一起畔师,這樣管理iptables規(guī)則會(huì)更方便。iptables把具有相同功能的規(guī)則集合叫做“表”怔鳖,并且定一個(gè)四種表:
    
1. filter表: 數(shù)據(jù)包過濾茉唉;與之對(duì)應(yīng)的內(nèi)核模塊是iptables_filter固蛾。包含三個(gè)規(guī)則鏈:INPUT、FORWARD度陆、OUTPUT艾凯;
2. nat表:負(fù)責(zé)網(wǎng)絡(luò)地址轉(zhuǎn)換,用來修改數(shù)據(jù)包中的源懂傀、目標(biāo)IP地址或端口趾诗;與之對(duì)應(yīng)的內(nèi)核模塊是iptables_nat。包含四個(gè)規(guī)則鏈:PREROUTING蹬蚁、INPUT恃泪、OUTPUT、POSTROUTING犀斋;
3. mangle表:修改數(shù)據(jù)包內(nèi)容贝乎,用來做流量整形的,給數(shù)據(jù)包設(shè)置標(biāo)記; 與之對(duì)應(yīng)的內(nèi)核模塊是iptables_mangle叽粹。包含五個(gè)規(guī)則鏈:PREROUTING览效、INPUT、FORWARD虫几、OUTPUT锤灿、POSTROUTING;
4. raw表:確定是否對(duì)該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤辆脸;與之對(duì)應(yīng)的內(nèi)核模塊是iptables_raw但校。包含兩個(gè)規(guī)則鏈,OUTPUT啡氢、PREROUTING状囱。
  • 4表5鏈N規(guī)則的之間構(gòu)成的關(guān)系如下圖所示:
    image.png

    還需要注意的一點(diǎn)兒是,因?yàn)閿?shù)據(jù)包經(jīng)過一個(gè)關(guān)卡的時(shí)候倘是,會(huì)將“鏈”中所有的“規(guī)則”都按照順序逐條匹配浪箭,為相同功能的“規(guī)則”屬于同一個(gè)“表”。那么辨绊,哪些“表”中的規(guī)則會(huì)放到“鏈”的最前面執(zhí)行呢?這時(shí)候就涉及一個(gè)優(yōu)先級(jí)的問題匹表。iptables為我們提供了四張“表”门坷,當(dāng)它們處于同一條“鏈”的時(shí)候,它們的執(zhí)行優(yōu)先級(jí)關(guān)系如下: raw -> mangle -> nat -> filter

五袍镀、數(shù)據(jù)包經(jīng)過過濾型防火墻的流程

image.png

六默蚌、ipables規(guī)則

iptables規(guī)則由兩部分組成,報(bào)文的匹配條件和匹配到之后的處理動(dòng)作苇羡。

  1. 匹配條件:根據(jù)協(xié)議報(bào)文特征指定匹配條件绸吸,基本匹配條件和擴(kuò)展匹配條件
  2. 處理動(dòng)作:內(nèi)建處理機(jī)制由iptables自身提供的一些處理動(dòng)作

設(shè)置iptables規(guī)則時(shí)需要考量的要點(diǎn):

  1. 根據(jù)要實(shí)現(xiàn)哪種功能,判斷添加在那張“表”上

  2. 根據(jù)報(bào)文流經(jīng)的路徑,判斷添加在那個(gè)“鏈”上

    • 到本主機(jī)某進(jìn)程的報(bào)文:PreRouting -> Input -> Process -> Output -> PostRouting
    • 由本主機(jī)轉(zhuǎn)發(fā)的報(bào)文:PreRouting -> Forward -> PostRouting

對(duì)于每一條“鏈”上其“規(guī)則”的匹配順序锦茁,排列好檢查順序能有效的提高性能攘轩,因此隱含一定的法則:

  1. 同類規(guī)則(訪問同一應(yīng)用),匹配范圍小的放上面
  2. 不同類規(guī)則(訪問不同應(yīng)用)码俩,匹配到報(bào)文頻率大的放上面
  3. 將那些可由一條規(guī)則描述的多個(gè)規(guī)則合并為一個(gè)
  4. 設(shè)置默認(rèn)策略

同時(shí),也一定要注意稿存,在遠(yuǎn)程連接主機(jī)配置防火墻時(shí)注意:

  1. 不要把“鏈”的默認(rèn)策略修改為拒絕笨篷,因?yàn)橛锌赡芘渲檬』蛘咔宄胁呗院鬅o法遠(yuǎn)程到服務(wù)器,而是盡量使用規(guī)則條目配置默認(rèn)策略
  2. 為防止配置失誤策略把自己也拒掉瓣履,可在配置策略時(shí)設(shè)置計(jì)劃任務(wù)定時(shí)清除策略率翅,當(dāng)確定無誤后,關(guān)閉該計(jì)劃任務(wù)

七袖迎、iptables基本語法:iptables(選項(xiàng))(參數(shù))

  • 選項(xiàng)
# 通用匹配:源地址目標(biāo)地址的匹配
-p:指定要匹配的數(shù)據(jù)包協(xié)議類型冕臭;
-s, --source [!] address[/mask] :把指定的一個(gè)/一組地址作為源地址,按此規(guī)則進(jìn)行過濾瓢棒。當(dāng)后面沒有 mask 時(shí)浴韭,address 是一個(gè)地址,比如:192.168.1.1脯宿;當(dāng) mask 指定時(shí)念颈,可以表示一組范圍內(nèi)的地址,比如:192.168.1.0/255.255.255.0连霉。
-d, --destination [!] address[/mask] :地址格式同上榴芳,但這里是指定地址為目的地址,按此進(jìn)行過濾跺撼。
-i, --in-interface [!] <網(wǎng)絡(luò)接口name> :指定數(shù)據(jù)包的來自來自網(wǎng)絡(luò)接口窟感,比如最常見的 eth0 。注意:它只對(duì) INPUT歉井,F(xiàn)ORWARD柿祈,PREROUTING 這三個(gè)鏈起作用。如果沒有指定此選項(xiàng)哩至, 說明可以來自任何一個(gè)網(wǎng)絡(luò)接口躏嚎。同前面類似,"!" 表示取反菩貌。
-o, --out-interface [!] <網(wǎng)絡(luò)接口name> :指定數(shù)據(jù)包出去的網(wǎng)絡(luò)接口卢佣。只對(duì) OUTPUT,F(xiàn)ORWARD箭阶,POSTROUTING 三個(gè)鏈起作用虚茶。

# 查看管理命令
-L, --list [chain] 列出鏈 chain 上面的所有規(guī)則戈鲁,如果沒有指定鏈,列出表上所有鏈的所有規(guī)則嘹叫。

# 規(guī)則管理命令
-A, --append chain rule-specification 在指定鏈 chain 的末尾插入指定的規(guī)則婆殿,也就是說,這條規(guī)則會(huì)被放到最后待笑,最后才會(huì)被執(zhí)行鸣皂。規(guī)則是由后面的匹配來指定。
-I, --insert chain [rulenum] rule-specification 在鏈 chain 中的指定位置插入一條或多條規(guī)則暮蹂。如果指定的規(guī)則號(hào)是1寞缝,則在鏈的頭部插入。這也是默認(rèn)的情況仰泻,如果沒有指定規(guī)則號(hào)荆陆。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的鏈 chain 中刪除一個(gè)或多個(gè)指定規(guī)則。
-R num:Replays替換/修改第幾條規(guī)則

# 鏈管理命令(這都是立即生效的)
-P, --policy chain target :為指定的鏈 chain 設(shè)置策略 target集侯。注意被啼,只有內(nèi)置的鏈才允許有策略,用戶自定義的是不允許的棠枉。
-F, --flush [chain] 清空指定鏈 chain 上面的所有規(guī)則浓体。如果沒有指定鏈,清空該表上所有鏈的所有規(guī)則辈讶。
-N, --new-chain chain 用指定的名字創(chuàng)建一個(gè)新的鏈命浴。
-X, --delete-chain [chain] :刪除指定的鏈,這個(gè)鏈必須沒有被其它任何規(guī)則引用贱除,而且這條上必須沒有任何規(guī)則生闲。如果沒有指定鏈名,則會(huì)刪除該表中所有非內(nèi)置的鏈月幌。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的鏈碍讯。這并不會(huì)對(duì)鏈內(nèi)部照成任何影響。
-Z, --zero [chain] :把指定鏈扯躺,或者表中的所有鏈上的所有計(jì)數(shù)器清零捉兴。

-j, --jump target <指定目標(biāo)> :即滿足某條件時(shí)該執(zhí)行什么樣的動(dòng)作。target 可以是內(nèi)置的目標(biāo)录语,比如 ACCEPT轴术,也可以是用戶自定義的鏈。
-h:顯示幫助信息钦无;

  • iptables參數(shù)說明:
參數(shù) 作用
-P 設(shè)置默認(rèn)策略:iptables -P INPUT (DROP)
-F 清空規(guī)則鏈
-L 查看規(guī)則鏈
-A 在規(guī)則鏈的末尾加入新規(guī)則
-I num 在規(guī)則鏈的頭部加入新規(guī)則
-D num 刪除某一條規(guī)則
-s 匹配來源地址IP/MASK,加嘆號(hào)”!“表示除這個(gè)IP外
-d 匹配目標(biāo)地址
-i 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流入的數(shù)據(jù)
-o 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流出的數(shù)據(jù)
-p 匹配協(xié)議,如tcp,udp,icmp
–dport num 匹配目標(biāo)端口號(hào)
–sport num 匹配來源端口號(hào)
  • 命令選項(xiàng)輸入順序:
iptables -t 表名 <-A/I/D/R> 規(guī)則鏈名 [規(guī)則號(hào)] <-i/o 網(wǎng)卡名> -p 協(xié)議名 <-s 源IP/源子網(wǎng)> --sport 源端口 <-d 目標(biāo)IP/目標(biāo)子網(wǎng)> --dport 目標(biāo)端口 -j 動(dòng)作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盖袭,一起剝皮案震驚了整個(gè)濱河市失暂,隨后出現(xiàn)的幾起案子彼宠,更是在濱河造成了極大的恐慌,老刑警劉巖弟塞,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凭峡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡决记,警方通過查閱死者的電腦和手機(jī)摧冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來系宫,“玉大人索昂,你說我怎么就攤上這事±┙瑁” “怎么了椒惨?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長潮罪。 經(jīng)常有香客問我康谆,道長,這世上最難降的妖魔是什么嫉到? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任沃暗,我火速辦了婚禮,結(jié)果婚禮上何恶,老公的妹妹穿的比我還像新娘孽锥。我一直安慰自己,他們只是感情好导而,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布忱叭。 她就那樣靜靜地躺著,像睡著了一般今艺。 火紅的嫁衣襯著肌膚如雪韵丑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天虚缎,我揣著相機(jī)與錄音撵彻,去河邊找鬼。 笑死实牡,一個(gè)胖子當(dāng)著我的面吹牛陌僵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播创坞,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼碗短,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了题涨?” 一聲冷哼從身側(cè)響起偎谁,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤总滩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后巡雨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闰渔,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年铐望,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冈涧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡正蛙,死狀恐怖督弓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跟畅,我是刑警寧澤咽筋,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站徊件,受9級(jí)特大地震影響奸攻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虱痕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一睹耐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧部翘,春花似錦硝训、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夹囚,卻和暖如春纵刘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荸哟。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工假哎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞍历。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓舵抹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劣砍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惧蛹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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