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のフロントエンドとバックエンドのポートの不一致の問題を解決する

Vue のフロントエンドとバックエンドのポートが一致していませんconfig index.jsファイ...

WeChatミニプログラムは同時通訳を利用して音声認識を実装します

私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...

CSS3はトランジション効果を実現するためにtransitionプロパティを使用する。

物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...

ReactJs 基礎チュートリアル - 基本編

目次1. ReactJS の紹介2. ReactJSの理解とReactJSの利点1. ReactJS...

Vue 計算プロパティ実装トランスクリプト

この記事では、Vueの計算プロパティ実装レポートカードを参考に共有します。具体的な内容は次のとおりで...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

vue3.2 で追加された defineCustomElement の基本原理の詳細な説明

目次Webコンポーネントカスタム要素概要HTMLTemplateElement コンテンツ テンプレ...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

MySQL が自動的に再起動する問題の解決方法

序文最近、テスト環境で MySQL データベースが自動的に再起動し続ける問題が発生しました。原因は、...

HTML から PDF への変換事例の概要 (複数の画像を推奨)

仕事の都合上、最近 HTML を PDF に変換する機能について調べることに時間を費やしました。 H...

効果的なウェブフォームのための 8 つのルール

ユーザーから情報を収集する場合、Web フォームを使用するより簡単で直接的な方法はありません。適切に...

editplus の Zen コーディング例コードの説明

たとえば、次のように入力します。 XML/HTML コードdiv#ページ>(div#ヘッダー&...

MySQL データベース グループ クエリの group by ステートメントの詳細な説明

1: グループ化関数の記述順序 1 選択 ... 2 から ... 3 どこで ... 4 グループ...

MySQL クエリ キャッシュのグラフィカルな説明

目次1. 原則の概要クエリキャッシュシステム変数1. クエリキャッシュを持つ2. クエリキャッシュ制...