IPTables:允许传出 MySQL 连接但不允许传入连接

MrC*_*rot 12 iptables

我有一个服务器,它不允许从外部源连接到 mysql - 我所有的数据库和连接都发生在本地主机上。iptables 的默认策略是删除我未指定的任何端口的连接(目前我的 iptable 规则中没有指定端口 3306,因此所有与该端口的连接都将被删除)。

很好,但现在我想连接到位于 Amazon RDS 外部的 mysql 数据库。

3306端口可以对外开放如下:

iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这允许我连接到 Amazon RDS 上的数据库,但它也允许远程连接到我服务器上的数据库。

我需要做什么才能让我的服务器连接到 Amazon 上的数据库,但限制到我服务器上的数据库的外部连接?

另请记住,我相信我的 Amazon RDS 实例的 IP 地址可能会定期更改。

Mad*_*ter 19

利用状态引擎:

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

或在更高版本的 iptables 中

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这正是状态引擎存在的目的:允许满足各种标准(例如,协议、源端口)但也是现有连接的一部分(因为它定义了connection)的流量。结果是TCP SYN,从本地临时端口到目标端口 3306 上特定外部 IP 地址的传出数据包将为该特定 IP 地址和端口号组合创建状态表条目,并且仅返回具有相同组合的流量地址和端口将被允许通过,并且仅在该连接的持续时间内。