在我的一台服务器上,我可以看到:
ACCEPT tcp -- distinct_server_ip anywhere tcp dpt:mysql
通过做
sudo iptables -L | grep distinct_server_ip
与
iptables -L -n -v | grep 3306 432K 26M ACCEPT tcp -- * * mydistinctip 0.0.0.0/0 tcp dpt:3306 90 5400 ACCEPT tcp -- * * mydistinctip2 0.0.0.0/0 tcp dpt:3306
我想在另一台服务器上启用相同的function,请帮我用我使用的命令?
我正在考虑这样的事情:
iptables -A INPUT -p tcp -s distinct_server_ip --sport 1024:65535 -d this_server_ip --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables高度依赖于你的规则的顺序。 你的问题并不完全清楚,所以我会考虑你可能会做的两个可能性。
在ServerA ,如果你想允许ServerB连接到它:
iptables -A INPUT -p tcp -s ServerB --dport 3306 -j ACCEPT
而且,对于ServerB上的出口规则(不推荐),如果您想允许它连接到ServerA :
iptables -A OUTPUT -p tcp -d ServerA --dport 3306 -j ACCEPT
巨大的警告:您可能在INPUT或OUTPUT链中有可能阻止这些规则被处理的东西。 为此,我们需要看看你所有的规则。
你不能这么做,因为iptables只接受一个ip规则(同样不代表端口,它们可以是mport模块生成的多个,由iptables在需要的时候自动加载)。
有可能你只是复制你的规则。 虽然很简单,但并不总是实用。
或者你可以模拟多ip的行为是创build一个新的表来过滤你给定的IP列表。 例如:
Chain MY_WISHLIST (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 1.2.3.4/19 0.0.0.0/0 0 0 ACCEPT all -- * * 1.2.0.0/17 0.0.0.0/0 0 0 ACCEPT all -- * * 1.3.0.0/16 0.0.0.0/0 0 0 ACCEPT all -- * * 1.4.128.0/20 0.0.0.0/0 0 0 ACCEPT all -- * * 1.5.152.0/21 0.0.0.0/0 0 0 ACCEPT all -- * * 1.6.0.0/15 0.0.0.0/0
…你可以从任何地方引用这个链:
0 0 MY_WISHLIST tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 2,3,5,7,11,13,17,19
最后,围绕linux内核/networking方面有一个新的发展,那就是ipset 。 Ipset完全处理了iptables的这个实际缺陷(?),它将成为Linux的第四个防火墙命令行工具(在ipfwadm,ipchains和我们当前的iptables之后)。