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