iptables的學(xué)習(xí)

1 Linux防火墻概述

Linux防火墻實(shí)際指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux內(nèi)核集成的IP信息包過(guò)濾系統(tǒng)。

晉中網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

查看Linux內(nèi)核版本

iptables的學(xué)習(xí)

 

 

Netfilter/Iptables 信息包過(guò)濾系統(tǒng)可以當(dāng)成一個(gè)整體,netfilter是內(nèi)核的模塊實(shí)現(xiàn),iptables是對(duì)上層操作工具。

Netfilter是Linux核心中的一個(gè)通用架構(gòu),工作于內(nèi)核空間。

Netfilter支持一下方式對(duì)數(shù)據(jù)包進(jìn)行分類:

  • 源IP地址
  • 目標(biāo)IP地址
  • 使用接口
  • 使用協(xié)議
  • 端口號(hào)
  • 連接狀態(tài)

其提供了一系列的表(tables),每個(gè)表由若干個(gè)鏈(chains)組成,每條鏈可以由一條或若干條規(guī)則(rules)組成,其規(guī)則由一些信息包過(guò)濾表組成,這些表包含內(nèi)核用來(lái)控制信息包過(guò)濾處理的規(guī)則集。

chain的本質(zhì)是Netfilter定義的不同過(guò)濾點(diǎn)。總共定義了5個(gè)過(guò)濾點(diǎn)。INPUT,F(xiàn)ORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。

Table的本質(zhì)是Netfilter定義的不同功能的劃分。

filter用于執(zhí)行基本過(guò)濾。

nat是對(duì)數(shù)據(jù)IP進(jìn)行修改。

mangle是對(duì)數(shù)據(jù)包進(jìn)行高級(jí)修改。

不同的Table只能用于特定的Chain。

 

Iptables 是一個(gè)管理內(nèi)核包過(guò)濾的工具,可以用來(lái)配置核心包過(guò)濾表格中的規(guī)則。運(yùn)行于用戶空間。

 

 

1.1 Linux防火墻的應(yīng)用

Linux防火墻在企業(yè)應(yīng)用中非常有用,舉例如下:

  • 中小企業(yè)與網(wǎng)吧里有iptables作為企業(yè)的NAT路由器,可以用來(lái)代替?zhèn)鹘y(tǒng)路由器,而節(jié)約成本。
  • IDC機(jī)房一般沒(méi)有硬件防火墻,IDC機(jī)房的服務(wù)器可以用Linux防火墻代替硬件防火墻。
  • iptables可以結(jié)合squid作為企業(yè)內(nèi)部上網(wǎng)的透明代理。傳統(tǒng)代理需要在瀏覽器里配置代理服務(wù)器信息,而iptables+squid的透明代理則可以把客戶端的請(qǐng)求重定向到代理服務(wù)器的端口??蛻舳瞬灰魅魏卧O(shè)置,而感覺(jué)不到代理的存在。
  • 將iptables作為企業(yè)NAT路由器時(shí),可以使用iptables的擴(kuò)展模塊屏蔽P2P流量,還可以禁止非法網(wǎng)頁(yè)。
  • iptables可以用于外網(wǎng)IP向內(nèi)網(wǎng)IP映射。
  • iptables可以輕松防止輕量級(jí)DOS攻擊,比如ping攻擊及SYN洪水攻擊。

綜述,Iptables有兩種應(yīng)用模式:主機(jī)防火墻,NAT路由器。

 

 

1.2 iptables的基本組件

1.2.1 規(guī)則

規(guī)則(rules)是管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過(guò)濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí),iptables就根據(jù)規(guī)則所定義的方法來(lái)處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則。

 

1.2.2 鏈

鏈(chains)是數(shù)據(jù)包傳播的路徑,每一條鏈其實(shí)就是眾多規(guī)則中的一個(gè)檢查清單,每一條鏈中可以有一條或數(shù)條規(guī)則。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),iptables就會(huì)從鏈中第一條規(guī)則開(kāi)始檢查,看該數(shù)據(jù)包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會(huì)根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會(huì)根據(jù)該鏈預(yù)先定義的默認(rèn)策略來(lái)處理數(shù)據(jù)包。

每個(gè)鏈上都有默認(rèn)的規(guī)則。

  • PREROUTING:數(shù)據(jù)包進(jìn)入本機(jī),進(jìn)入路由器之前??梢杂糜谀繕?biāo)地址轉(zhuǎn)換(DNAT)。
  • INPUT:通過(guò)路由表后目的地為本機(jī)。
  • FORWARDING:通過(guò)路由表后,目的地不為本機(jī)??梢杂糜谵D(zhuǎn)發(fā)數(shù)據(jù)。
  • OUTPUT:由本機(jī)產(chǎn)生,向外轉(zhuǎn)發(fā)。
  • POSTROUTIONG:通過(guò)路由表后,發(fā)送到網(wǎng)卡接口之前??梢杂糜谵D(zhuǎn)發(fā)數(shù)據(jù)(SNAT,MASQUERADE)

 

