2009年4月10日 星期五

用 linux 架設 ip shareing (bata)

作者: Baron. Wan

曾經想過, 當自己學了 Linux 系統一陣子之後, Linux 除了架站, 還可以拿來做什麼? 剛好自己有兩台主機, 想說不然就不要花錢買 ip shareing, Linux 不是甚麼都能架嗎? (它在我心中已經快接近神器了,哈哈~) 來架架看吧, 不過, 萬事起頭難, 剛開始就想打退堂鼓, 原因自己曾經試著用 iptables, 但是時常後來都搞得越來越糟糕... 但是怎麼辦呢? Linux 就它最強悍了(網路上說的), 好吧! 那就真的來好好研究一下.

研究了一陣子, 就在修修改改當中, 嘿~ 竟然就這樣成功了, 然後自己也終於知道 forward 的功用在哪裡. 在製作 script 之前呢, 有幾項東西要先給它加入:
echo 1 \> /proc/sys/net/ipv4/ip_forward #這是開啟ip forward 功能, 這是最重要的. 要做 nat 的話, 底下內容也可一併載入.

modprobe ip_tables #載入iptables 模組
modprobe ip_nat_ftp #作用是讓區域網路可以連上ftp
modprobe ip_conntrack #這是 ip連線追蹤模組
modprobe ip_conntrack_ftp #連線追蹤 ftp 模組
modprobe ip_conntrack_irc #連線追蹤 irc 模組

接下來我說明一下我測試的環境:
1. A 為 CentOS5 Linux 環境, 有兩張網卡 eth0: 10.16.35.228 eth1: 192.168.0.254
2. B 為我日常都在使用的 ubuntu, 一張網卡 eth0: 192.168.0.215
3. 將 B 的 eth0 網路連線到 A 的 eth1
4. A 的 eth0 連到 HUB or 外面的網路環境 (如果直接連外, 同時是用 pppoe 連線方式, 則請將 eth0 改為 ppp0)

要測試之前, 我們知道, 最基本必須先讓 B 電腦可以上網, ok, 讓我們開始來實做它.
# 讓區網可以做基本的檢測動作 ping. (我自己認為這很重要)
iptables -t filter -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
# 這兩行是說明網卡可以互通. (最基本的動作)
iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -o eth1 -j ACCEPT
# 來源區段 192.168.0.0/24 通過 eth0(外部) 時, 將封包偽裝
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

以上, 最基本的動作, 恭喜, 這樣基本上就可以讓 eth1 連外了; 之後我們可以慢慢在條件上增加限制, 來加強防護能力, 以下是 PJ. 做一個小小示範:

iptables -t filter -A FORWARD -p tcp -i eth1 -o eth0 --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth1 -o eth0 --dport 443 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth1 -o eth0 --dport 25 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth1 -o eth0 --dport 110 -j ACCEPT
iptables -t filter -A FORWARD -p udp -i eth1 -o eth0 --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth1 -o eth0 --dport 22 -j ACCEPT

然後記得, 預設中所有的 chain 都是 ACCEPT 型態的, 我在 script 當中加入
iptables -F FORWARD
iptables -t nat -F POSTROUTING
iptables -P FORWARD DROP
iptables -t nat -P POSTROUTING DROP

在前面位置, 將他們一開始就先設定好.

接下來就可以來做閘道式防火牆, 前提我們會先溝通好一些觀念, 這蠻重要的.

沒有留言: