www.smiyasaka.com は、 2022 年 11月から Oracle LInux 8.X にOSを変更しました。

● Oracle Linux 8.X httpd-2.4.37-XX の ●
●  httpd.conf・ssl.conf 編集・設定・起動  ●

1 2,750 1   

httpd.conf・ssl.conf 以外の設定については、 「 Oracle Linux 8.X httpd-2.4.54 のインストールと自宅サーバ構築 」を参照してください。

ここでのサーバ構築は、ファイアウォール有効( SELinux = enforcing )を前提にして行っています。
mod_ssl パッケージをインストールして CentOS 8 から、標準でサポートされている 圧縮処理 Brotli と SSL, http2 も使用して httpd のサーバを構築します。

httpd-2.4.59 と httpd-2.4.37 は、切り替えて使用できるようにもしています。

動作させるホームページは、私が今使用しているこのホームページを完璧に動かす事を目標にしています。

私が今使用しているこのホームページでは、SSI・CGI 使用と Alias 機能によるユーザディレクトリへの アクセスとプログラムの実行をさていますので、それらも実現させます。

認証鍵の証明書の取得は、無償の Let's Encrypt を使用します。
無償の Let's Encrypt 関しての詳細は、[ CentOS 7.X のインストールとサーバ構築 ]の [ 10-3. apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の設定 ]を参照してください。

※ 注 意 事 項 ※ を見る[ここをクリック]

目    次
[○○○○]のクリックで、その内容が目次の下に表示、再度クリックで非表示になります。

1. [ httpd-2.4.37-XX + zgip httpd.conf の 編集・設定・起動 ] [ httpd-2.4.37-XX + zgip httpd.conf の 編集・設定・起動 非表示 ]
2. [ httpd-2.4.37-XX + Brotli + http2 ssl.conf の 編集・設定 ] [ httpd-2.4.37-XX + Brotli + http2 ssl.conf の 編集・設定 非表示 ]
3. [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 ] [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 非表示 ]

1. httpd-2.4.37-XX + zgip の 編集・設定・起動

※※※ 注意事項 ※※※

下記の設定で使用している www.smiyasaka.com と smiyasaka.com は、私のドメイン名です。
コマンドをコピーする時には、あなたのドメインに変更して使用してください。



dnf でのインストールでは、httpd-2.4.37-XX のバージョンが標準仕様になっています。
httpd-2.4.37-XX の XX は、、2020年7月現在 21 に成っています。


1. httpd-2.4.37-XX と httpd-SSL のインストール

  先ずは、SSL 無しで動作確認しますが、インストールは、httpd-2.4.37-XX と httpd-SSL を下記コマンドで行います。

  
dnf -y install mod_ssl httpd-devel

  この結果、下記の5個のパッケージがインストールされます。

   apr-devel-1.6.3-12.el8.x86_64
   apr-util-devel-1.6.1-6.el8.x86_64
   httpd-devel-2.4.37-51.0.1.module+el8.7.0+20778+02173b8e.x86_64
   libdb-devel-5.3.28-42.el8_4.x86_64
   openldap-devel-2.4.46-18.el8.x86_64

2. httpd の関連ディレクトリのパス

  httpd の設定ファイル     : /etc/httpd/conf
  ssl.conf の設定ファイル    : /etc/httpd/conf.d
  httpd の実行ファイル     : /usr/sbin
  httpd のログファイル     : /etc/httpd/logs
  Web ページ用HTMLファイル   : /var/www/html
  Web で利用する CGI,SSI ファイル : /var/www/cgi-bin

3. LoadModule の有効・無効の設定

