Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginxを使用する目的

Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者の Nginx 使用の背景についてお話ししましょう。

ECS を初期化すると、パブリック IP アドレスが生成されます。デフォルトのアクセス IP アドレスは、自動的にポート 80 にアクセスします。このとき、IP アドレスを通じてポート 80 で開始されたサービスに直接アクセスできます。

ドメイン名を現在の IP アドレスに解決すると、ドメイン名を介してポート 80 のサービスに直接アクセスできます。

すると、問題が発生します。誰でもドメイン名を IP アドレスに解決できるため、ECS 上のサービスに他のドメイン名からアクセスできることになります。目的としては、この攻撃方法はあまりにも露骨です。ドメイン名を調達して販売したいのでしょう(推測ですが、想像力豊かな方はご意見をお聞かせください)。

この攻撃を回避する方法はたくさんあります。インターネット上の回答を参考にすると、Nginx を構成するのが最も便利で迅速です。

一般的な考え方は次のとおりです。Web サービスは 80 以外のポート (IP アドレスでは直接アクセスできません) で開始され、Nginx はドメイン名をドメイン名 + ポートに転送するフォワード プロキシを構成します。

結果: 解決後、基本的に IP アドレス + ポートに転送される独自のドメイン名を使用して直接アクセスできるようになります。その他のドメイン名はポート転送が設定されていないため、ブロックされます。

Nginx を使用するシナリオは、リバース プロキシ、負荷分散など多数ありますが、悪意のある解析を防ぐこともその 1 つにすぎません。

将来的には、Nginx 関連の技術的な経験をさらに広げていくかもしれませんが、コードは単なるツールです。テクノロジーは、実際の問題を解決したときにのみ価値を生み出します。そうでなければ、それは単なる紙上の話で、意味がありません。

以前、2 人の開発者が技術の選択について議論している記事を目にしたことがありました。1 人は人気のない Lua を選択しましたが、もう 1 人は、パフォーマンスと開発経験が優れている人気の技術をなぜ選択しなかったのかと困惑していました。しかし、彼女の答えは「問題が解決できればそれでいい」というものでした。

深く考え込んでしまいました。2019年に台頭してきたマイクロサービスアーキテクチャの波にも追随しました。新しい技術や用語をたくさん学び、とても充実感を感じました。しかし、実際のプロジェクト開発に適用するのは困難です。高並列性やマイクロサービスは、プロジェクト内の実際的な問題や雇用問題を解決する技術か、見せびらかすための資本のいずれかです。学ぶことは何も悪いことではありませんが、学ぶ前に、それを使うのか、それともそれに縛られるのかを考えます。

今のところはこれですべてです。Linux の Nginx の一般的なコマンドと、コピーした設定ファイル (nginx.conf) を以下に示します。

一般的なコマンドのリスト

yum install nginx // nginx をインストール (centos)

//起動時に自動的に起動する systemctl enable nginx
systemctl nginx を無効にする

//nginx のステータスを確認する systemctl status nginx

// 起動、停止、再起動 systemctl start nginx
systemctl 停止 nginx
systemctl nginx を再起動します

//設定をリロードする systemctl reload nginx

//設定ファイルのデフォルトの場所 /etc/nginx メイン設定ファイル nginx.conf

構成の悪意のある解析を防ぐ

 サーバー{
      80 default_server をリッスンします。
      サーバー名_;
      access_log オフ;
      444を返します。
    }
# 設定の詳細については、以下を参照してください。
# * 公式英語ドキュメント: http://nginx.org/en/docs/
# * 公式ロシア語ドキュメント: http://nginx.org/ru/docs/

ユーザー nginx;
ワーカープロセスは自動です。
エラーログ /var/log/nginx/error.log;
pid /run/nginx.pid;

