IPTables:允許傳出 MySQL 連接,但不允許傳入連接

IPTables:允許傳出 MySQL 連接,但不允許傳入連接

我有一台伺服器不允許從外部來源連接到 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

這允許我連接到 Amazon RDS 上的資料庫,但它也允許遠端連接到我的伺服器上的資料庫。

我需要做什麼才能允許我的伺服器連接到 Amazon 上的資料庫,但限制與我的伺服器上的資料庫的外部連接?

另請記住,我相信我的 Amazon RDS 執行個體的 IP 位址可能會定期變更。

答案1

利用狀態引擎:

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

這正是狀態引擎存在的目的:允許滿足各種標準的流量(例如協定、來源連接埠)但也是現有連結的一部分(正如它所定義的聯繫)。結果是,TCP SYN從本地臨時連接埠到目標連接埠 3306 上的特定外部 IP 位址的傳出封包將為該 IP 位址和連接埠號碼的特定組合建立一個狀態表條目,並且僅傳回具有相同組合的流量。連接埠將被允許通過,並且僅在該連接的持續時間內被允許。

相關內容