IPTables によるデータベース サーバーのセキュリティ保護

IPTables によるデータベース サーバーのセキュリティ保護

私はアプリ(WordPress)とデータベース(MySQL)を別々のサーバーに置いています。それらはホスティングサービスプロバイダーが提供するプライベートネットワークに接続されており、すべての準備段階(私が知る限り)セキュリティのため

通常、私は次の IPTables ルールを使用します。

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

しかし、スタンドアロン (MySQL) データベース サーバーの場合、ルールにいくつかの変更が必要であることがわかりました。たとえば、MySQL 用にポート 3306 を開く必要がありますが、これは次のように簡単です。

-A INPUT -p tcp --dport 443 -j ACCEPT

ただし、アプリケーション サーバーだけがデータベースに接続できるように (つまり、リモート接続をサポートするように) 変更する方法がわかりません。 どうすればいいでしょうか?

答え1

だから必要なのは

 -A INPUT -p tcp -s $INTERNAL_WEB_SERVER_IP --dport 3306 -j ACCEPT

ウェブ サーバーのみが mysql と通信できるようにします。dmourati が述べているように、ping トラフィックを許可するのは良い考えです。私の意見では、これはセキュリティの問題よりも多くの問題を解決するのに役立ちます。

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d $SERVER_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -s $SERVER_IP -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT

あなたが言及した送信ルールは、DB サーバーが指示されたすべての送信接続を行えることを意味します。基本的に、データベース サーバーから発信されるすべてのトラフィックが許可されます。

関連情報