2014-06-11 46 views
-1

我是iptables的新手,現在我一直在做谷歌搜索幾天而沒有找到這個問題的一個很好的解決方案。基本的iptables實現

我有一個公共IP地址5.6.7.8,可以訪問互聯網的電腦A無限制。我有另一臺計算機B的私有IP地址爲1.2.3.4,只能訪問計算機A.如何使用iptables將B到A的網絡流量轉發到Internet?我需要使用http,ftp和https才能使用apt-get和sudo。

這兩臺電腦都運行Ubuntu linux。我曾嘗試過使用Squid,但我認爲它對於我需要做的事來說太複雜了。

(這些顯然不是真正的IP地址,但我注意到,一般互聯網的解釋是不理解的問題的設置不可讀。)

回答

1

我假設機器A有兩個網絡接口,說eth0和eth1。接口eth1的(外部)被conected到調制解調器,和eth0的(內部)被conected到交換機或直接到機B.

首先需要使在機器A的分組轉發:

echo 1 > /proc/sys/net/ipv4/ip_forward 

現在您可以保存下列爲/etc/init.d/fwscript.sh:

#!/bin/sh 
    ipt=/sbin/iptables 
    extip=5.6.7.8 # replace with your EXTERNAL IP 
    lan=192.168.0.0/24 # your LAN 

    # start firewall 
    start_firwall { 
    echo "Enabling iptables firewall." 
    # default policies 
    $ipt -P INPUT DROP 
    $ipt -P FORWARD DROP 

    # NAT 
    $ipt -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $extip 

    # INPUT chain 
    $ipt -A INPUT -i lo -j ACCEPT 
    $ipt -A INPUT -i eth1 -s $lan -j ACCEPT 
    $ipt -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
    $ipt -A INPUT -p tcp --destination-port 22 -j ACCEPT 

    # FORWARD chain 
    $ipt -A FORWARD -i eth1 -s $lan -j ACCEPT 
    $ipt -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
    } 

    # stop firewall 
    stop_firwall { 
    $ipt -P INPUT DROP 
    $ipt -P OUTPUT DROP 
    $ipt -P FORWARD DROP 
    # allow internal traffic 
    $ipt -A INPUT -i eth1 -j ACCEPT 
    $ipt -A OUTPUT -o eth1 -j ACCEPT 
    } 

    # flushing, removing and zeroing tables 

    reset_firewall { 
    chains=`cat /proc/net/ip_tables_names` 
    for i in $chains; do 
     $debug $ipt -t $i -F 
     $debug $ipt -t $i -X 
     $debug $ipt -t $i -Z 
    done 
    } 

    case "$1" in 
    start|restart|reload) 
     reset_firewall 
     start_firewall 
     ;; 
    stop) 
     reset_firewall 
     stop_firewall 
     ;; 
    *) 
     echo "Usage: $0 {start|stop|restart|reload}" 
     exit 1 
     ;; 
    esac 
    exit 0 

腳本必須運行(chmod + X fwscript.sh)。現在只需輸入:./fwscript.sh [start | stop]即可運行它。 現在,讓你的防火牆在啓動時運行:

update-rc.d fwscript.sh defaults 99 

如果要監視流量或緩存你只需要魷魚。但是squid配置需要對fwscript.sh進行一些更改,並且您需要決定是否需要透明或不透明代理。 我現在嘗試沒有魷魚。

+0

非常感謝!儘管如此,我確實需要澄清一些問題。腳本是放在機器B還是機器A上?如果它在機器A上,我需要怎樣做B?機器A只有1個網絡接口。這是一個問題嗎? – ProbablePattern

+0

腳本放在機器A上,它將成爲您的網關。是的,機器A需要兩個網絡接口來完成轉發。 – wind39

+0

我還假設您已通過靜態IP或DHCP在A和B之間進行通信。您也可以將您的機器A配置爲DHCP服務器,並且B將從A(使用dhcpclient)獲得動態IP。 – wind39