真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

1 Linux防火墻概述

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

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

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

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

 

 

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

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

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

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

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

chain的本質(zhì)是Netfilter定義的不同過濾點(diǎn)??偣捕x了5個過濾點(diǎn)。INPUT,F(xiàn)ORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。

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

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

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

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

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

 

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

 

 

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

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

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

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

 

 

1.2 iptables的基本組件

1.2.1 規(guī)則

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

 

1.2.2 鏈

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

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

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

 

1.2.3 表

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

filter表

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

 

nat表

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

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

 

mangle表

主要用作功能修改數(shù)據(jù)報文的屬性。比如TCP報文的6個標(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鏈(修改即將到來的數(shù)據(jù)包)

mangle表主要用于對指定數(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鏈(修改即將到來的數(shù)據(jù)包)。

 

raw表

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

 

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

raw > mangle > nat > filter

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

 

 

 

 

1.3 Linux防火墻基本原理

Linux防火墻的原理主要是對數(shù)據(jù)包的控制,看下圖(以下圖片均來自互聯(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)卡時,先進(jìn)入PREROUTING(路由前)鏈,之后做路由判斷數(shù)據(jù)包應(yīng)發(fā)往何處,本機(jī)或其他機(jī)器。

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

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

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

 

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

 

 

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

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

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

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

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

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

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

透過這種機(jī)制所帶來的好處是,可以進(jìn)行復(fù)雜、多重的封包過濾,簡單的說,iptables可以進(jìn)行縱橫交錯式的過濾(tables)而非鏈狀過濾(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ū)有碌倪B接,或者它與尚未用于發(fā)送和接收信息包的連接相關(guān)聯(lián)。若主機(jī)向遠(yuǎn)程機(jī)器發(fā)送一個連接請求,這個數(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),它可能包含錯誤的數(shù)據(jù)或頭。即無效的數(shù)據(jù)包,不能被識別屬于哪個連接或沒有任何狀態(tài),通常這種狀態(tài)的數(shù)據(jù)包會被丟棄。

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

 

 

 

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

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

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

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

查看有沒有安裝iptables:rpm -qa | grep iptables

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

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

 

 

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

2.1.1 開啟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開機(jī)時默認(rèn)啟動

iptables的學(xué)習(xí)
#啟動時開啟
chkconfig iptables on

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

 

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

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

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

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

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

 

 

 

3 iptables命令

3.1 iptables命令基本語法

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

 

-t table

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

 

command

指定iptables 對我們提交的規(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)為是所有鏈)的所有計數(shù)器歸零。
  • -X (--delete-chain) 刪除指定用戶自定義鏈。

 

command 選項

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

可用此選項的命令:--list, --append, --insert, --delete, --replace

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

-x, --exact(精確的)

可用此選項的命令:--list

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

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

可用此選項的命令:--list

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

--line-numbers

可用此選項的命令:--list

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

-c, --set-counters

可用此選項的命令:--insert, --append, --replace

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

--modprobe

可用此選項的命令:All

說明:此選項告訴iptables探測并裝載要使用的模塊。這是非常有用的一個選項,若modprobe命令不在搜索路徑中,就要用到了。有了這個選項, 在裝載模塊時,即使有一個需要用到的模塊沒裝載上,iptables也知道要去搜索。

 

matches 匹配

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

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

說明:

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

-o --out-interface   網(wǎng)絡(luò)接口名     指定數(shù)據(jù)包從哪個網(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 源端口號]

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

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

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

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

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

[-m 模塊]

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

 

Targets/Jumps

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

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

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

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

 

常用Target簡述

ACCEPT

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

DROP

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

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

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

REJECT

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

攔阻該數(shù)據(jù)包,并返回數(shù)據(jù)包通知對方,可以返回的數(shù)據(jù)包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個數(shù)據(jù)包包會要求對方關(guān)閉聯(lián)機(jī)),進(jìn)行完此處理動作后,將不再比對其它規(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ī)則鏈繼續(xù)過濾,如果把自訂規(guī)則煉看成是一個子程序,那么這個動作,就相當(dāng)于提早結(jié)束子程序并返回到主程序中。

REDIRECT

將封包重新導(dǎo)向到另一個端口(PNAT),進(jìn)行完此處理動作后,將會繼續(xù)比對其它規(guī)則。這個功能可以用來實(shí)作透明代理或用來保護(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ì)位置請查閱 /etc/syslog.conf 配置文件,進(jìn)行完此處理動作后,將會繼續(xù)比對其它規(guī)則。

例如:

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

MASQUERADE

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

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

 

SNAT

改寫封包來源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應(yīng)的范圍,進(jìn)行完此處理動作后,將直接跳往下一個規(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 對應(yīng)的范圍,進(jìn)行完此處理動作后,將會直接跳往下一個規(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ù)包,也就是將來源 IP與目的地IP對調(diào)后,將數(shù)據(jù)包返回,進(jìn)行完此處理動作后,將會中斷過濾程序。

QUEUE

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

MARK

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

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

 

 

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

iptables作為Linux的基礎(chǔ)服務(wù),默認(rèn)啟動。

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

命令:service iptables status

 

重啟iptables狀態(tài)

命令:service iptables restart

 

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

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

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

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

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

 

 

 

 

 

 

 

4 Linux下iptables配置

4.1 清除原有規(guī)則

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

iptables -F       #清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則。 
iptables -X       #清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則。
iptables –Z       #數(shù)據(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鏈,開啟OUTPUT鏈。

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

 

 

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

遠(yuǎn)程SSH登陸。允許tcp協(xié)議,開啟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ù)器,開啟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ù)器,開啟21端口

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

 

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

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

 

允許ping,即允許icmp包通過

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)致一些問題。如DNS無法正常關(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 

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

 

sshd的端口為22,若系統(tǒng)直接開放22端口,那么Internet上所有主機(jī)都可以連接Linux,這樣不安全。更好的方法是,僅允許某個范圍的IP或某個指定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

 

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

 

以上做法保證了一定的安全性。但由于非法的數(shù)據(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ù)器時,會發(fā)出tcp-reset的請求,這個封包會要求對方關(guān)閉連接。這樣,服務(wù)器會更加安全。

 

只允許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í)
說明: 192.168.0.1/24 24的意思就是說子網(wǎng)掩碼中表示網(wǎng)絡(luò)的二進(jìn)制位數(shù)是24位。
即: 11111111.11111111.11111111.00000000 也就是24個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 這個就是192.168.0.1這個IP所屬的網(wǎng)絡(luò)地址,也可以說192.168.0.1在192.168.0.0這個網(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ù)器,同時運(yùn)行WWW服務(wù),有兩個網(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ù)器,除了192.168.60.3這臺主機(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

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

 

例:讓Linux代理服務(wù)器接受所有的來源不是網(wǎng)絡(luò)接口ppp0的數(shù)據(jù),即僅允許了局域網(wǎng)的訪問,局域網(wǎng)的所有主機(jī)不能訪問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個

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

 

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

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ī)器對外發(fā)布WEB網(wǎng)站 

內(nèi)網(wǎng)WEB服務(wù)器IP地址為192.168.0.3,當(dāng)公網(wǎng)客戶端訪問服務(wù)器時,防火墻將請求映射到內(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

網(wǎng)頁名稱:iptables的學(xué)習(xí)
新聞來源:http://weahome.cn/article/gdiisc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部