用iptables做IP的靜態(tài)映射
用iptables做IP的靜態(tài)映射還是跟端口映射做的工作差不多,具體操作如下:
其實靜態(tài)映射和端口映射差不多是一個意思,只不過IP靜態(tài)是整個把內(nèi)部網(wǎng)的服務(wù)器轉(zhuǎn)到internet上(或者外部網(wǎng)絡(luò)上)去,而端口映射只是把內(nèi)網(wǎng)的某些服務(wù)端口映射到外網(wǎng)服務(wù)器的某個端口上。
或許有的兄弟會奇怪為什么要做ip靜態(tài)映射呢?直接設(shè)置為外網(wǎng)IP不就完了?其實原因很簡單,為了方便統(tǒng)一管理和制定安全策略。假設(shè)你的服務(wù)器要搬遷、更換,如果只有一臺還好說——在這臺服務(wù)器上更改一下IP地址或者把新的服務(wù)器地址改為老服務(wù)器地址換上去就行了,如果有好幾臺服務(wù)器呢?你就不得不面對更長的斷網(wǎng)時間……使用靜態(tài)IP映射能夠讓你更方便的管理多臺服務(wù)器,同時增加了安全性(等于憑空給服務(wù)器作了一個防火墻啊)。假設(shè)你想用新的服務(wù)器替換老服務(wù)器,可以給新的服務(wù)器分配另外的外網(wǎng)IP或者用端口映射(與IP靜態(tài)映射差不多,個人覺得不如IP靜態(tài)映射來的方便),測試功能完全實現(xiàn)后,直接修改防火墻配置,只是一瞬間,網(wǎng)站就能實現(xiàn)切換,切換完畢后再處理老服務(wù)器。搬遷的時候也是,不必給每個服務(wù)器都更改IP地址、子網(wǎng)掩碼什么的一大堆,全都接到防火墻上,把防火墻上的IP更改一次就完事,真正服務(wù)器的ip地址都不用改(反正都是私網(wǎng)地址)。好處目前想到的就這些啦。
其實配置還是很簡單的。
我們假設(shè)你有兩臺web服務(wù)器,ip地址為192.168.1.1和192.168.1.2,一臺交換機(jī),一臺linux雙網(wǎng)卡服務(wù)器(做防火墻和ip靜態(tài)映射用),一根外線,數(shù)個可用的公網(wǎng)IP(假設(shè)為1.1.1.1~1.1.1.6),而你想讓大家通過訪問1.1.1.2訪問第一臺web服務(wù)器,通過訪問1.1.1.3訪問第二臺。將外線接在linux服務(wù)器的一塊網(wǎng)卡上(比如eth0),設(shè)置該網(wǎng)卡地址為1.1.1.1;再用網(wǎng)線連接另外一塊網(wǎng)卡(比如eth1)到交換機(jī)上,設(shè)置ip地址為192.168.1.254。兩臺web分別接到交換機(jī)上,網(wǎng)關(guān)設(shè)置為192.168.1.254(也就是linux防火墻的內(nèi)網(wǎng)地址啦)。
#p#
線路已經(jīng)搭建好了,現(xiàn)在談?wù)勗趺丛O(shè)置linux服務(wù)器。
安裝就不用說了吧?建議用比較新的版本就好(新版本的iptables功能更強(qiáng),對于硬件的支持率也更高,不用你花很多精力在調(diào)通設(shè)備上),系統(tǒng)裝好后設(shè)置好IP……怎么設(shè)置?以前是通過修改目錄/etc/sysconfig/network-scripts/下的ifcfg-eth0和ifcfg-eth1文件實現(xiàn)的。現(xiàn)在可以通過ifconfig或者ip address add命令來實現(xiàn)(這些設(shè)置的前提是你的網(wǎng)卡已經(jīng)被檢測到,并且可以正常工作,如果安裝網(wǎng)卡遇到問題以后再討論吧,我用的版本是redhat as4版本)。比如設(shè)置eth0,你可以用
ifconfig eth0 1.1.1.1/30 up(我說了你的可用ip范圍一般來說是1.1~1.7,這就意味著子網(wǎng)掩碼是255.255.255.248,換算過來就是/30了)來給eth0設(shè)定IP地址,也可以通過命令
ip address add 1.1.1.1/30 brd + dev eth0
來實現(xiàn)。網(wǎng)關(guān)的添加可以通過命令
ip route add default via 網(wǎng)關(guān)IP dev eth0
來實現(xiàn)。eth1就不用我說了吧?注意在linux中,整個系統(tǒng)的默認(rèn)網(wǎng)關(guān)(default)只能有一個(當(dāng)然你可以通過添加路由或者策略路由增加網(wǎng)關(guān),但是系統(tǒng)默認(rèn)的網(wǎng)關(guān)只能有一個),所以不要用上面的命令再給eth1添加默認(rèn)網(wǎng)關(guān)了,否則誰都上不了網(wǎng)。
如果上述命令都成功執(zhí)行了,恭喜你,基本的東西都已經(jīng)準(zhǔn)備好了,否則不是你的系統(tǒng)安裝的時候不完全就是你的網(wǎng)卡沒裝好……
#p#
現(xiàn)在看看iptables服務(wù),你可以執(zhí)行iptables -V看看是否iptables已經(jīng)安裝在系統(tǒng)里了(一般來說都會安裝了),還可以顯示你的版本號——我的是1.3.6版本。
ok,編輯腳本吧。輸入
vi FWstart.sh進(jìn)入編輯界面(下面是文本正文)
#!/bin/sh
#下面兩項分別是啟動linux的轉(zhuǎn)發(fā)功能和防syn攻擊的參數(shù)。
#沒有第一條就不能實現(xiàn)linux的數(shù)據(jù)包轉(zhuǎn)發(fā)
#意思就是把文件/proc/sys/net/ipv4/ip_forward的值設(shè)定為1
#第二條我不太了解,但還是加上吧。
- echo "1" > /proc/sys/net/ipv4/ip_forward
- echo "1" > /proc/sys/net/ipv4/tcp_syncookies
#加載iptables啟動所需的各種模塊,據(jù)說很多版本不加也可以,因為具體的參數(shù)引用實際上已經(jīng)調(diào)
#用了它們,但是考慮兼容性加上也沒什么,如果你去掉了這幾行,結(jié)果出現(xiàn)了問題,不妨再加上。
- modprobe ip_tables
- modprobe ip_nat_ftp
- modprobe ip_nat_irc
- modprobe ip_conntrack
- modprobe ip_conntrack_ftp
- modprobe ip_conntrack_irc
#清空原有的iptables的表(主要是filter表和nat表)和表中的鏈
- /sbin/iptables -F
- /sbin/iptables -X
- /sbin/iptables -Z
- /sbin/iptables -F -t nat
- /sbin/iptables -X -t nat
- /sbin/iptables -Z -t nat
#設(shè)置filter表中三個鏈的默認(rèn)規(guī)則,進(jìn)入(INPUT)發(fā)出(OUTPUT)都是允許ACCEPT
#轉(zhuǎn)發(fā)(FORWARD)是丟棄DROP,這樣才能起到防火墻的作用。
#你也可以設(shè)定更細(xì)致的INPUT規(guī)則,實際上INPUT鏈?zhǔn)轻槍ΡWo(hù)防火墻自身的,我不多說了,
#我的重點放在FORWARD鏈,它是負(fù)責(zé)過濾轉(zhuǎn)發(fā)包的。
- /sbin/iptables -P INPUT ACCEPT
- /sbin/iptables -P OUTPUT ACCEPT
- /sbin/iptables -P FORWARD DROP
#現(xiàn)在給網(wǎng)卡添加ip地址,一塊網(wǎng)卡上可以擁有很多IP地址,只有這樣,外網(wǎng)訪問1.1.1.2的時候
#才能重新定向到內(nèi)網(wǎng)的192.168.1.1上去。
ip address add 1.1.1.2/30 brd + dev eth0
ip address add 1.1.1.3/30 brd + dev eth0
#設(shè)置允許對服務(wù)器192.168.1.1和192.168.1.2的訪問,否則的話外網(wǎng)
#就無法把數(shù)據(jù)發(fā)送到這兩臺服務(wù)器上。當(dāng)然你可以設(shè)置更多的規(guī)則,這實際上就是為這兩臺
#服務(wù)器設(shè)置的防火墻了。比如如果你想設(shè)置只允許訪問1.1上的80端口,只要把
#/sbin/iptables -A FORWARD -d 192.168.1.1 -j ACCEPT改為
#/sbin/iptables -A FORWARD -d 192.168.1.1 --dport 80 -j ACCEPT就可以了,
#其他不要改,除非你明白修改后的含義。不過我要提醒你,按照這種設(shè)置,你的兩臺
#服務(wù)器基本上就是和單獨(dú)接入在internet中沒什么兩樣,只是進(jìn)行了地址轉(zhuǎn)換,
#多了一點點保護(hù)而已。建議你還是多學(xué)學(xué)iptables防火墻的其他內(nèi)容。
- /sbin/iptables -A FORWARD -s 192.168.1.1 -j ACCEPT
- /sbin/iptables -A FORWARD -d 192.168.1.1 -j ACCEPT
- /sbin/iptables -A FORWARD -s 192.168.1.2 -j ACCEPT
- /sbin/iptables -A FORWARD -d 192.168.1.2 -j ACCEPT
#p#
#下面就是nat表了,這個絕對不要改,除非你很明白它們的作用,
#達(dá)到比對filter表的了解還要深刻的程度。
#意義是nat標(biāo)的三條鏈默認(rèn)接受任何數(shù)據(jù)傳輸。
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
#這是真正實現(xiàn)地址轉(zhuǎn)換的語句,意義為:
#在PREROUTING鏈中(也就是剛進(jìn)入linux服務(wù)器的數(shù)據(jù)包),將目的地址為1.1.1.2的數(shù)據(jù)包
#進(jìn)行修改,使得其目的地址變?yōu)?92.168.1.1;
#在POSTROUTING鏈中(馬上要送出linux服務(wù)器的數(shù)據(jù)包),將源地址為192.168.1.1的數(shù)據(jù)
#包的源地址改為1.1.1.2;
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.2 -j DNAT --to-destination 192.168.1.1
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source 1.1.1.2
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.3 -j DNAT --to-destination 192.168.1.2
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to-source 1.1.1.3
#腳本到此結(jié)束。
你的內(nèi)網(wǎng)服務(wù)器192.168.1.1和192.168.1.2應(yīng)該已經(jīng)可以通過ip地址1.1.1.2和1.1.1.3訪問了
通過文章的詳細(xì)描述,我們知道了用iptables做IP的靜態(tài)映射其實和iptables做端口映射差不多,希望對你們有所幫助!
【編輯推薦】
- 如何把iptables外網(wǎng)端口全部映射到內(nèi)網(wǎng)一臺主機(jī)上
- 配置Linux 內(nèi)核并利用iptables 做端口映射
- iptables映射端口具體操作
- 用iptables做地址映射
- linux下清空所有iptables規(guī)則
- 如何清空其中一條iptables規(guī)則
- 如何清空iptables規(guī)則