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

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

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

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

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

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

答案1

如果我很好地理解你的所有要求,就这样做:

# 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

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

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

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

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


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

iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306

这重定向本地向本地端口 3306 发起到本地端口 12345 的连接,以便您也可以从同一台本地计算机通过端口 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

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

因此,您应该始终首先查看您的初始配置是什么,您可以使用 , ie-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

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

相关内容