1.2.3 表

表(tables)提供特定的功能,iptables有4個(gè)表,即raw表、filter表、nat表和mangle表,分別用于實(shí)現(xiàn)包過(guò)濾,網(wǎng)絡(luò)地址轉(zhuǎn)換和包重構(gòu)的功能。表中的規(guī)則寫在鏈上。

filter表

主要用于數(shù)據(jù)報(bào)文過(guò)濾。該表根據(jù)系統(tǒng)管理員預(yù)定義的一組規(guī)則過(guò)濾符合條件的數(shù)據(jù)包。對(duì)于防火墻而言,主要利用在filter表中指定的規(guī)則來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)包的過(guò)濾。filter表是默認(rèn)的表,如果沒(méi)有指定哪個(gè)表,iptables 就默認(rèn)使用filter表來(lái)執(zhí)行所有命令,filter表包含了INPUT鏈,RORWARD鏈,OUTPUT鏈。在filter表中只能允許對(duì)數(shù)據(jù)包進(jìn)行接受,丟棄的操作,而無(wú)法對(duì)數(shù)據(jù)包進(jìn)行更改。

 

nat表

主要用于網(wǎng)絡(luò)地址轉(zhuǎn)換NAT,該表可以實(shí)現(xiàn)一對(duì)一,一對(duì)多,多對(duì)多等NAT工作(SNAT,DNAT,PNAT),iptables就是使用該表實(shí)現(xiàn)共享上網(wǎng)的,NAT表包含了PREROUTING鏈,POSTROUTING鏈,OUTPUT鏈。

nat規(guī)則表?yè)碛?prerouting 和 postrouting 兩個(gè)規(guī)則鏈,主要功能為進(jìn)行一對(duì)一、一對(duì)多、多對(duì)多等網(wǎng)址轉(zhuǎn)換工作(SNAT,DNAT),由于轉(zhuǎn)換的特性,需進(jìn)行目的地網(wǎng)址轉(zhuǎn)換的數(shù)據(jù)包,就不需要進(jìn)行來(lái)源網(wǎng)址轉(zhuǎn)換,反之亦然,因此為了提升改寫封包的效率,在防火墻運(yùn)作時(shí),每個(gè)封包只會(huì)經(jīng)過(guò)這個(gè)規(guī)則表一次。如果我們把數(shù)據(jù)包過(guò)濾的規(guī)則定義在這個(gè)數(shù)據(jù)表里,將會(huì)造成無(wú)法對(duì)同一包進(jìn)行多次比對(duì),因此這個(gè)規(guī)則表除了作網(wǎng)址轉(zhuǎn)換外,請(qǐng)不要做其它用途。

 

mangle表

主要用作功能修改數(shù)據(jù)報(bào)文的屬性。比如TCP報(bào)文的6個(gè)標(biāo)志位。在內(nèi)核版本2.4.18 后的linux版本中該表包含的鏈為:INPUT鏈(處理進(jìn)入的數(shù)據(jù)包),RORWARD鏈(處理轉(zhuǎn)發(fā)的數(shù)據(jù)包),OUTPUT鏈(處理本地生成的數(shù)據(jù)包)POSTROUTING鏈(修改即將出去的數(shù)據(jù)包),PREROUTING鏈(修改即將到來(lái)的數(shù)據(jù)包)

mangle表主要用于對(duì)指定數(shù)據(jù)包進(jìn)行更改,在內(nèi)核版本2.4.18 后的linux版本中該表包含的鏈為:INPUT鏈(處理進(jìn)入的數(shù)據(jù)包),RORWARD鏈(處理轉(zhuǎn)發(fā)的數(shù)據(jù)包),OUTPUT鏈(處理本地生成的數(shù)據(jù)包)POSTROUTING鏈(修改即將出去的數(shù)據(jù)包),PREROUTING鏈(修改即將到來(lái)的數(shù)據(jù)包)。

 

raw表

只使用在PREROUTING鏈和OUTPUT鏈上,優(yōu)先級(jí)最高,可以對(duì)收到的數(shù)據(jù)包在連接跟蹤前進(jìn)行處理。一但用戶使用了RAW表,在某個(gè)鏈上RAW表處理完后,將跳過(guò)NAT表和 ip_conntrack處理,即不再做地址轉(zhuǎn)換和數(shù)據(jù)包的鏈接跟蹤處理了。

 

規(guī)則表之間的優(yōu)先順序:

raw > mangle > nat > filter

iptables的學(xué)習(xí)

 

 

 

 

1.3 Linux防火墻基本原理

Linux防火墻的原理主要是對(duì)數(shù)據(jù)包的控制,看下圖(以下圖片均來(lái)自互聯(lián)網(wǎng)):netfilter五條鏈相互關(guān)系,即iptables數(shù)據(jù)包轉(zhuǎn)發(fā)流程圖。

 iptables的學(xué)習(xí)

