www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。
●  httpd-2.4.6 の httpd.conf 編集・設定・起動  ●
(  「 ベーシック Web サーバー 」 を選択した時の設定 )
アクセス数 昨日 9 今日 1
  累計 24,093   

ここでのサーバ構築は、ファイアウォール有効( SELinux = enforcing )を前提にして行っ ています。
mod_ssl パッケージをインストールして apache2 の SSL 化も行ってみました。 SSL は、http・https 共用と http のアクセスを https にリダイレクトする自動変換の設定 もしています。

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

SSL のプロトコル HTTP/2.0 は、httpd-2.4.6 では、サポートされていませんので、 HTTP/2.0 にする場合は、httpd-2.4.4X をインストールします。

その詳細は、[ここをクリック]して確認してください。
( "コピペ" で簡単にサーバ構築が出来るよう心掛けた作りにしています。)

※ 注 意 事 項 ※
コマンド・プログラム等を コピペ する時には、全角のスペース が、入っていることがありますので
半角に変換 してから、使用してください。

スマホ対策の為、長いコマンド・プログラム等を継続記号( linux は、"\" 、EXCELマクロは、"_" )で
故意に数行に分割している箇所が有ります。

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

1. [ httpd-2.4.6 の httpd.conf 編集・設定・起動 ] [ httpd-2.4.6 の httpd.conf 編集・設定・起動 非表示 ]
2. [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 ] [ SELinux を有効( enforcing )にした時のホームページへのポリシーの設定 非表示 ]
3. [ apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定 ] [ apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定 非表示 ]

   1. httpd-2.4.6 の httpd.conf 編集・設定・起動

「ベーシックWebサーバー」の選択では、httpd-2.4.6-XX のバージョンが標準仕様になっ ています。
XX は、2018年7月現在 80 に成っています。
apache の関連ディレクトリは、Red Hat と同じになっています。但し、ソースファイル
(tar)でインストールした時とは、保存先が異なっていますので注意してください。

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

httpd-2.4.6 の httpd.conf には、LoadModule の行が有りませんが、LoadModule は、
56行目 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-proxy.conf
00-ssl.conf, 00-systemd.conf, 01-cgi.conf, 10-fcgid.conf

下記は、基本機能のモジュール設定 00-base.conf の内容です。 不要な Module は、コメ ントアウトして下さい。
00-base.confには、SSIのモジュールmod_cgid.soがありませんが、このモジュールは、 01-cgi.conf 内にあります。
[ httpd-2.4.6 基本機能 modules の設定ファイル ] の詳細は、
            [ここをクリック]してください。

下記は、sed コマンドで作成したモジュール設定 00-base.conf の編集コマンドです。
---------------------------------------------------------------------------------
モジュール名を指定してコメントアウトしています。( \. は、正規表現 )


sed -i -e "/mod_allowmethods\.so/s/^/#/
/mod_auth_digest\.so/s/^/#/
/mod_authn_anon\.so/s/^/#/
/mod_authn_dbd\.so/s/^/#/
/mod_authn_dbm\.so/s/^/#/
/mod_authn_socache\.so/s/^/#/
/mod_authz_dbd\.so/s/^/#/
/mod_authz_dbm\.so/s/^/#/
/mod_authz_owner\.so/s/^/#/
/mod_cache_disk\.so/s/^/#/
/mod_dbd\.so/s/^/#/
/mod_dumpio\.so/s/^/#/
/mod_ext_filter\.so/s/^/#/
/mod_info\.so/s/^/#/
/mod_socache_dbm\.so/s/^/#/
/mod_socache_memcache\.so/s/^/#/
/mod_substitute\.so/s/^/#/
/mod_unique_id\.so/s/^/#/
/mod_userdir\.so/s/^/#/
/mod_vhost_alias\.so/s/^/#/" /etc/httpd/conf.modules.d/00-base.conf


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

@ httpd.conf の編集

設定は、html, CGI, SSI をすべて同一の DocumentRoot で動作させるようにしています。 ログの出力フォーマットに関しては、任意に設定をしてください。

vi /etc/httpd/conf/httpd.conf

66行目あたり

User apache
Group apache
 ↓  ↓
User ○○○○    ○○○○は、ユーザー名
Group ○○○○   ( 私は、CentOS7 の登録ユーザー名を使用しています。)

86行目あたり

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

95行目あたり

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

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

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

119行目あたり

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

124〜125行目あたりと127〜128行目あたり この位置では不要なのでコメントアウトします。

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

131行目あたりの
<Directory "/var/www/html">は、そのままにして置きます。
   ここは、html 以下のディレクトリ内でSSIとCGIを有効にする為です。

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

Options Indexes FollowSymLinks
   ↓  ↓  ↓
Options
Includes FollowSymLinks ExecCGI
Options -Indexes

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

#AllowOverride None
AllowOverride
All

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

 DirectoryIndex index.html
   ↓  ↓  ↓
  DirectoryIndex index.html
index.cgi


172〜174行目あたり

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>

217行目あたり
CustomLog "logs/access_log" combined
   ↓  ↓  ↓
#CustomLog "logs/access_log" combined
Include /etc/httpd/conf.d/httpd-log.conf  <--- SSL をしない時にログの収集は、ここに挿入します。

アクセスログ収集モジュール httpd-log.conf の作成については、3.項を参照してください。

------------------------------------------------------------
ここは、別ドキュメントルートが必要な場合に記述してください。
232行目あたり
# Alias /webpath /full/filesystem/path
   ↓   ↓   ↓
Alias "/home" "/home/miyasaka/www"
# /home/ でのアクセスは、/home/miyasaka/wwww/へ移行させる処理 CGI, SSIも
# 有効にする。
# ここに書込まないと無効になる。
   <Directory "/home/miyasaka/www">
    AllowOverride None
    Options Includes FollowSymLinks ExecCGI
    AddHandler cgi-script .cgi .pl
    Require all granted
   </Directory>

------------------------------------------------------------
247行目あたり   コメントアウト DocumentRoot 内で CGI 使用可能している為
#   ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

255〜259行目あたり   コメントアウト
#<Directory "/usr/local/apache2/cgi-bin">
#   AllowOverride None
#   Options None
#   Require all granted
#</Directory>

294行目あたり
    #を取り 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

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

AddDefaultCharset UTF-8
   ↓  ↓  ↓
#AddDefaultCharset UTF-8
AddDefaultCharset Off

353行目あたり
   コメントアウト 外部の conf は、読み込ませない。
   SSL を起動する時には、コメントアウトしない。
   コメントアウトしないと
   autoindex.conf, fcgid.conf, manual.conf, ssl.conf, userdir.conf, welcome.conf
   の各 .conf ファイルが読込されます。

#IncludeOptional conf.d/*.conf

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

圧縮処理モジュール httpd-zgip.conf の作成については、3.項を参照してください。

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



上記の設定では、SSIとCGI の使用がドキュメントルート /var/www/cgi-bin/ で有効になります。
この場合、(ドキュメントルート)/cgi-bin/〇〇〇〇 は、ドキュメントルートは、すべて CGI プログラムとして /var/www/cgi-bin/〇〇〇〇 のパスで実行されます。


私のサーバ機では、.html と SSI, CGI のプログラムを保存実行させるドキュメントルート を同じに
しているのでコメントアウトしています。

250行目あたり コメントアウトする。

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

258〜262行目あたり コメントアウトする。

#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Require all granted
#</Directory>

にしています。
---------------------------------------------------------------------------------
下記は、上記の各設定変更を sed コマンドで作成した httpd.conf の一括編集コマンドです。
編集時の行指定は、タイトル部を除いて一切していません。
---------------------------------------------------------------------------------
赤字部分は、貴方の環境に合わせてください。 先頭行は、conf のバックアップです。

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

#    124,128s/^/#/
/<Directory \"\/var\/www\">/,/# Further relax access/s/^/#/
#------------------------------------------------------------------
#  /var/www/html以下 SSI,CGI の許可 ( ここは、コメントです。)
#------------------------------------------------------------------
#
/# for more information/,/# Controls who can/s/Options Indexes\
 FollowSymLinks/Options Includes FollowSymLinks ExecCGI/g
/# for more information/,/# Controls who can/s/AllowOverride\
 None/AllowOverride All\n\
    Options -Indexes/g
#
/DirectoryIndex index\.html/s/$/ index\.cgi/
#
s/<Files \"\.ht\*\">/<Files \*\.html>/g
/<Files \*\.html>/,/<\/Files>\/html/s/Require all\
 denied/ForceType text\/html\n\
\    SetOutputFilter INCLUDES/g
/CustomLog \"logs\/access_log\"/s/^/#/
/CustomLog \"logs\/access_log\"/s/$/\n\Include \/etc\/httpd\/conf\.d\/httpd-log\.conf/
#-----------------------------------------------------
#   ここは、不要な場合は、削除して下さい。
#-----------------------------------------------------
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>/g
#-----------------------------------------------------
#   ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#   247s/^/#/
/ScriptAlias \/cgi-bin/s/^/#/
#   <Directory "/var/www/cgi-bin"> 〜 </Directory>
/<Directory \"\/var\/www\/cgi-bin\">/,/<\/Directory>/s/^/#/
#
#   削除する時は、ここまでして下さい。
#-----------------------------------------------------
s/#AddHandler cgi-script \.cgi/AddHandler cgi-script \.cgi \.pl/g
#  .shtml ---> .shtml .html
/shtml/s/$/ \.html/
#
#  AddDefaultCharset UTF-8
s/UTF-8/Off/g
#
/IncludeOptional conf\.d/s/^/#/
\$a#\n\
Include \/etc\/httpd\/conf\.d\/httpd-zgip\.conf\n\
#---------------------------------------------------\n\
#  セキュリティ対策のため、最終行に追加しておきます。\n\
#  サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off" /etc/httpd/conf/httpd.conf

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

A ホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
( /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

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

  
httpd -t

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

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

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

  
systemctl start httpd

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

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

  
systemctl enable httpd

E http をサービス一覧に追加してファイアウォールの有効状態でホームページを見られる
ようにします。この操作で、80番ポートも開放されます。

  
firewall-cmd --zone=public --add-service=http --permanent
  success が表示すれば OK

  
firewall-cmd --reload
  success が表示すれば OK

  追加されたかの確認
  
firewall-cmd --list-services

  下記の様に http が追加されていれば、OK
  dhcpv6-client ftp http ssh

F httpd.service を起動した時に下記のようなエラーが出た時の対処方法

1.
systemctl start httpd    <---- httpd.service を起動する。

Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

systemctl status httpd    <---- httpd のステータスを調べる。

* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; …………… )
   Active:
failed (Result: exit-code) since ………………


2.
httpd -t   <---- シンタックスエラーがあるか調べる。

    Syntax OK

3.
systemctl stop httpd.service   <---- とりあえず httpd を止めます。

これは、apacheデーモン停止が失敗したからなので、kill コマンドで強制的に該当プロ セスを停止する。

4.
/usr/sbin/lsof -i | grep http   <---- 該当プロセスを調べます。

 ( 表示例 )

 httpd  1859   root   4u IPv6 21597  0t0 TCP *:http (LISTEN)
 httpd  1861 miyasaka 4u IPv6 21597  0t0 TCP *:http (LISTEN)
 httpd  1863 miyasaka 4u IPv6 21597  0t0 TCP *:http (LISTEN)
 httpd  1864 miyasaka 4u IPv6 21597  0t0 TCP *:http (LISTEN)
 httpd  1865 miyasaka 4u IPv6 21597  0t0 TCP *:http (LISTEN)

5. kill -9 で該当プロセスをすべて強制停止します。

  
kill -9 1859 1861 1863 1864 1865

6. httpd.service を起動します。

  
systemctl start httpd; \
  systemctl enable httpd


G Apache のバージョンを知るには。

  コマンド
httpd -v を入力します。

  Server version: Apache/2.4.6 (CentOS)
  Server built: Apr 2 2020 13:13:23


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

※※※ 参考情報 ※※※
以下の設定が面倒な時は、ブール値 httpd_unified を on してみてください。
[ httpd_t に対して httpd の全タイプへの完全アクセスが許可されます (実行、 読み込み 書き込み)。]     私のこのホームページで試したら、ほぼ動作しました。
動作しない SSI・CGI プログラムは、ポリシーを httpd_unconfined_script_exec_t に設定 したら動作しました。
ちなみに動作しないプログラムには、OS のコマンドが入っていました。
[ 私のサーバ機で検証 ]

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

私のホームページは、SELinux 有効化で httpd-2.4.6 を動作させ時、CGI, SSI が 100%
動作しませんでした。
試行錯誤の結果、以下の様にポリシーの許可設定等を行ったら、私のホームページの CGI, SSI は、100% 動作するようになりました。


---------------------------------------------------------------------------------
※※※ 参考情報 ※※※

SELinux を有効( enforcing )で httpdー2.4.XX と httpdー2.4.6 の動作の仕方は、かなり違
いがあるようです。
httpd.conf の SSI・CGI 関係の設定は同じようにしていますが、SSI・CGI プログラムでかなり 動作しないプログラムがあり、その全てを ポリシー httpd_unconfined_script_exec_t にして対処しました。
httpdー2.4.XX の方が、SELinux を有効( enforcing )では、SSI・CGI プログラムは動作するようです。
これらは、私のスキルの範囲での感想です。

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

1. httpd のブール値・ポリシーの設定

httpd_ssi_exec[Web ページ内の SSI (server side include) 要素を実行可能にするか どうかを定義] は、SSI プログラムの動作結果を見て on / off してみてください。
私個人としては、off のまますることを勧めます。
 但し、ポリシーの設定は、忘れないように設定してください。
  on にした時、私が試した環境ではどうしても動作しない SSI( perl プログラム )がありました。
  off にしたら問題なく動作しました。


〇 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 のプログラム

  
SSI・CGI プログラム等で
    動作しないプログラム
    ---> httpd_unconfined_script_exec_t

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


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

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


A コマンド 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(/.*)?"
estorecon -R -vF /var/www/html/www.smiyasaka.com/TXT/


※※※ 参考情報 ※※※ 2018.10.10 追加

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

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

 semanage fcontext -E

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

 semanage fcontext --deleteall

 semanage fcontext -E

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

   3. apache2 の SSL 化の手順と httpd.conf、ssl.conf の設定

※※※ 注意事項 ※※※

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


※※※ 設定の基本方針 ※※※
  1. http:// のアクセスを https:// に自動変換させる。

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


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


  1. 現在 http://(ドメイン) でホームページが公開されている事。
  2. httpd-2.4.6 のバージョンの apache2 を使用している事。
  3. epelレポジトリのインストールが完了している事。
  4. モデムのポート 80 と 443 が解放されている事。


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

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


----------------------------------------------------------------------
2. mod_ssl パッケージ と ssl.conf ファイルのインストール
  
yum -y install mod_ssl

インストール:
  mod_ssl.x86_64 1:2.4.6-88.el7.centos

完了しました!

インストールされた 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
----------------------------------------------------------------------
3. Apache の SSLの設定 ssl.confファイルの編集

  DocumentRoot、ServerName、ErrorLog、CustomLog 等は、httpd.conf と同じ設定をします。

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

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

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

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


※※ 注意 ※※  
CustomLog logs、ErrorLog logs の設定は、httpd.conf で設定したと同じに
設定してください。 
ここでは、単に動作確認だけなので logs の設定を省略しています。 
設定は、httpd-2.4.38 の httpd-ssl.conf と同じにしています。 
 
 59  #DocumentRoot "/var/www/html" 
          ↓    ↓ 
      DocumentRoot "/var/www/html/www.smiyasaka.com" 
 
 60  #ServerName www.example.com:443 
          ↓    ↓ 
      ServerName 〇○○○○:443  
 
 65  TransferLog logs/ssl_access_log
          ↓    ↓ 
      #TransferLog logs/ssl_access_log

     64行目の ErrorLog logs/ssl_error_log は、残します。

 71行目に以下を追加する 
 
      Header set Strict-Transport-Security "max-age=315360000\
 includeSubDomains" 
 
上記の設定は、HSTS (HTTP Strict Transport Security) の導入に
なります。 
                    
これは、HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降の
そのドメインへの接続はすべてHTTPSとする機能です。   
               315,360,000 秒 というのは 3,650 日間 (10年間) 
 
  76行目に以下を追加する 
 
      SSLProxyProtocol all -SSLv2 -SSLv3 
 
  80  SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA 
          ↓    ↓ 
      SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH 
 
 100  SSLCertificateFile /etc/pki/tls/certs/localhost.crt 
          ↓    ↓ 
      #  証明書を指定する 
      SSLCertificateFile\
 "/etc/letsencrypt/live/www.smiyasaka.com/cert.pem" 
   
 107  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 
          ↓    ↓ 
      #  秘密鍵を指定する 
      SSLCertificateKeyFile\
 "/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem" 
 
 116  #SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt 
          ↓    ↓ 
      # 取得した中間証明書を指定 
      SSLCertificateChainFile\
 "/etc/letsencrypt/live/www.smiyasaka.com/chain.pem" 
    
 175  < Files ~ "\.(cgi|shtml|phtml|php3?)$">  
          ↓    ↓ 
      < FilesMatch "\.(cgi|shtml|html)$">  
 
 178  < Directory "/var/www/cgi-bin">  
          ↓    ↓ 
        < Directory "/var/www/html/www.smiyasaka.com">  
         
 213  CustomLog logs/ssl_request_log \ 
 214   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b 
          ↓    ↓ 
      コメントアウトして下記を追加します。  
                    ( 設定が長いので別 conf ファイルにしています。) 

      Include /etc/httpd/conf.d/httpd-log.conf
 
 ※※  ここからは、SSL でも圧縮処理をしたい時に追加してください。※※ 
 
      #-----------------------------------------------------
      # 転送データの圧縮設定(画像以外全て圧縮する) 
      #            実際の圧縮率は、1 も 3 も大差ありません 
      #-----------------------------------------------------
      # 
      Include /etc/httpd/conf.d/httpd-zgip.conf 
 
  下記を追加します。 
 
      #----------------------------------------------------
      # セキュリティ対策のため、最終行に追加しておきます 
      # サーバ署名\(バージョンとサーバ名\)のOFF\n\ 
      ServerSignature Off 
 
----------------------------------------------------------------------

  〇 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)" no-logfile 
 SetEnvIf Request_Method "(OPTIONS)" no-logfile 
 #------------------------------------------------------------------
 # logs/ ---> /var/log/httpd/
 #CustomLog logs/ssl_access_log combined env=!no-logfile
 #------------------------------------------------------------------
 # Apacheのログローテートの 86400 540 の意味
 # ローテートする周期を"秒"で指定します。
 # 86400 ---> 24時間周期で行う指示 60秒 × 60分 × 24時間 = 86400秒
 # 540   ---> Apacheの時間管理は、UTC なので
 # 日本時間用のオフセット値 60分 × 9 = 540分
 #
 # ログファイルは、/var/log/httpd/ に
 #  smiyasaka_access_yyyymmdd( 年月日 )のファイル名で保存されます。
 #------------------------------------------------------------------
 CustomLog "| /usr/sbin/rotatelogs \
/var/log/httpd/smiyasaka_access_log_%Y%m%d 86400 540" \
combined env=!no-logfile
 #
