网络接口:阻止 WAN 但不阻止 LAN

网络接口:阻止 WAN 但不阻止 LAN

我的 Ubuntu 服务器上有两个网络接口,eth0 和 eth1。目前,两者都配置了标准路由规则,但我想将 eth1 配置为只能访问本地网络上的其他计算机,而不能访问互联网。eth0 应该能够访问所有内容。我见过类似的问题,人们想要实现相反的目标(访问互联网但不访问本地计算机),但我不确定如何调整规则来实现我的愿望。

我应该添加哪些规则来锁定 eth1 访问(和被访问)Web,但仍允许 LAN 访问?


编辑:更多信息。

现行方案。这是我目前设置的示意图。网络上有一个单独的路由器,用于处理与互联网的连接。

如果我怀疑有攻击(例如有人盗用我的私钥,我需要时间“更换锁”),我希望能够立即断开服务器与互联网的连接,但仍然能够从另一台本地计算机通过 SSH 访问服务器以解决问题。我可以通过断开红线或运行脚本来关闭 eth0 接口来实现这一点。

有没有办法在两个接口都连接到交换机的情况下实现这种情况,还是我需要移动红线并将 eth0 直接连接到路由器?我怀疑下面的答案是理想的情况是让 eth0 处理所有互联网活动,让 eth1 处理本地活动。

答案1

我对你的描述还是有点困惑。我的理解如下:

+--------------+    +---------+
| Ubuntu  eth0 |----| Router/ |---- Internet
|              |    | Modem   |
|              |    +---------|
|              |
|              |    +---------+
|         eth1 |----| Switch  |---- LAN PC 1
|              |    |         |
|              |    |         |---- LAN PC 2
+--------------+    +---------+

因此,LAN PC 1、LAN PC 2 和 Ubuntu 服务器应该能够相互通信(通过 Ubuntu 服务器上的 eth1),并且 Ubuntu 服务器应该能够访问互联网,但 LAN PC 1 和 LAN PC 2 都不应该能够访问互联网。

在这种情况下,您只需在 Ubuntu 服务器上禁用转发(echo 0 > /proc/sys/net/ipv4/ip_forward尽管默认情况下禁用,或者/etc/sysctl.conf在启动时编辑以执行此操作)。服务器将通过 eth0 连接互联网,通过 eth1 连接 LAN。

如果情况不同,请编辑您的问题来描述情况。

请注意,不是网络接口(eth0、eth1)“访问”任何东西,而是计算机本身。也许这就是通信问题的原因。

编辑

是的,您可以根据您的绘图完成您的场景,但这会很棘手:“双重”连接到网络并不好玩。

有一个解决方案要简单得多,如果其他本地 PC 在攻击期间断开互联网连接也没关系:将所有 PC 连接到交换机,并在怀疑有事时拔掉从交换机到路由器的电缆。所有计算机都保留其 IP 地址,您可以ssh使用数字地址从本地 PC 进入服务器。(或者您可以从服务器而不是调制解调器/路由器运行 DNS/DHCP。)

恰当的保护服务器并同时允许本地 PC 继续使用互联网的解决方案是在 DMZ 中的调制解调器/路由器和 Ubuntu 服务器之间以及本地 PC 之间设置防火墙(至少有两个 LAN 接口的廉价嵌入式计算机即可)。如果您可以完全访问调制解调器/路由器(例如使用 OpenWRT),也可以在此处放置此防火墙。

现在开始您的计划:Ubuntu 服务器是否直接连接到路由器或交换机都没有关系:路由器有一个内部交换机,级联交换机不会改变任何东西,它们都算作同一 LAN 段的一部分。

