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

推薦する

Tencent Cloud で HTTPS を無料で導入する方法

最近、WeChatアプレットを書いていたとき、WeChatアプレットではすべてのリクエストインターフ...

DIVのぼかし機能を実装する方法

マウスを動かしたときにDIVが消えるように手ぶれ補正を使用するdiv タグ自体は onblur イベ...

Dockerイメージを完全にアンインストールする手順

1. docker ps -a 実行中のイメージプロセスを表示する [root@mylinux~]#...

mysql-connector-java.jar パッケージのダウンロード プロセスの詳細な説明

mysql-connector-java.jar パッケージのチュートリアルをダウンロードします: ...

JavaScript でウェブ プレーヤーを実装する

今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...

MySQL はデータベースを動的に更新します スクリプト例の説明

具体的なupgradeスクリプトは次のとおりです。インデックスを動的に削除する アップグレードが存在...

TypeScript における型保護の詳細な説明

目次概要型アサーション構文ではインスタンスオブ構文typeof構文要約する概要TypeScript ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

MySQLでユーザー認証情報を表示する具体的な方法

具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...

JavaScript のマイクロタスクとマクロタスクの説明

序文: js はシングルスレッド言語なので、非同期にすることは不可能です。しかし、js のホスト環境...

JS でパブリッシュ サブスクライブ モデルを作成する

目次1. シーン紹介2 コードの最適化2.1 ファンを増やす問題を解決する2.2 作品追加の問題を解...

IE6 の歪み問題

質問: <form...> の下の <input type="hidde...

VMware IOInsight を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

例: VMware IOInsight は、VM のストレージ I/O 動作を理解するのに役立つツー...

Vue モバイル プロジェクトでページ キャッシュを実装する方法のサンプル コード

背景モバイル デバイスでは、ページ ジャンプ間のキャッシュが必須要件です。例: ホームページ =&g...

IE ブラウザの HTML ハック タグの概要

コードをコピーコードは次のとおりです。 <!--[if !IE]><!-->...