重定向至替代端口

重定向至替代端口

我在这里尝试通过模糊性来实现一点安全性,并且我想针对许多服务(即 MySQL)执行以下操作:

  • 让服务在本地主机的默认端口上运行
  • 阻止对公共接口上的默认端口的远程访问
  • 为某些客户允许通过备用端口(例如 MySQL 的 53306)远程访问服务

我尝试过使用 iptables 和 REDIRECT 或 DNAT 进行多种组合,但都无济于事,而且使用 SSH 隧道对于客户来说技术性太强了。

任何帮助,将不胜感激!

答案1

你可以尝试下面的规则。

iptables -A INPUT -i eth0 -p tcp --dport 3306 -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 53306 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 53306 -j DNAT --to-destination :3306

假设eth0是公共接口。您将能够使用 127.0.0.1 在本地访问 mysql 端口。

编辑:

不要忘记允许输出流量和相关内容(连接建立后)。

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

请注意,您可能需要根据您的需要自定义这些规则。我只是想帮忙。如果您的机器在没有网络防火墙的情况下可供公众访问,您应该仔细研究防火墙规则。

答案2

我终于搞明白了。对于可能关心的人,以下是我所做的(请注意,这不是完整的防火墙配置,而只是实现 OP 中描述的内容所需的行):

  • 标记通过 mangle 目标发往端口 33306 的所有数据包(如果您愿意,可以在此处替换您的备用端口和标记号码)

    iptables -t mangle -A PREROUTING !-i lo -p tcp -m tcp --dport 33306 -j MARK --set-mark 96

  • 将数据包重定向到 nat 目标中的合法端口

    iptables -t nat -A PREROUTING !-i lo -p tcp -m tcp --dport 33306 -j REDIRECT --to-port 3306

  • 3306 只允许带标记的包裹进入

    iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -t filter -A INPUT -i lo -j ACCEPT
    iptables -t filter -A INPUT !-i lo -m tcp -p tcp --dport 3306 -m mark --mark 96 -j ACCEPT iptables -t filter
    -A INPUT !-i lo -m tcp -p tcp --dport 3306 -j DROP

答案3

您需要为此使用 REDIRECT 目标,因为您要将流量发送到同一服务器上的另一个端口。假设您的服务器的 IP 地址是 192.0.2.100,则命令语法为:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.0.2.100 --dport 53306 -j REDIRECT --to-ports 3306

或者您可以使用 -i 参数而不是带有 IP 地址的 -d 参数对接口上的所有入站流量执行此操作。

您还需要允许流量到 INPUT 链上的端口 3306:

iptables -A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT

相关内容