以下是您需要做的事情的概述。它尚未经过测试,需要进行一些调整,并且可能存在一些问题,导致它根本无法正常工作。

  • 假设路由器/调制解调器运行 DHCP 服务器,请确保 eth0 和 eth1 都获得不同的 IP 地址。还要确保 eth1 没有获得默认路由。您可能需要dhclient.conf对此进行修改,可能要request为两个接口编写不同的行。

  • 路由:eth0 应获取默认路由。eth1 永远不应获取默认路由,即使 eth0 已关闭。您可能必须与已安装的程序/脚本作斗争才能实现这一点。eth1 应该只获取具有更高度量的链路本地路由(如果可能的话),或者在 eth0 启动时根本不获取路由(或 /1 子网),在 eth0 已关闭时获取链路本地路由。这意味着您可能必须为 eth0 设置 eth1 的路由/etc/network/if-{up,down}(或目前 systemd 等效路由,如果它在 systemd 中有效...)。

原因:如果 eth0 和 eth1 都有到本地 LAN 的相同度量的路由,则数据包将从两个接口随机发送,使用不同的源 IP 地址。对于 LAN 中的接收端来说,看起来大约有一半的数据包被丢弃了(因为具有正确源地址的数据包从未到达)。这就是为什么进入同一网段的“双接口”并不好玩。

  • 您需要制定iptables规则来阻止 eth1 上的任何内容,但用于 ssh 往返本地 LAN 的端口除外。Google 上提供教程。

相当多的工作。

编辑

一个更简单的替代方案是创建一个网络命名空间(在 Google 上查找教程),将 eth1 移到该命名空间中,sshd在其中运行,所有其他服务都在命名空间之外。这意味着两个接口都可以有默认路由等,只有 sshd 通过 eth1,所有其他服务都通过 eth0。eth1 需要规则将其限制在和iptables上的本地 LAN 上。INPUTOUTPUT

编辑

正如我所说,远程调试非常困难(没有反馈)。如果你无法让它工作,请提出一个新问题并描述确切地您做了什么(ip routeip addr所有相关机器上、tcpdump在相关界面上执行的操作ssh等)。

我刚刚检查了一下;因为我没有两个以太网接口,所以我使用了虚拟以太网对。大致来说,创建一个命名空间并将你的移入eth1其中

# ip netns add blue
# ip link set eth1 netns blue

确保它获得有效的地址和路由,方法是启用 DHCP 并确保它运行(无论你的系统使用什么方法),或者手动设置(用于测试),例如

# ip netns exec blue ip link set eth1 down
# ip netns exec blue ip addr add 192.168.4.1/24 dev eth1
# ip netns exec blue ip link set eth1 up

您应该获得一个地址和一条路由,例如(这是通过虚拟 eth 对完成的,因此它看起来不完全像这样):

# ip ip netns exec blue ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
  link/ether e6:5a:19:e0:63:75 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  inet 192.168.44.1/24 scope global veth1b
     valid_lft forever preferred_lft forever
  inet6 fe80::e45a:19ff:fee0:6375/64 scope link 
     valid_lft forever preferred_lft forever
# ip netns exec blue ip route
192.168.44.0/24 dev eth1 proto kernel scope link src 192.168.44.1 

在另一个 xterm 中的该命名空间中运行sshd,添加调试标志并使用不同的端口以确保不会造成混淆:

# ip netns exec blue /usr/sbin/sshd -D -d -p 222

使用从外部连接到它ssh 192.168.44.1 -p 222,这里工作正常:您可以在调试消息中看到连接过程。

答案2

如果您的本地 PC 需要访问互联网

假设您的本地网络是192.168.0.0/24,并且如果 LAN 流量使用,那不是问题eth0

在服务器上,添加以下规则:

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -j DROP
iptables -A OUTPUT -o eth1 -d 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -o eth1 -j DROP

这将无条件地取消任何eth1不属于您的 LAN 的传入和传出流量。替换为您的 LAN 的 CIDR。如果需要,192.168.0.0/24请不要忘记添加它们的等效项。ip6tables

如果您的本地 PC需要访问互联网

断开路由器和交换机的连接,直接连接到eth0。如果你的网络设备距离较近,这种方法比上面简单得多。

路由器仅在两个不同的网络需要通信,当两台机器都在同一个网络上时(连接到同一个交换机而没有 VLAN 时通常就是这种情况),它是无用的。

相关内容