# 動的モジュールをロードします。/usr/share/doc/nginx/README.dynamic を参照してください。
/usr/share/nginx/modules/*.conf をインクルードします。

イベント {
  ワーカー接続 1024;
}

http {
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';

  access_log /var/log/nginx/access.log メイン;

  ファイル送信オン;
  tcp_nopush オン;
  tcp_nodelay オン;
  キープアライブタイムアウト65;
  タイプハッシュの最大サイズは2048です。

  /etc/nginx/mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;

  # /etc/nginx/conf.d ディレクトリからモジュール構成ファイルを読み込みます。
  # http://nginx.org/en/docs/ngx_core_module.html#include を参照してください
  詳細については#をご覧ください。
  /etc/nginx/conf.d/*.conf を含めます。
    サーバー{
      80 default_server をリッスンします。
      サーバー名_;
      access_log オフ;
      444を返します。
    }
  サーバー{
    聞く 80;
    サーバー名 www.zkrun.top;
    位置 / {
        プロキシパス http://www.zkrun.top:8080;
    }

    エラーページ 404 /404.html;
      場所 = /40x.html {
    }

    エラーページ 500 502 503 504 /50x.html;
      場所 = /50x.html {
    }
  }

# TLS 対応サーバーの設定。
#
# サーバー {
# 443 ssl http2 default_server をリッスンします。
# listen [::]:443 ssl http2 default_server;
# サーバー名 _;
# ルート /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache 共有:SSL:1m;
# ssl_session_timeout 10分;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers オン;
#
# # デフォルトのサーバー ブロックの構成ファイルを読み込みます。
# /etc/nginx/default.d/*.conf を含めます。
#
# 位置 / {
# }
#
# エラーページ 404 /404.html;
# 場所 = /40x.html {
# }
#
# エラーページ 500 502 503 504 /50x.html;
# 場所 = /50x.html {
# }
# }
}

要約する

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法については、これで終わりです。Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 単一の Nginx IP アドレスに複数の SSL 証明書を設定する例
  • nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

<<:  重複リクエストを削除するAxiosのソリューションについての簡単な説明

>>:  MySQL での SQL モードの表示と設定の詳細な説明

推薦する

固定ボトムコンポーネントを実装した Vue の例

目次【効果】 【実施方法】 【効果】 【実施方法】 <テンプレート> <div i...

スタートアップ企業が丹念に作り上げた優れたウェブデザイン17選

スタートアップ企業は、型破りな仕事のやり方、ユニークなビジネスモデル、特徴的な製品やサービス、パーソ...

Linuxでプロセスが占有するポート番号を表示する

Linux システム管理者にとって、サービスがポートに正しくバインドされているか、またはポートをリッ...

mysql 8.0.12 winx64 のダウンロードとインストールのチュートリアル

MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...

Vue ページ状態の永続化の詳細な説明

目次コード:補充:要約する要件: 左のツリーと右のテーブル。組織ツリーでノードを選択した後、詳細ペー...

ウェブ理論: 考えさせない読書ノート

第 1 章<br /> Web ページをユーザーにとって使いやすいものにするための最も重...

uniapp プロジェクトで MQTT を使用する方法

目次1. uniappプラグインマーケットのリファレンスプラグイン2. 具体的な導入プロセス1. m...

jQueryはテーブルのシームレスなスクロールを実現します

この記事の例では、テーブルのシームレスなスクロールを実現するためのjQueryの具体的なコードを参考...

MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法

コマンド: mysqlhotcopyこのコマンドは、ファイルをコピーする前にテーブルをロックし、不完...

Reactフックの仕組み

目次1. React フックと純粋関数2. シンプルなmyUseState 3. myUseStat...

Vue.js と MJML でレスポンシブなメールを作成する

MJML は、開発者が美しく、応答性に優れ、あらゆるデバイスやメール クライアントで動作する魅力的な...

MySQL 5.7 のインストールと設定のチュートリアル

この記事では、参考までにMySQLのインストールと設定のチュートリアルを紹介します。具体的な内容は次...

dl、dt、dd リスト ラベルの例

dd タグと dt タグはリストに使用されます。通常は <ul><li> タ...

Javascript Echarts 空気質マップ効果の詳細な説明

まず、空気質データと地図データを組み合わせる必要があります。マップデータには属性名があるさまざまな都...

NginxはGzipアルゴリズムを使用してメッセージを圧縮します

HTTP圧縮とは場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、...