Nginx を使用して MySQL 接続をプロキシし、アクセス可能な IP を制限するにはどうすればよいですか?

出典:toutiao.com/article/7234104886726705716

1 はじめに

弊社の本番環境は基本的にアプリケーションサーバーやMySQLサーバーなどのクラウドサーバー上に展開されます。MySQL サーバーが公衆ネットワークに直接公開されると大きなリスクが生じるため、データのセキュリティを確保するために、MySQL サーバーのポートは外部に公開されていません。

偶然、オンライン ビジネスでバグが発生し、開発パートナーはデータを表示するために MySQL にリモート接続する必要がありました。どうすればよいでしょうか?

Nginx プロキシ (「スプリングボード」) 経由で接続できます。

オープンソースで無料の Spring Boot 実践プロジェクトを推奨します。

https://github.com/javastacks/spring-boot-best-practice

2. Nginxプロキシ接続

接続のプロキシ転送を実現するには、Nginx がインストールされたサーバーが必要です。このサーバーは MySQL サーバーと同じイントラネット内にあり、イントラネット間でアクセスできます。

次に、デフォルトではビルドされないモジュールを使用する必要があります。configurengx_stream_core_module時に--with-streambuild に追加する必要があります。

追加プロセスについては、「Nginx 基本コマンドとノンストップ バージョン アップグレード」の記事を参照してください。ここでは詳しく説明しません。

ngx_stream_core_moduleモジュールを使用するので、最初に行うことは、その構成方法を知るために提供される手順を確認することです

1)ストリーム

このディレクティブはストリーム サーバーを定義します。これは http ブロックと同じレベルにあり、メイン ブロックで定義されます。

  • スコープ: メイン
  • 構文: ストリーム {...}

例:

 stream {
     server {
         ......
     }
 }

2)サーバー

このディレクティブは、http ブロック内のサーバーと同様の仮想ホストを定義します。ストリーム ブロック内に複数のサーバー ブロックを定義できます。

  • スコープ: ストリーム
  • 構文: サーバー {...}
stream {
     server {
         ......
     }
     server {
         ......
     }
 }

3)聞く

この命令は、仮想ホスト サーバーによって監視されるソケットのアドレスとポートを定義します。

  • スコープ: サーバー
  • 構文: リッスンアドレス:ポート;

例:

listen 127.0.0.1:3306;
 listen *:3306;
 # 效果与listen *:3306一样
 listen 3306;
 listen localhost:3306;

4) 構成例

MySQL サーバー、ポート 3306 (スタンドアロン環境)

stream  {
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

MySQL サーバー、ポート 3306 (クラスター環境)

stream  {
     upstream mysql_socket {
         server 192.168.110.101:3306;
     }
     server {
             listen 3306;
             proxy_pass mysql_socket;
     }
 }

この時点で、Navicat などのクライアントを介して接続できます。

3. IPへのアクセスを制限する

接続用のエージェントを実現し、誰もがNginxにアクセスすることでMySQLサーバーに接続できるようになり、外部ネットワークに接続できない問題を解決しました。

アクセス範囲をさらに絞り込み、データのセキュリティを確保するために、Nginx 経由で接続できるのは企業ネットワークの IP アドレスのみに制限できます。

Nginx はngx_stream_access_module、許可ディレクティブと拒否ディレクティブのみを含む非常に単純なディレクティブを備えたモジュールを提供します。

1)許可する

このコマンドは、指定された IP を設定してアクセスを許可します。拒否コマンドと組み合わせて使用​​できます

  • スコープ: ストリーム、サーバー
  • 構文: 許可アドレス | CIDR | unix: | all;

例:

 # 允许192.168.110.1访问
 allow 192.168.110.1;

 # 允许192.168.110.1到192.168.255.254
 allow 192.168.110.0/16;

 # 允许192.168.110.1到192.168.110.254
 allow 192.168.110.0/24;

 # 允许所有的IP访问
 allow all;

2)拒否する

このコマンドは、指定した IP をアクセス禁止に設定します。allow コマンドと組み合わせて使用​​できます。

  • スコープ: ストリーム、サーバー
  • 構文: 拒否アドレス | CIDR | unix: | all;
# 禁止192.168.110.1访问
 deny 192.168.110.1;

 # 禁止192.168.110.1到192.168.255.254
 deny 192.168.110.0/16;

 # 禁止192.168.110.1到192.168.110.254
 deny 192.168.110.0/24;

 # 禁止所有的IP访问
 deny all;

3) 構成例

192.168.110.100 を除くすべての IP アクセスを禁止します。

allow 192.168.110.100;
 deny all;

ヒント:allow が指定されている場合は、deny とともに使用する必要があります。そうでない場合は、すべての IP アドレスがアクセスを許可されます。

4. 包括的なケース

Nginx を介して MySQL サーバーに接続できるのは 192.168.110.100 のみです。

stream  {
     allow 192.168.110.100;
     deny all;
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

最近のおすすめ記事:

1. 1,000 を超える Java 面接の質問と回答 (2022 年最新バージョン)

2.素晴らしい!Java コルーチンが登場します。

3. Spring Boot 2.x チュートリアル、包括的すぎる!

4.画面を爆発や爆発で埋め尽くさないで、デコレーターモードを試してください。これがエレガントな方法です。

5.最新リリースの「Java 開発マニュアル (松山編)」をすぐにダウンロードしてください!

気分がいいので、「いいね!」+「転送」を忘れないでください!

おすすめ

転載: blog.csdn.net/youanyyou/article/details/132539179