httpd-2.4.37-XX の httpd.conf には、LoadModule の行が有りませんが、LoadModule は、
59行目 Include conf.modules.d/*.conf の設定で、
           /etc/httpd/conf.modules.d/00-base.conf とそ の他の conf の設定ファイルを読込む設定になっています。


その他の conf ファイル名

00-dav.conf
00-lua.conf
00-mpm.conf
00-optional.conf
00-proxy.conf
00-ssl.conf
00-systemd.conf
01-cgi.conf
10-h2.conf
proxy_h2.conf

今回は各 conf の LoadModule の有効・無効の設定は、ここでは、特に何もしないで構築します。
------------------------------------------------------------------------------

4. httpd.conf の編集

設定は、html, CGI, SSI を DocumentRoot とユーザホームディレクトリで動作させるようにしています。
原本は、保存しておきます。

 
cp /etc/httpd/conf/httpd.conf /home/miyasaka/httpd-2.4.37.conf.bak

  vi /etc/httpd/conf/httpd.conf


 69行目あたり

User apache
Group apache
  ↓  ↓
User ○○○○    ○○○○は、インストール時のユーザー名
Group ○○○○   ( 私は、Oracle Linux 8.X の登録ユーザー名を使用しています。)

 
※※※ 注意 ※※※
  (1) User・Group 名は、初期値 apache ですが、Alias を使うことから、Oracle Linux 8.X の登録ユーザー名に変更します。
 
このままだと、SSI・CGI・Alias 等は、動作しませんので、User apache を User ○○○○のグループに下記コマンドで、apache を参加させます。

  
usermod -aG apache ○○○○

  確認は、下記コマンドで行います。

  
id  ○○○○

  uid=1000(○○○○)  gid=1000(○○○○)  groups=1000(○○○○),10(wheel),48(apache)

  
(2) Alias によるユーザホームディレクトリの参照・プログラムの実行は、(1)を実行させないとできません。

 89行目あたり

#ServerAdmin root@localhost   ○○○○@○○○○は、あなたのメールアドレス
  ↓  ↓  ↓
ServerAdmin ○○○○@○○○○

 98行目あたり

#ServerName www.example.com:80    ○○○○は、サーバ構築時に設定したホスト名
  ↓  ↓  ↓
ServerName ○○○○:80   ここは、設定しないとエラーになります。

 105~108行目あたり この位置では不要なのでコメントアウトします。

#<Directory />
# AllowOverride none
# Require all denied
#</Directory>

 122行目あたり

DocumentRoot "/var/www/html/"    ホームページプログラム保存先の指定
  ↓  ↓  ↓
DocumentRoot "/var/www/html/www.smiyasaka.com"
   www.smiyasaka.com は、私のサーバ機の場合です。貴方の環境に合わせてください。

 127~131行目あたり この位置では不要なのでコメントアウトします。

#<Directory "/var/www"/>
#  AllowOverride None
#  Allow open access:
#  Require all granted
#</Directory>

 147行目あたり Indexesを削除してSSIとCGIを有効にする。
   Includes : SSI の利用を許可する。
   ExecCGI : CGI の利用を許可する。
   -Indexes : インデックス表示を無効にする。
    MultiViews : 多言語対応のホームページでない時には不要です。

Options Indexes FollowSymLinks

  ↓  ↓  ↓
Options Includes FollowSymLinks ExecCGI
Options -Indexes

 154行目あたり   htaccessの使用が出来る様に成ります。

AllowOverride None

  ↓  ↓  ↓
AllowOverride All

 166行目あたり
   インデックスファイルを設定 index.cgi を追加する
   トップページが index.cgi でも実行する様にします。

DirectoryIndex index.html

  ↓  ↓  ↓
DirectoryIndex index.html index.cgi

 173~175行目あたり

ForceType text/html :
HTML文書の拡張子 .htm .html をMIMEタイプの拡張子 text/html として扱われます。

SetOutputFilter INCLUDES :
SSI処理のための mod_include モジュールで提供される
INCLUDES フィルタを 出力フィルタとして挿入、拡張子 .html で SSI を有効にします。

<Files ".ht*">
Require all denied
</Files>
  ↓  ↓  ↓
<Files *.html>
ForceType text/html
SetOutputFilter INCLUDES
</Files>

 184行目あたり
ErrorLog "logs/error_log"
  ↓  ↓  ↓
#ErrorLog "logs/error_log"

 219行目あたり
CustomLog "logs/access_log" combined
  ↓  ↓  ↓
#CustomLog "logs/access_log" combined
Include conf.d/httpd-log.conf
   <---- 別モジュールとし作成します。

 234行目あたり
# Alias /webpath /full/filesystem/path

  ↓  ↓  ↓
Alias "/home" "/home/miyasaka/www"   <---- 最後の / は、入れない
# .cgi .pl を有効にする。ここに書込まないと無効になる。
<Directory "/home/miyasaka/www">>
    AllowOverride None
    Options Includes FollowSymLinks ExecCGI
    AddHandler cgi-script .cgi .pl
    Require all granted
   <---- これを入れないと動かない
</Directory>

 261行目あたり コメントアウト
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

  ↓  ↓  ↓
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

 257~261行目あたり コメントアウト
#<Directory "/var/www/cgi-bin">>
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>

 296行目あたり
    #を取り perl の拡張子 .pl を追加する

AddHandler cgi-script .cgi

  ↓  ↓  ↓
AddHandler cgi-script .cgi .pl

 305~306行目あたり
    #を取り .htmlの追加 SSI の実行ファイルを .html をOKにします。

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml
  ↓  ↓  ↓
AddType text/html .shtml .html
AddOutputFilter INCLUDES .shtml .html

 318行目あたり
   コメントアウト これを忘れると、ホームページの表示で文字化けが発生します。
 ( 一般的に、ホームページのヘッダー部分で文字コードを指定している為です。)

AddDefaultCharset UTF-8

  ↓  ↓  ↓
AddDefaultCharset Off

 355行目あたり 先ずは、コメントアウトします。
IncludeOptional conf.d/*.conf

  ↓  ↓  ↓
#IncludeOptional conf.d/ssl.conf

以下は、最終行(356)に追加する。

圧縮処理は、zgip を使用します

Include conf.d/httpd-zgip.conf   <---- 別モジュールとし作成します。
#--------------------------------------------------
# セキュリティ対策のため、最終行に追加しておきます。
# サーバ情報(バージョン)の非表示
ServerTokens Prod
# サーバ署名(バージョンとサーバ名)のOFF
ServerSignature Off
------------------------------------------------------------------------------
5. 別モジュールの作成

  〇 httpd-log.conf の新規作成

    空の httpd-log.conf ファイルを作成します。

    touch /etc/httpd/conf.d/httpd-log.conf

    vi コマンドで下記モジュール( log_config_module )の設定条件を書き込みます。

    vi /etc/httpd/conf.d/httpd-log.conf

    下記を貼り付け(コピペ)ます。


<IfModule log_config_module>
#
#---------------------------------------------------------------------
# 不要なログの記録をさせない設定
#---------------------------------------------------------------------
#
# 拡張子による制限
SetEnvIf Request_URI\
".(gif)|(jpg)|(jpeg)|(png)|(bmp)|(ico)|(css)|(swf)$" no-logfile
#
#内部からのアクセスをログに記録しない対策
# IPアドレスによる制限 ローカル
SetEnvIf Remote_Addr "192.168.0." no-logfile
#
# サーチエンジンのログは取らない。
SetEnvIf User-Agent "Gigabot" no-logfile
SetEnvIf User-Agent "Googlebot" no-logfile
SetEnvIf User-Agent "MJ12bot" no-logfile
SetEnvIf User-Agent "msnbot" no-logfile
SetEnvIf User-Agent "psbot" no-logfile
SetEnvIf User-Agent "TurnitinBot" no-logfile
SetEnvIf User-Agent "Yahoo! Slurp" no-logfile
SetEnvIf User-Agent "Zealbot" no-logfile
#
# ワームによる制限のログは取らない。
SetEnvIf Request_URI "default\.ida" no-logfile
SetEnvIf Request_URI "null\.ida" no-logfile
SetEnvIf Request_URI "NULL\.IDA" no-logfile
SetEnvIf Request_URI "cmd\.exe" no-logfile
SetEnvIf Request_URI "root\.exe" no-logfile
SetEnvIf Request_URI "Admin\.dll" no-logfile
SetEnvIf Request_URI "^/_mem_bin/" no-logfile
SetEnvIf Request_URI "^/_vti_bin/" no-logfile
SetEnvIf Request_URI "^/c/" no-logfile
SetEnvIf Request_URI "^/d/" no-logfile
SetEnvIf Request_URI "^/msadc/" no-logfile
SetEnvIf Request_URI "^/scripts/" no-logfile
#
# CGIディレクトリ
SetEnvIf Request_URI "^/cgi-bin/" no-logfile

# 巡回ロボットがアクセスする robots.txt
SetEnvIf Request_URI "robots\.txt" no-logfile
#
# 長いURLへの対処
SetEnvIf Request_Method\
"(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" logfile
SetEnvIf Request_Method "(OPTIONS)" no-logfile
#CustomLog logs/ssl_access_logs combined env=!no-logfile
#------------------------------------------------------------------
# Apacheのログローテートの 86400 540 の意味
# ローテートする周期を"秒"で指定します。
# 86400 ---> 24時間周期で行う指示 60秒 × 60分 × 24時間 = 86400秒
# 540  ---> Apacheの時間管理は、UTC なので
# 日本時間用のオフセット値 60分 × 9 = 540分
#
# ログファイルは、/var/log/httpd/ に
# smiyasaka_access_log_yyyymmdd( 年月日 )のファイル名で保存されます。
#------------------------------------------------------------------
CustomLog "|/usr/sbin/rotatelogs \
/var/log/httpd/
smiyasaka_access_log_%Y%m%d 86400 540" combined env=!no-logfile
#
</IfModule>



  〇 アクセスログの確認

ログファイルの格納ディレクトリ /var/log/httpd/ は、属性変更しないと読めません。
下記コマンドで、属性変更します。


   chmod 766 -R /var/log/httpd/ 


  〇 httpd-zgip.conff の新規作成

    空の httpd-zgip.conf ファイルを作成します。

    touch /etc/httpd/conf.d/httpd-zgip.conf

    vi コマンドで下記モジュールの設定条件を書き込みます。

    vi /etc/httpd/conf.d/httpd-zgip.conf

    下記を貼り付け(コピペ)ます


<IfModule mod_deflate.c>
#---------------------------------------------------------------
# 転送データの圧縮設定(画像以外全て圧縮する)
#実際の圧縮率は、1 も 3 も大差ありません
#---------------------------------------------------------------
# 圧縮レベル 1 に設定
DeflateCompressionLevel 1
#
# 全てを圧縮する設定
SetOutputFilter DEFLATE
#
# gzip圧縮に対応していない古いブラウザを除外
# Netscape 4.x has some problems...
# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# 送信先ブラウザがMSIEの場合は全て圧縮する
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
#
# 画像以外全て圧縮する
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
#
# Make sure proxies don't deliver the wrong content
# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
Header append Vary User-Agent env=!dont-vary
# html や css, js, javescript などは個別指定
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/js
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/js
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
#
# 圧縮の確認用ログ設定
# 不要になったら、# で無効にしておく事。
# Deflateが有効になっているか確認するログの出力
#
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
CustomLog "logs/deflate_log" deflate
</IfModule>


6. sed コマンドによる一括編集

下記は、上記の各設定変更を sed コマンドで作成した httpd.conf の一括編集コマンドです。
編集時の行指定は、タイトル部を除いて一切していません。


cp /etc/httpd/conf/httpd.conf
/home/miyasaka/httpd-2.4.37.conf.bak

sed -i -e "1s/^#/# *** CentOS8\.X httpd-2\.4\.37 Edited httpd\.conf ***/
s/User apache/User
miyasaka/
s/Group apache/Group
miyasaka/
#
s/ServerAdmin root@localhost/ServerAdmin
sample@hotmail\.co\.jp/
s/#ServerName www\.example\.com:80/ServerName
sample:80/
#
/# <Directory> blocks below/,/# below/s/<Directory \/>/#<Directory \/>/
/# <Directory> blocks below/,/# below/s/\ AllowOverride/# AllowOverride/
/# <Directory> blocks below/,/# below/s/\ Require/# Require/g
/# <Directory> blocks below/,/# below/s/<\/Directory/#<\/Directory>/
#
#------------------------------------------------------------------
# DocumentRoot の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
s/DocumentRoot \"\/var\/www\/html\"/DocumentRoot \"\/var\/www\/html\/
www.smiyasaka.com\"/g

