Contents
概要
Webサーバー(Apache)を構築します。本稿ではHTTPSの有効化まで取り上げます。
前提条件
OS
CentOS Stream 8を使用します。
SELinux
有効です。無効にする場合はこちらを参照して下さい。
Firewalld
無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。
標準ポート番号
TCP:80 (HTTP), TCP:443 (HTTPS)
設定
インストール
Webサーバーをインストールします。
[root@centos ~]# dnf install httpd mod_ssl
サービス起動設定
Apacheはインストール直後の状態でも起動できます。このまま/var/www/htmlにコンテンツを保存すれば公開されます。一旦、Webサーバーを起動します。
[root@centos ~]# systemctl enable --now httpd.service [root@centos ~]# systemctl status httpd.service
起動時に/var/log/messagesに下記のログが出力されますが、後述のServerNameを設定することで以降は出力されません。
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe9f:695f. Set the 'ServerName' directive globally to suppress this message
/etc/httpd/conf/httpd.conf
httpd.confを直接編集しても問題ありませんが、httpd.confはconf.dディレクトリ内に*.confが存在する場合、それを読み込む設定がされています(下記の設定値)。
IncludeOptional conf.d/*.conf
今回はhttpd.confを編集せずに、新規に/etc/httpd/conf.d/my.httpd.confを作成してApacheの設定を行います(my.httpd.confの設定が優先されます)。方針にもよりますが設定ファイルは小さいほうが楽です。httpd.confで設定する場合は読み替えて下さい。尚、Apacheの設定は比較的セキュリティ関連が多くなります。こちらを参考にさせて頂きました。
[root@centos ~]# vi /etc/httpd/conf.d/my.httpd.conf
ServerAdmin webmaster@si1230.com
ServerName www.si1230.com:80
<Directory "/var/www/html">
Options None
</Directory>
AddDefaultCharset Off
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset X-Powered-By
- ServerAdmin
- 管理者のメールアドレスを指定します。
- ServerName
- Webサーバーが自分自身を示すときに使うホスト名とポートです。WebサーバーのFQDNとポート番号を設定します。未設定の場合はhostsファイルかDNSで逆引きを試行しますが、Apacheの推奨は明示的にServerNameを設定します。
- Options None
- ディレクトリに対してのオプション設定です。デフォルト値はIndexes FollowSymLinksですが、Noneにすると全てのオプションが無効化されます。必要に応じてオプションを有効にすれば良いでしょう。
- AddDefaultCharset
- 文字コードの設定でhtmlのmetaタグより優先されます。デフォルト値はUTF-8ですが、日本語環境では文字化けするケースが多い為、Offに変更します。
- ServerTokens
- Prodにするとレスポンスヘッダーに含まれるWebサーバーの情報を最小限(Apacheであることのみが表示)にします。
- ServerSignature
- Offにするとエラーページのフッターからバナー情報を削除します。
- TraceEnable
- OffにするとTRACEメソッドを無効化します(XST攻撃対策)。
- Header unset X-Powered-By
- PHP等のバージョンを非表示にします。
/etc/httpd/conf.d/welcome.conf
welcome.confはテストページの設定です。テストページはDocumentRootに何もない場合に表示されます。通常運用では不要な為、無効化します。単に削除してもアップデート時に元に戻る為、空のファイルに変更します。
[root@centos ~]# echo -n "" > /etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.d/ssl.conf
ssl.confのデフォルト値
コメント行等を削除したssl.confは下記の通りです。
Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLCryptoDevice builtin <VirtualHost _default_:443> ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
ssl.confの設定
ssl.confを作成します。主に証明書の指定となりますので自己署名証明書を指定する場合はこちらを参照して下さい。尚、SELinuxが有効な状態では証明書のパスが決められている為、既定の場所以外に配置する場合はSELinuxの変更が必要です。
[root@centos ~]# vi /etc/httpd/conf.d/ssl.conf Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLCryptoDevice builtin <VirtualHost _default_:443> ServerName www.si1230.com:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/private/server.key SSLCertificateChainFile /etc/pki/tls/certs/inter.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
- ServerName
- httpd.confの説明と同じです。
- SSLCertificateFile
- サーバー証明書を指定します。
- SSLCertificateKeyFile
- サーバー証明書の秘密鍵を指定します。
- SSLCertificateChainFile
- 必要に応じて中間証明書を指定します。デフォルトはコメントアウトされています。大抵、正式な証明書では中間証明書が必要です。
サービス再起動
設定を反映させる為、サービスを再起動します。
[root@centos ~]# systemctl restart httpd.service