iptables的學(xué)習(xí)

(1)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),先進(jìn)入PREROUTING(路由前)鏈,之后做路由判斷數(shù)據(jù)包應(yīng)發(fā)往何處,本機(jī)或其他機(jī)器。

(2)若數(shù)據(jù)包原目標(biāo)地址是本機(jī)的,數(shù)據(jù)包會(huì)前往INPUT鏈。到達(dá)INPUT鏈后,任何進(jìn)程都會(huì)收到它。

(3)本機(jī)程序發(fā)送出數(shù)據(jù)包,數(shù)據(jù)包會(huì)經(jīng)過(guò)OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出。

(4)若數(shù)據(jù)包原目標(biāo)地址非本機(jī),則需要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包前往 FORWARD鏈,然后到達(dá)POSTROUTING(路由后)鏈輸出。

 

Netfilter在五個(gè)鏈上,使用HOOK技術(shù)做規(guī)則檢查。

 

 

1.4 iptables規(guī)則執(zhí)行

iptables執(zhí)行規(guī)則時(shí),是從規(guī)則表中從上至下順序執(zhí)行的。

若沒(méi)遇到匹配的規(guī)則,就一條一條往下匹配;

若完全沒(méi)有匹配的規(guī)則,則執(zhí)行該鏈上的默認(rèn)規(guī)則;

若遇到匹配的規(guī)則,則執(zhí)行規(guī)則,執(zhí)行后根據(jù)本規(guī)則的動(dòng)作(accept,reject,log,drop等),決定下一步執(zhí)行的情況,后續(xù)執(zhí)行一般有三種情況:

  • 繼續(xù)執(zhí)行當(dāng)前規(guī)則隊(duì)列內(nèi)的下一條規(guī)則。比如執(zhí)行過(guò)Filter隊(duì)列內(nèi)的LOG后,還會(huì)執(zhí)行Filter隊(duì)列內(nèi)的下一條規(guī)則。
  • 中止當(dāng)前規(guī)則隊(duì)列的執(zhí)行,轉(zhuǎn)到下一條規(guī)則隊(duì)列。比如從執(zhí)行過(guò)accept后就中斷Filter隊(duì)列內(nèi)其它規(guī)則,跳到nat隊(duì)列規(guī)則去執(zhí)行。
  • 中止所有規(guī)則隊(duì)列的執(zhí)行。

iptables的學(xué)習(xí)

透過(guò)這種機(jī)制所帶來(lái)的好處是,可以進(jìn)行復(fù)雜、多重的封包過(guò)濾,簡(jiǎn)單的說(shuō),iptables可以進(jìn)行縱橫交錯(cuò)式的過(guò)濾(tables)而非鏈狀過(guò)濾(chains)。

 

 

1.5 數(shù)據(jù)包的狀態(tài)

包的狀態(tài)依據(jù)IP所包含的協(xié)議不同而不同,但在內(nèi)核外部,也就是用戶空間里,只有4種 狀態(tài):NEW,ESTABLISHED,RELATED 和INVALID。它們主要是和狀態(tài)匹配一起使用。

數(shù)據(jù)包在用戶空間的狀態(tài):

  • NEW:表示信息包已經(jīng)或?qū)?dòng)新的連接,或者它與尚未用于發(fā)送和接收信息包的連接相關(guān)聯(lián)。若主機(jī)向遠(yuǎn)程機(jī)器發(fā)送一個(gè)連接請(qǐng)求,這個(gè)數(shù)據(jù)包的狀態(tài)是NEW。
  • ESTABLISHED:狀態(tài)指出該信息包屬于已建立的連接,該連接一直用于發(fā)送和接收信息包并且完全有效。在連接建立之后(完成TCP的三次握手之后),遠(yuǎn)程主機(jī)和主機(jī)通信數(shù)據(jù)狀態(tài)為ESTABLISHED。
  • RELATED:和現(xiàn)有聯(lián)機(jī)相關(guān)的新聯(lián)機(jī)封包。像FTP這樣的服務(wù),用21端口傳送命令,而用20端口(port模式)或其他端口(PASV模式)傳送數(shù)據(jù)。在已有的21端口上建立好連接后發(fā)送命令,用20或其他端口傳送的數(shù)據(jù)(FTP-DATA),其狀態(tài)是RELATED。
  • INVALID:狀態(tài)指出該信息包與任何已知的流或連接都不相關(guān)聯(lián),它可能包含錯(cuò)誤的數(shù)據(jù)或頭。即無(wú)效的數(shù)據(jù)包,不能被識(shí)別屬于哪個(gè)連接或沒(méi)有任何狀態(tài),通常這種狀態(tài)的數(shù)據(jù)包會(huì)被丟棄。

這些狀態(tài)可以一起使用,以便匹配數(shù)據(jù)包。這可以使防火墻非常強(qiáng)壯和有效。

 

 

 

2 iptables實(shí)戰(zhàn)概述

