linux防火牆iptables

來源:互聯網
上載者:User

標籤:function   firewall   forward   防火牆   過濾器   



專業的硬體防火牆:主機一些防火牆。網路功能防火牆

 工作於主機或網路的邊緣,對於進出的報文根據事先定義的規則作檢查,將那些能夠被規則所匹配到的報文作出相應處理的組件。

 網路防火牆:主機:iptables: 程式iptables:規則編寫工具netfilter: 網路過濾器, 核心中工作在TCP/IP網路通訊協定棧上的架構;hooks function:prerouting: 進入本機後路由功能發生之前

input:到達本機內部

output: 由本機發出。報文的位置:到本內部:prerouting, input由本機發出:output, strouting由本機轉寄:prerouting, forward,postrouing

 

地址的功能:

過濾:firewall,

地址轉換:NAT Server

Network Address Translation

mangle:修改報文首部中的某些資訊

raw:關閉nat表上啟用的串連追蹤功能

 

iptables:每個鉤子函數上可放置n條規則;對應於每個鉤子上的多條規則就稱為一個鏈(CHAIN)

每個功能有多個鏈,所以,就稱作表;iptables/netfilternetfilter:framework in kerneltcp/ip協議棧iptables有四表五鏈filter:input, forward, output添加規則時的考量點:(1) 要實現的功能:判斷添加在哪個表上;(2) 報文流向及經由路徑:判斷添加在哪個鏈上;謹記:報文不可能經由自訂鏈,只有在被內建鏈上的引用才會生效(自訂目標)

 

iptables命令建置規則,送往netfilter;

規則通過核心介面直接送至核心,因此,會立即生效。但不會永久有效;

如果期望有永久有效,需要儲存至設定檔中,此檔案還開機時載入和由使用者手工載入;

謹記:1.規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。

  2.經常使用的放在前面,可以省去過多的規則判斷對時間的浪費

 

 

iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -jTARGET

 

-t TABLE:

預設為filter, 共有filter, nat, mangle,raw四個可用;

 

例:  顯示nat的所有規則

iptables -t nat -L -n -v

顯示filter的所有規則

iptables -L -n -v

SUBCOMMAND:

鏈:定義

-F:flush,清空指定表的指定鏈上所有規則;省略鏈名時,清空表中的所有鏈;

-N:new, 建立一個使用者自訂的鏈;自訂鏈只能作為預設鏈上的跳轉對象,即在預設鏈通過引用來生效自訂鏈;

-X:drop,刪除使用者自訂的空鏈;非空自訂鏈和內建鏈無法刪除;

-Z:zero,將規則的計數器置0;

-P:policy,設定鏈的預設處理機制;當所有都無法匹配或有匹配有無法做出有效處理機制時,預設策略即生效;

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

-E:rename,重新命名自訂鏈;

 

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

例:   清空filter上的INPUT規則

iptables -F INPUT

清空nat上的OUTPUT規則

iptables -t nat -F OUTPUT

如下的規則:

-A:append,在鏈尾追加一條規則;

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

-D:delete,刪除指定的規則;

-R:replace,替換指定的規則;

 pkts

被本規則所匹配到的包個數;

bytes

被本規則所匹配到的所包的大小之和;

target

處理目標(目標可以為使用者自訂的鏈)

prot

協議 {tcp, udp,  icmp}

opt

可選項

in

資料包流入介面

out

資料包流出介面

source

源地址

destination

目標地址;

 

CRETERIA: 匹配條件

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

基於擴充機制,也可以進行額外的檢查;如做串連追蹤;

謹記:可同時指定多個條件,預設多條件要同時被滿足;

 

匹配條件[!] -s, --src, --source  IP|Network:檢查報文中的源IP地址;  ! -s 172.16.100.1表示除了這個IP

-d, --dst, --destination:檢查報文中的目標IP地址;

-p, --protocol:檢查報文中的協議,即ip首部中的protocols所標識的協議;tcp、udp或icmp三者之一;

-i, --in-interface:資料報文的流入介面;通常只用於PREROUTING, INPUT, FORWARD鏈上的規則;   -i eth0