</IfModule> 
----------------------------------------------------------------------

〇 httpd-zgip.conf の新規作成

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

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

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

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>
---------------------------------------------------------------------

4. conf.modules.d/00-base.conf ファイルの編集

以下 2カ所コメントを解除します。

 
vi /etc/httpd/conf.modules.d/00-base.conf

〇 https:// のアクセスを https:// に変換させる処理の追加の為、mod_rewrite.so を
有効にします。

48 #LoadModule rewrite_module modules/mod_rewrite.so
   ↓  ↓
 
LoadModule rewrite_module modules/mod_rewrite.so

〇 mod_socache_shmcbを有効化

54 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
   ↓  ↓
 
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

----------------------------------------------------------------------
5. Apache の SSL の設定 httpd.conf ファイルの編集

下記2ヶ所を変更します。

〇 http でのログ収集を停止させる設定。

  Include /etc/httpd/conf.d/httpd-log.conf
   ↓  ↓
 
#Include /etc/httpd/conf.d/httpd-log.conf

〇 Include で「ssl.conf」の読み込みを行わせる設定を追加します。。

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

----------------------------------------------------------------------
6. 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:// 共用になります。

----------------------------------------------------------------------
7. エラーのチェック

 
httpd -t>

  「 Syntax OK 」と表示されればOKです。