iptables的實(shí)驗(yàn)請(qǐng)盡量在虛擬機(jī)或非遠(yuǎn)程的系統(tǒng)中操作,避免不小心的誤操作可能導(dǎo)致ssh無(wú)法使用。

一般來(lái)講,iptables防火墻已經(jīng)內(nèi)置于CentOS 6及其他Linux版本中,而且iptables服務(wù)默認(rèn)都是啟動(dòng)的。  iptables應(yīng)用于IPv4, 如果要用IPv6,需要使用ip6tables。

iptables和ip6_tables、arp_tables一同都是建構(gòu)在Xtables的架構(gòu)下,這個(gè)方案讓系統(tǒng)管理員定義“表(tables)”、“鏈(chain)”、“規(guī)則(rules)”三個(gè)數(shù)據(jù)來(lái)處理數(shù)據(jù)包的運(yùn)送。每一個(gè)“表”都和不同的數(shù)據(jù)包處理有關(guān)、決定數(shù)據(jù)包是否可以穿越的是“鏈”、而一條“規(guī)則”在鍵里面則可以決定是否送往下一條鏈(或其它的動(dòng)作),這個(gè)處理可以在嵌套的結(jié)構(gòu)里面重復(fù)使用。每一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包從抵達(dá)到離開(kāi)該計(jì)算機(jī)至少會(huì)經(jīng)過(guò)一個(gè)鏈(亦即轉(zhuǎn)送或本機(jī)路由)。

查看有沒(méi)有安裝iptables:rpm -qa | grep iptables

iptables的學(xué)習(xí)

若機(jī)器上安裝了man命令。則使用man iptables查看iptables的幫助文檔。

 

 

2.1 iptables服務(wù)相關(guān)

2.1.1 開(kāi)啟iptables服務(wù)

service iptables start
#或
/etc/init.d/iptables start

 

2.1.2 關(guān)閉iptables服務(wù)

service iptables stop
#或
/etc/init.d/iptables stop

 

2.1.3 設(shè)置iptables開(kāi)機(jī)時(shí)默認(rèn)啟動(dòng)

iptables的學(xué)習(xí)
#啟動(dòng)時(shí)開(kāi)啟
chkconfig iptables on

#啟動(dòng)時(shí)關(guān)閉
chkconfig iptables off
iptables的學(xué)習(xí)

 

2.1.4 使用setup設(shè)置防火墻

在終端運(yùn)行 setup,選擇 firewall 回車。

iptables的學(xué)習(xí)

按Tab鍵切換到Enablede項(xiàng),然后按空格鍵選擇。然后再按Tab鍵切換到OK,按空格鍵或回車鍵選擇。按Tab鍵切換到quit,退出setup。

iptables的學(xué)習(xí)

 

 

 

3 iptables命令

3.1 iptables命令基本語(yǔ)法

iptables [-t table] command [match] [target/jump]

 

-t table

用來(lái)指明使用的表,有三種選項(xiàng): filter,nat,mangle。若未指定,則默認(rèn)使用filter表。

 

command

指定iptables 對(duì)我們提交的規(guī)則要做什么樣的操作。命令都都需要以chain作為參數(shù)。

  • -P (--policy) 定義默認(rèn)策略。
  • -L (--list) 查看規(guī)則列表。
  • -A (--append) 在規(guī)則列表的最后增加規(guī)則。
  • -I (--insert) 在指定的位置插入規(guī)則。
  • -D (--delete) 從規(guī)則列表中刪除規(guī)則。
  • -R (--replace) 替換規(guī)則列表中的某條規(guī)則。
  • -F (--flush) 清楚指定的規(guī)則。
  • -Z (--zero) 將指定鏈(如未指定,則認(rèn)為是所有鏈)的所有計(jì)數(shù)器歸零。
  • -X (--delete-chain) 刪除指定用戶自定義鏈。

 

command 選項(xiàng)

-v, --verbose(詳細(xì)的)

可用此選項(xiàng)的命令:--list, --append, --insert, --delete, --replace

說(shuō)明:該選項(xiàng)使輸出更詳細(xì),常與--list 連用。與--list連用時(shí),輸出中包括網(wǎng)絡(luò)接口的地址、規(guī)則的選項(xiàng)、TOS掩碼、 字節(jié)和包計(jì)數(shù)器,其中計(jì)數(shù)器是以K、M、G(這里用的是10的冪而不是2的冪)為單位的。若-v 和--append、--insert、--delete 或--replace連用,iptables會(huì)輸出詳細(xì)的信息告訴你規(guī)則是如何被解釋的、是否正確地插入等等。

-x, --exact(精確的)

可用此選項(xiàng)的命令:--list

說(shuō)明:使--list輸出中的計(jì)數(shù)器顯示準(zhǔn)確的數(shù)值,而不用K、M、G等估值。

-n, --numeric(數(shù)值)

可用此選項(xiàng)的命令:--list