-o, --out-interface:檢查報文的流出介面;通常只用於FORWARD, OUTPUT, POSTROUTING鏈上的規則;-o eth0

 # iptables -P INPUT DROP

# iptables -P OUTPUT DROP

 

擴充匹配:使用iptables的模組實現擴充性檢查機制

隱式擴充:如果在通用匹配上使用-p選項指明了協議的話,則使用-m選項指明對其協議的擴充就變得可有可無了;

tcp:

--dport PORT[-PORT]    目標連接埠

--sport                              來源連接埠

--tcp-flags LIST1 LIST2

LIST1: 要檢查的標誌位;

LIST2:在LIST1中出現過的,且必須為1標記位;而餘下的則必須為0;

例如:--tcp-flags   syn,ack,fin,rst    syn

--syn:用於匹配tcp會話三向交握的第一次;

udp:

--sport                               目標連接埠

--dport                              來源連接埠

icmp:

--icmp-types

8:echo request     請求

0:echo reply        回答

例:開放172.16.37.1對本機172.16.37.10的ping響應,和ping請求;註:若預設INPUT/OUPUT為DROP,請求和響應同時開啟才能ping通

# iptables -A INPUT -s 172.16.37.1 -d 172.16.37.10 -picmp --icmp-type 8 -j ACCEPT

# iptables -A OUTPUT -s 172.16.37.10 -d 172.16.37.1 -picmp --icmp-type 0 -j ACCEPT

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP

 

顯式擴充:必須指明使用的擴充機制;

-m 模組名稱

每個模組會引入新的匹配機制;

 

想知道有哪些模組可用:

rpm-ql iptables

 

小寫字母,以.so結尾;

 

multiport擴充:以離散定義多連接埠匹配;最多指定15個連接埠;

 

專用選項:

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

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

--portsPORT[,PORT,...]

  

iprange擴充:指定連續的ip位址範圍;在匹配非整個網路地址時使用;

 

專用選項:[!] --src-range IP[-IP][!] --dst-range IP[-IP]

 

允許172.16.100.1-100對172.16.100.11的telnet23連接埠訪問

iptables -A INPUT -d 172.16.100.11 -p tcp --dport 23 -miprange --src-range172.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擴充:檢查報文中出現的字串,與給定的字串作匹配;字串匹配檢查演算法:kmp,bm

 

專用選項:algo

--algo {kmp|bm}  :指定演算法

--string"STRING":要匹配的字串,會自動編碼

--hex-string"HEX_STRING":HEX_STRING為編碼成16進位格式的字串;效率會高

 

 

檢查響應報文中包含sex的字串,並將其拒絕

iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp --sport80 -m string --string"sex" --algo kmp -j REJECT

 

time擴充:time基於時間區間做存取控制

 

專用選項:

--datestartYYYY[-MM][-DD][hh[:mm[:ss]]]         開始日期

--dattestop                                                                停止日期

 

--timestart    開始時間

--timestop     停止時間

 

--weekdays DAY1[,DAY2,...]       

專用選項:

--connlimit-above [n]    串連數超過n個

! --connlimit-above[n]        串連不超過n個

例:當串連172.16.100.11的ssh數大於5時[包括5個]拒絕

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

iptables -P INPUT ACCEPT

例:配置原生telnet服務,要求只允許來自於172.16.0.0/16網路中的主機訪問,且只允許工作時間訪問,而且,每個來源IP最多的並發串連數不能超過2個;

方法1:iptables -A INPUT -s 172.16.0.0/16-d 172.16.37.10 -p tcp --dport 23 -m time --timestart 01:00 --timestop 20:00 -mconnlimit ! --connlimit-above 2 -j ACCEPT

    iptables -P DROP

方法2:先拒絕在允許

   iptables -I INPUT 1 -p tcp -dport 23 -m connlimit --connlimit-above 2 -jDROP

   iptables -I INPUT 2 -p tcp -dport 23 -j ACCEPT

limit擴充:基於發包速率作限制;

 

專用選項:令牌桶演算法

--limit  n[/second|/minit|/hour|/day]   例--limit 10/minit 指明每分鐘允許10個資料包

--limit-burst n                                                峰值為幾,即最大突發為幾

 

