redirect到其他端口

我想在这里默默无闻的安全一点点,我想做一些以下服务(即MySQL):

  • 让这些服务在其默认端口上明确运行在本地主机上
  • 阻止远程访问公共接口上的默认端口
  • 允许通过替代端口(即53306 for MySQL)远程访问服务,这是为了某些客户

我试过使用iptables和REDIRECT或DNAT通过一些组合来无济于事,使用SSH隧道对于客户来说太过技术性。

任何帮助,将不胜感激!

您可以尝试以下规则。

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端口。

编辑:

不要忘记允许输出stream量和相关的(连接build立后)。

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

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

我终于弄明白了。 对于任何可能关心的人,下面是我所做的(请注意,这不是一个完整的防火墙configuration,而只是实现OP所描述的内容):

  • 标记所有通过目标端口33306的破坏目标的数据包(如果你愿意,可以replace你的替代端口和你的标记号)

    iptables -t mangle -A PREROUTING! -i lo -p tcp -m tcp –dport 33306 -j MARK – 设置标记96

  • 将数据包redirect到nat目标中的合法端口

    iptables -t nat -A PREROUTING! -i lo -p tcp -m tcp –dport 33306 -j REDIRECT – 到端口3306

  • 在3306中只允许带有标记的软件包

    iptables -t filter -A INPUT -m状态 – 状态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标记 – 标记96 -j ACCEPT
    iptables -t filter -A INPUT! -i lo -m tcp -p tcp –dport 3306 -j DROP

您需要为此使用REDIRECT目标,因为您要将stream量发送到同一台服务器上的另一个端口。 假设你的服务器的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来为接口上的所有stream量进行configuration。

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

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