如何将 mysql 访问权限附加到 iptables

如何将 mysql 访问权限附加到 iptables

在我的其中一台服务器上,我可以看到以下内容:

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

我想在另一台服务器上启用相同功能,您能帮我提供一下必须使用的命令吗?

我在思考这样的事情:

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

答案1

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

重要警告:您的INPUTOUTPUT链中可能存在某些内容,可能会阻止这些规则得到处理。为了就此提出建议,我们需要查看您的所有规则。

答案2

你不能简单地这样做,因为iptables它的规则只接受单个 ip(同样不代表端口,它们可以由模块生成多个,根据需要自动mport加载)。iptables

有可能你只是复制了规则。虽然很简单,但并不总是可行的。

或者,您可以模拟多 IP 行为,创建一个新表来过滤给定的 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 内核/网络方面又有了新的进展,那就是ipset。Ipset 正好解决了 iptables 的这个实际缺陷(?),它将成为 Linux 的第四个防火墙命令行工具(继 ipfwadm、ipchains 和我们当前的 iptables 之后)。

相关内容