說(shuō)明:使輸出中的IP地址和端口以數(shù)值的形式顯示,而不是默認(rèn)的名字,比如主機(jī)名、網(wǎng)絡(luò)名、程序名等。

--line-numbers

可用此選項(xiàng)的命令:--list

說(shuō)明:該選項(xiàng)的作用是顯示出每條規(guī)則在相應(yīng)鏈中的序號(hào)。對(duì)插入新規(guī)則很有用。

-c, --set-counters

可用此選項(xiàng)的命令:--insert, --append, --replace

說(shuō)明:在創(chuàng)建或更改規(guī)則時(shí)設(shè)置計(jì)數(shù)器,語(yǔ)法如下:--set-counters 20 4000,意思是讓內(nèi)核把包計(jì)數(shù)器設(shè)為20,把字節(jié)計(jì)數(shù)器設(shè)為4000。

--modprobe

可用此選項(xiàng)的命令:All

說(shuō)明:此選項(xiàng)告訴iptables探測(cè)并裝載要使用的模塊。這是非常有用的一個(gè)選項(xiàng),若modprobe命令不在搜索路徑中,就要用到了。有了這個(gè)選項(xiàng), 在裝載模塊時(shí),即使有一個(gè)需要用到的模塊沒(méi)裝載上,iptables也知道要去搜索。

 

matches 匹配

匹配選項(xiàng)指定數(shù)據(jù)包與規(guī)則匹配所具有的特征,包括源地址,目的地址,傳輸協(xié)議和端口號(hào),如下所示:

[-i|o 網(wǎng)卡名稱]

說(shuō)明:

-i --in-interface    網(wǎng)絡(luò)接口名     指定數(shù)據(jù)包從哪個(gè)網(wǎng)絡(luò)接口進(jìn)入。

-o --out-interface   網(wǎng)絡(luò)接口名     指定數(shù)據(jù)包從哪個(gè)網(wǎng)絡(luò)接口輸出。

[-p 協(xié)議類型]

-p ---proto          協(xié)議類型        指定數(shù)據(jù)包匹配的協(xié)議,如TCP、UDP和ICMP等

[-s 源IP地址|源子網(wǎng)]

-s --source          源地址或子網(wǎng)   指定數(shù)據(jù)包匹配的源地址

[--sport 源端口號(hào)]

--sport           源端口號(hào)       指定數(shù)據(jù)包匹配的源端口號(hào)

[-d 目標(biāo)IP地址|目標(biāo)子網(wǎng)]

-s --source          目標(biāo)地址或子網(wǎng)   指定數(shù)據(jù)包匹配的目標(biāo)地址

[--dport 目標(biāo)端口號(hào)]

--dport           目的端口號(hào)    指定數(shù)據(jù)包匹配的目的端口號(hào)

[-m 模塊]

-m --match           匹配的模塊      指定數(shù)據(jù)包規(guī)則所使用的過(guò)濾模塊

 

Targets/Jumps

target/jump決定符合條件的包到何處去,語(yǔ)法是--jump target或-j target。

target可以被細(xì)分為兩類,Target和Jump。

  • jump的目標(biāo)是一個(gè)在同一個(gè)表內(nèi)的鏈。
  • target的目標(biāo)是具體的操作。

target指定要對(duì)包做的操作,比如DROP和ACCEPT。不同的target有不同的結(jié)果。一些target會(huì)使包停止前進(jìn),也就是不再繼續(xù)比較當(dāng)前鏈中的其他規(guī)則或父鏈中的其他規(guī)則。而另外一些target在對(duì)包做完操作之后,包還會(huì)繼續(xù)和其他的規(guī)則比較,如LOG,ULOG和TOS。它們會(huì)對(duì)包進(jìn)行記錄,然后讓包通過(guò),以便匹配這條鏈中的其他規(guī)則。有了這樣的target,就可以對(duì)同一個(gè)包既改變它的TTL又改變它的TOS。有些target必須要有準(zhǔn)確的參數(shù)(如TOS需要確定的數(shù)值),有些就不是必須的,但如果我們想指定也可以(如日志的前綴,偽裝使用的端口,等等)。

 

常用Target簡(jiǎn)述

ACCEPT

當(dāng)包滿足了指定的匹配條件,就會(huì)被ACCEPT,允許包前往下一個(gè)目的地。不會(huì)再去匹配當(dāng)前鏈中的其他規(guī)則或同一個(gè)表內(nèi)的其他規(guī)則,但包還要通過(guò)其他表中的鏈,可能會(huì)被DROP。

DROP

當(dāng)信息包與具有DROP目標(biāo)的規(guī)則完全匹配時(shí),會(huì)阻塞該信息包,并且不對(duì)它做進(jìn)一步處理。該目標(biāo)被指定為-j DROP。

若包符合條件,該target就會(huì)將target丟掉,也就是說(shuō)包的生命到此結(jié)束,效果就是包被阻塞了。