如下的規則:iptables -A INPUT -p icmp --icmp-type 8-m limit --limit 6/m --limit-burst 5 -j ACCEPT、iptables -P INPUT DROP

從另一部主機上ping這部主機,就會發生如下的現象:

首先我們能看到前四個包的回應都非常正常,然後從第五個包開始,我們每10秒能收到一個正常的回應。這是因為我們設定了單位時間(在這裡是每分鐘)內允許通過的資料包的個數是每分鐘6個,也即每10秒鐘一個;其次我們又設定了事件觸發閥值為5,所以我們的前四個包都是正常的,只是從第五個包開始,限制規則開始生效,故只能每10秒收到一個正常回應。

假設我們停止ping,30秒後又開始ping,這時的現象是:

前兩個包是正常的,從第三個包開始丟包,這是因為在這裡我的允許一個包通過的周期是10秒,如果在一個周期內系統沒有收到合格包,系統的觸發值就會恢複1,所以如果我們30秒內沒有合格包通過,系統的觸發值就會恢複到3,如果5個周期內都沒有合格包通過,系統都觸發值就會完全恢複。

 

state擴充:啟用串連追蹤模板記錄串連,並根據串連匹配串連狀態的擴充;

啟用串連追蹤功能之前:簡單包過濾防火牆;

啟用串連追蹤功能:帶狀態檢測的包過濾防火牆;

 

專用選項:--state STATE、STATE的種類:NEW: 建立立的串連,串連追蹤模板中無相應的條目時,用戶端第一次發出的請求;ESTABLISHED:NEW狀態之後,邊距追蹤模板中的條目刪除之前所進行的通訊過程,都稱為ESTABLISHED;

RELATED:相關聯的串連,如ftp協議的命令串連與資料連線即為相關聯的串連;

INVALIED: 無法識別的狀態;

 

比如:允許存取OUTPUT已建立串連的ssh服務

iptables -A OUTPUT -p tcp -sport 22-m --state ESTABLISHED -j ACCEPT

 

調整串連追蹤功能所能容納的串連的最大數目:

/proc/sys/net/nf_conntrack_max

 

當前追蹤的所有串連:

/proc/net/nf_conntrack

 

不同協議或連線類型追蹤時的時間長度屬性:

/proc/sys/net/netfilter/

 

如何允許存取被動模式下的ftp服務:

(1) 裝載模組:

#modprobe nf_conntrack_ftp

(2) 允許存取請求報文

允許存取入站請求連接埠為21的請求報文;允許存取所有狀態為ESTABLISHEDRELATED狀態的入站報文;ACCEPT:接受、DROP:丟棄REJECT:拒絕SNAT。DNAT

 

NAT Server: 能根據需要實現所謂的SNAT、DNAT或PNAT;

並非是使用者空間啟動並執行進程完成轉換功能,靠的是核心中地址轉換規則;

 

SNAT:CIP --> SNAT(PIP) --> SIP

CIP: 本地用戶端IP  SIP:伺服器IP 


 

訪問互連網方法:

一共兩個

(1)SNAT、(2)Proxy

 

SNAT:主要用於實現讓內網用戶端訪問外部主機時使用;

 

定義;iptables -t nat -APOSTROUTING -s 內網網路或主機地址 -j SNAT --to-source NAT伺服器上的某外網地址


另個TARGET:MASQUERADE:地址偽裝;能自行判斷該轉為哪個源地址;但是很消耗資源。

iptables -t nat -APOSTROUTING -s 內網網路或主機地址 -j MASQUERADE

  

iptables -t nat -APREROUTING -d NAT伺服器的某外網地址 -p 某協議 --dport 某連接埠 -j DNAT --to-destination 內網某伺服器位址[:PORT]

例:訪問172.16.37.10的web服務需經過192.168.1.1

iptables -t nat -APREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination172.16.37.10

FULLNAT: 全地址轉換

在請求報文到時:既修改源地址,又修改目標地址

 

 

 

該如何儲存及重載規則:儲存:(1)service iptables save      (2) iptables-save> /PATH/TO/SOMEFILE

 

重載:(1)service iptables reload


本文出自 “呂航@部落格” 部落格,請務必保留此出處http://10116624.blog.51cto.com/10106624/1656863

linux防火牆iptables

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.