我有一个不允许从外部源连接到 mysql 的服务器 - 我所有的数据库和连接都发生在 localhost 上。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
这允许我连接到 Amazon RDS 上的数据库,但它也允许远程连接到我服务器上的数据库。
我需要做什么才能让我的服务器连接到 Amazon 上的数据库,但限制外部连接到我服务器上的数据库?
另请记住,我相信我的 Amazon RDS 实例的 IP 地址可能会定期更改。
利用状态引擎:
或在更高版本的 iptables 中
这正是状态引擎要做的事情:允许满足各种标准(例如,协议、源端口)但也是现有连接的一部分(因为它定义了连接)的流量。结果是
TCP SYN
,从本地临时端口到目标端口 3306 上特定外部 IP 地址的传出数据包将为 IP 地址和端口号的特定组合创建状态表条目,并且仅返回具有相同组合的流量地址和端口将被允许通过,并且仅在该连接期间。