在某些情況下,這個(gè)target會(huì)引起意外的結(jié)果,因?yàn)樗粫?huì)向發(fā)送者返回任何信 息,也不會(huì)向路由器返回信息,這就可能會(huì)使連接的另一方的sockets因苦等回音而亡:) 解決這個(gè)問(wèn)題的較 好的辦法是使用REJECT target,(譯者注:因?yàn)樗趤G棄包的同時(shí)還會(huì)向發(fā)送者返 回一個(gè)錯(cuò)誤信息,這樣另一方就能正常結(jié)束),尤其是在阻止端口掃描工具獲得更多的信息時(shí),可以隱蔽被 過(guò)濾掉的端口等等(譯者注:因?yàn)閽呙韫ぞ邟呙枰粋€(gè)端口時(shí),如果沒(méi)有返回信息,一般會(huì)認(rèn)為端口未打開(kāi)或 被防火墻等設(shè)備過(guò)濾掉了)。還要注意如果包在子鏈中被DROP了,那么它在主鏈里也不會(huì)再繼續(xù)前進(jìn),不管 是在當(dāng)前的表還是在其他表里??傊缆N翹了。

REJECT

REJECT和DROP基本一樣,區(qū)別在于它除了阻塞包之外, 還向發(fā)送者返回錯(cuò)誤信息。target還只能用在INPUT、FORWARD、OUTPUT和它們的子鏈里,而且包含 REJECT的鏈也只能被它們調(diào)用,否則不能發(fā)揮作用。它只有一個(gè)選項(xiàng),是用來(lái)控制 返回的錯(cuò)誤信息的種類的。雖然有很多種類,但如果你有TCP/IP方面的基礎(chǔ)知識(shí),就很容易理解它們。

攔阻該數(shù)據(jù)包,并返回?cái)?shù)據(jù)包通知對(duì)方,可以返回的數(shù)據(jù)包有幾個(gè)選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個(gè)數(shù)據(jù)包包會(huì)要求對(duì)方關(guān)閉聯(lián)機(jī)),進(jìn)行完此處理動(dòng)作后,將不再比對(duì)其它規(guī)則,直接中斷過(guò)濾程序。 范例如下:

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

RETURN

在規(guī)則中設(shè)置的RETURN目標(biāo)讓與該規(guī)則匹配的信息包停止遍歷包含該規(guī)則的鏈。如果鏈?zhǔn)侨鏘NPUT之類的主鏈,則使用該鏈的默認(rèn)策略處理信息包。它被指定為-jump RETURN。

結(jié)束在目前規(guī)則鏈中的過(guò)濾程序,返回主規(guī)則鏈繼續(xù)過(guò)濾,如果把自訂規(guī)則煉看成是一個(gè)子程序,那么這個(gè)動(dòng)作,就相當(dāng)于提早結(jié)束子程序并返回到主程序中。

REDIRECT

將封包重新導(dǎo)向到另一個(gè)端口(PNAT),進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其它規(guī)則。這個(gè)功能可以用來(lái)實(shí)作透明代理或用來(lái)保護(hù)web服務(wù)器。

例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081

LOG

將數(shù)據(jù)包相關(guān)信息紀(jì)錄在 /var/log 中,詳細(xì)位置請(qǐng)查閱 /etc/syslog.conf 配置文件,進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其它規(guī)則。

例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

MASQUERADE

改寫封包來(lái)源IP為防火墻的IP,可以指定port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,直接跳往下一個(gè)規(guī)則鏈(mangle:postrouting)。這個(gè)功能與 SNAT 略有不同,當(dāng)進(jìn)行IP 偽裝時(shí),不需指定要偽裝成哪個(gè) IP,IP 會(huì)從網(wǎng)卡直接讀取,當(dāng)使用撥接連線時(shí),IP 通常是由 ISP 公司的 DHCP服務(wù)器指派的,這個(gè)時(shí)候 MASQUERADE 特別有用。

例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

 

SNAT

改寫封包來(lái)源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,將直接跳往下一個(gè)規(guī)則煉(mangle:postrouting)。

例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

DNAT

改寫數(shù)據(jù)包包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,將會(huì)直接跳往下一個(gè)規(guī)則鏈(filter:input 或 filter:forward)。

例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100

MIRROR

鏡像數(shù)據(jù)包,也就是將來(lái)源 IP與目的地IP對(duì)調(diào)后,將數(shù)據(jù)包返回,進(jìn)行完此處理動(dòng)作后,將會(huì)中斷過(guò)濾程序。

QUEUE

中斷過(guò)濾程序,將封包放入隊(duì)列,交給其它程序處理。透過(guò)自行開(kāi)發(fā)的處理程序,可以進(jìn)行其它應(yīng)用,例如:計(jì)算聯(lián)機(jī)費(fèi)用.......等。

MARK

將封包標(biāo)上某個(gè)代號(hào),以便提供作為后續(xù)過(guò)濾的條件判斷依據(jù),進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其它規(guī)則。

