本節(jié)我們來講一講防火墻的知識。所謂防火墻指的是一個由軟件和硬件設(shè)備組合而成、在內(nèi)部網(wǎng)和外部網(wǎng)之間、專用網(wǎng)與公共網(wǎng)之間的界面上構(gòu)造的保護(hù)屏障.是一種獲取安全性方法的形象說法,它是一種計算機(jī)硬件和軟件的結(jié)合,使Internet與Intranet之間建立起一個安全網(wǎng)關(guān)(Security Gateway),從而保護(hù)內(nèi)部網(wǎng)免受非法用戶的侵入。防火墻按照工作在不同TCP/IP層又可以分為網(wǎng)絡(luò)層防火墻和應(yīng)用層網(wǎng)關(guān)防火墻,二本節(jié)我們要講的內(nèi)容為網(wǎng)絡(luò)層防火墻,即iptables,組件為netfilter/iptables。
netfilter 組件也稱為內(nèi)核空間(kernelspace),是內(nèi)核的一部分,由一些信息包過濾表組成,這些表包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。
iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規(guī)則變得容易。
那么下面我們就來講講netfilter的組成部分以及iptables命令的使用方法。
netfilter
netfilter由4表5鏈組成。
5條鏈即為5個hook function(鉤子函數(shù)),可以理解為數(shù)據(jù)包傳送到該計算機(jī)時的5個檢查點(diǎn)。分別為:
PREROUTING:路由前
INPUT:到達(dá)本機(jī)內(nèi)部的報文必經(jīng)之路
FORWARD:由本機(jī)轉(zhuǎn)發(fā)的報文必經(jīng)之路
OUTPUT:由本機(jī)發(fā)出的報文的必經(jīng)之路
POSTROUTING:路由后
而4張表(即功能)分別為:raw, mangle, nat, filter。
raw: 目標(biāo)是關(guān)閉nat表上啟用的連接追蹤功能;
mangle:包重構(gòu),把包拆開來打上某些標(biāo)記再送走
nat: 地址轉(zhuǎn)換,啟用connection_track;
SNAT
DNAT
PNAT
filter: 過濾,定義是否允許通過防火墻
注意這4張表是有優(yōu)先級的概念的,這里我是按照優(yōu)先級排的。
表和鏈之間的對應(yīng)關(guān)系。
filter: INPUT, FORWARD, OUTPUT
nat: PREROUTING(DNAT),POSTROUTING(SNAT),OUTPUT
mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw: PREROUTING, OUTPUT
數(shù)據(jù)報文流程:如下圖所示
跟本機(jī)內(nèi)部進(jìn)程通信:
進(jìn)入:PREROUTING, INPUT
出去:OUTPUT, POSTROUTING
由本機(jī)轉(zhuǎn)發(fā):
PREROUTING, FORWARD, POSTROUTING
數(shù)據(jù)報文的流向:
源IP和目標(biāo)IP由流向決定;
iptables
當(dāng)你要寫規(guī)則時,應(yīng)該先確定功能(表),確定報文流向,確定要實現(xiàn)的目標(biāo),確定匹配件。
iptables規(guī)則定義原則:
1、同一類規(guī)則,盡量優(yōu)化條目數(shù)量;
2、彼此不相關(guān)的規(guī)則匹配量大的規(guī)則,放在前面,匹配機(jī)會較多放在上面;
3、同一類規(guī)則,匹配規(guī)則更嚴(yán)格放在上面。
必須要注意的是:規(guī)則立即生效,所以當(dāng)你使用iptables時需要先添加放行自己會話的規(guī)則,避免自己的會話被拒絕。
規(guī)則文件:/etc/sysconfig/iptables
保存啟用中的規(guī)則于規(guī)則文件中:
1、# iptables-save > /etc/sysconfig/iptables
2、# service iptables save
生效規(guī)則文件中的規(guī)則:
1、# iptables-restore <>
2、# service iptables restart
執(zhí)行的操作:清空現(xiàn)有規(guī)則,讀取并生效規(guī)則文件中的規(guī)則
基本語法:
iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET
下面對每一項進(jìn)行解釋:
-t TABLE: 選擇哪個表
nat, mangle, raw, filter
默認(rèn)為filter
COMMAND:
鏈:
-F:flush, 清空規(guī)則鏈;
-N:new, 自建一條鏈
-X: delete, 刪除一條自定義的空鏈
-Z:zero,計數(shù)器歸零
-P:policy,設(shè)置默認(rèn)策略,對filter表來講,默認(rèn)規(guī)則為ACCEPT或DROP;
-E:重命名自定義鏈
鏈中的規(guī)則:
-A 添加規(guī)則
-I 插入規(guī)則
-D 刪除規(guī)則
-R 修改規(guī)則
查詢:
-L
-n: 數(shù)字格式顯示主機(jī)地址和端口;
-v: 詳細(xì)格式,-vv, -vvv
-x: exactly,不要對計數(shù)器的計數(shù)結(jié)果做單位換算,而顯示其精確值
--line-numbers: 顯示規(guī)則編號
查看后得到的
pkts bytes target prot opt in out source destination
包數(shù) 字節(jié)數(shù) 目標(biāo) 協(xié)議 流入的接口 流出的接口 源地址 目標(biāo)地址
CHAIN:選定哪個鏈
添加規(guī)則
iptables [-t TABLE] -A 鏈名 匹配條件 -j 處理目標(biāo)
匹配條件:
通用匹配
-s 地址:指定報文源IP地址匹配的范圍;可以是IP,也可以是網(wǎng)絡(luò)地址;可使用!取反;
--src, --source
-d 地址:指定報文目標(biāo)IP地址匹配的范圍;
--dst, --destination
-p 協(xié)議:指定匹配報文的協(xié)議類型,一般有三種tcp, udp和icmp;
-i INTERFACE: 數(shù)據(jù)報文流入的接口;PREROUTING, INPUT, FORWARD
-o INTERFACE: 數(shù)據(jù)報文流出的接口;OUTPUT, FORWARD, POSTROUITING
擴(kuò)展匹配:調(diào)用netfilter額外模塊實現(xiàn)特殊檢查機(jī)制,(使用到相關(guān)功能,要使用iptables命令的-m選項來指定調(diào)用哪個模塊)
隱式擴(kuò)展:當(dāng)使用-p {tcp|udp|icmp}中的一種時,可以直接使用擴(kuò)展專用選項;
-p tcp:
--sport PORT[-PORT]: 指定源端口
--dport PORT[-PORT]: 指定目標(biāo)端口
--tcp-flags
要檢查標(biāo)志位列表(用逗號分隔) 必須為1的標(biāo)志位列表(逗號分隔)
--syn
-p udp:
--sport
--dport
-p icmp [-m icmp]
--icmp-type
0: echo-reply, ping響應(yīng)
8: echo-request, ping請求
顯式擴(kuò)展:必須明確說明使用哪個模塊進(jìn)行擴(kuò)展,而后才能使用其擴(kuò)展專用選項;
-m 擴(kuò)展模塊名稱
multiport: 多端口匹配
可用于匹配非連續(xù)或連續(xù)端口;最多指定15個端口;
專用選項:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
例子:開放22,80端口
iprange: 匹配指定范圍內(nèi)的地址;
匹配一段連續(xù)的地址而非整個網(wǎng)絡(luò)時有用;
專用選項:
[!] --src-ragne IP[-IP]
[!] --dst-range
例子:限定一段連續(xù)地址可以通過telnet連接。
string: 字符串匹配,能夠檢測報文應(yīng)用層中的字符串
專用選項:
--algo {kmp|bm} 2種不同的算法,選一種
--string 'STRING' STRING為你想要匹配的字符串
--hex-string 'HEX_STRING': HEX_STRING為編碼成16進(jìn)制格式的字串;
例子:
time: 基于時間做訪問控制
專用選項:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
Mon, Tue,..... 中間用逗號隔開
例子:
connlimit: 連接數(shù)限制,對每IP所能夠發(fā)起并發(fā)連接數(shù)做限制;
專用選項:
[!] --connlimit-above [n]
例子:限制同一IP ssh遠(yuǎn)程連接數(shù)。
limit: 速率限制
專用選項:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
例子:限制每分鐘只能ping20次
state: 狀態(tài)檢查
專用選項:
--state
連接追蹤中的狀態(tài):
NEW: 新建立一個會話
ESTABLISHED:已建立的連接
RELATED: 有關(guān)聯(lián)關(guān)系的連接
INVALID: 無法識別的連接
例子:放行所有已建立連接的數(shù)據(jù)包。
處理目標(biāo):
1、DROP : 丟棄
2、REJECT: 拒絕
3、ACCEPT: 放行
4、自定義的鏈 : 根據(jù)自定義鏈中的規(guī)則進(jìn)行匹配
創(chuàng)建自定義鏈:
iptables [-t table] -N chain
刪除自定義且0引用的空鏈
iptables [-t table] -X chain
重命名自定義鏈:
iptables [-t table] -E old_name new_name
5、DNAT:明確申明要做的是目的地地址轉(zhuǎn)換操作
6、SNAT:明確申明要做的是源地址轉(zhuǎn)換操作
7、REDIRECT:重定向:主要用于實現(xiàn)端口重定向
8、MARK:打防火墻標(biāo)記的
9、RETURN:在自義鏈中無法匹配報文時,將其返回主鏈
調(diào)整連接追蹤功能所能容納的連接的最大數(shù)目:
/proc/sys/net/nf_conntrack_max
當(dāng)前追蹤的所有連接
/proc/net/nf_conntrack
不同協(xié)議或連接類型追蹤時的屬性:
/proc/sys/net/netfilter目錄:
下面我們以ftp服務(wù)為例:
放行被動模式下的FTP服務(wù):
1、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/
模塊:nf_conntrack_ftp
裝載命令:modprobe nf_conntrack_ftp
卸載:modprobe -r nf_conntrack_ftp
2、放行請求報文:
(1) 放行NEW狀態(tài)對21端口請求的報文;
(2) 放行ESTABLISHED以及RELATED狀態(tài)的報文
3、放行響應(yīng)報文:
放行ESTABLISHED以及RELATED狀態(tài)的報文
這樣FTP服務(wù)就可以運(yùn)行了。
iptables的路由轉(zhuǎn)發(fā)功能
所謂的轉(zhuǎn)發(fā)功能就是啟用forward功能,并且結(jié)合地址轉(zhuǎn)換功能,使得2個屬于不同網(wǎng)絡(luò)的主機(jī)或者服務(wù)器之間可以進(jìn)行連接通信。(這里默認(rèn)INPUT,OUTPUT鏈的策略為drop)
首先必須在配置文件中將路由轉(zhuǎn)發(fā)功能開啟:
上面的啟用之后就可以通過iptables命令來進(jìn)行添加規(guī)則了。
下面我們通過下圖來解釋一下轉(zhuǎn)發(fā)時的地址轉(zhuǎn)換原理。
SNAT
假設(shè)中間的網(wǎng)關(guān)主機(jī)為B:由2個地址,一個是內(nèi)網(wǎng)地址172.16.0.1,一個外網(wǎng)地址192.168.1.1
當(dāng)私網(wǎng)中的主機(jī)A想訪問公網(wǎng)中的WEB主機(jī)時,由于不能直接訪問,于是A就通過網(wǎng)關(guān)主機(jī)的路由發(fā)送請求,
假設(shè)不進(jìn)行地址轉(zhuǎn)換,則網(wǎng)關(guān)主機(jī)允許路由轉(zhuǎn)發(fā),于是請求到達(dá)了web主機(jī),然而當(dāng)web收到請求后,于是返回響應(yīng)報文,但是WEB發(fā)現(xiàn)該請求的源地址是一個私網(wǎng)地址,因此WEB無法將響應(yīng)報文送回到網(wǎng)關(guān)主機(jī)B;
因此在網(wǎng)關(guān)主機(jī)B中必須進(jìn)行地址轉(zhuǎn)換,在報文將要離開主機(jī)B的之前將源地址改為1.1.1.1(注意:在轉(zhuǎn)換完成之后,主機(jī)B會自動生成一張表,記錄了內(nèi)網(wǎng)中的那個主機(jī)發(fā)起哪個請求,因此當(dāng)該請求的響應(yīng)報文從遠(yuǎn)程主機(jī)返回之后,主機(jī)B會自動根據(jù)該表將響應(yīng)報文中的IP地址改為請求主機(jī)的IP),然后再將報文發(fā)送給WEB;當(dāng)WEB收到報文后做出響應(yīng),發(fā)出響應(yīng)報文,源地址為2.2.2.2,目標(biāo)地址問1.1.1.1,因此響應(yīng)報文發(fā)送給了主機(jī)B,經(jīng)過地址轉(zhuǎn)換之后,主機(jī)B又將響應(yīng)報文送回給A,這樣才完成了整個通信過程。
由于上述完成的是一個SNAT的過程,即在請求的過程中目標(biāo)地址始終沒變,變的只是源地址,因此在寫規(guī)則是,寫在POSTROUTING鏈中:
DNAT
如果是一個DNAT的過程的話,寫規(guī)則時的鏈就不同,應(yīng)該寫在PREROUTING鏈中:
該過程就可以看成是公網(wǎng)中的主機(jī)C來訪問B中的web的服務(wù),然而B只是一臺代理服務(wù)器,它的web服務(wù)是他內(nèi)網(wǎng)中的www服務(wù)器提供的,如下圖。
根據(jù)C發(fā)出的請求報文應(yīng)該是,源地址為2.2.2.2,目標(biāo)地址為1.1.1.1,而到了B主機(jī)之后呢?他收到請求之后發(fā)現(xiàn)目標(biāo)地址為自己,然而他請求的是web服務(wù),應(yīng)該將請求的目標(biāo)地址改為WWW主機(jī)的IP(172.16.6.2),那么在哪個地方改呢?對,他只能在路由決策之前修改,不然的話請求就送給B主機(jī)本身處理了,而非轉(zhuǎn)發(fā)給內(nèi)網(wǎng)中的WWW主機(jī)。因此,該規(guī)則只能在PREROUTING鏈中寫,IP修改完之后才能進(jìn)行轉(zhuǎn)發(fā)(當(dāng)然和上面一樣,修改完之后也會生成一張表,記錄相關(guān)信息,當(dāng)該請求的響應(yīng)返回時,主機(jī)B將會自動根據(jù)該表將響應(yīng)報文中的源IP地址改為1.1.1.1),然后再將報文發(fā)送給WWW,WWW收到請求后返回響應(yīng)報文,源地址為172.16.6.2,目標(biāo)地址為2.2.2.2,當(dāng)B收到報文后自動將源地址改為1.1.1.1,然后再返回給C主機(jī)。這樣通信過程才算完成了。
命令:
本節(jié)相關(guān)的內(nèi)容就講到這里,歡迎大家一起交流,講的不好不對的請批評指正,謝謝!
本節(jié)我們來講一講防火墻的知識。所謂防火墻指的是一個由軟件和硬件設(shè)備組合而成、在內(nèi)部網(wǎng)和外部網(wǎng)之間、專用網(wǎng)與公共網(wǎng)之間的界面上構(gòu)造的保護(hù)屏障.是一種獲取安全性方法的形象說法,它是一種計算機(jī)硬件和軟件的結(jié)合,使Internet與Intranet之間建立起一個安全網(wǎng)關(guān)(Security Gateway),從而保護(hù)內(nèi)部網(wǎng)免受非法用戶的侵入。防火墻按照工作在不同TCP/IP層又可以分為網(wǎng)絡(luò)層防火墻和應(yīng)用層網(wǎng)關(guān)防火墻,二本節(jié)我們要講的內(nèi)容為網(wǎng)絡(luò)層防火墻,即iptables,組件為netfilter/iptables。
netfilter 組件也稱為內(nèi)核空間(kernelspace),是內(nèi)核的一部分,由一些信息包過濾表組成,這些表包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。
iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規(guī)則變得容易。
那么下面我們就來講講netfilter的組成部分以及iptables命令的使用方法。
netfilter
netfilter由4表5鏈組成。
5條鏈即為5個hook function(鉤子函數(shù)),可以理解為數(shù)據(jù)包傳送到該計算機(jī)時的5個檢查點(diǎn)。分別為:
PREROUTING:路由前
INPUT:到達(dá)本機(jī)內(nèi)部的報文必經(jīng)之路
FORWARD:由本機(jī)轉(zhuǎn)發(fā)的報文必經(jīng)之路
OUTPUT:由本機(jī)發(fā)出的報文的必經(jīng)之路
POSTROUTING:路由后
而4張表(即功能)分別為:raw, mangle, nat, filter。
raw: 目標(biāo)是關(guān)閉nat表上啟用的連接追蹤功能;
mangle:包重構(gòu),把包拆開來打上某些標(biāo)記再送走
nat: 地址轉(zhuǎn)換,啟用connection_track;
SNAT
DNAT
PNAT
filter: 過濾,定義是否允許通過防火墻
注意這4張表是有優(yōu)先級的概念的,這里我是按照優(yōu)先級排的。
表和鏈之間的對應(yīng)關(guān)系。
filter: INPUT, FORWARD, OUTPUT
nat: PREROUTING(DNAT),POSTROUTING(SNAT),OUTPUT
mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw: PREROUTING, OUTPUT
數(shù)據(jù)報文流程:如下圖所示
跟本機(jī)內(nèi)部進(jìn)程通信:
進(jìn)入:PREROUTING, INPUT
出去:OUTPUT, POSTROUTING
由本機(jī)轉(zhuǎn)發(fā):
PREROUTING, FORWARD, POSTROUTING
數(shù)據(jù)報文的流向:
源IP和目標(biāo)IP由流向決定;
iptables
當(dāng)你要寫規(guī)則時,應(yīng)該先確定功能(表),確定報文流向,確定要實現(xiàn)的目標(biāo),確定匹配件。
iptables規(guī)則定義原則:
1、同一類規(guī)則,盡量優(yōu)化條目數(shù)量;
2、彼此不相關(guān)的規(guī)則匹配量大的規(guī)則,放在前面,匹配機(jī)會較多放在上面;
3、同一類規(guī)則,匹配規(guī)則更嚴(yán)格放在上面。
必須要注意的是:規(guī)則立即生效,所以當(dāng)你使用iptables時需要先添加放行自己會話的規(guī)則,避免自己的會話被拒絕。
規(guī)則文件:/etc/sysconfig/iptables
保存啟用中的規(guī)則于規(guī)則文件中:
1、# iptables-save > /etc/sysconfig/iptables
2、# service iptables save
生效規(guī)則文件中的規(guī)則:
1、# iptables-restore <>
2、# service iptables restart
執(zhí)行的操作:清空現(xiàn)有規(guī)則,讀取并生效規(guī)則文件中的規(guī)則
基本語法:
iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET
下面對每一項進(jìn)行解釋:
-t TABLE: 選擇哪個表
nat, mangle, raw, filter
默認(rèn)為filter
COMMAND:
鏈:
-F:flush, 清空規(guī)則鏈;
-N:new, 自建一條鏈
-X: delete, 刪除一條自定義的空鏈
-Z:zero,計數(shù)器歸零
-P:policy,設(shè)置默認(rèn)策略,對filter表來講,默認(rèn)規(guī)則為ACCEPT或DROP;
-E:重命名自定義鏈
鏈中的規(guī)則:
-A 添加規(guī)則
-I 插入規(guī)則
-D 刪除規(guī)則
-R 修改規(guī)則
查詢:
-L
-n: 數(shù)字格式顯示主機(jī)地址和端口;
-v: 詳細(xì)格式,-vv, -vvv
-x: exactly,不要對計數(shù)器的計數(shù)結(jié)果做單位換算,而顯示其精確值
--line-numbers: 顯示規(guī)則編號
查看后得到的
pkts bytes target prot opt in out source destination
包數(shù) 字節(jié)數(shù) 目標(biāo) 協(xié)議 流入的接口 流出的接口 源地址 目標(biāo)地址
CHAIN:選定哪個鏈
添加規(guī)則
iptables [-t TABLE] -A 鏈名 匹配條件 -j 處理目標(biāo)
匹配條件:
通用匹配
-s 地址:指定報文源IP地址匹配的范圍;可以是IP,也可以是網(wǎng)絡(luò)地址;可使用!取反;
--src, --source
-d 地址:指定報文目標(biāo)IP地址匹配的范圍;
--dst, --destination
-p 協(xié)議:指定匹配報文的協(xié)議類型,一般有三種tcp, udp和icmp;
-i INTERFACE: 數(shù)據(jù)報文流入的接口;PREROUTING, INPUT, FORWARD
-o INTERFACE: 數(shù)據(jù)報文流出的接口;OUTPUT, FORWARD, POSTROUITING
擴(kuò)展匹配:調(diào)用netfilter額外模塊實現(xiàn)特殊檢查機(jī)制,(使用到相關(guān)功能,要使用iptables命令的-m選項來指定調(diào)用哪個模塊)
隱式擴(kuò)展:當(dāng)使用-p {tcp|udp|icmp}中的一種時,可以直接使用擴(kuò)展專用選項;
-p tcp:
--sport PORT[-PORT]: 指定源端口
--dport PORT[-PORT]: 指定目標(biāo)端口
--tcp-flags
要檢查標(biāo)志位列表(用逗號分隔) 必須為1的標(biāo)志位列表(逗號分隔)
--syn
-p udp:
--sport
--dport
-p icmp [-m icmp]
--icmp-type
0: echo-reply, ping響應(yīng)
8: echo-request, ping請求
顯式擴(kuò)展:必須明確說明使用哪個模塊進(jìn)行擴(kuò)展,而后才能使用其擴(kuò)展專用選項;
-m 擴(kuò)展模塊名稱
multiport: 多端口匹配
可用于匹配非連續(xù)或連續(xù)端口;最多指定15個端口;
專用選項:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
例子:開放22,80端口
iprange: 匹配指定范圍內(nèi)的地址;
匹配一段連續(xù)的地址而非整個網(wǎng)絡(luò)時有用;
專用選項:
[!] --src-ragne IP[-IP]
[!] --dst-range
例子:限定一段連續(xù)地址可以通過telnet連接。
string: 字符串匹配,能夠檢測報文應(yīng)用層中的字符串
專用選項:
--algo {kmp|bm} 2種不同的算法,選一種
--string 'STRING' STRING為你想要匹配的字符串
--hex-string 'HEX_STRING': HEX_STRING為編碼成16進(jìn)制格式的字串;
例子:
time: 基于時間做訪問控制
專用選項:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
Mon, Tue,..... 中間用逗號隔開
例子:
connlimit: 連接數(shù)限制,對每IP所能夠發(fā)起并發(fā)連接數(shù)做限制;
專用選項:
[!] --connlimit-above [n]
例子:限制同一IP ssh遠(yuǎn)程連接數(shù)。
limit: 速率限制
專用選項:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
例子:限制每分鐘只能ping20次
state: 狀態(tài)檢查
專用選項:
--state
連接追蹤中的狀態(tài):
NEW: 新建立一個會話
ESTABLISHED:已建立的連接
RELATED: 有關(guān)聯(lián)關(guān)系的連接
INVALID: 無法識別的連接
例子:放行所有已建立連接的數(shù)據(jù)包。
處理目標(biāo):
1、DROP : 丟棄
2、REJECT: 拒絕
3、ACCEPT: 放行
4、自定義的鏈 : 根據(jù)自定義鏈中的規(guī)則進(jìn)行匹配
創(chuàng)建自定義鏈:
iptables [-t table] -N chain
刪除自定義且0引用的空鏈
iptables [-t table] -X chain
重命名自定義鏈:
iptables [-t table] -E old_name new_name
5、DNAT:明確申明要做的是目的地地址轉(zhuǎn)換操作
6、SNAT:明確申明要做的是源地址轉(zhuǎn)換操作
7、REDIRECT:重定向:主要用于實現(xiàn)端口重定向
8、MARK:打防火墻標(biāo)記的
9、RETURN:在自義鏈中無法匹配報文時,將其返回主鏈
調(diào)整連接追蹤功能所能容納的連接的最大數(shù)目:
/proc/sys/net/nf_conntrack_max
當(dāng)前追蹤的所有連接
/proc/net/nf_conntrack
不同協(xié)議或連接類型追蹤時的屬性:
/proc/sys/net/netfilter目錄:
下面我們以ftp服務(wù)為例:
放行被動模式下的FTP服務(wù):
1、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/
模塊:nf_conntrack_ftp
裝載命令:modprobe nf_conntrack_ftp
卸載:modprobe -r nf_conntrack_ftp
2、放行請求報文:
(1) 放行NEW狀態(tài)對21端口請求的報文;
(2) 放行ESTABLISHED以及RELATED狀態(tài)的報文
3、放行響應(yīng)報文:
放行ESTABLISHED以及RELATED狀態(tài)的報文
這樣FTP服務(wù)就可以運(yùn)行了。
iptables的路由轉(zhuǎn)發(fā)功能
所謂的轉(zhuǎn)發(fā)功能就是啟用forward功能,并且結(jié)合地址轉(zhuǎn)換功能,使得2個屬于不同網(wǎng)絡(luò)的主機(jī)或者服務(wù)器之間可以進(jìn)行連接通信。(這里默認(rèn)INPUT,OUTPUT鏈的策略為drop)
首先必須在配置文件中將路由轉(zhuǎn)發(fā)功能開啟:
上面的啟用之后就可以通過iptables命令來進(jìn)行添加規(guī)則了。
下面我們通過下圖來解釋一下轉(zhuǎn)發(fā)時的地址轉(zhuǎn)換原理。
SNAT
假設(shè)中間的網(wǎng)關(guān)主機(jī)為B:由2個地址,一個是內(nèi)網(wǎng)地址172.16.0.1,一個外網(wǎng)地址192.168.1.1
當(dāng)私網(wǎng)中的主機(jī)A想訪問公網(wǎng)中的WEB主機(jī)時,由于不能直接訪問,于是A就通過網(wǎng)關(guān)主機(jī)的路由發(fā)送請求,
假設(shè)不進(jìn)行地址轉(zhuǎn)換,則網(wǎng)關(guān)主機(jī)允許路由轉(zhuǎn)發(fā),于是請求到達(dá)了web主機(jī),然而當(dāng)web收到請求后,于是返回響應(yīng)報文,但是WEB發(fā)現(xiàn)該請求的源地址是一個私網(wǎng)地址,因此WEB無法將響應(yīng)報文送回到網(wǎng)關(guān)主機(jī)B;
因此在網(wǎng)關(guān)主機(jī)B中必須進(jìn)行地址轉(zhuǎn)換,在報文將要離開主機(jī)B的之前將源地址改為1.1.1.1(注意:在轉(zhuǎn)換完成之后,主機(jī)B會自動生成一張表,記錄了內(nèi)網(wǎng)中的那個主機(jī)發(fā)起哪個請求,因此當(dāng)該請求的響應(yīng)報文從遠(yuǎn)程主機(jī)返回之后,主機(jī)B會自動根據(jù)該表將響應(yīng)報文中的IP地址改為請求主機(jī)的IP),然后再將報文發(fā)送給WEB;當(dāng)WEB收到報文后做出響應(yīng),發(fā)出響應(yīng)報文,源地址為2.2.2.2,目標(biāo)地址問1.1.1.1,因此響應(yīng)報文發(fā)送給了主機(jī)B,經(jīng)過地址轉(zhuǎn)換之后,主機(jī)B又將響應(yīng)報文送回給A,這樣才完成了整個通信過程。
由于上述完成的是一個SNAT的過程,即在請求的過程中目標(biāo)地址始終沒變,變的只是源地址,因此在寫規(guī)則是,寫在POSTROUTING鏈中:
DNAT
如果是一個DNAT的過程的話,寫規(guī)則時的鏈就不同,應(yīng)該寫在PREROUTING鏈中:
該過程就可以看成是公網(wǎng)中的主機(jī)C來訪問B中的web的服務(wù),然而B只是一臺代理服務(wù)器,它的web服務(wù)是他內(nèi)網(wǎng)中的www服務(wù)器提供的,如下圖。
根據(jù)C發(fā)出的請求報文應(yīng)該是,源地址為2.2.2.2,目標(biāo)地址為1.1.1.1,而到了B主機(jī)之后呢?他收到請求之后發(fā)現(xiàn)目標(biāo)地址為自己,然而他請求的是web服務(wù),應(yīng)該將請求的目標(biāo)地址改為WWW主機(jī)的IP(172.16.6.2),那么在哪個地方改呢?對,他只能在路由決策之前修改,不然的話請求就送給B主機(jī)本身處理了,而非轉(zhuǎn)發(fā)給內(nèi)網(wǎng)中的WWW主機(jī)。因此,該規(guī)則只能在PREROUTING鏈中寫,IP修改完之后才能進(jìn)行轉(zhuǎn)發(fā)(當(dāng)然和上面一樣,修改完之后也會生成一張表,記錄相關(guān)信息,當(dāng)該請求的響應(yīng)返回時,主機(jī)B將會自動根據(jù)該表將響應(yīng)報文中的源IP地址改為1.1.1.1),然后再將報文發(fā)送給WWW,WWW收到請求后返回響應(yīng)報文,源地址為172.16.6.2,目標(biāo)地址為2.2.2.2,當(dāng)B收到報文后自動將源地址改為1.1.1.1,然后再返回給C主機(jī)。這樣通信過程才算完成了。
命令:
聯(lián)系客服