#
/<Directory \"\/var\/www\">/,/# Further relax access/s/^/#/
#------------------------------------------------------------------
# SSI, CGI の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
#
s/Options Indexes FollowSymLinks/Options Includes FollowSymLinks ExecCGI\n\
     Options -Indexes/
s/AllowOverride None/AllowOverride All/
#
/DirectoryIndex index\.html/s/$/ index\.cgi/
#
s/<Files \"\.ht\*\">/<Files \*\.html>/
/<Files \*\.html>/,/<\/Files>\/html/s/Require all denied/ForceType text\/html\n\
SetOutputFilter INCLUDES/g
#
/ErrorLog \"logs\/error_log\"/s/^/#/
/CustomLog \"logs\/access_log\"/s/^/#/
/CustomLog \"logs\/access_log\" combined/a\
#---------------------------------------------------------------------\n\
#  不要なログの記録をさせない設定\n\
#---------------------------------------------------------------------\n\
Include conf\.d\/httpd-log\.conf\n\
#\n\
#
#------------------------------------------------------------------
#  Alias が不要な場合は、削除して下さい。( ここは、コメントです。)
#------------------------------------------------------------------
s/# Alias \/webpath \/full\/filesystem\/path/Alias \"\/home\" \"\/home\/
miyasaka\/www\"\n\
# \.cgi \.pl を有効にする。ここに書込まないと無効になる。\n\
<Directory \"\
/home\/miyasaka\/www\">\n\
    AllowOverride None\n\
    Options Includes FollowSymLinks ExecCGI\n\
    AddHandler cgi-script \.cgi \.pl\n\
    Require all granted\n\
<\/Directory>/
#-------------------------------------------------------------------
/ScriptAlias \/cgi-bin/s/^/#/
#
#
/<Directory \"\/var\/www\/cgi-bin\">/,/<\/Directory>/s/^/#/
#
s/#AddHandler cgi-script \.cgi/AddHandler cgi-script \.cgi \.pl/g
#
/\.shtml/s/$/ \.html/
#
# AddDefaultCharset UTF-8 --> Off
s/UTF-8/Off/
#
# SSL を使用する時
#/IncludeOptional/s/*\.conf/ssl\.conf/
#
# SSL を使用しない時
/IncludeOptional/s/^/#/
#
$a#---------------------------------------------------------------------\n\
#  圧縮処理( zgip )の設定\n\
#---------------------------------------------------------------------\n\
#\n\
Include conf\.d\/httpd-zgip\.conf\n\
#\n\
#---------------------------------------------------\n\
# セキュリティ対策のため、最終行に追加しておきます。\n\
# サーバ情報\(バージョン\)の非表示\n\
ServerTokens Prod\n\
# サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off" /etc/httpd/conf/httpd.conf


. ホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
( /var/www/html/www.smiyasaka.com は、私の場合の DocumentRoot です。)

  
mkdir -p /var/www/html/www.smiyasaka.com; \
  chown -R miyasaka:miyasaka /var/www/; \
  chmod 777 /var/www/html/www.smiyasaka.com


7. 設定ファイル( httpd.conf )の文法エラーチェックコマンド

  
httpd -t

Syntax OKで終われば、OKです。

8. ここで、 httpd.conf へ設定したドキュメントのルート( DocumentRoot と 別ディレクトリ)へ   ホームページのファイルデータを書き込みます。

  下記は、ホームページ表示テスト用のプログラムです。 SSI・CGI もテストするようにしています。

  [ ホームページテストプログラム ] の詳細は、

             [ここをクリック]してください。

※※ 注意事項 ※※
SELinux 有効の時には、下記のポリシーを設定します。
下記ポリシーを設定しないと Apache から、ホームディレクトリ( 別ドキュメントルート )での 公開が出来なくなります。

setsebool -P httpd_enable_homedirs 1;\
firewall-cmd --reload


9. httpd を systemctl コマンドで起動する。

ファイアウォールの有効状態では、この操作だけホームページを見ることは、できません。

「 3. SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 」を参照して丁寧にポリシーの設定をしてください。

  
systemctl start httpd

   # が表示すれば、OKです。

