主要规则是:
OUTIF=eth0
/sbin/iptables --policy INPUT DROP
/sbin/iptables --policy FORWARD DROP
/sbin/iptables --policy OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i $OUTIF -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我想让 mysql 监听lo3306 端口。我还希望它在 WAN 接口 ( eth0)上的端口 33060 上侦听,因为我想让它远离机器人。
我尝试了几次重定向都没有成功。例如:
/sbin/iptables -A INPUT -p tcp -i $OUTIF --dport 34306 -j ACCEPT
/sbin/iptables -A PREROUTING -t nat -p tcp -s 0/0 --dport 34306 \
-j DNAT --to 127.0.0.1:3306
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
编辑:
我将使用redir但是我仍然想知道如何使用 iptables 来做到这一点。
这个可以工作,但前提是您允许从外部访问端口 3306 :(但这不起作用)
iptables -t nat -A PREROUTING -p tcp --dport 34306 --syn -j DNAT --to :3306
Run Code Online (Sandbox Code Playgroud)
不过,您最终想要做的是:(但这也不起作用)
iptables -t nat -A PREROUTING -p tcp --dport 34306 --syn -j DNAT --to 127.0.0.1:3306
Run Code Online (Sandbox Code Playgroud)
也就是说,您希望外部接口上的端口 34306 的数据包被重定向到 127.0.0.1 端口 3306。这将起作用,除了一旦目标被重写为 127.0.0.1,数据包将成为火星数据包(从外部进入,目的地为 127.0.0.1)。火星数据包被正常和悄悄地过滤掉,你真的,真的想要这个。
有一个涉及防火墙标记的更迂回的解决方案。理论:当数据包在您的外部接口上调用端口 34306/tcp 时,我们只需将其标记为可接受,然后将其重写为看起来像是来自 3306/tcp。允许到带有标记的3306/tcp 的流量。到 3306/tcp 的所有其他流量都被拒绝(显式或隐式,通过默认策略)。编码:
IFACE=eth0 # or whatever
HIPORT=34306
REALPORT=3306
MARK=42 # not-so-random random number
iptables -t mangle -A PREROUTING -p tcp -i $IFACE --dport $HIPORT -j MARK --set-mark $MARK
iptables -t nat -A PREROUTING -p tcp --dport $HIPORT --syn -j DNAT --to :$REALPORT
iptables -A INPUT -p tcp -m mark --mark $MARK -j ACCEPT
iptables -A INPUT -p tcp --dport $REALPORT -j DROP # explicitly dropping
Run Code Online (Sandbox Code Playgroud)
最后一条规则是您可以对不允许的数据包采取行动的地方。我喜欢记录所有丢弃的数据包,所以我的链落入最后两个规则,即 a-j LOG和-j DROP。所以在我的情况下,我不需要它,但你自己的里程当然会有所不同。
我刚刚测试了这个,它适用于我的设置。它比预期的要迂回一些,但这就是 netfilter 的生活。
如果您使用有状态过滤,请添加--syn到规则 3(-m mark在INPUT链中)并将其粘贴在您的状态检查规则之前。如果您使用规则 4 明确丢弃/拒绝数据包,并且您进行了状态防火墙,您也应该添加--syn它。这稍微复杂一点(八个完整字节),但标记检查规则仅适用于每个 TCP 连接的 SYN(第一个)数据包。一旦做出接受/拒绝决定,剩下的由状态检查规则完成,因此防火墙不必为每个数据包保持检查标记。没有理由浪费 CPU 周期,它可以让您的网络性能保持在高水平。
一些注意事项:
DNAT的SYN数据包。有状态 NAT 将自动转换所有其他数据包。这使事情稍微快一点。问题的精神:默默无闻的安全是一个严厉的情妇。通过更改 MySQL 正在侦听的端口,您并没有真正保护自己。端口扫描器是自动化的,它们不介意扫描系统上的所有端口。:) 我建议您使用ssh以-L安全方式进行隧道连接的选项,或者,如果您想花哨的话,可以使用 VPN。但有时,生活给了你柠檬,你必须用 netfilter 制作柠檬水(这可能是你不能用它做的少数事情之一)
| 归档时间: |
|
| 查看次数: |
8160 次 |
| 最近记录: |