◇本稿の構成。
〇Webサーバー
・ホスト名:web1.stream.server
・アドレス:192.168.128.100/24
・DNS:192.168.128.101
・ゲートウェイ:192.168.128.1
〇DNSサーバー
・ホスト名:host1.stream.server
・アドレス:192.168.128.101/24
・DNS:192.168.128.101
・ゲートウェイ:192.168.128.1
〇クライアント(出来れば準備)
・ホスト名:client
・アドレス:192.168.128.110/24
・DNS:192.168.128.101
・ゲートウェイ:192.168.128.1
Webサーバーとクライアントは「簡単なWebサーバーを構築」で作成したマシンを利用します。本稿を行う前に簡易的なWebサーバーの構築が終了している事を前提とします。
WebサーバーとクライアントのDNSはDNSサーバーのアドレスに変更してください。
3台仮想マシンを起動するのが困難な環境の場合、DNSサーバーをクライアントの代わりに使用しても構いません。
◇hostsファイルの修正。
先ずはWebサーバーとクライアントマシンのhostsファイルに記入したWeb.stream.serverの情報をコメントアウトします。名前解決をDNSサーバーで行う為、この情報は不要になります。
[root@client ~]# vi /etc/hosts
#192.168.128.100 web.stream.server
◇DNSサーバーの追加設定
「試しに簡単なWebサーバーを構築してみよう。」ではDNSサーバー構築前であった為、hostsファイルで代替しましたが、本稿ではDNSサーバーを利用する為、名前解決が行えるようにDNSサーバーの正引きと逆引きのゾーンファイルにWebサーバーの情報を追加します。
・DNSサーバーの正引きゾーンファイルの設定追加。
[root@host1 ~]# vi /var/named/stream.server.zone
$TTL 86400
@ IN SOA host1.stream.server. root.stream.server. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS host1.stream.server.
IN MX 10 mail1.stream.server.
IN MX 20 mail2.stream.server.
host1 IN A 192.168.128.101
host2 IN A 192.168.128.102
mail1 IN A 192.168.128.101
mail2 IN A 192.168.128.102
web1 IN A 192.168.128.100 #←Webサーバーを追加
・逆引きゾーンファイルの設定追加。
[root@host1 ~]# vi /var/named/128.168.192.in-addr.arpa.zone
$TTL 86400
@ IN SOA host1.stream.server. root.stream.server. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS host1.stream.server.
IN A 255.255.255.0
101 IN PTR host1.stream.server.
102 IN PTR host2.stream.server.
101 IN PTR mail1.stream.server.
102 IN PTR mail2.stream.server.
100 IN PTR web1.stream.server. #←Webサーバーを追加
・書式が正しいかチェックを行います。
チェックを行い、エラーやアンノウンが表示されない事を確認します。
[root@host1 ~]# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone stream.server/IN: loaded serial 0
zone 128.168.192.in-addr.arpa/IN: loaded serial 0
特に問題が無ければDNSサーバーを再起動して設定を反映させます。
・DNSサービスーの再起動
[root@host1 ~]# systemctl restart named-chroot
[root@host1 ~]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; ve>
Active: active (running) since Fri 2022-06-03 01:46:10 JST; 9s ago
(略)
DNSサーバーの設定が終了したら次はWebサーバーの設定を行います。
◇Webサーバーの設定
・mod-sslのインストール。
SSL/TLS化するにはmod-sslというツールを使用します。以下の方法でインストールを行いましょう。
[root@web1 ~]# dnf install -y mod_ssl
メタデータの期限切れの最終確認: 0:37:30 時間前の 2022年06月11日 16時25分37秒 に 実施しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
mod_ssl x86_64 1:2.4.53-1.el9 appstream 111 k
(略)
インストール済み:
mod_ssl-1:2.4.53-1.el9.x86_64
完了しました!
・httpdサービスの再起動
mod_sslインストール後、Apacheの再起動が必要になります。
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# systemctl is-active httpd
active
◇自己署名証明書
SSL/TLSによる暗号化通信では証明書が必要な為、サーバー証明書を作成します。テスト用の為、自己署名証明書を利用します。
[root@web1 ~]# NAME=web1.stream.server
以下のコマンドは改行せず一行で入力してください。
[root@web1 ~]# openssl req -x509 -days 36500 -newkey rsa:2048 -nodes -out ${NAME}.crt -keyout ${NAME}.key -subj "/C=JP/ST=Tokyo/L=null/O=null/OU=null/CN=${NAME}/"
コマンド実行後、実際に自己証明書ファイルが作成されているか確認し、中身も確認出来たらファイルを移動します。
[root@web1 ~]# ls *.crt *.key
web1.stream.server.crt web1.stream.server.key
[root@web1 ~]# openssl x509 -text -noout -in web1.stream.server.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
(略)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = JP, ST = Tokyo, L = null, O = null, OU = null, CN = web1.stream.server
(略)
[root@web1 ~]# mv web1.stream.server.crt /etc/pki/tls/certs/
[root@web1 ~]# mv web1.stream.server.key /etc/pki/tls/private/
・仮想ホストの設定
mod_sslをインストールすると、/etc/httpd/conf.d/ssl.confという設定ファイルが作成されます。このファイルに仮想ホストに対してSSL/TLSを使う設定を行います。
[root@web1 ~]# cp -p /etc/httpd/conf.d/ssl.conf{,.org}
[root@web1 ~]# vi /etc/httpd/conf.d/ssl.conf
(略)
<VirtualHost _default_:443>
#以下の行の#を外します。
DocumentRoot "/var/www/html"
ServerName www.example.com:443
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt この行を以下の内容に変更
SSLCertificateFile /etc/pki/tls/certs/web1.stream.server.crt
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key この行を以下の内容に変更
SSLCertificateKeyFile /etc/pki/tls/private/web1.stream.server.key
・ファイアウォールなどセキュリティの制限解除。
ファイアウォールの設定解除は以下のコマンドで行います。
[root@web1 ~]# firewall-cmd --add-service=https --permanent
[root@web1 ~]# firewall-cmd --reload
success
・サービスの再起動とファイルのコンテキストの修正。
[root@web1 ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
上記メッセージが表示された場合はhttpdが起動できていないので、以下の様にログを確認します。
[root@web1 ~]# tail /var/log/messages
Jun 11 21:24:40 web1 setroubleshoot[6325]: SELinux により、/usr/sbin/httpd によ る getattr アクセスが、ファイル /etc/pki/tls/certs/web1.stream.server.crt で拒否されました。 完全な SELinux メッセージを見るには、sealert -l cb132cb6-e88c-41ce-918d-98e90abe1805 を実行します
Jun 11 21:24:40 web1 setroubleshoot[6325]: SELinux により、/usr/sbin/httpd によ る getattr アクセスが、ファイル /etc/pki/tls/certs/web1.stream.server.crt で拒否されました。#012#012***** プラグイン restorecon (99.5 信頼性) による示唆 ***********************************#012#012ラベルを修正する場合。#012/etc/pki/tls/certs/web1.stream.server.crt のデフォルトラベルは cert_t のはずです。#012このよう にします: restorecon を実行することができます。親ディレクトリーにアクセスするの に必要な権限がないため、要求されたアクセスが停止した可能性があります。この場合は、以下のコマンドを状況に応じて適切に変更します。#012そして、以下を実行します: #012# /sbin/restorecon -v /etc/pki/tls/certs/web1.stream.server.crt#012#012***** プラグイン catchall (1.49 信頼性) による示唆 *************************************#012#012httpd に、 web1.stream.server.crt file の getattr アクセスがデフォルトで許可されるべきと考える場合。#012このようにします: バグとして報告してください。 #012ローカルのポリシーモジュールを生成すると、#012 このアクセスを許可することができます。#012そして、以下を実行します: #012以下を実行して、このアクセスを許可します:#012# ausearch -c 'httpd' --raw | audit2allow -M my-httpd#012# semodule -X 300 -i my-httpd.pp#012(以下略)
上記メッセージにより、SELinuxにより/etc/pki/tls/certs/web1.stream.server.crtが拒否されたのが原因である事が分かります。また、同様の理由で/etc/pki/tls/certs/web1.stream.server.keyが拒否されます。
上記の場合、メッセージに対処方法が書いてあるので、メッセージを参考に以下のコマンドでコンテキストを修正します。
[root@web1 ~]# restorecon -v /etc/pki/tls/certs/web1.stream.server.crt
Relabeled /etc/pki/tls/certs/web1.stream.server.crt from unconfined_u:object_r:admin_home_t:s0 to unconfined_u:object_r:cert_t:s0
[root@web1 ~]# restorecon -v /etc/pki/tls/private/web1.stream.server.key
Relabeled /etc/pki/tls/private/web1.stream.server.key from unconfined_u:object_r:admin_home_t:s0 to unconfined_u:object_r:cert_t:s0
コンテキスト修正後、再度httpdサービスを再起動します。
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor pre>
Active: active (running) since Sat 2022-06-11 21:48:59 JST; 25s ago
これでhttpdサービスが正常に起動するようになりました。
・Webサーバーのブラウザからhttpsページへアクセス。
続いてはhttps化したWebページへアクセス可能か検証を行う為に、Webサーバーの仮想マシン上のGUIからWebブラウザ(Firefox)を立ち上げ、URLに以下のアドレスを入力します。
https://web1.stream.server
初めてアクセスした際、ブラウザが”Warning Potantial Security Risk Ahead.(警告:潜在的なリスクあり)”と警告を発します。
これは自己証明書を使用したWebサイトは信用出来ない為に発せられる警告です。
インターネットでこの警告が発生られた場合、本来はアクセスすべきではありませんが、今回の様にテストで作成したWebページや、社内サイトなどは信頼して構いません。(通常、証明書は有料なので検証環境やイントラネットでは自己証明書で済ます場合が多いかと思います。Let’s Encryptを使用する方法もありますが、本稿では触れません)
ブラウザ上の”Advanced...(詳細情報)”をクリックし、ブラウザの下に移動し”Accept the Risk and Continue(危険性を承知で続行)”をクリックし、サイトにアクセスします。
過去に作成した「This is Web Server Test Page on web1.stream.server」が表示されれば成功です。URLがhttpsである事を必ず確認してください。
・クライアントマシンから動作確認。
クライアントマシン(又はDNSサーバー)でも上記と同じ方法でhttps://web1.stream.serverにアクセスします。
「簡単なWebサーバーを構築」で作成した「This is Web Server Test Page on web1.stream.server」が表示されれば成功です。URLがhttpsである事を必ず確認してください。
以上でHTTPSサーバーの設定が終了しました。