iptables在網路中的兩個經典應用(轉)

post0發表於2007-08-11
iptables在網路中的兩個經典應用(轉)[@more@]

a.埠轉發:

在詳述埠轉發之前,先講一下我日前遇到的一件事情。

本人是搞測試的,有一廠家拿了一個伺服器軟體叫我測試。基於win2k的,埠號為881,伺服器直接連線外部網路,客戶端透過服

器ip來訪問,而他們沒有基於linux的伺服器軟體,照他們意思就必須將伺服器換成windows的。作為一個linux愛好者,我想大家

明白這種痛苦。我翻了一下資料,發現iptables的埠轉發功能可以解決,折騰了一下午,終於完成任務。下面將我的方法講一下:

思想:利用埠轉發,當伺服器接收到881埠請求以後,將其轉到 10.10.2.200:881上,10.10.2.200再將資料返回給請求連線

Eth0:連線ADSL,即ppp0介面

Eth1:連線內部網路,ip為10.10.1.1

10.10.2.200為win2k伺服器,其埠881提供網路服務。

iptbles指令碼:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;將881請求

發至10.10.2.00:881埠

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source

10.10.1.1 ;返回a.b.b.d時資料來源來自同一子網,就將其源地址更改為10.10.1.1,從eth0發出,並在連線跟蹤表中查出a.b.c.d

從ppp0進來的,又由ppp0將此資料發出。

當然不要忘了加一條允許881埠訪問的語句。

iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT

可不可把伺服器放在局域內,用埠轉發來實現呢?答案當然是肯定的,既然能把881埠轉發,那麼21,80這些個埠更不在話

,而且很多伺服器軟體都可以自定義埠,那就在得玩了,只要有合適的埠,即使給區域網每一個使用者開一個ftp伺服器也是可

的。你想要實現什麼服務都可以,當然是基於埠轉發的。

區域網內10.10.2.101是win2k,提供www服務,埠為800

透過伺服器 進行訪問。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source

10.10.1.1

iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT

由於是基於埠轉發實現的,所以伺服器上只需裝個iptables來轉發資料就行了,一切服務由內部伺服器完成,這樣的話,我

linux伺服器才真正的算是個防火牆。

b.IPTABLES防火牆使用經驗一談

最近架設了一臺LINUX的小型伺服器 因為需要把LINUX的機子作為軟路由器來使用 所以把使用的一些經驗談一下。

iptables的功能十分的強大 例如IP轉發和偽裝 防禦DoS,掃描和嗅探試的攻擊等等 在這裡就不闡述了

我的系統環境: redhat 7.2

adsl 2m

8139fast 網路卡

1:linux如何所以軟路由功能:

說到這裡 大家可能會想 只要在/etc/rc.d/rc.local加上cat 1 > /proc/sys/net/ipv4/ip_forward就可以了 讓linux具

ip_forward的功能 但你會發現 就算這樣設定你區域網內的其他電腦還是不能共享上網 這是為什麼 因為當你只有一個公網的ip

候 你就必須用到iptables的IP偽裝功能 把IP的偽裝成你公網的IP 那怎麼實現呢 你可以這樣

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 這樣就可以把你所以出去的IP地址偽裝成ppp0的IP地址(因為我

ADSL 如有不同可以修改)

2:我不想開放我的埠 但我要在我的電腦上啟用http服務 並對外服務:

因為你不想開放除了80以外的埠 你可以這樣

iptables –P INPUT –j DROP 我們用-P來攔截全部的通訊

然後在來允許哪些埠可以被使用你可以這樣寫:

iptables –A INPUT –p tcp –dport 80 –j ACCEPT

你可以適當的按照這樣的格式來新增自己想開放的埠 當然如果你覺得這樣不是很好的管理你也可以新建一個iptables表 你可以

樣做

iptables –N test (新建一個test表)

iptables –A test DROP

iptables –A test –p tcp –dport 80 –j ACCEPT(允許80埠被訪問)

iptables –A INPUT –j test

iptables –A OUTPUT –j test

iptables –A FORWARD –j test(這3條的意思指讓INPUT OUTPUT FORWARD都按照test的設定)

3我想在我內網的電腦上架設ftp服務 我該怎麼做:

這就又要用到iptables 的又一個強大的功能埠對映了

你可以這樣iptables -t nat -A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination

192.168.0.6:21

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp -m tcp --

dport 25-j SNAT --to-source 192.168.0.1

這寫是XCHEN兄給我的指導 再這裡先謝謝了 上面2句話的意思是把伺服器的25埠對映到192.168.0.6這臺電腦上

4:我不想讓人家可以PING到我

這大概是做防火牆用到最多的一種了 你可以在iptables寫這句話

iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP

如果你前面是新建了一個新的test表 那也可以這樣寫iptables -A test -p icmp --icmp-type echo-request -i ppp0 -j

DROP

這句話就是不允許人家PING我 因為ping用到的是icmp協議 因為icmp沒有埠可言 所以也不需要指定埠了

好了 這就是iptables的幾種比較基本的用法

這裡在介紹幾iptbales常用的一些命令

iptables –F 清空所有的iptables的規則設定

/sbin/iptables-save > iptables – save 把你的規則儲存下來 因為你所有設定的規則再重新啟動後都不會被儲存 所以你必

來寫一個指令碼來讓他開機執行 所以你就可以用這命令來儲存你的規則 然後讓他開機自動執行就可以了

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945984/,如需轉載,請註明出處,否則將追究法律責任。

相關文章