-----------------------------------------------------------------------
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. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス
 
systemctl start httpd

Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスする。

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

この結果、セキュリティの警告が表示すれば OK です。 アクセス先の URL が、 https://(サーバ機の LAN 内 IP アドレス)に成っている事を 確認してください。
----------------------------------------------------------------------
10. httpd.conf と ssl.conf の編集用 sed コマンド
ただし、各ドキュメントルートは、私のサーバ機の場合なので、使用するときには、 変更してください。
※ 注意 ※
  表示の都合で二行表示にしている箇所がありますので注意してください。 使用時には 一行にしてください。
下記コマンドは、httpd-2.4.XX と HTML データ、SSL鍵データ等を共用したサーバ機の 設定です。
httpd-2.4.6 の起動は、systemctl start httpd で httpd-2.4.XX の起動は、 systemctl start apache2 で行っています。
------------------------------------------------------------------


(1) ssl.conf の sed コマンドよる一括編集

sed -i -e "1s/^#/# *** CentOS7\.7 httpd-2\.4\.6 SSL\
 Edited ssl\.conf  ***/
s/#DocumentRoot \"\/var\/www\/html\"/DocumentRoot\
 \"\/var\/www\/html\/www\.smiyasaka\.com\"/
s/#ServerName www\.example\.com:443/ServerName 〇〇〇〇:443/
#
/TransferLog/s/^/#/
#
/SSLEngine on/aHeader set Strict-Transport-Security\
 \"max-age=315360000;includeSubDomains\"
