我想保护我的 MySQL 服务器免受端口扫描器/探测器的攻击。所以我的想法是将外部端口放在36636,内部端口必须保持默认的 3306,以兼容本地应用程序。
MySQL 客户端连接到 mysql.hostname.tld:36636,然后应通过 iptables 转发到 3306。但我就是无法让它工作。这是我的重定向规则:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 36636 -j REDIRECT --to-port 3306
我在 iptables 和 MySQL 中激活了广泛的日志记录,我很确定数据包通过了防火墙,但后来它们“消失了”,他们似乎没有到达 MySQL当然我在iptables里也开放了36636端口。
答案1
首先,这不是保护 mysql 服务器的有效方法。更改端口不会使攻击者无法知道您正在运行 mysql 服务器。它可能只是稍微拖延一下他。
回答你的问题,如果你在同一台主机上运行 iptables 和 mysql,你的规则似乎没问题。否则,你需要使用DNAT
target 而不是REDIRECT
。此外,在这种情况下,你需要允许 IP 转发。这是关于 NAT 规则的。对于过滤规则,你需要允许 mysql 端口或将默认策略设置为INPUT
(仅当你想允许所有内容通过防火墙时才这样做)。FORWARD
OUTPUT
ACCEPT
无论如何,即使您正在从另一个端口进行端口转发,也必须允许端口 3306。您有两个选择:
1- Change the port mysql server is listening on. This might not be suitable for you as it will affect the local applications.
2- Add another NAT rule to port forward standard mysql port 3306 to something else invalid.
对于选项 2,您可以执行:
iptables -A PREROUTING ! -s local_subnet -p tcp --dport 3306 -j REDIRECT --to-port 9999
此规则将阻止非本地子网访问 mysql 端口。
答案2
好吧,如果 MySQL 服务器位于同一主机上,则无需启用 IP 转发。您可以使用以下命令将流量从端口 36636 重定向到 3306:
iptables -t nat -A PREROUTING -m tcp -p tcp --dport 36336 -j DNAT --to-destination IP_ADDRESS:3306
其中 IP_ADDRESS 是 MySQL 正在监听的接口的 IP 地址。