Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                                                                                            
                
        
我是iptables的新手,现在已经进行了几天的Google搜索,但没有找到解决此问题的好方法。

我的计算机A的公共IP地址为5.6.7.8,可以不受限制地访问Internet。我有另一台计算机B,该计算机B具有只能访问计算机A的私有IP地址1.2.3.4。如何使用iptables将网络流量从B通过A转发到Internet?我需要使用http,ftp和https才能将apt-get与sudo一起使用。

两台计算机都运行Ubuntu Linux。我已经尝试过使用Squid,但我认为对于我需要做的事情来说太复杂了。

(这些显然不是真正的ip地址,但我注意到,如果不了解问题的设置,就无法理解一般的Internet解释。)

最佳答案

我假设机器A有两个网络接口,例如eth0和eth1。接口eth1(外部)连接到调制解调器,而eth0(内部)连接到交换机或直接连接到计算机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


仅在要监视流量或缓存时才需要乌贼。但是,鱿鱼配置需要对fwscript.sh进行一些更改,并且您需要确定要透明代理还是不透明代理。
我现在尝试不用鱿鱼。

关于linux - iptables的基本实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24163899/

10-11 22:06
查看更多