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


10

我有一台不允许从外部源连接到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地址可以定期更改。


2
从Amazon获取静态IP,然后设置白名单,仅允许该IP用于入站/输出连接?
彼得

Answers:


17

利用状态引擎:

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

或更高版本的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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.