Web サーバーとリバースプロキシーのデプロイ
Red Hat Enterprise Linux 9 での Web サーバーとリバースプロキシーのセットアップと設定
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 Apache HTTP Web サーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
1.1. Apache HTTP Web サーバーの概要 リンクのコピーリンクがクリップボードにコピーされました!
Web サーバー は、Web 経由でクライアントにコンテンツを提供するネットワークサービスです。これは通常 Web ページを指しますが、他のドキュメントも当てはまります。Web サーバーは、ハイパーテキスト転送プロトコル (HTTP) を使用するため、HTTP サーバーとも呼ばれます。
Apache HTTP Server (httpd) は、Apache Software Foundation が開発したオープンソースの Web サーバーです。
Red Hat Enterprise Linux の以前のリリースからアップグレードする場合は、適切に httpd サービス設定を更新する必要があります。このセクションでは、新たに追加された機能の一部と、以前の設定ファイルの更新を説明します。
1.2. Apache HTTP Server への主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9.0 は、Apache HTTP Server のバージョン 2.4.62 を提供します。RHEL 8 に同梱されるバージョン 2.4.37 からの変更には、以下が含まれます。
Apache HTTP Server Control Interface (
apachectl):-
apachectl status出力では、systemctlページャーが無効になりました。 -
追加の引数を渡すと警告が表示される代わりに、
apachectlコマンドが失敗するようになりました。 -
apachectl graceful-stopがすぐに戻るようになりました。 -
apachectl configtestコマンドが、SELinux コンテキストを変更せずに、httpd -tコマンドを実行するようになりました。 -
RHEL の
apachectl(8)man ページで、アップストリームのapachectlとの相違点が完全に説明されるようになりました。
-
Apache eXtenSion ツール (
apxs):-
/usr/bin/apxsコマンドは、httpdパッケージのビルド時に適用されたコンパイラーの最適化フラグを使用または公開しなくなりました。/usr/lib64/httpd/build/vendor-apxsコマンドを使用して、httpdのビルドに使用されるのと同じコンパイラーフラグを適用できるようになりました。vendor-apxsコマンドを使用するには、最初にredhat-rpm-configパッケージをインストールする必要があります。
-
Apache モジュール:
-
mod_luaモジュールが、別のパッケージで提供されるようになりました。 -
Apache HTTP サーバーで使用するために PHP に提供されている
mod_phpモジュールは削除されました。RHEL 8 以降、PHP スクリプトはデフォルトで FastCGI Process Manager (php-fpm) を使用して実行されます。詳細は、Apache HTTP サーバーでの PHP の使用 を参照してください。
-
設定構文の変更
-
mod_access_compatが提供する非推奨のAllowディレクティブでは、コメント (#文字) が暗黙的に無視される代わりにシンタックスエラーを発生するようになりました。
-
その他の変更:
- カーネルスレッド ID は、エラーログメッセージで直接使用されるようになり、精度と簡潔性が向上しました。
- 多くのマイナーな機能強化とバグ修正
- モジュール作成者は、いくつかの新しいインターフェイスを利用できます。
RHEL 8 以降、httpd モジュール API に後方互換性のない変更はありません。
Apache HTTP Server 2.4 は、この Apache HTTP Server 2.4 の初期バージョンです。これは、RPM パッケージとして簡単にインストールできます。
1.3. Apache 設定ファイル リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、httpd は起動後に設定ファイルを読み取ります。次の表に、設定ファイルの場所のリストを示します。
| パス | 説明 |
|---|---|
|
| 主要設定ファイル。 |
|
| 主要設定ファイル内に含まれている設定ファイル用の補助ディレクトリー。 |
|
| Red Hat Enterprise Linux にパッケージ化されたインストール済みの動的モジュールを読み込む設定ファイルの補助ディレクトリー。デフォルト設定では、この設定ファイルが最初に処理されます。 |
デフォルト設定はほとんどの状況に適していますが、その他の設定オプションを使用することもできます。変更を有効にするには、まず Web サーバーを再起動します。
設定に誤りがないことを確認するには、シェルプロンプトで以下のコマンドを実行します。
apachectl configtest Syntax OK
# apachectl configtest
Syntax OK
間違いからの復元を容易にするため、編集する前にオリジナルファイルのコピーを作成します。
1.4. httpd サービスの管理 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、httpd サービスを起動、停止、および再起動する方法を説明します。
前提条件
- Apache HTTP Server がインストールされている。
手順
httpdサービスを起動するには、以下を入力します。systemctl start httpd
# systemctl start httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを停止するには、以下を入力します。systemctl stop httpd
# systemctl stop httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを再起動するには、以下を入力します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. シングルインスタンスの Apache HTTP Server 設定 リンクのコピーリンクがクリップボードにコピーされました!
シングルインスタンスの Apache HTTP Server を設定して、静的 HTML コンテンツを提供できます。
Web サーバーに関連付けられた全ドメインにサーバーから同じコンテンツを提供する必要がある場合は、この手順に従います。異なるドメインに異なるコンテンツを提供する場合は、名前ベースの仮想ホストを設定します。詳細は Apache 名ベースの仮想ホストの設定 を参照してください。
手順
httpdパッケージをインストールします。dnf install httpd
# dnf install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow firewalldを使用する場合は、ローカルのファイアウォールで TCP ポート80を開きます。firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを有効にして起動します。systemctl enable --now httpd
# systemctl enable --now httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、HTML ファイルを
/var/www/html/ディレクトリーに追加します。注記/var/www/html/にコンテンツを追加する場合には、httpdを実行するユーザーが、デフォルトでファイルとディレクトリーを読み取れるようにする必要があります。コンテンツの所有者は、rootユーザーおよびrootユーザーグループ、または管理者が選択した別のユーザーまたはグループのどちらかです。コンテンツの所有者がrootユーザーおよびrootユーザーグループの場合には、他のユーザーがファイルを読み取れるようにする必要があります。すべてのファイルとディレクトリーの SELinux コンテキストはhttpd_sys_content_tである必要があります。これはデフォルトで/var/wwwディレクトリー内の全コンテンツに適用されます。
検証
Web ブラウザーで
http://server_IP_or_host_name/に接続します。/var/www/html/ディレクトリーが空であるか、index.htmlまたはindex.htmファイルが含まれていない場合は、Apache がRed Hat Enterprise Linux Test Pageを表示します。/var/www/html/に異なる名前の HTML ファイルが含まれる場合は、http://server_IP_or_host_name/example.htmlなど、そのファイル名に URL を指定して読み込むことができます。
1.6. Apache 名前ベースの仮想ホストの設定 リンクのコピーリンクがクリップボードにコピーされました!
名前ベースの仮想ホストを使用すると、Apache は、サーバーの IP アドレスに解決されるドメイン別に異なるコンテンツを提供できます。
別々のドキュメントルートディレクトリーを使用して、example.com ドメインと example.net ドメインの両方に仮想ホストを設定できます。どちらの仮想ホストも静的 HTML コンテンツを提供します。
前提条件
クライアントおよび Web サーバーは、
example.comおよびexample.netドメインを Web サーバーの IP アドレスに解決します。これらのエントリーは DNS サーバーに手動で追加する必要がある点に注意してください。
手順
httpdパッケージをインストールします。dnf install httpd
# dnf install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/conf/httpd.confファイルを編集します。example.comドメイン向けに以下の仮想ホスト設定を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定は以下を設定します。
-
<VirtualHost *:80>ディレクティブの全設定は、この仮想ホストに固有のものです。 -
DocumentRootは、仮想ホストの Web コンテンツへのパスを設定します。 ServerNameは、この仮想ホストがコンテンツを提供するドメインを設定します。複数のドメインを設定するには、
ServerAliasパラメーターを設定に追加し、追加のドメインをスペース区切りで、このパラメーターに指定します。-
CustomLogは、仮想ホストのアクセスログへのパスを設定します。 ErrorLogは、仮想ホストのエラーログへのパスを設定します。注記Apache は、
ServerNameおよびServerAliasパラメーターに設定したドメインどれにも一致しない要求の場合でも、設定で最初に検出された仮想マシンを使用します。これには、サーバーの IP アドレス対してに送信される要求も含まれます。
-
example.netドメイン向けに同様の仮想ホスト設定を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 両方の仮想ホストのドキュメントルートを作成します。
mkdir /var/www/example.com/ mkdir /var/www/example.net/
# mkdir /var/www/example.com/ # mkdir /var/www/example.net/Copy to Clipboard Copied! Toggle word wrap Toggle overflow DocumentRootパラメーターのパスが/var/www/内にない設定を行う場合は、両方のドキュメントルートにhttpd_sys_content_tコンテキストを設定します。semanage fcontext -a -t httpd_sys_content_t "/srv/example.com(/.*)?" restorecon -Rv /srv/example.com/ semanage fcontext -a -t httpd_sys_content_t "/srv/example.net(/.\*)?" restorecon -Rv /srv/example.net/
# semanage fcontext -a -t httpd_sys_content_t "/srv/example.com(/.*)?" # restorecon -Rv /srv/example.com/ # semanage fcontext -a -t httpd_sys_content_t "/srv/example.net(/.\*)?" # restorecon -Rv /srv/example.net/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
/srv/example.com/および/srv/example.net/ディレクトリーにhttpd_sys_content_tコンテキストを設定します。policycoreutils-python-utilsパッケージをインストールしてrestoreconコマンドを実行する必要があります。firewalldを使用する場合は、ローカルのファイアウォールでポート80を開きます。firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを有効にして起動します。systemctl enable --now httpd
# systemctl enable --now httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
仮想ホストのドキュメントルートごとに異なるサンプルファイルを作成します。
echo "vHost example.com" > /var/www/example.com/index.html echo "vHost example.net" > /var/www/example.net/index.html
# echo "vHost example.com" > /var/www/example.com/index.html # echo "vHost example.net" > /var/www/example.net/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
ブラウザーを使用して
http://example.comに接続します。Web サーバーは、example.com仮想ホストからのサンプルファイルを表示します。 -
ブラウザーを使用して
http://example.netに接続します。Web サーバーは、example.net仮想ホストからのサンプルファイルを表示します。
1.7. Apache HTTP Web サーバーの Kerberos 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP Web サーバーで Kerberos 認証を実行するために、RHEL 9 は mod_auth_gssapi Apache モジュールを使用します。Generic Security Services API (GSSAPI) は、Kerberos などのセキュリティーライブラリーを使用する要求を行うアプリケーションのインターフェイスです。gssproxy サービスでは、httpd サーバーに特権の分離を実装できます。これにより、セキュリティーの観点からこのプロセスが最適化されます。
削除した mod_auth_kerb モジュールは、mod_auth_gssapi モジュールに置き換わります。
前提条件
-
httpd、mod_auth_gssapi、およびgssproxyパッケージがインストールされている。 -
Apache Web サーバーが設定され、
httpdサービスが実行している。
1.7.1. IdM 環境で GSS-Proxy の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Apache HTTP Web サーバーで Kerberos 認証を実行するように GSS-Proxy を設定する方法を説明します。
手順
サービスプリンシパルを作成し、HTTP/<SERVER_NAME>@realm プリンシパルの
keytabファイルへのアクセスを有効にします。ipa service-add HTTP/<SERVER_NAME>
# ipa service-add HTTP/<SERVER_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/gssproxy/http.keytabファイルに保存されているプリンシパルのkeytabを取得します。ipa-getkeytab -s $(awk '/^server =/ {print $3}' /etc/ipa/default.conf) -k /etc/gssproxy/http.keytab -p HTTP/$(hostname -f)# ipa-getkeytab -s $(awk '/^server =/ {print $3}' /etc/ipa/default.conf) -k /etc/gssproxy/http.keytab -p HTTP/$(hostname -f)Copy to Clipboard Copied! Toggle word wrap Toggle overflow このステップでは、パーミッションを 400 に設定すると、
rootユーザーのみがkeytabファイルにアクセスできます。apacheユーザーは異なります。以下の内容で
/etc/gssproxy/80-httpd.confファイルを作成します。[service/HTTP] mechs = krb5 cred_store = keytab:/etc/gssproxy/http.keytab cred_store = ccache:/var/lib/gssproxy/clients/krb5cc_%U euid = apache
[service/HTTP] mechs = krb5 cred_store = keytab:/etc/gssproxy/http.keytab cred_store = ccache:/var/lib/gssproxy/clients/krb5cc_%U euid = apacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow gssproxyサービスを再起動して、有効にします。systemctl restart gssproxy.service systemctl enable gssproxy.service
# systemctl restart gssproxy.service # systemctl enable gssproxy.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.8. Apache HTTP サーバーで TLS 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Apache は暗号化されていない HTTP 接続を使用してクライアントにコンテンツを提供します。このセクションでは、TLS 暗号化を有効にし、Apache HTTP Server で頻繁に使用される暗号化関連の設定を行う方法を説明します。
前提条件
- Apache HTTP Server がインストールされ、実行している。
1.8.1. Apache HTTP Server への TLS 暗号化の追加 リンクのコピーリンクがクリップボードにコピーされました!
example.com ドメインの Apache HTTP サーバーで TLS 暗号化を有効にすることができます。
前提条件
- Apache HTTP Server がインストールされ、実行している。
秘密鍵が
/etc/pki/tls/private/example.com.keyファイルに保存されている。秘密鍵および証明書署名要求 (CSR) を作成する方法と、認証局 (CA) からの証明書を要求する方法は、CA のドキュメントを参照してください。または、お使いの CA が ACME プロトコルに対応している場合は、
mod_mdモジュールを使用して、TLS 証明書の取得およびプロビジョニングを自動化できます。-
TLS 証明書は
/etc/pki/tls/certs/example.com.crtファイルに保存されます。別のパスを使用する場合は、この手順で対応する手順を調整します。 -
認証局証明書は
/etc/pki/tls/certs/ca.crtに保存されています。別のパスを使用する場合は、この手順で対応する手順を調整します。 - クライアントおよび Web サーバーは、サーバーのホスト名を Web サーバーの IP アドレスに対して解決します。
- サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
mod_sslパッケージをインストールします。dnf install mod_ssl
# dnf install mod_sslCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/conf.d/ssl.confファイルを編集し、以下の設定を<VirtualHost _default_:443>ディレクティブに追加します。サーバー名を設定します。
ServerName example.com
ServerName example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
サーバー名は、証明書の Common Name フィールドに設定されているエントリーと一致している必要があります。
必要に応じて、証明書の
Subject Alt Names(SAN) フィールドに追加のホスト名が含まれる場合に、これらのホスト名にも TLS 暗号化を提供するようにmod_sslを設定できます。これを設定するには、ServerAliasesパラメーターと対応する名前を追加します。ServerAlias www.example.com server.example.com
ServerAlias www.example.com server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 秘密鍵、サーバー証明書、および CA 証明書へのパスを設定します。
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"Copy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティー上の理由から、
rootユーザーのみが秘密鍵ファイルにアクセスできるように設定します。chown root:root /etc/pki/tls/private/example.com.key chmod 600 /etc/pki/tls/private/example.com.key
# chown root:root /etc/pki/tls/private/example.com.key # chmod 600 /etc/pki/tls/private/example.com.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告秘密鍵に権限のないユーザーがアクセスした場合は、証明書を取り消し、新しい秘密鍵を作成し、新しい証明書を要求します。そうでない場合は、TLS 接続が安全ではなくなります。
firewalldを使用する場合は、ローカルのファイアウォールでポート443を開きます。firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=443/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注記パスワードで秘密鍵ファイルを保護した場合は、
httpdサービスの起動時に毎回このパスワードを入力する必要があります。
検証
-
ブラウザーを使用して、
https://example.comに接続します。
1.8.2. Apache HTTP サーバーでサポートされる TLS プロトコルバージョンの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、RHEL の Apache HTTP Server は、最新のブラウザーにも互換性のある安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。たとえば、DEFAULT ポリシーでは、TLSv1.2 および TLSv1.3 プロトコルバージョンのみが Apache で有効になるように定義します。
Apache HTTP Server がサポートする TLS プロトコルのバージョンを手動で設定できます。たとえば、環境が特定の TLS プロトコルバージョンのみを有効にする必要がある場合には、以下の手順に従います。
-
お使いの環境のクライアントで、セキュリティーの低い
TLS1(TLSv1.0) プロトコルまたはTLS1.1プロトコルも使用できるようにする必要がある場合。 -
Apache が
TLSv1.2プロトコルまたはTLSv1.3プロトコルのみに対応するように設定する場合。
前提条件
- Apache HTTP Server への TLS 暗号化の追加 で説明されているとおり、TLS 暗号化がサーバーで有効になります。
- サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
/etc/httpd/conf/httpd.confファイルを編集し、TLS プロトコルバージョンを設定する<VirtualHost>ディレクティブに以下の設定を追加します。たとえば、TLSv1.3プロトコルのみを有効にするには、以下を実行します。SSLProtocol -All TLSv1.3
SSLProtocol -All TLSv1.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを使用して、サーバーが
TLSv1.3に対応していることを確認します。openssl s_client -connect example.com:443 -tls1_3
# openssl s_client -connect example.com:443 -tls1_3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して、サーバーが
TLSv1.2に対応していないことを確認します。openssl s_client -connect example.com:443 -tls1_2
# openssl s_client -connect example.com:443 -tls1_2Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーがプロトコルに対応していない場合には、このコマンドは以下のエラーを返します。
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、他の TLS プロトコルバージョンのコマンドを繰り返し実行します。
1.8.3. Apache HTTP サーバーで対応している暗号の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Apache HTTP サーバーは、安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。これは、最近のブラウザーとも互換性があります。システム全体の暗号化で使用可能な暗号化のリストは、/etc/crypto-policies/back-ends/openssl.config ファイルを参照してください。
Apache HTTP Server がサポートする暗号を手動で設定できます。お使いの環境で特定の暗号が必要な場合は、以下の手順に従います。
前提条件
- Apache HTTP Server への TLS 暗号化の追加 で説明されているとおり、TLS 暗号化がサーバーで有効になります。
手順
/etc/httpd/conf/httpd.confファイルを編集し、TLS 暗号を設定する<VirtualHost>ディレクティブにSSLCipherSuiteパラメーターを追加します。SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"
SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
EECDH+AESGCM、EDH+AESGCM、AES256+EECDH、およびAES256+EDH暗号のみを有効にし、SHA1およびSHA256メッセージ認証コード (MAC) を使用するすべての暗号を無効にします。httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Apache HTTP Server が対応する暗号化のリストを表示するには、以下を行います。
nmapパッケージをインストールします。dnf install nmap
# dnf install nmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow nmapユーティリティーを使用して、対応している暗号を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.9. TLS クライアント証明書認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
クライアント証明書認証を使用すると、管理者は、証明書で認証したユーザーのみが Web サーバーのリソースにアクセスできるようにすることが可能です。/var/www/html/Example/ ディレクトリーにクライアント証明書認証を設定できます。
Apache HTTP Server が TLS 1.3 プロトコルを使用する場合、特定のクライアントには追加の設定が必要です。たとえば、Firefox で、about:config メニューの security.tls.enable_post_handshake_auth パラメーターを true に設定します。
前提条件
- Apache HTTP Server への TLS 暗号化の追加 で説明されているとおり、TLS 暗号化がサーバーで有効になります。
手順
/etc/httpd/conf/httpd.confファイルを編集し、以下の設定をクライアント認証を設定する<VirtualHost>ディレクティブに追加します。<Directory "/var/www/html/Example/"> SSLVerifyClient require </Directory>
<Directory "/var/www/html/Example/"> SSLVerifyClient require </Directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSLVerifyClient requireの設定では、/var/www/html/Example/ディレクトリーのコンテンツにクライアントがアクセスする前に、サーバーがクライアント証明書を正常に検証する必要があることを定義します。httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
curlユーティリティーを使用して、クライアント認証なしでhttps://example.com/Example/URL にアクセスします。curl https://example.com/Example/ curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0
$ curl https://example.com/Example/ curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow このエラーは、Web サーバーにクライアント証明書認証が必要であることを示しています。
クライアントの秘密鍵と証明書、および CA 証明書を
curlに指定して、クライアント認証で同じ URL にアクセスします。curl --cacert ca.crt --key client.key --cert client.crt https://example.com/Example/
$ curl --cacert ca.crt --key client.key --cert client.crt https://example.com/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要求に成功すると、
curlは/var/www/html/Example/ディレクトリーに保存されているindex.htmlファイルを表示します。
1.10. ModSecurity を使用した Web サーバー上の Web アプリケーションの保護 リンクのコピーリンクがクリップボードにコピーされました!
ModSecurity は、Apache、Nginx、IIS などのさまざまな Web サーバーでサポートされているオープンソースの Web アプリケーションファイアウォール (WAF) であり、Web アプリケーションのセキュリティーリスクを軽減します。ModSecurity は、サーバーを設定するためのカスタマイズ可能なルールセットを提供します。
mod_security-crs パッケージには、クロス Web サイトスクリプティング、不正なユーザーエージェント、SQL インジェクション、トロイの木馬、セッションハイジャック、およびその他の不正使用に対するルールを含むコアルールセット (CRS) が含まれています。
1.10.1. Apache 用 ModSecurity Web ベースアプリケーションファイアウォールのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
ModSecurity をデプロイして、Web サーバー上で Web ベースアプリケーションの実行に関連するリスクを軽減するには、Apache HTTP サーバー用の mod_security および mod_security_crs パッケージをインストールします。mod_security_crs パッケージは、ModSecurity Web ベースのアプリケーションファイアウォール (WAF) モジュールのコアルールセット (CRS) を提供します。
手順
mod_security、mod_security_crs、およびhttpdパッケージをインストールします。dnf install -y mod_security mod_security_crs httpd
# dnf install -y mod_security mod_security_crs httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサーバーを起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ModSecurity Web ベースアプリケーションファイアウォールが Apache HTTP サーバーで有効になっていることを確認します。
httpd -M | grep security security2_module (shared)
# httpd -M | grep security security2_module (shared)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/modsecurity.d/activated_rules/ディレクトリーにmod_security_crsによって提供されるルールが含まれていることを確認します。ls /etc/httpd/modsecurity.d/activated_rules/ ... REQUEST-921-PROTOCOL-ATTACK.conf REQUEST-930-APPLICATION-ATTACK-LFI.conf ...
# ls /etc/httpd/modsecurity.d/activated_rules/ ... REQUEST-921-PROTOCOL-ATTACK.conf REQUEST-930-APPLICATION-ATTACK-LFI.conf ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.10.2. ModSecurity へのカスタムルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
ModSecurity コアルールセット (CRS) に含まれるルールがシナリオに適合せず、追加の攻撃の可能性を防ぎたい場合は、カスタムルールを ModSecurity Web ベースアプリケーションファイアウォールで使用されるルールセットに追加できます。次の例は、単純なルールの追加を示しています。より複雑なルールを作成するには、ModSecurity Wiki Web サイトのリファレンスマニュアルを参照してください。
前提条件
- ModSecurity for Apache がインストールされ、有効になっている。
手順
任意のテキストエディターで
/etc/httpd/conf.d/mod_security.confファイルを開きます。以下はその例です。vi /etc/httpd/conf.d/mod_security.conf
# vi /etc/httpd/conf.d/mod_security.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow SecRuleEngine Onで始まる行の後に、次のサンプルルールを追加します。SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"
SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前のルールでは、
dataパラメーターにevilの文字列が含まれている場合、ユーザーによるリソースの使用を禁止しています。- 変更を保存し、エディターを終了します。
httpdサーバーを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
test.htmlページを作成します。echo "mod_security test" > /var/www/html/test.html
# echo "mod_security test" > /var/www/html/test.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサーバーを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP リクエストの
GET変数に悪意のあるデータが含まれないtest.htmlをリクエストします。curl http://localhost/test.html?data=good mod_security test
$ curl http://localhost/test.html?data=good mod_security testCopy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP リクエストの
GET変数に悪意のあるデータが含まれるtest.htmlをリクエストします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/httpd/error_logファイルを確認し、param data containing an evil dataメッセージでアクセスを拒否するログエントリーを見つけます。[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]
[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.11. Apache HTTP Server のマニュアルのインストール リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP Server のマニュアルをインストールできます。このマニュアルには、以下のような詳細なドキュメントが含まれます。
- 設定パラメーターおよびディレクティブ
- パフォーマンスチューニング
- 認証設定
- モジュール
- コンテンツのキャッシュ
- セキュリティーに関するヒント
- TLS 暗号化の設定
マニュアルをインストールした後は、Web ブラウザーを使用して表示できます。
前提条件
- Apache HTTP Server がインストールされ、実行している。
手順
httpd-manualパッケージをインストールします。dnf install httpd-manual
# dnf install httpd-manualCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、デフォルトでは、Apache HTTP Server に接続するすべてのクライアントはマニュアルを表示できます。
192.0.2.0/24サブネットなど、特定の IP 範囲へのアクセスを制限するには、/etc/httpd/conf.d/manual.confファイルを編集し、Require ip 192.0.2.0/24設定を<Directory "/usr/share/httpd/manual">ディレクティブに追加します。<Directory "/usr/share/httpd/manual"> ... Require ip 192.0.2.0/24 ... </Directory><Directory "/usr/share/httpd/manual"> ... Require ip 192.0.2.0/24 ... </Directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
Apache HTTP Server のマニュアルを表示するには、Web ブラウザーで
http://host_name_or_IP_address/manual/に接続します。
1.12. Apache モジュールの操作 リンクのコピーリンクがクリップボードにコピーされました!
httpd サービスはモジュラーアプリケーションであり、多数の 動的共有オブジェクト (DSO) で拡張できます。動的共有オブジェクト は、必要に応じて実行時に動的にロードまたはアンロードできるモジュールです。これらのモジュールは /usr/lib64/httpd/modules/ ディレクトリーにあります。
1.12.1. DSO モジュールのロード リンクのコピーリンクがクリップボードにコピーされました!
管理者は、サーバーがロードするモジュールを設定することにより、サーバーに含める機能を選択できます。特定の DSO モジュールを読み込むには、LoadModule ディレクティブを使用します。別のパッケージが提供するモジュールは、多くの場合、/etc/httpd/conf.modules.d/ ディレクトリーに独自の設定ファイルがあることに注意してください。
前提条件
-
httpdパッケージをインストールしている。
手順
/etc/httpd/conf.modules.d/ディレクトリーの設定ファイルでモジュール名を検索します。grep mod_ssl.so /etc/httpd/conf.modules.d/*
# grep mod_ssl.so /etc/httpd/conf.modules.d/*Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュール名が見つかった設定ファイルを編集し、モジュールの
LoadModuleディレクティブをコメント解除します。LoadModule ssl_module modules/mod_ssl.so
LoadModule ssl_module modules/mod_ssl.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL パッケージがモジュールを提供していないなどの理由でモジュールが見つからなかった場合は、次のディレクティブを使用して
/etc/httpd/conf.modules.d/30-example.confなどの設定ファイルを作成します。LoadModule ssl_module modules/<custom_module>.so
LoadModule ssl_module modules/<custom_module>.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdサービスを再起動します。systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.12.2. カスタム Apache モジュールのコンパイル リンクのコピーリンクがクリップボードにコピーされました!
独自のモジュールを作成し、モジュールのコンパイルに必要なインクルードファイル、ヘッダーファイル、および APache eXtenSion (apxs) ユーティリティーを含む httpd-devel パッケージを使用してビルドできます。
前提条件
-
httpd-develパッケージがインストールされている。
手順
次のコマンドでカスタムモジュールをビルドします。
apxs -i -a -c module_name.c
# apxs -i -a -c module_name.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- DSO モジュールのロード で説明されている方法でモジュールをロードします。
1.13. Apache Web Server 設定で秘密鍵と証明書を使用できるように NSS データベースからの証明書のエクスポート リンクのコピーリンクがクリップボードにコピーされました!
RHEL 8 以降、Apache Web サーバーに mod_nss モジュールが提供されなくなります。Red Hat は mod_ssl モジュールの使用を推奨します。秘密鍵と証明書を Network Security Services (NSS) データベースに保存する場合は、以下の 手順に従って、Privacy Enhanced Mail (PEM) 形式の鍵および証明書を抽出 します。
第2章 NGINX の設定および設定 リンクのコピーリンクがクリップボードにコピーされました!
NGINX は、次のように使用できる高パフォーマンスなモジュラーサーバーです。
- Web サーバー
- リバースプロキシー
- ロードバランサー
このセクションでは、このシナリオで NGINX を行う方法を説明します。
2.1. NGINX のインストールおよび準備 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux 9 では、NGINX のさまざまなバージョンがアプリケーションストリームによって提供されます。デフォルト設定を使用すると、NGINX はポート 80 の Web サーバーとして実行され、/usr/share/nginx/html/ ディレクトリーからコンテンツを提供します。
前提条件
- RHEL 9 がインストールされている。
- ホストが Red Hat カスタマーポータルにサブスクライブしている。
-
firewalldサービスが有効化され、開始されている。
手順
nginxパッケージをインストールします。このアプリケーションストリームの初期バージョンとして NGINX 1.20 を RPM パッケージからインストールするには、以下を実行します。
dnf install nginx
# dnf install nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記以前に NGINX モジュールストリームを有効にしたことがある場合、このコマンドは有効なストリームから NGINX バージョンをインストールします。
モジュールストリームから NGINX の代替の新しいバージョンをインストールするには、以下を実行します。
利用可能な NGINX モジュールストリームを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選択したストリームを有効にします。
dnf module enable nginx:stream_version
# dnf module enable nginx:stream_versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow nginx パッケージをインストールします。
dnf install nginx
# dnf install nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
NGINX がファイアウォールでサービスを提供するポートを開きます。たとえば、
firewalldで HTTP (ポート 80) および HTTPS (ポート 443) のデフォルトポートを開くには、次のコマンドを実行します。firewall-cmd --permanent --add-port={80/tcp,443/tcp} firewall-cmd --reload# firewall-cmd --permanent --add-port={80/tcp,443/tcp} # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow nginxサービスがシステムの起動時に自動的に起動するようにします。systemctl enable nginx
# systemctl enable nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
nginxサービスを起動します。systemctl start nginx
# systemctl start nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルト設定を使用しない場合は、この手順を省略し、サービスを起動する前に NGINX を適切に設定します。
検証
dnfユーティリティーを使用して、nginxパッケージがインストールされていることを確認します。NGINX 1.20 RPM パッケージの場合:
dnf list installed nginx Installed Packages nginx.x86_64 1:1.20.1-4.el9 @rhel-AppStream
# dnf list installed nginx Installed Packages nginx.x86_64 1:1.20.1-4.el9 @rhel-AppStreamCopy to Clipboard Copied! Toggle word wrap Toggle overflow 選択した NGINX モジュールストリームの場合:
dnf list installed nginx Installed Packages nginx.x86_64 1:1.22.1-3.module+el9.2.0+17617+2f289c6c @rhel-AppStream
# dnf list installed nginx Installed Packages nginx.x86_64 1:1.22.1-3.module+el9.2.0+17617+2f289c6c @rhel-AppStreamCopy to Clipboard Copied! Toggle word wrap Toggle overflow
NGINX がサービスを提供するポートが firewalld で開いていることを確認します。
firewall-cmd --list-ports 80/tcp 443/tcp
# firewall-cmd --list-ports 80/tcp 443/tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow nginxサービスが有効になっていることを確認します。systemctl is-enabled nginx enabled
# systemctl is-enabled nginx enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. ドメインごとに異なるコンテンツを提供する Web サーバーとしての NGINX の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、NGINX は Web サーバーとして機能し、サーバーの IP アドレスに関連付けられた全ドメイン名のクライアントに、同じコンテンツを提供します。この手順では、NGINX を設定する方法を説明します。
-
/var/www/example.com/ディレクトリーのコンテンツで、example.comドメインに対するリクエストに対応する。 -
/var/www/example.net/ディレクトリーのコンテンツで、example.netドメインに対するリクエストに対応する。 -
その他の全リクエスト (たとえば、サーバーの IP アドレスまたはサーバーの IP アドレスに関連付けられたその他のドメイン) に
/usr/share/nginx/html/ディレクトリーのコンテンツを指定します。
前提条件
- NGINX がインストールされている
クライアントおよび Web サーバーは、
example.comおよびexample.netドメインを Web サーバーの IP アドレスに解決します。これらのエントリーは DNS サーバーに手動で追加する必要がある点に注意してください。
手順
/etc/nginx/nginx.confファイルを編集します。デフォルトでは、
/etc/nginx/nginx.confファイルには catch-all 設定がすでに含まれています。設定からこの部分を削除した場合は、以下のserverブロックを/etc/nginx/nginx.confファイルのhttpブロックに追加し直します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定は以下を設定します。
-
listenディレクティブは、サービスがリッスンする IP アドレスとポートを定義します。この場合、NGINX は IPv4 と IPv6 の両方のアドレスのポート80でリッスンします。default_serverパラメーターは、NGINX がこのserverブロックを IP アドレスとポートに一致するリクエストのデフォルトとして使用していることを示します。 -
server_nameパラメーターは、このserverブロックに対応するホスト名を定義します。server_nameを_に設定すると、このserverブロックのホスト名を受け入れるように NGINX を設定します。 -
rootディレクティブは、このserverブロックの Web コンテンツへのパスを設定します。
-
example.comドメインの同様のserverブロックをhttpブロックに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
access_logディレクティブは、このドメインに別のアクセスログファイルを定義します。 -
error_logディレクティブは、このドメインに別のエラーログファイルを定義します。
-
example.netドメインの同様のserverブロックをhttpブロックに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
両方のドメインのルートディレクトリーを作成します。
mkdir -p /var/www/example.com/ mkdir -p /var/www/example.net/
# mkdir -p /var/www/example.com/ # mkdir -p /var/www/example.net/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 両方のルートディレクトリーに
httpd_sys_content_tコンテキストを設定します。semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?" restorecon -Rv /var/www/example.com/ semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?" restorecon -Rv /var/www/example.net/
# semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?" # restorecon -Rv /var/www/example.com/ # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?" # restorecon -Rv /var/www/example.net/Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのコマンドは、
/var/www/example.com/ディレクトリーおよび/var/www/example.net/ディレクトリーにhttpd_sys_content_tコンテキストを設定します。policycoreutils-python-utilsパッケージをインストールしてrestoreconコマンドを実行する必要があります。両方のドメインのログディレクトリーを作成します。
mkdir /var/log/nginx/example.com/ mkdir /var/log/nginx/example.net/
# mkdir /var/log/nginx/example.com/ # mkdir /var/log/nginx/example.net/Copy to Clipboard Copied! Toggle word wrap Toggle overflow nginxサービスを再起動します。systemctl restart nginx
# systemctl restart nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
仮想ホストのドキュメントルートごとに異なるサンプルファイルを作成します。
echo "Content for example.com" > /var/www/example.com/index.html echo "Content for example.net" > /var/www/example.net/index.html echo "Catch All content" > /usr/share/nginx/html/index.html
# echo "Content for example.com" > /var/www/example.com/index.html # echo "Content for example.net" > /var/www/example.net/index.html # echo "Catch All content" > /usr/share/nginx/html/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
ブラウザーを使用して
http://example.comに接続します。Web サーバーは、/var/www/example.com/index.htmlファイルからのサンプルコンテンツを表示します。 -
ブラウザーを使用して
http://example.netに接続します。Web サーバーは、/var/www/example.net/index.htmlファイルからのサンプルコンテンツを表示します。 -
ブラウザーを使用して
http://IP_address_of_the_serverに接続します。Web サーバーは、/usr/share/nginx/html/index.htmlファイルからのサンプルコンテンツを表示します。
2.3. NGINX Web サーバーへの TLS 暗号化の追加 リンクのコピーリンクがクリップボードにコピーされました!
example.com ドメインの NGINX Web サーバーで TLS 暗号化を有効にすることができます。
前提条件
- NGINX がインストールされている。
秘密鍵が
/etc/pki/tls/private/example.com.keyファイルに保存されている。秘密鍵および証明書署名要求 (CSR) を作成する方法と、認証局 (CA) からの証明書を要求する方法は、CA のドキュメントを参照してください。
-
TLS 証明書は
/etc/pki/tls/certs/example.com.crtファイルに保存されます。別のパスを使用する場合は、この手順で対応する手順を調整します。 - CA 証明書がサーバーの TLS 証明書ファイルに追加されている。
- クライアントおよび Web サーバーは、サーバーのホスト名を Web サーバーの IP アドレスに対して解決します。
-
ポート
443が、ローカルのファイアウォールで開放されている。 - サーバーが RHEL 9.2 以降を実行し、FIPS モードが有効になっている場合、クライアントが Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
/etc/nginx/nginx.confファイルを編集し、設定のhttpブロックに以下のserverブロックを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: RHEL 9.3 以降では、
ssl_pass_phrase_dialogディレクティブを使用して、暗号化された秘密鍵ごとにnginxの起動時に呼び出される外部プログラムを設定できます。次の行のいずれかを/etc/nginx/nginx.confファイルに追加します。暗号化された秘密キーファイルごとに外部プログラムを呼び出すには、次のように入力します。
ssl_pass_phrase_dialog exec:<path_to_program>;
ssl_pass_phrase_dialog exec:<path_to_program>;Copy to Clipboard Copied! Toggle word wrap Toggle overflow NGINX は、次の 2 つの引数を使用してこのプログラムを呼び出します。
-
server_name設定で指定されたサーバー名。 -
次のアルゴリズムのいずれか:
RSA、DSA、EC、DH、またはUNK(暗号アルゴリズムが認識できない場合)。
-
暗号化された秘密キーファイルごとにパスフレーズを手動で入力する場合は、次のように入力します。
ssl_pass_phrase_dialog builtin;
ssl_pass_phrase_dialog builtin;Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、
ssl_pass_phrase_dialogが設定されていない場合のデフォルトの動作です。注記この方法を使用しても、少なくとも 1 つの秘密キーがパスフレーズで保護されている場合、
nginxサービスは起動に失敗します。この場合は、他のいずれかの方法を使用してください。systemctlユーティリティーを使用してnginxサービスを開始するときに、systemdで暗号化された秘密キーごとにパスフレーズの入力を求めるプロンプトを表示するには、次のように入力します。ssl_pass_phrase_dialog exec:/usr/libexec/nginx-ssl-pass-dialog;
ssl_pass_phrase_dialog exec:/usr/libexec/nginx-ssl-pass-dialog;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
セキュリティー上の理由から、
rootユーザーのみが秘密鍵ファイルにアクセスできるように設定します。chown root:root /etc/pki/tls/private/example.com.key chmod 600 /etc/pki/tls/private/example.com.key
# chown root:root /etc/pki/tls/private/example.com.key # chmod 600 /etc/pki/tls/private/example.com.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告秘密鍵に権限のないユーザーがアクセスした場合は、証明書を取り消し、新しい秘密鍵を作成し、新しい証明書を要求します。そうでない場合は、TLS 接続が安全ではなくなります。
nginxサービスを再起動します。systemctl restart nginx
# systemctl restart nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
ブラウザーを使用して、
https://example.comに接続します。
2.4. HTTP トラフィックのリバースプロキシーとしての NGINX の設定 リンクのコピーリンクがクリップボードにコピーされました!
NGINX Web サーバーは、HTTP トラフィックのリバースプロキシーとして機能するように設定できます。たとえば、この機能を使用すると、リモートサーバーの特定のサブディレクトリーに要求を転送できます。クライアント側からは、クライアントはアクセス先のホストからコンテンツを読み込みます。ただし、NGINX は実際のコンテンツをリモートサーバーから読み込み、クライアントに転送します。
この手順では、Web サーバーの /example ディレクトリーへのトラフィックを、URL https://example.com に転送する方法を説明します。
前提条件
- NGINX が NGINX のインストールと準備 の説明に従ってインストールされている。
- 必要に応じて、TLS 暗号化がリバースプロキシーで有効になっている。
手順
/etc/nginx/nginx.confファイルを編集し、リバースプロキシーを提供するserverブロックに以下の設定を追加します。location /example { proxy_pass https://example.com; }location /example { proxy_pass https://example.com; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow locationブロックでは、NGINX が/exampleディレクトリー内の全要求をhttps://example.comに渡すことを定義します。SELinux ブール値パラメーター
httpd_can_network_connectを1に設定して、SELinux が NGINX がトラフィックを転送できるように設定します。setsebool -P httpd_can_network_connect 1
# setsebool -P httpd_can_network_connect 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow nginxサービスを再起動します。systemctl restart nginx
# systemctl restart nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
ブラウザーを使用して
http://host_name/exampleに接続すると、https://example.comの内容が表示されます。
2.5. NGINX の HTTP ロードバランサーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
NGINX リバースプロキシー機能を使用してトラフィックを負荷分散できます。この手順では、HTTP ロードバランサーとして NGINX を設定して、アクティブな接続数が最も少ないサーバーがどれかを基にして、要求を異なるサーバーに送信する方法を説明します。どちらのサーバーも利用できない場合には、この手順でフォールバックを目的とした 3 番目のホストも定義します。
前提条件
- NGINX が NGINX のインストールと準備 の説明に従ってインストールされている。
手順
/etc/nginx/nginx.confファイルを編集し、以下の設定を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow backendという名前のホストグループのleast_connディレクティブは、アクティブな接続数が最も少ないサーバーがどれかを基にして、NGINX が要求をserver1.example.comまたはserver2.example.comに送信することを定義します。NGINX は、他の 2 つのホストが利用できない場合は、server3.example.comのみをバックアップとして使用します。proxy_passディレクティブをhttp://backendに設定すると、NGINX はリバースプロキシーとして機能し、backendホストグループを使用して、このグループの設定に基づいて要求を配信します。least_conn負荷分散メソッドの代わりに、以下を指定することができます。- ラウンドロビンを使用し、サーバー全体で要求を均等に分散する方法はありません。
-
ip_hash: クライアントの IPv4 アドレスのオクテットの内、最初の 3 つ、または IPv6 アドレス全体から計算されたハッシュに基づいて、あるクライアントアドレスから同じサーバーに要求を送信します。 -
hash: ユーザー定義のキーに基づいてサーバーを判断します。これは、文字列、変数、または両方の組み合わせになります。consistentパラメーターは、ユーザー定義のハッシュ化された鍵の値に基づいて、NGINX がすべてのサーバーに要求を分散するように設定します。 -
random: 無作為に選択されたサーバーに要求を送信します。
nginxサービスを再起動します。systemctl restart nginx
# systemctl restart nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 Squid キャッシングプロキシーサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Squid は、コンテンツをキャッシュして帯域幅を削減し、Web ページをより迅速に読み込むプロキシーサーバーです。この章では、HTTP、HTTPS、FTP のプロトコルのプロキシーとして Squid を設定する方法と、アクセスの認証および制限を説明します。
3.1. 認証なしで Squid をキャッシングプロキシーとして設定 リンクのコピーリンクがクリップボードにコピーされました!
認証なしで Squid をキャッシュプロキシーとして設定できます。以下の手順では、IP 範囲に基づいてプロキシーへのアクセスを制限します。
前提条件
-
/etc/squid/squid.confファイルが、squidパッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。
手順
squidパッケージをインストールします。dnf install squid
# dnf install squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/squid/squid.confファイルを編集します。localnetアクセス制御リスト (ACL) を、プロキシーを使用できる IP 範囲と一致するように変更します。acl localnet src 192.0.2.0/24 acl localnet 2001:db8:1::/64
acl localnet src 192.0.2.0/24 acl localnet 2001:db8:1::/64Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、
/etc/squid/squid.confファイルにはlocalnetACL で指定されたすべての IP 範囲のプロキシーを使用できるようにするhttp_access allow localnetルールが含まれます。http_access allow localnetルールの前に、localnetの ACL をすべて指定する必要があります。重要環境に一致しない既存の
acl localnetエントリーをすべて削除します。以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして
443を定義します。acl SSL_ports port 443
acl SSL_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。
acl SSL_ports port port_number
acl SSL_ports port port_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow Squid が接続を確立できるポートに設定する
acl Safe_portsルールの一覧を更新します。たとえば、プロキシーを使用するクライアントがポート 21 (FTP)、80 (HTTP)、443 (HTTPS) のリソースにのみアクセスできるようにするには、その設定の以下のacl Safe_portsステートメントのみを保持します。acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、設定には
http_access deny !Safe_portsルールが含まれ、Safe_portsACL で定義されていないポートへのアクセス拒否を定義します。cache_dirパラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を設定します。cache_dir ufs /var/spool/squid 10000 16 256
cache_dir ufs /var/spool/squid 10000 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、以下が可能になります。
-
Squid は、
ufsキャッシュタイプを使用します。 -
Squid は、キャッシュを
/var/spool/squid/ディレクトリーに保存します。 -
キャッシュのサイズが
10000MB まで大きくなります。 -
Squid は、
16個のレベル 1 サブディレクトリーを/var/spool/squid/ディレクトリーに作成します。 Squid は、レベル 1 の各ディレクトリーに
256個のサブディレクトリーを作成します。cache_dirディレクティブを設定しないと、Squid はキャッシュをメモリーに保存します。
-
Squid は、
cache_dirパラメーターに/var/spool/squid/以外のキャッシュディレクトリーを設定する場合は、以下を行います。キャッシュディレクトリーを作成します。
mkdir -p path_to_cache_directory
# mkdir -p path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow キャッシュディレクトリーの権限を設定します。
chown squid:squid path_to_cache_directory
# chown squid:squid path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux を
enforcingモードで実行する場合は、squid_cache_tコンテキストをキャッシュディレクトリーに設定します。semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーがシステムで利用できない場合は、policycoreutils-python-utilsパッケージをインストールします。
ファイアウォールで
3128ポートを開きます。firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidサービスを有効にして開始します。systemctl enable --now squid
# systemctl enable --now squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
プロキシーが正しく機能することを確認するには、curl ユーティリティーを使用して Web ページをダウンロードします。
curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
curl でエラーが表示されず、index.html ファイルが現在のディレクトリーにダウンロードされている場合は、プロキシーが動作します。
3.2. LDAP 認証を使用したキャッシングプロキシーとしての Squid の設定 リンクのコピーリンクがクリップボードにコピーされました!
Squid を、LDAP を使用してユーザーを認証するキャッシングプロキシーとして設定できます。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
-
/etc/squid/squid.confファイルが、squidパッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。 -
uid=proxy_user,cn=users,cn=accounts,dc=example,dc=comなどのサービスユーザーが LDAP ディレクトリーに存在します。Squid はこのアカウントを使用して認証ユーザーを検索します。認証ユーザーが存在する場合、Squid はこのユーザーをディレクトリーにバインドして、認証を確認します。
手順
squidパッケージをインストールします。dnf install squid
# dnf install squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/squid/squid.confファイルを編集します。basic_ldap_authヘルパーユーティリティーを設定するには、/etc/squid/squid.confに以下の設定エントリーを追加します。auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389
auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下では、上記の
basic_ldap_authヘルパーユーティリティーに渡されるパラメーターを説明します。-
-b base_DNは LDAP 検索ベースを設定します。 -
-D proxy_service_user_DNは、Squid が、ディレクトリー内の認証ユーザーを検索する際に使用するアカウントの識別名 (DN) を設定します。 -
-W path_to_password_fileは、プロキシーサービスユーザーのパスワードが含まれるファイルへのパスを設定します。パスワードファイルを使用すると、オペレーティングシステムのプロセスリストにパスワードが表示されなくなります。 -f LDAP_filterは、DAP 検索フィルターを指定します。Squid は、%s変数を、認証ユーザーにより提供されるユーザー名に置き換えます。上記の例の
(&(objectClass=person)(uid=%s))フィルターは、ユーザー名がuid属性に設定された値と一致する必要があり、ディレクトリーエントリーにpersonオブジェクトクラスが含まれることを定義します。-ZZは、STARTTLSコマンドを使用して、LDAP プロトコルで TLS 暗号化接続を強制します。以下の状況で-ZZを省略します。- LDAP サーバーは、暗号化された接続にを対応しません。
- URL に指定されたポートは、LDAPS プロトコルを使用します。
- -H LDAP_URL パラメーターは、プロトコル、ホスト名、IP アドレス、および LDAP サーバーのポートを URL 形式で指定します。
-
以下の ACL およびルールを追加して、Squid で、認証されたユーザーのみがプロキシーを使用できるように設定します。
acl ldap-auth proxy_auth REQUIRED http_access allow ldap-auth
acl ldap-auth proxy_auth REQUIRED http_access allow ldap-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要http_access deny allルールの前にこの設定を指定します。次のルールを削除して、
localnetACL で指定された IP 範囲のプロキシー認証の回避を無効にします。http_access allow localnet
http_access allow localnetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして
443を定義します。acl SSL_ports port 443
acl SSL_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。
acl SSL_ports port port_number
acl SSL_ports port port_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow Squid が接続を確立できるポートに設定する
acl Safe_portsルールの一覧を更新します。たとえば、プロキシーを使用するクライアントがポート 21 (FTP)、80 (HTTP)、443 (HTTPS) のリソースにのみアクセスできるようにするには、その設定の以下のacl Safe_portsステートメントのみを保持します。acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、設定には
http_access deny !Safe_portsルールが含まれ、Safe_portsACL で定義されていないポートへのアクセス拒否を定義します。cache_dirパラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を設定します。cache_dir ufs /var/spool/squid 10000 16 256
cache_dir ufs /var/spool/squid 10000 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、以下が可能になります。
-
Squid は、
ufsキャッシュタイプを使用します。 -
Squid は、キャッシュを
/var/spool/squid/ディレクトリーに保存します。 -
キャッシュのサイズが
10000MB まで大きくなります。 -
Squid は、
16個のレベル 1 サブディレクトリーを/var/spool/squid/ディレクトリーに作成します。 Squid は、レベル 1 の各ディレクトリーに
256個のサブディレクトリーを作成します。cache_dirディレクティブを設定しないと、Squid はキャッシュをメモリーに保存します。
-
Squid は、
cache_dirパラメーターに/var/spool/squid/以外のキャッシュディレクトリーを設定する場合は、以下を行います。キャッシュディレクトリーを作成します。
mkdir -p path_to_cache_directory
# mkdir -p path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow キャッシュディレクトリーの権限を設定します。
chown squid:squid path_to_cache_directory
# chown squid:squid path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux を
enforcingモードで実行する場合は、squid_cache_tコンテキストをキャッシュディレクトリーに設定します。semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーがシステムで利用できない場合は、policycoreutils-python-utilsパッケージをインストールします。
LDAP サービスユーザーのパスワードを
/etc/squid/ldap_passwordファイルに保存し、ファイルに適切なパーミッションを設定します。echo "password" > /etc/squid/ldap_password chown root:squid /etc/squid/ldap_password chmod 640 /etc/squid/ldap_password
# echo "password" > /etc/squid/ldap_password # chown root:squid /etc/squid/ldap_password # chmod 640 /etc/squid/ldap_passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで
3128ポートを開きます。firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidサービスを有効にして開始します。systemctl enable --now squid
# systemctl enable --now squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
プロキシーが正しく機能することを確認するには、curl ユーティリティーを使用して Web ページをダウンロードします。
curl -O -L "https://www.redhat.com/index.html" -x "user_name:password@proxy.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" -x "user_name:password@proxy.example.com:3128"
curl がエラーを表示せず、index.html ファイルが現在のディレクトリーにダウンロードされている場合は、プロキシーが動作します。
トラブルシューティングの手順
ヘルパーユーティリティーが正しく機能していることを確認するには、以下の手順を行います。
auth_paramパラメーターで使用したのと同じ設定で、ヘルパーユーティリティーを手動で起動します。/usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389
# /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有効なユーザー名とパスワードを入力し、Enter を押します。
user_name password
user_name passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヘルパーユーティリティーが
OKを返すと、認証に成功しました。
3.3. kerberos 認証を使用したキャッシングプロキシーとしての Squid の設定 リンクのコピーリンクがクリップボードにコピーされました!
Squid を、Kerberos を使用して Active Directory (AD) に対してユーザーを認証するキャッシングプロキシーとして設定できます。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。
前提条件
-
/etc/squid/squid.confファイルが、squidパッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。 - Squid をインストールするサーバーが、AD ドメインのメンバーである。
手順
以下のパッケージをインストールします。
dnf install squid krb5-workstation
# dnf install squid krb5-workstationCopy to Clipboard Copied! Toggle word wrap Toggle overflow AD ドメイン管理者として認証します。
kinit administrator@AD.EXAMPLE.COM
# kinit administrator@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow Squid 用のキータブを作成し、それを
/etc/squid/HTTP.keytabファイルに保存し、HTTPサービスプリンシパルをキータブに追加します。export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab net ads keytab CREATE -U administrator net ads keytab ADD HTTP -U administrator
# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE -U administrator # net ads keytab ADD HTTP -U administratorCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: システムが (
adcli経由で) 最初にレルムを使用して AD ドメインに参加している場合、次の手順に従ってHTTPプリンシパルを追加し、squid 用のキータブファイルを作成します。HTTPサービスプリンシパルをデフォルトのキータブファイル/etc/krb5.keytabに追加し、検証します。adcli update -vvv --domain=ad.example.com --computer-name=PROXY --add-service-principal="HTTP/proxy.ad.example.com" -C klist -kte /etc/krb5.keytab | grep -i HTTP
# adcli update -vvv --domain=ad.example.com --computer-name=PROXY --add-service-principal="HTTP/proxy.ad.example.com" -C # klist -kte /etc/krb5.keytab | grep -i HTTPCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/krb5.keytabファイルをロードし、HTTP以外のすべてのサービスプリンシパルを削除し、残りのプリンシパルを/etc/squid/HTTP.keytabファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ktutilの対話型シェルで、さまざまなオプションを使用して、不要なプリンシパルをすべてキータブから削除できます。次に例を示します。ktutil: delent 1
ktutil: delent 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告SSSD または Samba/winbind がマシンアカウントのパスワードを更新すると、
/etc/krb5.keytab内のキーが更新される可能性があります。更新後、/etc/squid/HTTP.keytab内のキーは機能しなくなるため、ktutilの手順を再度実行して新しいキーをキータブにコピーする必要があります。
キータブファイルの所有者を
squidユーザーに設定します。chown squid /etc/squid/HTTP.keytab
# chown squid /etc/squid/HTTP.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: キータブファイルに、プロキシーサーバーの完全修飾ドメイン名 (FQDN) の
HTTPサービスプリンシパルが含まれていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/squid/squid.confファイルを編集します。negotiate_kerberos_authヘルパーユーティリティーを設定するには、/etc/squid/squid.conf部に以下の設定エントリーを追加します。auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COM
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は、上記の例で
negotiate_kerberos_authヘルパーユーティリティーに渡されるパラメーターを説明します。-
-k fileは、キータブファイルへのパスを設定します。squid ユーザーには、このファイルに対する読み取り権限があることに注意してください。 -s HTTP/host_name@kerberos_realmは、Squid が使用する Kerberos プリンシパルを設定します。必要に応じて、以下のパラメーターのいずれかまたは両方をヘルパーユーティリティーに渡すことによりロギングを有効にできます。
-
-iは、認証ユーザーなどの情報メッセージをログに記録します。 -dは、デバッグロギングを有効にします。Squid は、ヘルパーユーティリティーから、
/var/log/squid/cache.logファイルにデバッグ情報のログに記録します。
-
以下の ACL およびルールを追加して、Squid で、認証されたユーザーのみがプロキシーを使用できるように設定します。
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-auth
acl kerb-auth proxy_auth REQUIRED http_access allow kerb-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要http_access deny allルールの前にこの設定を指定します。次のルールを削除して、
localnetACL で指定された IP 範囲のプロキシー認証の回避を無効にします。http_access allow localnet
http_access allow localnetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして
443を定義します。acl SSL_ports port 443
acl SSL_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、ポートごとに ACL を追加します。
acl SSL_ports port port_number
acl SSL_ports port port_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow Squid が接続を確立できるポートに設定する
acl Safe_portsルールの一覧を更新します。たとえば、プロキシーを使用するクライアントがポート 21 (FTP)、80 (HTTP)、443 (HTTPS) のリソースにのみアクセスできるようにするには、その設定の以下のacl Safe_portsステートメントのみを保持します。acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、設定には
http_access deny !Safe_portsルールが含まれ、Safe_portsACL で定義されていないポートへのアクセス拒否を定義します。cache_dirパラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を設定します。cache_dir ufs /var/spool/squid 10000 16 256
cache_dir ufs /var/spool/squid 10000 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、以下が可能になります。
-
Squid は、
ufsキャッシュタイプを使用します。 -
Squid は、キャッシュを
/var/spool/squid/ディレクトリーに保存します。 -
キャッシュのサイズが
10000MB まで大きくなります。 -
Squid は、
16個のレベル 1 サブディレクトリーを/var/spool/squid/ディレクトリーに作成します。 Squid は、レベル 1 の各ディレクトリーに
256個のサブディレクトリーを作成します。cache_dirディレクティブを設定しないと、Squid はキャッシュをメモリーに保存します。
-
Squid は、
cache_dirパラメーターに/var/spool/squid/以外のキャッシュディレクトリーを設定する場合は、以下を行います。キャッシュディレクトリーを作成します。
mkdir -p path_to_cache_directory
# mkdir -p path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow キャッシュディレクトリーの権限を設定します。
chown squid:squid path_to_cache_directory
# chown squid:squid path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux を
enforcingモードで実行する場合は、squid_cache_tコンテキストをキャッシュディレクトリーに設定します。semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory
# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーがシステムで利用できない場合は、policycoreutils-python-utilsパッケージをインストールします。
ファイアウォールで
3128ポートを開きます。firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow squidサービスを有効にして開始します。systemctl enable --now squid
# systemctl enable --now squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
プロキシーが正しく機能することを確認するには、
curlユーティリティーを使用して Web ページをダウンロードします。curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" --proxy-negotiate -u : -x "proxy.ad.example.com:3128"Copy to Clipboard Copied! Toggle word wrap Toggle overflow curlがエラーを表示せず、index.htmlファイルが現在のディレクトリーに存在すると、プロキシーが機能します。
トラブルシューティングの手順
AD アカウントの Kerberos チケットを取得します。
kinit user@AD.EXAMPLE.COM
# kinit user@AD.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: チケットを表示します。
klist
# klistCopy to Clipboard Copied! Toggle word wrap Toggle overflow negotiate_kerberos_auth_testユーティリティーを使用して認証をテストします。/usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.com
# /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヘルパーユーティリティーがトークンを返す場合は、認証に成功しました。
Token: YIIFtAYGKwYBBQUCoIIFqDC...
Token: YIIFtAYGKwYBBQUCoIIFqDC...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. Squid でのドメイン拒否リストの設定 リンクのコピーリンクがクリップボードにコピーされました!
多くの場合、管理者は特定のドメインへのアクセスをブロックする必要があります。このセクションでは、Squid でドメインの拒否リストを設定する方法を説明します。
前提条件
- Squid が設定され、ユーザーはプロキシーを使用できます。
手順
/etc/squid/squid.confファイルを編集し、以下の設定を追加します。acl domain_deny_list dstdomain "/etc/squid/domain_deny_list.txt" http_access deny all domain_deny_list
acl domain_deny_list dstdomain "/etc/squid/domain_deny_list.txt" http_access deny all domain_deny_listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要ユーザーまたはクライアントへのアクセスを許可する最初の
http_access allowステートメントの前にこれらのエントリーを追加します。/etc/squid/domain_deny_list.txtファイルを作成し、ブロックするドメインを追加します。たとえば、サブドメインを含むexample.comへのアクセスをブロックして、example.netをブロックするには、以下を追加します。.example.com example.net
.example.com example.netCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要squid 設定の
/etc/squid/domain_deny_list.txtファイルを参照している場合は、このファイルは空にすることはできません。このファイルが空の場合、Squid は起動できません。squidサービスを再開します。systemctl restart squid
# systemctl restart squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. Squid サービスが特定のポートまたは IP アドレスをリッスンするように設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Squid プロキシーサービスは、すべてのネットワークインターフェイスの 3128 ポートでリッスンします。ポートを変更し、Squid が特定の IP アドレスをリッスンするように設定できます。
前提条件
-
squidパッケージがインストールされている。
手順
/etc/squid/squid.confファイルを編集します。Squid サービスがリッスンするポートを設定するには、
http_portパラメーターにポート番号を設定します。たとえば、ポートを8080に設定するには、以下を設定します。http_port 8080
http_port 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow Squid サービスがリッスンする IP アドレスを設定するには、
http_portパラメーターに IP アドレスとポート番号を設定します。たとえば、Squid が、3128ポートの IP アドレス192.0.2.1でのみリッスンするように設定するには、以下を設定します。http_port 192.0.2.1:3128
http_port 192.0.2.1:3128Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の
http_portパラメーターを設定ファイルに追加して、Squid が複数のポートおよび IP アドレスでリッスンするように設定します。http_port 192.0.2.1:3128 http_port 192.0.2.1:8080
http_port 192.0.2.1:3128 http_port 192.0.2.1:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Squid が別のポートをデフォルト (
3128) として使用するように設定する場合は、以下のようになります。ファイアウォールのポートを開きます。
firewall-cmd --permanent --add-port=port_number/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=port_number/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow enforcing モードで SELinux を実行した場合は、ポートを
squid_port_tポートタイプ定義に割り当てます。semanage port -a -t squid_port_t -p tcp port_number
# semanage port -a -t squid_port_t -p tcp port_numberCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanageユーティリティーがシステムで利用できない場合は、policycoreutils-python-utilsパッケージをインストールします。
squidサービスを再開します。systemctl restart squid
# systemctl restart squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow