基本的iptables实现

时间:2014-06-11 13:12:50

标签: linux networking iptables

我是iptables的新手,几天前我一直在谷歌搜索,但没有找到解决这个问题的好方法。

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

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

(这些显然不是真正的IP地址,但我注意到在不了解问题设置的情况下,一般的互联网解释是不可读的。)

1 个答案:

答案 0 :(得分:1)

我假设机器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

如果要监控流量或缓存,则只需要鱿鱼。但是squid配置需要在fwscript.sh中进行一些更改,您需要决定是否需要透明或不透明的代理。 我现在试试没有鱿鱼。