10. ホームページは、表示したが下記写真の様に SSI・CGI が[an error occurred while processing this directive]になり、動作していない時の処置

これは、httpd.conf の設定後、設定したユーザグループに apache を参加させてないために起こる現象です。
下記コマンドで、設定したユーザグループに apache を参加さます。


  
usermod -aG apache ○○○○

  確認は、下記コマンドで行います。

  
id  ○○○○

  uid=1000(○○○○)  gid=1000(○○○○)  groups=1000(○○○○),10(wheel),
48(apache)

 ※※ 参考情報 ※※

httpd.conf のユーザ・グループは、 apache ままでも SSI・CGI は、動作します。

しかし、Alias によるホームディレクトリの参照・プログラムのが出来なくなります。
ホームディレクトリのプログラムを実行させると下記の写真はの様に[ Forbidden ] 閲覧禁止に成ってしまいます。

原因は、Apache にホームディレクトリを読み取るパーミッションがないと言う事です。
対策は、上記の様に設定したユーザグループに apache を参加させるだけで解決します。


11. システム起動後も、有効にする。

  
systemctl enable httpd

12. Windows PC の Webプラザから、サーバ機の LAN 内 IP アドレスを使いアクセスする。

(サーバ機の LAN 内 IP アドレス)

この結果、セキュリティの警告が表示すれば OK です。
アクセス先の URL が、 https://(サーバ機の LAN 内 IP アドレス)に成っている事を 確認してください。

13. グループの参加を解除する手順

  確認は、下記コマンドで行います。

  
id  ○○○○

  uid=1000(○○○○)  gid=1000(○○○○)  groups=1000(○○○○),10(wheel),48(apache)

  試しに apache を ○○○○ グループから外します。
  
gpasswd -d ○○○○ apache

  再度確認します。

  
id  ○○○○

  uid=1000(○○○○)  gid=1000(○○○○)  groups=1000(○○○○),10(wheel)

  48(apache) が消えていますので、 ○○○○ グループから外れました。


2. httpd-2.4.37-XX + Brotli + http2 ssl.conf の 編集・設定


※※※ 注意事項 ※※※

下記の設定で使用している www.smiyasaka.com と smiyasaka.com は、私のドメイン名です。
コマンドをコピーする時には、あなたのドメインに変更して使用してください。


※※※ 設定の基本方針 ※※※

  (1) http:// のアクセスを https:// に自動変換させる。

  (2) 秘密鍵は、無償の Let's Encrypt を使用する。
  (3) SELinux は、有効( Enforcing )にしたまま使用する。


※※※ 設定の前提条件 ※※※

  (1) 秘密鍵は、私のホームページのデータを利用します。

  (2) モデムのポート 80 と 443 が解放されている事。
  (3) 圧縮処理は、標準でサポートされている Brotli を使用します。
  (4) ログの設定と Brotli の設定は、別モジュールにして設定の簡易化を図ります。


------------------------------------------------------------------------------

4. 無償の Let's Encrypt を使用して認証鍵の証明書を取得に関しての詳細( インストー
ル・証明書の取得 )は、[ CentOS-7-x86_64-DVD-1810 のインストールとサーバ構築 ]の [ 10-3. apache2 の SSL 化の手順と httpd.conf、 httpd_ssl.conf の設定 ]を参照してください。
なお、この章での[ 認証鍵の証明書 ]の使用は、現用サーバ機のデータをコピーして使用しています。
[ 認証鍵の証明書 ]のコピー関しての詳細は、[ Oracle Linux 8.X のインストールとサーバ構築 ]の
[ 10-3. apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の設定 ]を参照してください。


----------------------------------------------------------------------
5. mod_ssl パッケージの確認

インストールされた ssl.conf バスの確認

 
find / -name *ssl.conf

  /etc/httpd/conf.d/ssl.conf
  /etc/httpd/conf.modules.d/00-ssl.conf

※ 参考 ※ ファイル 00-ssl.conf の内容は、下記の通りです。

  LoadModule ssl_module modules/mod_ssl.so
----------------------------------------------------------------------
6. httpd の SSL の設定 ssl.confファイルの編集

原本は、保存しておきます。

 
cp /etc/httpd/conf.d/ssl.conf /home/miyasaka/httpd-2.4.37.ssl.conf.bak

  vi /etc/httpd/conf.d/ssl.conf

----------------------------------------------------------------------

※※ 注意 ※※

設定は、httpd-2.4.43 の httpd-ssl.conf と同じにしています。


 43 #DocumentRoot "/var/www/html"
    ↓  ↓
DocumentRoot "/var/www/html/www.smiyasaka.com"

 44 #ServerName www.example.com:443
    ↓  ↓
ServerName 〇○○○○:443

 49 TransferLog logs/ssl_access_log
    ↓  ↓
#TransferLog logs/ssl_access_log

 54 SSLEngine on の次の行に追加する。

#---- HTTP/1.1 HTTP/2 add ----
<IfModule http2_module>
   ProtocolsHonorOrder On
   Protocols h2 http/1.1
</IfModule>

Header set Strict-Transport-Security "max-age=315360000;includeSubDomains"