例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22

 

 

3.2 iptables服務(wù)與保存的永久生效

iptables作為L(zhǎng)inux的基礎(chǔ)服務(wù),默認(rèn)啟動(dòng)。

查看iptables服務(wù)的狀態(tài)

命令:service iptables status

 

重啟iptables狀態(tài)

命令:service iptables restart

 

使用iptables命令只能使規(guī)則臨時(shí)生效。

如果需要永久生效,則要保存.寫入到/etc/sysconfig/iptables文件里.

/etc/rc.d/init.d/iptables save

iptables規(guī)則文件保存在/etc/sysconfig/iptables中。

寫入后記得把防火墻重起一下,才能起作用。

 

 

 

 

 

 

 

4 Linux下iptables配置

4.1 清除原有規(guī)則

不管你在安裝linux時(shí)是否啟動(dòng)了防火墻,如果你想配置屬于自己的防火墻,那就清除現(xiàn)在filter的所有規(guī)則.

iptables -F       #清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則。 
iptables -X       #清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則。
iptables –Z       #數(shù)據(jù)包計(jì)數(shù)器歸零。

 

例:查看本機(jī)關(guān)于IPTABLES的設(shè)置情況:iptables -L -n

iptables的學(xué)習(xí)

默認(rèn)顯示filter表的情況,所以顯示了INPUT,F(xiàn)ORWARD,OUTPUT鏈上的規(guī)則情形。

 

例:查看nat表上的規(guī)則:iptables -t nat -L

iptables的學(xué)習(xí)

 

 

4.2 配置默認(rèn)策略

設(shè)置默認(rèn)策略:關(guān)閉filter表的INPUT鏈、FORWARD鏈,開(kāi)啟OUTPUT鏈。

iptables -P INPUT DROP
iptables –P OUTPUT ACCEPT
iptables –P FORWARD DROP

 

 

4.3 針對(duì)IP,網(wǎng)絡(luò)接口,協(xié)議的過(guò)濾規(guī)則

遠(yuǎn)程SSH登陸。允許tcp協(xié)議,開(kāi)啟22端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

若把OUTPUT設(shè)置成DROP,則需要使用如下規(guī)則:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

 

WEB服務(wù)器,開(kāi)啟80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 

若OUTPUT設(shè)置成DROP的話,則需要使用如下規(guī)則,其他同理。

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

 

郵件服務(wù)器端口配置

iptables的學(xué)習(xí)
iptables的學(xué)習(xí)
smtp:  
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT


#pop3: 
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT  
iptables -A FORWARD -p udp --dport 110 -j ACCEPT


#imap: 
iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -p udp --dport 143 -j ACCEPT


imaps:  
iptables -A FORWARD -p tcp --dport 993 -j ACCEPT  
iptables -A FORWARD -p udp --dport 993 -j ACCEPT


pop3s:
iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
iptables -A FORWARD -p udp --dport 995 -j ACCEPT
iptables的學(xué)習(xí)
iptables的學(xué)習(xí)

 

FTP服務(wù)器,開(kāi)啟21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

 

DNS服務(wù)器,開(kāi)啟53端口

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

 

允許ping,即允許icmp包通過(guò)

iptables -A INPUT -p icmp -j ACCEPT     #若INPUT設(shè)置成DROP
iptables -A OUTPUT -p icmp -j ACCEPT  #若OUTPUT設(shè)置成DROP

 

允許loopback,一般系統(tǒng)都需要允許回環(huán)。否則可能導(dǎo)致一些問(wèn)題。如DNS無(wú)法正常關(guān)閉。

IPTABLES -A INPUT -i lo -p all -j ACCEPT

 

若把OUTPUT設(shè)置成DROP,則需要使用如下規(guī)則:

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

 

減少不安全的端口連接

iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP 

有些木馬會(huì)掃描端口31337到31340(即黑客語(yǔ)言中的 elite 端口)上的服務(wù)。既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來(lái)通信,阻塞這些端口能夠有效地減少網(wǎng)絡(luò)上可能被感染的機(jī)器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨(dú)立通信的機(jī)會(huì)。

 

sshd的端口為22,若系統(tǒng)直接開(kāi)放22端口,那么Internet上所有主機(jī)都可以連接Linux,這樣不安全。更好的方法是,僅允許某個(gè)范圍的IP或某個(gè)指定ip,且某范圍的端口的主機(jī)可以連接主機(jī),其他IP全部拒絕:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j DROP

 

 說(shuō)明:1024:65535 表示端口范圍是1024至65535,包括兩端的端口在內(nèi)。

 

以上做法保證了一定的安全性。但由于非法的數(shù)據(jù)包會(huì)被阻塞,因此某些端口掃描工具會(huì)提示“該計(jì)算機(jī)處于防火墻保護(hù)狀態(tài)“,這也是不安全的。要欺騙這些工具,可以使用如下規(guī)則:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j REJECT –reject-with tcp-reset

 

