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データベース操作の基本コマンド

1. データベースを作成します。 データ data _name を作成します。 PHP でデータベー...

PID を作成できないために MySQL が起動できない問題を解決する方法

問題の説明MySQL 起動エラー メッセージは次のとおりです。 mysqld を起動します (sys...

mysql8.0 パスワードを忘れた場合の修正とネットコマンドのサービス名が無効になる問題

cmdにnet start mysqlと入力すると、プロンプトが表示されます: サービス名が無効です...

CSS で要素を垂直方向に中央揃えする 7 つの方法

【1】中央の要素の幅と高さを知る絶対値 + 負のマージンコードの実装 .wrapBox5{ 幅: 3...

MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明

MySQL マスタースレーブ設定MySQL のマスター/スレーブ レプリケーションと読み取り/書き込...

シンプルな虫眼鏡効果を実現するJavaScript

大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウス...

MySQL NULLがピットを引き起こした

比較演算子でNULLを使用する mysql> 1>NULLを選択します。 +------...

WeChatアプレットは写真アップロード機能を実現

この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...

Vue.jsで実装されたカレンダープラグインの使い方を詳しく説明します

本日実装する機能は、以下の機能です。vue.js シミュレーションカレンダープラグインさて、もう無駄...

MySQL テーブルを削除するときに外部キー制約を無視するシンプルな実装

テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...

スクロールラグの問題を解決するためのオーバーフロースクロールの詳細な説明

序文div またはモジュールに overflow: scroll 属性を使用すると、iOS フォンで...

不規則な絵の滝の流れ原理の分析と応用

プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...

Win10 DVWA のダウンロード、インストール、構成のグラフィック チュートリアルの詳細な説明 (初心者向け学習侵入)

コンピュータ システムが再インストールされ、侵入テスト学習環境 DVWA を再インストールする必要が...

Linux での MySQL の文字化け問題の解決方法

プロジェクトはサーバーと対話し、post を通じてサーバー側の jsp にアクセスし、jsp はサー...

zk+kafka+storm クラスターの docker-compose デプロイメントの実装

クラスターの展開の概要172.22.12.20 172.22.12.21 172.22.12.22 ...