本地机器 Ubuntu iptables 上的条件端口重定向

本地机器 Ubuntu iptables 上的条件端口重定向

我是这个社区的新手,也是我想要使用的工具的新手iptables,所以请容忍我的无能^_^

无论如何,我的情况如下:

  1. 我有一个具有私有 IP 地址的私有 LAN。
  2. LAN 通过路由器连接到我所在组织的网络,该网络具有固定的 IP 地址范围。
  3. 反过来,该网络通过网关连接到互联网。
  4. 在我的私人局域网中,我正在运行一个在端口上监听的服务器A
  5. 它接受来自端口的我的私有局域网中所有计算机的所有请求A
  6. 它是一个以请求/响应模式运行的 TCP 服务器,即我需要与它进行通信。
  7. 在我的私人局域网之外的任何地方都无法访问它。
  8. 操作系统是Ubuntu 16.04,iptables已安装。

我可以轻松配置我的路由器,将所有传入的 TCP 连接转发到我服务器的一个端口B到端口A。这意味着来自外部的任何人(无论是来自组织网络还是互联网)都可以连接到我的路由器的 IP 地址端口,B并被转发到我的服务器端口A。但是,我只希望我组织网络中的用户被允许这样做。对于来自互联网的一般用户,应该无法访问我的服务器。

我想要在iptables我的服务器上实现的是。

  1. 我的私有 LAN 运行正常。LAN 中计算机上的所有进程仍可使用其私有 IP 地址和端口连接到我的服务器A
  2. 我所在组织网络中的用户可以(通过 IP 地址范围或子网掩码标识)访问我的路由器的 IP 地址和端口B以使用我的服务,他们的数据包会被转发到我的服务器及其端口A
  3. 既不在我的私有局域网中也不在组织网络中的用户不应被转发,他们不应连接到我宝贵的服务器。
  4. 如果我的私人局域网中的一台计算机尝试使用端口访问服务器B,那应该是可以接受的,即,我们可以重定向任何访问端口的B人,除了来自外部互联网的人。

现在我从未使用过iptables,我甚至不确定是否可以用它做到这一点,尽管我认为它可能可以做到。我看过一些例子,但它们似乎没有达到我想要的效果,我不确定我是否足够了解它们,不会因为玩弄它们而破坏某些东西。

非常感谢,托马斯。

答案1

假设您的 LAN 有 192.168.0.0/24,您的组织网络有 172.16.0.0/24,您的路由器有 192.168.0.1(在 eth1 上)和 172.16.0.1(在 eth0 上)地址,并且您想通过 192.168.0.2:80 或 172.16.0.1:8080 访问您的服务器。
为了转发数据包,您需要net.ipv4.ip_forward = 1在 /etc/sysctl.conf 中添加

#!/bin/bash

iptables -P INPUT DROP # if no rule match, drop the packet
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT # router can access everything

iptables -A PREROUTING -s 172.16.0.0 -d 172.16.0.1 -p tcp --dport 8080 -j DNAT 192.168.0.1:80 # destination nat with ACL

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # only accept established connections from LAN to router

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # established connections
iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT # LAN to ORG or INET
iptables -A FORWARD -i eth0-s 172.16.0.0/24 -d 192.168.0.2 -p tcp --dport 80 -j ACCEPT # this rule comes after the dnat one, so destination already changed

iptables -A POSTROUTING -i eth1 -s 192.168.0.0 -j SNAT --to-source 192.168.0.1 # source nat

您可能需要尝试使用 iptables 并根据自己的需求进行自定义。
您需要知道的是:是的,您可以使用 iptables 做任何您想做的事情。

相关内容