上記の設定は、HSTS (HTTP Strict Transport Security) の導入になります。

これは、HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメインへの接続はすべてHTTPSとする機能です。
     315,360,000 秒 というのは 3,650 日間 (10年間)


 59 #SSLProtocol all -SSLv3
    ↓  ↓
SSLProtocol -all +TLSv1.2 +TLSv1.3

 60 #SSLProxyProtocol all -SSLv3
    ↓  ↓
SSLProxyProtocol -all +TLSv1.2 +TLSv1.3

 73 SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
    ↓  ↓
#SSLCipherSuite PROFILE=SYSTEM
#
SSLCipherSuite "TLS_AES_256_GCM_SHA384 \
TLS_CHACHA20_POLY1305_SHA256 \
ECDHE-RSA-AES128-GCM-SHA256 \
ECDHE-RSA-AES256-GCM-SHA384 \
ECDHE-RSA-AES256-SHA \
ECDHE-RSA-AES256-SHA384 \
DHE-RSA-AES256-GCM-SHA384 \
DHE-RSA-AES256-SHA \
DHE-RSA-AES256-SHA256"
#


 74 SSLProxyCipherSuite PROFILE=SYSTEM
    ↓  ↓
#SSLProxyCipherSuite PROFILE=SYSTEM
#
SSLCipherSuite "TLS_AES_256_GCM_SHA384 \
TLS_CHACHA20_POLY1305_SHA256 \
ECDHE-RSA-AES128-GCM-SHA256 \
ECDHE-RSA-AES256-GCM-SHA384 \
ECDHE-RSA-AES256-SHA \
ECDHE-RSA-AES256-SHA384 \
DHE-RSA-AES256-GCM-SHA384 \
DHE-RSA-AES256-SHA \
DHE-RSA-AES256-SHA256"
#


 85 SSLCertificateFile /etc/pki/tls/certs/localhost.crt

    ↓  ↓
# 証明書を指定する
SSLCertificateFile "/etc/letsencrypt/live/www.smiyasaka.com/cert.pem"

 93 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ↓  ↓
# 秘密鍵を指定する
SSLCertificateKeyFile "/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem"

 102 #SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
    ↓  ↓
# 取得した中間証明書を指定
SSLCertificateChainFile "/etc/letsencrypt/live/www.smiyasaka.com/chain.pem"

 161 < Files ~ "\.(cgi|shtml|phtml|php3?)$">
    ↓  ↓
< FilesMatch "\.(cgi|shtml|phtml|php|html|system)$">

 164 <Directory "/var/www/cgi-bin">
( StdEnvVars: SSL 関連の標準的な環境変数を、CGI/SSI で使用できるようする。)
    ↓  ↓
<Directory "/var/www/html/www.smiyasaka.com">

 199~200 CustomLog logs/ssl_request_log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b
        ↓  ↓
コメントアウトして下記を追加します。
( 設定が長いので別 conf ファイルにしています。)

#-----------------------------------------
#   不要なログの記録をさせない設定
#-----------------------------------------
Include conf.d/httpd-log.conf
#


※※ ここからは、SSL でも圧縮処理をしたい時に追加してください。※※

#---------------------------------------------------
# 圧縮処理の設定 Brotliを使用します。
#---------------------------------------------------
Include conf.d/httpd-Brotli.conf
#---------------------------------------------------
# セキュリティ対策のため、最終行に追加しておきます。
# サーバ署名(バージョンとサーバ名)のOFF
ServerSignature Off
#


----------------------------------------------------------------------

7. 別モジュールの作成

  〇 httpd-Brotli.conf の新規作成

   空の httpd-Brotli.conf ファイルを作成します。

   touch /etc/httpd/conf.d/httpd-Brotli.conf

   vi コマンドで下記モジュール( brotli_module )の設定条件を書き込みます。

   vi /etc/httpd/conf.d/httpd-Brotli.conf

   下記の設定で html、js、css ファイルが圧縮アルゴリズムフォーマット( br )で圧縮されます。


<IfModule brotli_module>
#---------------------------------------------------
# Brotli 圧縮設定
#---------------------------------------------------
#
## 圧縮レベル: 0-11 (default: 11)
BrotliCompressionQuality 5
#
## BrotliWindowSize: 10-24 (default: 22)
BrotliCompressionWindow 18
#
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain\
text/css text/xml text/javascript\
application/json application/javascript\
application/x-javascript\
application/xml\
application/xml+rss
#
SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli
#
BrotliFilterNote Input instream
BrotliFilterNote Output outstream
BrotliFilterNote Ratio ratio
#
# 圧縮率の確認用ログ設定
# 不要になったら、# で無効にしておく事。
# BROTLI_COMPRESSが有効になっているか確認するログの出力
#
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' brotli
#
CustomLog "logs/Brotil_access_log" brotli
#---------------------------------------------------

</IfModule>


7. SSL 有効時の ssl.conf の編集コマンド

下記は、上記の各設定変更を sed コマンドで作成した ssl.conf の一括編集コマンドです。
編集時の行指定は、タイトル部を除いて一切していません。


cp /etc/httpd/conf.d/ssl.conf
/home/miyasaka/httpd-2.4.37.ssl.conf.bak

