编辑:

编辑:

我有一台始终在线的机器,运行 Debian/Squeeze,带有几个以太网端口(它正在执行各种服务器工作,包括 DHCP),每个端口上都有一个 LAN。

eth0 位于 192.168.7.* 上,可以通过位于 192.168.7.1 的 LAN 上的网关(NAT 转换 DSL 路由器)访问互联网(以及“办公室 LAN”的其余部分)。

eth1 位于 192.168.1.* 上。我正在寻找一种快速、简单且 Debian 友好的方法来配置机器,以便 192.168.1.* LAN 上的任何人只能访问外部互联网、DHCP,而无法访问 192.168.1.* LAN 上的任何其他内容192.168.7.*。

我确信使用一组适当的 iptables 规则是可能的。怀疑我正在寻找其中之一:

  • 关于如何设置 iptables 来实现上述目标的简单指南(我不是第一个想要这样做的人)。
  • 指向一些用户友好的防火墙配置软件,可以执行此操作(尽管请注意,我根本不想锁定 eth0 端和 192.168.7.* 网络)。
  • 建议一些专门用于执行此操作的软件;我有一个想法,有一些软件包旨在实现与我想要的网吧等类似的功能,但我不确定从哪里开始寻找,或者这些软件包是否可能矫枉过正。

Debian Squeeze(或 Wheezy)中的任何工具都已经是一个很大的优势。

答案1

使用 iptables 可以很容易地做到这一点。在下面,“wan-iface”是您的 WAN 连接所在的接口。根据其连接方式,可能是 eth2、ppp0 等。另外,请注意,您可以通过编辑来重命名以太网接口/etc/udev/rules.d/70-persistent-net.rules- 当您有多个以太网接口时,强烈建议这样做。-i lan比 清楚得多-i eth0

您可以编写 init.d 脚本以在启动时应用这些规则或使用 iptables-persistent 包。或者打包了各种防火墙规则生成器(我个人直接写iptables规则,因为我经常想做一些奇怪的事情)。

如果您现有的规则尚未涵盖,您将需要一条 NAT 规则:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j SNAT --to-source external-ip

external-ip 是您的实际 IP 地址。如果您有动态的,请将该行更改为:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j MASQUERADE

然后您需要防火墙规则来允许流量。我在这里给出两个,具体取决于您的默认转发是否为 DROP。它应该会下降,但是...

iptables -A FORWARD -i eth1 -o wan-iface -j ACCEPT # default is drop
iptables -A FORWARD -i eth1 ! -o wan-iface -j DROP # default is accept

现在,您只需要允许 DHCP。假设您的防火墙正在运行 DHCP,并且 DNS 位于 WAN 上(否则,您需要允许它们与 DNS 服务器通信):

iptables -A INPUT -i eth1 -p udp --dport bootps -j ACCEPT
iptables -A INPUT -i eth0 -j DROP # only if your default isn't drop

我相信,这是最小的配置。您还可以限制传至 Internet 的流量。例如,如果您只想浏览网页,而不是上面的 FORWARD 规则,您可以这样做(再次假设 WAN 上有 DNS):

iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p udp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport http -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport https -j ACCEPT
iptables -A FORWARD -i eth1 -j DROP # only if default is accept

请注意,上面允许三个端口:域(TCP 和 UDP,用于 DNS)、http (TCP) 和 https (TCP)。

编辑:

针对您的澄清:

听起来这个盒子上目前没有进行 NAT。此外,没有 WAN 接口,流量通过 LAN 流出。不是最好的设置,但可行。

我将使用“lan-ip”来表示 LAN (eth0) 上 Debian 机器的 IP 地址。我将使用“guest-ip”来表示访客网络 (eth1) 上同一个盒子的 IP 地址。

在编写本文时,我对您的接口命名感到困惑,因此我假设您采纳了我的建议,并将接口重命名为“lan”(eth0)和“guest”(eth1)。如果没有,您可以进行查找和替换。

听起来您目前没有在此机器上设置路由或防火墙,因此我将给出完整的规则,而不仅仅是要添加的规则。当然,您可能还需要添加更多内容。

您需要打开 IP 转发(编辑 /etc/sysctl.conf 来执行此操作)。并在同一文件中打开反向路径过滤器。

您需要配置 DHCP 以在 eth1 网络上提供服务。请注意,它提供的默认网关(仅适用于 eth1 访客网络)需要是 guest-ip,不是192.168.7.1。

您的 NAT 规则看起来会有点不同。最好不要这样做,而是在 192.168.7.1 上执行此操作,但我猜这是不可能的。如果可能,请跳过此 nat 规则,将其添加到 7.1 上,并通过 lan-ip 添加到 192.168.1.0/24 的路由。

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o lan -j SNAT --to-source lan-ip

现在,由于您当前没有设置防火墙,因此默认拒绝。一般来说,这是最安全的做事方式。

iptables -P INPUT DROP    # default for traffic to firewall (this box)
iptables -P FORWARD DROP  # default for forwarded traffic
iptables -F               # clear rules
iptables -X               # delete custom chains
iptables -t nat -F        # same, but for nat table
iptables -t nat -X

iptables -A INPUT -i lo -j ACCEPT  # let the box talk to itself. Important.

此时,您的盒子将完全无法访问。不是你想要的。接下来的几条规则可以解决这个问题。前两个设置连接跟踪,允许属于现有连接(或与其密切相关)的数据包

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

然后我们现在假设您信任办公室 LAN 上的计算机,并允许来自它们的所有流量。如果您愿意,可以将其更改为更受限制的规则。请注意,FORWARD 规则将允许您访问访客网络上的计算机办公室局域网。如果不需要,请忽略它。

iptables -A INPUT   -i lan          -j ACCEPT
iptables -A FORWARD -i lan -o guest -j ACCEPT

现在,允许来自访客网络的一些流量。首先,您需要允许 DHCP。

iptables -A INPUT -i guest -p udp --dport bootps -j ACCEPT # dhcp

接下来,我假设您不想允许访客访问您的任何专用网络。因此,我们将把所有访客流量丢弃到 RFC1918(私人)空间。

iptables -A FORWARD -i guest -d 10.0.0.0/8      -j DROP  
iptables -A FORWARD -i guest -d 172.16.0.0/12   -j DROP
iptables -A FORWARD -i guest -d 192.168.0.0/16  -j DROP

由于我们已经放弃了所有私有地址空间,其余的都是公共的。所以允许它。这行字有点吓人,要是前面的一行字少了,那就麻烦了。

iptables -A FORWARD -i guest -o lan -j ACCEPT

您当然可以将其限制为特定的协议和端口(如仅浏览网页的示例)。

您还可以添加规则来记录丢弃的数据包等。

相关内容