這樣的規(guī)則,當(dāng)非法連接服務(wù)器時(shí),會(huì)發(fā)出tcp-reset的請(qǐng)求,這個(gè)封包會(huì)要求對(duì)方關(guān)閉連接。這樣,服務(wù)器會(huì)更加安全。

 

只允許192.168.0.3的機(jī)器進(jìn)行SSH連接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

 

若要允許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP。

要記得把 /etc/sysconfig/iptables 里的這一行刪了.

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

這一行表示所有地址都可以登陸。

或采用命令方式:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT
iptables的學(xué)習(xí)
iptables的學(xué)習(xí)
說(shuō)明: 192.168.0.1/24 24的意思就是說(shuō)子網(wǎng)掩碼中表示網(wǎng)絡(luò)的二進(jìn)制位數(shù)是24位。
即: 11111111.11111111.11111111.00000000 也就是24個(gè)1。變成十進(jìn)制就是:255.255.255.0 子網(wǎng)掩碼的意義
把IP(192.168.0.1)轉(zhuǎn)換為二進(jìn)制數(shù),即:11000000.10101000.00000000.00000001 將IP和子網(wǎng)掩碼做與運(yùn)算得:11000000.10101000.00000000.00000000 再變成十進(jìn)制數(shù)得:192.168.0.0 這個(gè)就是192.168.0.1這個(gè)IP所屬的網(wǎng)絡(luò)地址,也可以說(shuō)192.168.0.1在192.168.0.0這個(gè)網(wǎng)段內(nèi)。
iptables的學(xué)習(xí)
iptables的學(xué)習(xí)
技巧:!表示not。
例:!192.168.0.3 表示除了192.168.0.3的ip地址
其他的規(guī)則連接也一樣這么設(shè)置.

 

 

例:某Linux系統(tǒng),作為ADSL上網(wǎng)的代理服務(wù)器,同時(shí)運(yùn)行WWW服務(wù),有兩個(gè)網(wǎng)絡(luò)接口,eth0連接局域網(wǎng),ppp0是ADSL上網(wǎng)的Internet網(wǎng)絡(luò)接口,添加如下規(guī)則。

允許局域網(wǎng)內(nèi)192.168.60.24/24的所有主機(jī)訪問(wèn)代理服務(wù)器,除了192.168.60.3這臺(tái)主機(jī):

iptables –A INPUT –i eth0 –s 192.168.60.3 –j DROP
iptables –A INPUT –i eth0 –s 192.168.0/24 –j ACCEPT

注意:兩個(gè)規(guī)則的順序不能反。

 

例:讓Linux代理服務(wù)器接受所有的來(lái)源不是網(wǎng)絡(luò)接口ppp0的數(shù)據(jù),即僅允許了局域網(wǎng)的訪問(wèn),局域網(wǎng)的所有主機(jī)不能訪問(wèn)Internet

iptables –A input –i !ppp0 –j ACCEPT

 

 

4.4 根據(jù)數(shù)據(jù)狀態(tài)模塊的修改

允許所有已經(jīng)建立的和相關(guān)的連接 

iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

DROP非法連接

iptables -A INPUT     -m state --state INVALID -j DROP  
iptables -A OUTPUT    -m state --state INVALID -j DROP  
iptables-A FORWARD -m state --state INVALID -j DROP

 

丟棄壞的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

 

處理IP碎片數(shù)量,防止攻擊,允許每秒100個(gè)

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

 

設(shè)置ICMP包過(guò)濾,允許每秒1個(gè)包,限制觸發(fā)條件是10個(gè)包.

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

 

 

 

4.5 設(shè)置NAT表

如圖顯示外網(wǎng)映射原理:

iptables的學(xué)習(xí)

清除nat表中的規(guī)則

iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

 

例:將代理服務(wù)器80端口重定向到8009端口,設(shè)置規(guī)則如下:

iptable –t nat –A PREROUTING –p tcp –dport 80 –j REDIRECT –to-ports 8009

 

例:內(nèi)網(wǎng)機(jī)器對(duì)外發(fā)布WEB網(wǎng)站 

內(nèi)網(wǎng)WEB服務(wù)器IP地址為192.168.0.3,當(dāng)公網(wǎng)客戶端訪問(wèn)服務(wù)器時(shí),防火墻將請(qǐng)求映射到內(nèi)網(wǎng)的192.168.0.3的80端口

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80

 

例:禁止與211.101.46.253的所有連接

iptables -t nat -A PREROUTING   -d 211.101.46.253 -j DROP

 

例:禁用FTP端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

 

只禁用211.101.46.253地址的FTP連接,其他連接還可以.如web(80端口)連接。

iptables -t nat -A PREROUTING   -p tcp --dport 21 -d 211.101.46.253 -j DROP

當(dāng)前標(biāo)題:iptables的學(xué)習(xí)
本文URL:http://muchs.cn/article32/gdiisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣App開(kāi)發(fā)、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作