sed -i -e "1s/^#/# *** httpd-2\.4\.37 httpd-ssl\.conf HTTP\/2 対応版 ***/
s/#DocumentRoot \"\/var\/www\/html\"/DocumentRoot \
\"\/var\/www\/html\/
www\.smiyasaka\.com\"/g
s/#ServerName www\.example\.com:443/ServerName ○○○○:443/g
#
/TransferLog/s/^/#/
#---------------------------------------------------------------------
/SSLEngine on/a\ #---- HTTP/1\.1 HTTP\/2 add ----\n\
<IfModule http2_module>\n\
ProtocolsHonorOrder On\n\
Protocols h2 http\/1\.1\n\
<\/IfModule>\n\
\n\
Header set Strict-Transport-Security \"max-age=315360000;includeSubDomains\"
#
#---------------------------------------------------------------------
s/#SSLProtocol all -SSLv3/SSLProtocol -all +TLSv1\.2 +TLSv1\.3/
s/#SSLProxyProtocol all -SSLv3/SSLProxyProtocol -all +TLSv1\.2 +TLSv1\.3/
#---------------------------------------------------------------------
/SSLCipherSuite PROFILE=SYSTEM/s/^/#/
# ( \ 4個で \ 1個挿入 )
/SSLCipherSuite PROFILE=SYSTEM/a\#\n\
SSLCipherSuite \"TLS_AES_256_GCM_SHA384 \\\\\n\
TLS_CHACHA20_POLY1305_SHA256 \\\\\n\
ECDHE-RSA-AES128-GCM-SHA256 \\\\\n\
ECDHE-RSA-AES256-GCM-SHA384 \\\\\n\
ECDHE-RSA-AES256-SHA \\\\\n\
ECDHE-RSA-AES256-SHA384 \\\\\n\
DHE-RSA-AES256-GCM-SHA384 \\\\\n\
DHE-RSA-AES256-SHA \\\\\n\
DHE-RSA-AES256-SHA256\"\n\
#
/SSLProxyCipherSuite PROFILE=SYSTEM/s/^/#/
# ( \ 4個で \ 1個挿入 )
/SSLProxyCipherSuite PROFILE=SYSTEM/a\#\n\
SSLCipherSuite \"TLS_AES_256_GCM_SHA384 \\\\\n\
TLS_CHACHA20_POLY1305_SHA256 \\\\\n\
ECDHE-RSA-AES128-GCM-SHA256 \\\\\n\
ECDHE-RSA-AES256-GCM-SHA384 \\\\\n\
ECDHE-RSA-AES256-SHA \\\\\n\
ECDHE-RSA-AES256-SHA384 \\\\\n\
DHE-RSA-AES256-GCM-SHA384 \\\\\n\
DHE-RSA-AES256-SHA \\\\\n\
DHE-RSA-AES256-SHA256\"\n\
#
#---------------------------------------------------------------------
s/\/etc\/pki\/tls\/certs\/localhost\.crt/\
\"\/etc\/letsencrypt\/live\/
www\.smiyasaka\.com\/cert\.pem\"/g
s/\/etc\/pki\/tls\/private\/localhost\.key/\
\"\/etc\/letsencrypt\/live\/
www\.smiyasaka\.com\/privkey\.pem\"/g
s/#SSLCertificateChainFile \/etc\/pki\/tls\/certs\/server-chain\.crt/\
SSLCertificateChainFile \
\"\/etc\/letsencrypt\/live\/
www\.smiyasaka\.com\/chain\.pem\"/g
#--------------------------------------------------------------------
# SSL 関連の標準的な環境変数を、CGI/SSI で使用できるようになる
s/php/php\|html\|system/
#--------------------------------------------------------------------
s/<Directory \"\/var\/www\/cgi-bin\">/<Directory \"\/var\/www\/html\/
www\.smiyasaka\.com\">/
#---------------------------------------------------------------------
/CustomLog/s/^/#/
/SSL_PROTOCOL/s/^/#/
#
s/<\/VirtualHost>/#\n\
#---------------------------------------------------------------------\n\
# 不要なログの記録をさせない設定\n\
#---------------------------------------------------------------------\n\
Include conf\.d\/httpd-log\.conf\n\
#\n\
#---------------------------------------------------------------------\n\
# 圧縮処理( Brotli )の設定\n\
#---------------------------------------------------------------------\n\
#\n\
Include conf\.d\/httpd-Brotli\.conf\n\
#---------------------------------------------------\n\
# セキュリティ対策のため、最終行に追加しておきます。\n\
# サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off\n\
#\n\
<\/VirtualHost>/" /etc/httpd/conf.d/ssl.conf



9. http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加

.htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込み
ます。

( LAN 内 IP アドレスでのサーバ機へのアクセスも可能になります。)

--------------------------------------------------------------

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

--------------------------------------------------------------

※※※参考情報 ※※※

上記の設定をしなかった時には、http:// と https:// 共用になります。
httpd.conf 内のログ収集( httpd-log.conf )や圧縮処理( zgip.conf )の行は、特にコメントアウトしなくても、OKです。
https:// のアクセスでは、総て ssl.conf 側で処理されます。