#
/SSLProtocol/a\SSLProxyProtocol all -SSLv2 -SSLv3
/SSLCipherSuite HIGH/s/^/#/
/SSLCipherSuite HIGH/a\SSLCipherSuite\
 HIGH:MEDIUM:\!MD5:\!RC4:\!3DES:\!DH
s/SSLCertificateFile \/etc\/pki\/tls\/certs\/localhost\.crt/\
#   証明書を指定する\n\
SSLCertificateFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/cert\.pem\"/g
#
s/SSLCertificateKeyFile \/etc\/pki\/tls\/private\/localhost\.key/\
#  秘密鍵を指定する\n\
SSLCertificateKeyFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/privkey\.pem\"/g
#
s/#SSLCertificateChainFile \/etc\/pki\/tls\/certs\/server-chain\.crt/\
#  取得した中間証明書を指定\n\
SSLCertificateChainFile\
 \"\/etc\/letsencrypt\/live\/www\.smiyasaka\.com\/chain\.pem\"/g
#
s/cgi|shtml|phtml|/cgi|shtml|html|/
#
s/\/var\/www\/cgi-bin/\/var\/www\/html\/www\.smiyasaka\.com/g
#
/CustomLog/s/^/#/
s/<\/VirtualHost>/#\n\
#=======================================\n\
#        不要なログの記録をさせない設定\n\
#=======================================\n\
#\n\
Include conf\.d\/httpd-log\.conf\n\
\n\
#------------------------------------------------------------------\n\
#    転送データの圧縮設定 ( ここは、コメントです。)\n\
#------------------------------------------------------------------\n\
#  転送データの圧縮設定(画像以外全て圧縮する)\n\
#  圧縮レベル 1\n\
#\n\
Include conf\.d\/httpd-zgip\.conf\n\
#---------------------------------------------------\n\
#  セキュリティ対策のため、最終行に追加しておきます。\n\
#  サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off\n\
#\n\
<\/VirtualHost>/" /etc/httpd/conf.d/ssl.conf

   (2) SSL 有効時の httpd.conf の sed コマンドよる一括編集

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

