iptables之nat功能
一臺(tái)網(wǎng)關(guān)主機(jī)用上net的主要目的是要隱藏網(wǎng)關(guān)內(nèi)網(wǎng)中的主機(jī)苦丁。如果一個(gè)網(wǎng)關(guān)設(shè)備不開啟net功能,僅僅只能將報(bào)文實(shí)現(xiàn)網(wǎng)絡(luò)轉(zhuǎn)發(fā)刚陡,而不會(huì)修改報(bào)文的任何源ip和目標(biāo)ip骤星。此時(shí)內(nèi)網(wǎng)中的客戶端和互聯(lián)網(wǎng)外的主機(jī)通信時(shí)跃巡,一個(gè)懷有惡意的外網(wǎng)主機(jī)會(huì)得到內(nèi)網(wǎng)客戶端的地址,然后用掃描工具掃描客戶端主機(jī)的各種端口服務(wù)什猖,找到有薄弱項(xiàng)的服務(wù)發(fā)起遠(yuǎn)程攻擊票彪,此時(shí)很容易攻克這臺(tái)主機(jī)红淡,并用這臺(tái)主機(jī)當(dāng)作跳板,繼續(xù)從內(nèi)網(wǎng)去滲透內(nèi)部其他的重要的主機(jī)降铸。當(dāng)網(wǎng)關(guān)主機(jī)上開啟了net功能后在旱,網(wǎng)關(guān)在轉(zhuǎn)發(fā)報(bào)文到互聯(lián)網(wǎng)或者從互聯(lián)網(wǎng)轉(zhuǎn)發(fā)報(bào)文到內(nèi)網(wǎng)服務(wù)器的時(shí)候,把報(bào)文中的內(nèi)網(wǎng)主機(jī)地址統(tǒng)統(tǒng)改成網(wǎng)關(guān)的外網(wǎng)地址推掸,外部的主機(jī)只能看到網(wǎng)關(guān)的地址桶蝎,這樣就做到安全保護(hù)內(nèi)網(wǎng)中主機(jī)的操作。
網(wǎng)關(guān)開啟net后谅畅,請(qǐng)求報(bào)文和相應(yīng)報(bào)文是通過內(nèi)存中的連接追蹤表來進(jìn)行地址轉(zhuǎn)換的登渣。內(nèi)網(wǎng)中的客戶端通過網(wǎng)關(guān)的地址轉(zhuǎn)換訪問外網(wǎng)的服務(wù)器主機(jī)叫做SNAT,外網(wǎng)主機(jī)訪問經(jīng)過網(wǎng)關(guān)地址轉(zhuǎn)換的內(nèi)網(wǎng)中提供各種服務(wù)的主機(jī)叫做DNAT毡泻,httpd只開放8080端口胜茧,把8080端口映射到80,能正常以80訪問叫做PNAT仇味。
環(huán)境拓?fù)洌?br>
網(wǎng)關(guān)
內(nèi)網(wǎng)接口:192.168.10.10
外網(wǎng)接口:192.168.2.6
內(nèi)網(wǎng)主機(jī):192.168.10.11
外網(wǎng)主機(jī):192.168.2.201
配置網(wǎng)關(guān)主機(jī):
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0
#查看網(wǎng)關(guān)的核心轉(zhuǎn)發(fā)是否開啟呻顽,默認(rèn)為0是關(guān)閉狀態(tài)
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
#開啟核心轉(zhuǎn)發(fā)
配置外網(wǎng)主機(jī)路由信息:
[root@localhost ~]# route add -net 192.168.10.0/24 gw 192.168.2.6
#添加192.168.10.0/24網(wǎng)絡(luò)的下一條為192.168.2.6
iptables之SNAT源地址修改
SNAT:只能用在POSTROUTING和INPUT上,跨主機(jī)很少用INPUT
ser-defined dhains:自定義鏈丹墨,只能被上面的兩個(gè)鏈調(diào)用
--to-source [ipaddr[-ipaddr]][:port[-port]]:修改源地址廊遍,也可以是輪詢的地址范圍
--random:請(qǐng)求時(shí)隨機(jī)訪問多個(gè)地址
--persistent:隨機(jī)訪問到一個(gè)地址后,之后始終用固定的地址訪問
MASQUERADE:是動(dòng)態(tài)分配ip的網(wǎng)關(guān)外網(wǎng)時(shí)進(jìn)行地址轉(zhuǎn)換
我們現(xiàn)在模擬內(nèi)網(wǎng)客戶端向外網(wǎng)服務(wù)器發(fā)送請(qǐng)求來做SNAT地址轉(zhuǎn)換带到,這是隱藏內(nèi)網(wǎng)客戶端地址的應(yīng)用昧碉。
添加規(guī)則
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.2.6
#開放從內(nèi)向外SNAT的192.168.10.0/24轉(zhuǎn)換為192.168.2.6
查看網(wǎng)關(guān)net規(guī)則
[root@localhost ~]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 192.168.10.0/24 0.0.0.0/0 to:192.168.2.6
對(duì)外網(wǎng)主機(jī)80端口抓包,此時(shí)內(nèi)網(wǎng)主機(jī)訪問外網(wǎng)web時(shí)揽惹,成功隱藏了內(nèi)網(wǎng)主機(jī)的ip被饿,而用網(wǎng)關(guān)外網(wǎng)ip來做訪問報(bào)文的源地址和響應(yīng)報(bào)文的目標(biāo)地址。
對(duì)網(wǎng)關(guān)內(nèi)網(wǎng)接口抓包搪搏,是直接內(nèi)網(wǎng)ip發(fā)包給外網(wǎng)ip
在對(duì)網(wǎng)關(guān)外網(wǎng)接口抓包狭握,這次內(nèi)網(wǎng)ip地址給自動(dòng)轉(zhuǎn)換成了網(wǎng)關(guān)外網(wǎng)ip
iptables之DNAT目標(biāo)地址修改
DNAT:只能用在PREROUTING、OUTPUT和自定義的鏈上
--to-destination [ipaddr[-ipaddr]][:port[-port]] 輪詢?cè)L問
--random 隨機(jī)訪問
--persistent 固定訪問
做DNAT只開放有限協(xié)議的有限端口疯溺,這是與SNAT不同的地方论颅,對(duì)于服務(wù)器來講要隱藏所有的東西,僅留一個(gè)需要開放給互聯(lián)網(wǎng)訪問的端口囱嫩,而且SNAT和DNAT不建議在同一臺(tái)主機(jī)使用恃疯。
現(xiàn)在模擬外網(wǎng)客戶端向內(nèi)網(wǎng)web服務(wù)器發(fā)送請(qǐng)求來做DNAT地址轉(zhuǎn)換,這是隱藏內(nèi)網(wǎng)服務(wù)器地址的應(yīng)用墨闲。
清空之前的net規(guī)則:
[root@localhost ~]# iptables -t nat -F
添加規(guī)則:
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.2.6 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.11
#開放從外向內(nèi)DNAT的目標(biāo)ip192.168.2.6:80轉(zhuǎn)換為192.168.10.11:80
外網(wǎng)主機(jī)訪問內(nèi)網(wǎng)web服務(wù)器正常
內(nèi)網(wǎng)web主機(jī)網(wǎng)卡抓包:
網(wǎng)關(guān)主機(jī)內(nèi)網(wǎng)接口抓包:
網(wǎng)關(guān)主機(jī)外網(wǎng)接口抓包:
把內(nèi)網(wǎng)httpd服務(wù)器80端口改為8080端口:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 8080
[root@localhost ~]# systemctl restart httpd
修改規(guī)則:
[root@localhost ~]# iptables -t nat -R PREROUTING 1 -d 192.168.2.6 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.11:8080
訪問192.168.2.6:80被轉(zhuǎn)發(fā)到192.168.10.11:8080
iptables之PNAT端口修改
REDIRECT:在PREROUTING和OUTPUT上和用戶自定義的鏈上
--to-ports port[-port] 端口映射
--random 隨機(jī)訪問
用戶訪問web網(wǎng)站時(shí)今妄,默認(rèn)是訪問80端口,但是httpd把80改為了8080端口,此時(shí)做端口映射盾鳞,訪問80端口時(shí)自動(dòng)在內(nèi)核中訪問8080端口犬性。這個(gè)解決了普通用戶啟動(dòng)的進(jìn)程只能監(jiān)聽1024以上的端口,而不能監(jiān)聽80端口腾仅,在內(nèi)核中把來自80的訪問映射到8080去訪問乒裆。
這個(gè)是在內(nèi)網(wǎng)httpd服務(wù)器上的iptables添加規(guī)則:
[root@localhost ~]# iptables -A PREROUTING -t nat -d 192.168.10.11 -p tcp --dport 80 -j REDIRECT --to-ports 8080
#把來自80的訪問映射到8080
雖然httpd只開放了8080端口,但是訪問80會(huì)自動(dòng)映射到8080