URL の正規化の設定方法については、[CentOS8.2.2004] の [ 10-3. nghttp2 を使用して SSL プロトコル HTTP/1.1, HTTP/2 対応の設定 ] の項で 詳しく解説しています。

8. SELinux 対策 httpd からの秘密鍵のR/Wを有効にする。

 
semanage fcontext -a -t httpd_sys_rw_content_t\
  "/etc/letsencrypt/live/www.smiyasaka.com(/.*)?"; \
  restorecon -R -vF /etc/letsencrypt/live/
www.smiyasaka.com/

上記設定の確認

 
ls -Z /etc/letsencrypt/live/www.smiyasaka.com/

9. httpd.conf の一部変更

 355行目あたりを変更して、ssl.conf を有効にします。

#IncludeOptional conf.d/*.conf

  ↓  ↓  ↓
IncludeOptional conf.d/ssl.conf


3. SELinux を有効( enforcing )にした時のホームページへのポリシーの設定

1. SELinux 有効化でポリシーの設定

SELinux 有効化での httpd-2.4.37-XX ポリシーの設定は、丁寧に行ってください。
CGI, SSI は、100% 動作するようになりました。


〇 httpd のブール値は、下記を on にしています。

 httpd_enable_cgi --> on    ← cgi の動作を有効にする。

 httpd_enable_homedirs --> on  ← ホームディレクトリへのアクセスを有効にする。
 httpd_sys_script_anon_write --> on ← pubuic_content_rw_t タイプのラベルが付い たファイルへの書き込みアクセスを HTTPスクリプトに許可するかどうかを定義


  ブール値の設定コマンド例

  setsebool -P httpd_enable_homedirs 1  <----- ./home/へのジャンプをOKにする。

〇 設定したポリシー値

  ホームページ本体       ---> httpd_sys_content_t

  SSI・CGI プログラム     ---> httpd_sys_script_exec_t
  Read・Write するデータ   ---> httpd_sys_rw_content_t
  sh プログラム        ---> httpd_unconfined_script_exec_t

  特に ファイルの書込み や Linux コマンド を使用している perl のプログラム・ Alias でのジャンプ先きにある perl のプログラムや
  
SSI・CGI プログラム等で
    動作しないプログラム
    ---> httpd_unconfined_script_exec_t

〇 
sh の起動は、パスを #!/bin/sh から #!/usr/bin/sh にすると動作します。
 Linux のコマンド等もフルパスを設定する必要があります。フルパスの確認は、コマンド which を使用して確認できます。
    ( 例 )
  which sensors


   
/bin/sensors  <--- sensors のフルパスになります。

※※ 参考情報 ※※
semanage fcontext コマンドでのポリシーの設定順序について。
ポリシーは、パスの上位から、下位に向かって行いましょう。 つまり、上位のディレク トリをまとめて設定し、次に下位のディレクトリ又はファイル単位でポリシーを設定して いきます。


2. コマンド semanage fcontext と restorecon で恒久的にポリシーを設定する。

個別にポリシー設定をするのは、面倒なので私のホームページでは、SELinux を有効にす
るにあたってプログラムの配置を変更して SELinux のポリシーの設定を明確にし、極力一 括設定をできるようにしました。

変更点 1. perl のブログラムをすべて1つのホルダー内( ex. SSI, CGI )に格納。


プログラムは、すべて CGI 及び SSI実行可能なポリシー httpd_sys_script_exec_t に設定。
この設定では、動作しないプログラム ( Linux のコマンドを実行しているプログラム ) は、SELinux 保護無効のポリシー  httpd_unconfined_script_exec_t に設定します。


( 設定例 )


  フォルダ毎ポリシーを設定

semanage fcontext -a -t httpd_sys_script_exec_t\
 "/var/www/html/www.smiyasaka.com/SSI(/.*)?"
restorecon -R -vF /var/www/html/www.smiyasaka.com/SSI/

  ファイルを指定してポリシーを設定

semanage fcontext -a -t httpd_unconfined_script_exec_t\
  /var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi
restorecon -vF /var/www/html/www.smiyasaka.com/SSI/cgi_test.cgi


変更点 2. テキストファイル(.txt)を> すべて1つのホルダー内( ex. TXT )に格納。


ファイルは、すべてホームページからの読み書き有効なポリシー httpd_sys_rw_content_t に設定。


( 設定例 )


semanage fcontext -a -t httpd_sys_rw_content_t\
 "/var/www/html/www.smiyasaka.com/TXT(/.*)?"
restorecon -R -vF /var/www/html/www.smiyasaka.com/TXT/


※※※ 参考情報 ※※※

 特定のファイルの自分で作ったルールを全て削除したい場合は -d を使います。

 semanage fcontext -d -t [削除したいポリシー] /[ファイルのフルパス]

 semanage fcontext -E

 もしくは --deleteall で自作ルール全てを削除することもできます。

 semanage fcontext --deleteall

 semanage fcontext -E

ポリシーの設定内容は、コマンド semanage fcontext -l -C、個別毎は、ls -lZ [ファ イルのフルパス] で確認できます。

戻る