構築事例:Nginxを利用したクライアント認証サーバ導入
すでに構築していたWeb会議システムのRocket.Chatにアクセスする際、クライアント証明書認証をしたいとのご要望でした。そこで、デージーネットでは、クライアント認証サーバにNginxを提案いたしました。
- お客様が悩まれていた課題
- Rocket.Chatサーバのアクセス制御ができていない
- クライアント証明書認証ができていない
- +導入企業プロフィール
- ★
導入企業業種
情報通信業
ユーザー規模
およそ8000人 以上
利用OS
Red Hat Enterprise 7
導入月
2020年7月
デージーネットが提案した「Nginxを利用したクライアント認証サーバ導入」
クライアント認証サーバにNginxを利用
Nginxとは
Nginxとは、オープンソースソフトウェアの高速Webサーバソフトウェアで、大容量のデータ配信や大量同時接続に耐えることを目的に開発されています。Linux(CentOS)やFreeBSD、Windows、macOSのOSをサポートしています。また、クライアント証明書認証を実現することができます。Webサーバには、代表格であるApacheがありますが、Apacheの問題点である「C10K問題」にも対応しています。C10K問題(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のことです。Apacheの採用している設計方式だと約10,000台の同時接続には耐えることができません。Nginxは大量の同時リクエストを処理することを前提に開発されたWebサーバであり、この問題を解決するためにApacheとは異なる設計の方法を採用しています。
またリバースプロキシとして利用することができます。Nginxが静的コンテンツをキャッシュしておくことで、バックエンドのWebサーバやアプリケーションサーバの負荷を減らすことに繋がります。ロードバランサとしても動作することができるため、大量アクセスの負荷分散をさせることもできます。
今回、お客様がRocket.Chatのアクセス制御をご希望でした。上記の点とRocket.Chat公式ドキュメントにNginxを紹介している点を含めNginxをインストール(install)しました。
クライアントのIPアドレスによる処理の切り分け
お客様のサーバーでは、デフォルトでRocket.ChatにアクセスするクライアントのIPアドレスによって指定した2つのグループにわかれるように設定をおこなっていました。新たにRocket.Chat用の設定ファイルを作成し、そこにリバースプロキシの設定を記載し実行しました。2つのグループを別々のポートにアクセスを振り分けるように配置し、Nginxを2つのポートで受け付け、Nginxで振り分けられたポートによって異なる処理を行うように追加で設定を行いました。Rocket.Chatには、複数のポートにアクセスするようにしました。
クライアント証明書による認証
クライアント証明書とは、電子証明書の一種でクライアントやユーザを認証し発行されます。今回、2つのクライアントのうち1つの外部からのグループにはクライアント証明認証行うように設定をしました。また、証明書による認証では、有効期限よりも前に失効させたデジタル証明書を表示している証明書失効リスト(CRL)を確認する必要があります。随時変更される証明書失効リスト(CRL)ファイルを何度も確認しに行くことは管理の手間になります。そこで、定期的に取得・反映するため、グループ外接続用ポートのserverの設定には、ssl_client_certificateやssl_crlをコマンドで設定して、クライアント証明書認証の設定とスケジュールを組んで自動的に失効リストを参照できるようにしました。
導入後の結果
Rocket.Chatのみでも、基本的なチャットの機能を使用することはできていましたが、Nginxを導入したことで、Rocket.Chatへアクセスする際にアクセスするポートごとに異なる処理を実施することが可能になりました。また随時変更されるCRLにも自動で対応することができ管理が簡単になりました。現在も大きなエラーもなく稼働しています。
【Webセミナー】CentOS8 サポート終了に伴う今後の考え方
日程: | 1月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | CentOS8のサポートが2021年に終了すると発表されました。CentOS8を利用していたユーザは今後、どのようにしていくとよいのかわかりやすく解説します! |
ご興味のあるかたはぜひご参加ください。 |