#    124,128s/^/#/
/<Directory \"\/var\/www\">/,/# Further relax access/s/^/#/
#------------------------------------------------------------------
#    SSI, CGI の設定 ( ここは、コメントです。)
#------------------------------------------------------------------
#
/# for more information/,/# Controls who can/s/Options Indexes\
 FollowSymLinks/Options Includes FollowSymLinks ExecCGI/g
/# for more information/,/# Controls who can/s/AllowOverride\
 None/AllowOverride All\n    Options -Indexes/g
#
/DirectoryIndex index\.html/s/$/ index\.cgi/
#
s/<Files \"\.ht\*\">/<Files \*\.html>/g
/<Files \*\.html>/,/<\/Files>\/html/s/Require all\
 denied/ForceType text\/html\n\
\    SetOutputFilter INCLUDES/g
#
/CustomLog \"logs\/access_log\"/s/^/#/
#
#------------------------------------------------------------------
#    Alias が不要な場合は、削除して下さい。( ここは、コメントです。)
#------------------------------------------------------------------
#
s/# Alias \/webpath \/full\/filesystem\/path/Alias \/home\/\
 \"\/home\/miyasaka\/www\/\"\n\
      # \.cgi \.pl を有効にする。ここに書込まないと無効になる。\n\
#    <Directory \"\/home\/miyasaka\">\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/^/#/
#
#     351,355s/^/#/
/<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/
#
/IncludeOptional/s/*\.conf/ssl\.conf/
#------------------------------------------------------------------
\$aInclude conf\.d\/httpd-zgip\.conf\n\
#---------------------------------------------------\n\
#  セキュリティ対策のため、最終行に追加しておきます。\n\
#  サーバ署名\(バージョンとサーバ名\)のOFF\n\
ServerSignature Off" /etc/httpd/conf/httpd.conf

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

TOPへ戻る