如何将传入流量从端口 A 重定向到端口 B,并允许端口 B 上的本地主机流量但不允许传入?

sti*_*ghy 0 iptables

我想为 MySql 服务器添加一个“小”安全性。

我想保留开放端口 330,但仅用于内部目的(本地主机),并打开另一个重定向到 3306 的端口(比如 12345)。

因此,我需要添加一个 iptable 路由,该路由仅在 eth1 接口上显示“来自 12345 的所有传入流量都重定向到 3306,但从直接外部传入流量中关闭 3306”。

如何关闭 3306 上的外部传入流量?

LL3*_*LL3 5

如果我完全理解您的所有要求,请执行以下操作:

# assuming your network interface is named `eth1` as per your OP example

iptables -t raw -A PREROUTING -i eth1 -p tcp --dport 3306 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to-port 3306
Run Code Online (Sandbox Code Playgroud)

第一个命令禁止从eth1tcp 端口 3306传入的连接。

第二个命令将指向本地端口 12345 的任何传入连接重定向到本地端口 3306

如果您有多个接口都命名为 like eth0eth1eth2等,并且您想全部阻止它们,则可以通过eth+在上面的第一个命令中指定(注意加号)来获得它,否则有选择地只阻止特定的接口'需要在每个接口上使用第一个命令来阻止。

上面的两个命令是实现您请求的行为所必需的,根据您的整体需求可能就足够了。


但是,为了获得更一致的体验,我建议使用额外的可选配置:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306
Run Code Online (Sandbox Code Playgroud)

这会将本地发起的连接重定向到本地端口 12345 到本地端口 3306,以便您也可以从同一台本地机器通过端口 12345 连接到您的 mysql。


最后,作为一个重要的旁注,请记住,命令-A选项会附加规则那些已经存在的规则,因此它们优先于附加的新规则,从而干扰它们。iptables

因此,如果您尝试使用任何 iptables 命令,您可能需要在某个时候清除涉及的表,您可以使用-F选项来完成,如下所示:

iptables -t raw -F PREROUTING
iptables -t nat -F PREROUTING

# and possibly also
iptables -t nat -F OUTPUT
# if you also used the additional advised commmand
Run Code Online (Sandbox Code Playgroud)

另一方面,还请记住,这些命令会清除这些表中存在的所有规则,包括由于其他防火墙的存在而可能存在的规则。有更细粒度的命令可以有选择地删除特定规则,但这些取决于您的整体 iptables 设置,如果它非常复杂,超出了这里看到的两个简单规则。

所以你应该总是首先看到你的初始配置是什么,你可以使用-L选项来做到iptables这一点,即像这样:

iptables -t raw -nL PREROUTING
iptables -t nat -nL PREROUTING

# and possibly also
iptables -t nat -nL OUTPUT
# if you also used the additional advised commmand
Run Code Online (Sandbox Code Playgroud)

当然,您也可以随时使用这些来在添加规则时查看表的当前状况。然后,您可能希望添加v选项(如 中所示-nvL)以查看规则的计数器,因为它们随着时间的推移匹配(或不匹配)网络流量。