我想在这里默默无闻的安全一点点,我想做一些以下服务(即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