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 モードの表示と設定の詳細な説明

推薦する

MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明

1. デッドロックとは何ですか?正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要...

HTML の相対パスと絶対パスの違いの分析

HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

JavaでTomcatサーバーを起動/停止する方法

1. プロジェクト構造 2.Tomcat.javaを呼び出す パッケージ com.calltomca...

検証コードケースのJavaScript実装

この記事では、検証コードの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

Zabbix WEB 監視実装プロセス図

Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....

jsイベント委譲の詳細な説明

1. 各関数はオブジェクトであり、メモリを占有します。メモリ内のオブジェクトが増えるほど、パフォーマ...

21 の MySQL 標準化および最適化のベスト プラクティス!

序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...

Debian Dockerコンテナにcrontabスケジュールタスクを追加する

現在、DockerイメージのほとんどはDebianベースです # cat /etc/issue De...

MySQLの一般的なメモリ不足による起動失敗に対する完璧な解決策

1. MySQLが正常に起動しない場合は、エラーログ/var/log/mysql/error.log...

Dockerを使用して分散lnmpイメージを作成する

目次1. Docker分散lnmpイメージ生成1. Nginx、MySQL、PHPコンテナを実行する...

CSSフィルターにはどんな魔法の用途があるか

背景基本概念CSS filterプロパティは、ぼかしや色の変化などのグラフィック効果を要素に適用して...

CSS3アニメーションを使用した簡単な指クリックアニメーションの実装例

この記事では主に、CSS3 アニメーションで簡単な指クリックアニメーションを実装する例を紹介し、皆さ...

Reactでレシピシステムを実装する方法を解説した記事

目次1. レシピ集1.1 プロジェクトの背景1.2 テクノロジースタック1.3 開発環境1.4. プ...

MySQLリモート接続失敗の解決策

以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...