www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。
●  CentOS 8.1.1911・8.2.2004  ●
●   httpd-2.4.46 のインストールと自宅サーバ構築  ●
アクセス数 昨日 3 今日 1
  累計 3,542   

CentOS-8.1.1911-x86_64-dvd1.iso 又は、CentOS-8.2.2004-x86_64-dvd1.iso を使用し、自宅サーバを構築しました。
apache は、 httpd-2.4.46 を使用し、極力 CentOS 7.X と同じ設定をする方針で構築しています。

インストールは、openssl + nghttp2 ( jansson-devel + libev-devel + c-ares-devel ) + Brotli + httpd-2.4.46 の構成で行います。

まだ、設定方法が未定の項目については、「 ※※ 準備中 ※※ 」と表記しています。

ここでのサーバ構築は、ファイアウォール・SELinux とも有効の設定で行っています。
   
( " コピペ " で簡単にサーバ構築が出来るよう心掛けた作りにしています。)

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

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

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


0.  インストールした PC のスペック等

ファイル転送プログラム vsftpd は、Tera Term の転送機能を使用して windows PC 側から直接転送 し、インストールします。
vsftpd インストール後 ダウンロードしたファイルを サーバ機に ffftp で書き込み、 各種設定は、 Windows PC ( Tera Term を使用 )からの遠隔操作で web サーバを構築していきます。

ディレクトリ等の名前は、私のサーバ機の環境での名前を使用していますので、利用するときには、 あなたの環境に合わせて変更してください。
(
/var/www/html/www.smiyasaka.com は、httpd.conf での、DocumentRoot のパスです。 /home/miyasakaは、ホームディレクトリです。 )

サーバ機( OS バージョン CentOS 7.9.2009  64bit )の
CPU 利用率 0.96 % CPU 温度 +25 です。
2020.11.17 付けでカーネル( OS のバージョン )が、更新されました。
( カーネルのバージョン
Kernel 3.10.0-1160.6.1.el7.x86_64 です。)
2017.05.26から、新規に下記スペックの PC にインストールし、使用しています。
-------------------------------------------------------------------------
私の自宅サーバ機のスペック
型   式 : mouse LM-mini76S-S1-MA CPU : Intel Celeron 3855U 2コア/1.60GHz
消費電力 : 約 10W   メ モ リ : 8GBSSD : 128GB
インターネット回線 : STNet 光回線(ギガビット対応)
USBカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点)
LANカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点)
-------------------------------------------------------------------------


1. CentOS 8.0.1905-x86_64 のインストール

2020年 1月 4日付けで CentOS 8.1.1911 がリリースされています。
2020年 6月15日付けで CentOS 8.2.2004 にバージョンアップしています。
インストールは、CentOS-8.1.1911-x86_64-dvd1.iso (7.0GB) 又は、CentOS-8.2.2004-x86_64-dvd1.iso (8.0GB) で行います。

インストールの方法は、基本的には、CentOS 7.X と同じですが、若干表示形式が変更され、タイムゾーンの設定が必要になりました。
更にインストール媒体の作成で iso の容量が約 7 GB あるため DVD DL (8.5GB) や USB(16GB) が必要になります。

ダウンロードは、[ CentOS 8.1.1911 は、ここをクリック] してください。
ダウンロードは、[ CentOS 8.2.2004 は、ここをクリック] してください。

ソフトウエアの選択は、「最小限のインストール」を選択して行っています。
httpd のバージョンは、デフォルトで httpd-2.4.37-XX ですがインストールは、されていません。

[ CentOS 8.0.1905 DVD からインストール手順 ] の詳細は、
             [ここをクリック]してください。

CentOS 8.1.1911 のインストールでは、若干変更されています。
[ CentOS 8.1.1911・8.2.2004 DVD からインストール手順 ] の詳細は、
             [ここをクリック]してください。


2. CentOS 8.X 再起動後のコンソールからの各種設定(SELinux を含む)


ここの設定だけは、サーバ機のコンソールから、GNOME(テキスト入力モード)で行ってください。

○ ログインは、[ root ]と[ root のパスワード ]で行います。

@ 日本語コードの変更 ( tara Term の日本語文字化け対策 )

日本語コードの確認は、echo $LANG

日本語コードの変更は、ロケール( locale )の値を編集します。

vi /etc/locale.conf

言語 国 文字コード
↓ ↓ ↓
ja_JP.
UTF-8 ---> ja_JP.eucJP

または、localectl set-locale LANG="ja_JP.eucJP" で変更する。

A
SELinux を無効にしてサーバ機を構築する時は、C に進んでください。

SELinux を有効にしてサーバ機を構築する時は、B に進んでください。

B SELinux を有効にしてサーバ機を構築する時は、下記をクリックして各種設定を行ってください。

[ CentOS 8 SELinux のアクセス制限を有効にした時の設定手順 ] の詳細は、

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

C Windows側から、Tera Term でアクセスするポート番号を設定する。

下記コマンドで sshd の設定ファイルを編集します。
vi /etc/ssh/sshd_config

#Port 22の前の # を削除して、「 Port 2222 」に変更します。

ポート番号 22 のままで良い場合は、設定なし、SELinux 有効のままで Tera Term でログインが可能です。

C-1 Port 2222 を有効化( 追加 )する。

( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)

firewall-cmd --zone=public --add-port=2222/tcp --permanent

success が表示すれば OK

firewall のコマンドで --zone=public は、省略してもデフォルトで zone は、public になっているで zone=public で設定されます。

C-2 設定を読込みこませて、有効にします。

firewall-cmd --reload

success が表示すれば OK

※※ 参考情報 ※※ キーボードから長いコマンドを入力するのが面倒な方へのアドバイス。

ポート番号を「 2222 」に変更しないで初期値のまま( 22 ) Tera Term にログインします。

後は、各設定をコピペですれば良いのです。 SELinux 有効のままで Tera Term には、ログインが可能です。
ポート番号を「 2222 」に変更したい時には、変更後、再起動・再ログインするだけでOKです。


D sshdの再起動

再起動するので、sshd の再起動は、不要です。また、デフォルトでサービスが有効になっています。

E SELinux を無効にする設定。

この変更を忘れると Tera Term から接続できなくなってしまいますから、注意してください。

vi /etc/sysconfig/selinux

SELINUX=
enforcing ----> SELINUX=disabled に変更する。

※※ 参考情報 ※※
後から、SELinux を有効にしたくなり、ここを permissive または、enforcing に設定し直して 再起動すると SELinux のポリシー情報が無いためにエラーになり再起動できなくなります。
注意してください。


F 不足パッケージのインストール

CentOS 8 からは、yum が dnf に変更になっています。 yum のままでもOKです。

「ベース」と「その他の開発」を groupinstall でインストールします。

パッケージ数は、「ベース」+「その他の開発」: 519個です。

※※ 注意 ※※ yum -y update を先にすると Base のインストールがエラーになりますので注意してください。
つまり、カーネルのバージョンを先に最新バージョンにしないことです。


dnf -y groupinstall "Base" "Additional Development" "Network-tools"

groupinstall は、時間がかかるので、追加処理として update 後、シャットダウンするコマンドを追加します。

dnf -y groupinstall "Base" "Additional Development" "Network-tools" && dnf -y update && poweroff

G ファイアウォール( firewalld )の動作状況の確認

下記コマンドで、ファイアウォールが有効な状態か確認しておきます。

systemctl status firewalld

下記の様に表示すればファイアウォールは、有効になっています。

firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since 月 2014-09-** 06:01:06 JST; 5min ago
Main PID: 567 (firewalld)
以下省略

H システムのアップデート後、再起動をします。

dnf -y update && reboot または、poweroff

停止したい時は、
poweroff にしてください。

I 再起動後、セキュリティ強化の為、sshd のアクセス制限を設定します。

( TCP Wrapper による SSH 接続のアクセス制御 )

この設定は、必要とする方のみ行ってけてた下さい。

私の場合、サーバ機の管理・設定は、ローカルの PC 以外しないので設定しています。


hosts.allowとhosts.denyの設定( IPアドレスの制限 )

この設定は、hosts.allow が優先されます。つまり、全てを拒否し、hosts.allow で指定された IP アドレスは、許可になります。

I-1 /etc/hosts.deny に、 sshd:ALL ( すべての接続を拒否 )と書込みます。

vi /etc/hosts.deny で sshd:ALL または、

echo "sshd:ALL" >> /etc/hosts.deny

I-2 /etc/hosts.allow で接続を許可するIPアドレスを指定します。

vi /etc/hosts.allow で sshd:192.168.0. または、

echo "sshd:192.168.0." >> /etc/hosts.allow

192.168.0. は、私の環境下ですべてのローカルIPアドレスを許可する設定です。

Tera Term の文字化けを防ぐため、漢字コードをサーバ機側と同じ漢字コード EUC に必ず設定し、 「設定の保存」をしてください。 接続すTCPポートは、私の場合 2222 に変更しています。

再起動後は、設定は、windows側から、Tera Term を使用して各種設定を行います。

Tera Term の漢字-送受信コードは、EUC を指定して使用してください。


Tera Termの設定・使い方の参考になるサイト Tera Term のセットアップ方法
Tera Term は、窓の杜ライブラリでダウンロードできます。


3. 事前にダウンロードするファイル一覧と探し方

rpm パッケージのダウンロードは、このサイト[ RPM Search ]で検索するとほとんどのパーケージが 入手できます。

下記のパッケージ名をクリックするとダウロード出来るサイトへジャンプします。


CentOS 8 の rpm パッケージは、el8.x86_64.rpm の名前が付きます。

ftp
vsftpd-3.0.3-31.el8.x86_64.rpm
ftp-0.17-78.el8.x86_64.rpm
---------------------------------------------------------------
httpd
httpd-2.4.46.tar.gz
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
nghttp2-1.XX.X.tar.gz
brotli-1.0.X.tar.gz
---------------------------------------------------------------
openssl
openssl-1.1.1g-11.el8.x86_64.rpm
openssl-devel-1.1.1g-11.el8.x86_64.rpm
openssl-libs-1.1.1g-11.el8.x86_64.rpm
openssl-perl-1.1.1g-11.el8.x86_64.rpm
---------------------------------------------------------------
fswebcam
fswebcam-20100622.tar.gz
---------------------------------------------------------------
sendmail
procmail-3.22-47.el8.x86_64.rpm.html
sendmail-8.15.2-31.el8.x86_64.rpm
---------------------------------------------------------------
logwatch
logwatch-7.4.3-9.el8.noarch.rpm
mailx-12.5-29.el8.x86_64.rpm
perl-Date-Manip-6.60-2.el8.noarch.rpm
perl-Sys-CPU-0.61-14.el8.x86_64.rpm
perl-Sys-MemInfo-0.99-6.el8.x86_64.rpm
---------------------------------------------------------------
clamav Fedora のパッケージを使用します。
clamav-0.101.4-1.el8.x86_64.rpm
clamav-update-0.101.4-1.el8.x86_64.rpm
clamav-lib-0.101.4-1.el8.x86_64.rpm
clamav-data-0.101.4-1.el8.noarch.rpm
clamav-filesystem-0.101.4-1.el8.noarch.rpm
---------------------------------------------------------------
chkrootkit
chkrootkit.tar.gz
---------------------------------------------------------------
nkf-2.1.5.tar.gz
---------------------------------------------------------------
sensors
lm_sensors-3.4.0-21.20180522git70f7e08.el8.x86_64.rpm


4. セキュリティ対策のため停止したサービス

暫定的に停止したサービスは、下記のとおりです。
( 試しに、不要と思われるサービスを停止 及び 再起動後も停止にしています。)

サービス名
atd
auditd
kdump

lvm2-monitor
mdmonitor
rngd
smartd
tuned

   機 能
# 単発的にスケジュール化した コマンド を実行させるデーモンです。
# 監査メッセージのログファイルを出力するデーモン
# システムがクラッシュした時、原因を特定するためのdumpファイルを
  保存してくれるサービス。
# 論理ボリュームマネージャー(LVM) 利用時の障害監視のためのデーモン
# ソフトウェアRAID 監視サービ
# ハードウェア を元に乱数を発生させるためのデーモンです。
# ハードディクスのS.M.A.R.T.による自己診断機能情報を取得する。
# CPUガバナーを利用して強制的にCPUを最大パフォーマンスで動作させる。



下記は、サービスを一括停止するプログラムです。
------------------------------------------------------------
vi service_stop.sh

#!/usr/bin/sh
systemctl stop atd.service
systemctl disable atd.service
#systemctl stop auditd.service
systemctl disable auditd.service



systemctl stop kdump.service
systemctl disable kdump.service
systemctl stop lvm2-monitor.service
systemctl disable lvm2-monitor.service
systemctl stop mdmonitor.service
systemctl disable mdmonitor.service
systemctl stop rngd.service
systemctl disable rngd.service
systemctl stop smartd.service
systemctl disable smartd.service
systemctl stop tuned.service
systemctl disable tuned.service
systemctl stop dm-event.socket
systemctl disable dm-event.socket
echo "サービス_STOP 完了"
-------------------------------------------------------------
属性を変更して、実行します。

chmod 755 service_stop.sh;sh service_stop.sh

5. ファイアウォール( firewalld )と Systemd

私が設定したファイアウォール( firewalld )の内容は、下記の通りです。
( zone public ( public.xml ) のファイアウォール設定項目を直接編集します。)

システム起動時に設定されるファイアウォールの設定は、zone public ( public.xml ) のファイルの 内容で設定されるので、このファイルを直接編集すれば、個別に設定することが不要になります。

( このファイル( public.xml )は、--add-service, --add-port--permanent を指定した時に設 定内容が反映されます。)

public のファイアウォールの設定データは、/etc/firewalld/zones/public.xmlに保存されています。
この内容を修正して dhcpv6-client, ssh削除ntp, http, ftp, https追加をするように編集してみます。

public.xml のオリジナルデータは、下記の通りです。


  vi /etc/firewalld/zones/public.xml
------------------------------------------------------------------
 <?xml version="1.0" encoding="utf-8"?>
  <zone>
   <short>Public</short>
    <description>For use in public areas. You do not………
    computers on networks to not harm your computer. Only ………
    connections are accepted.</description>
    <service name="ssh"/>
    <service name="dhcpv6-client"/>     <----- ここを修正
    <port protocol="tcp" port="2222"/>   <----- 追加したポート
  </zone>
------------------------------------------------------------------
 
  下記の様に編集します。
 
<service name="dhcpv6-client"/>
       ↓  ↓  ↓
<service name="ntp"/>   <---- 123/tcp の有効化
<service name="http"/>  <----  80/tcp の有効化
<service name="ftp"/>   <----  21/tcp の有効化
<service name="https"/> <---- 443/tcp の有効化

上記の操作を sed コマンドで一括処理してみました。
          (必ず、バックアップを取ってから実行します。)


cp /etc/firewalld/zones/public.xml /etc/firewalld/zones/public_bak.xml;\
sed -i -e"s/ssh/http/g
s/<service name=\"dhcpv6-client\"\/>/<service\
 name=\"https\"\/>\n\
<service name=\"ntp\"\/>\n\
<service name=\"ftp\"\/>/g" /etc/firewalld/zones/public.xml

編集保存したら、firewall-cmd --reload で設定を反映します。

下記コマンドで変更内容を確認します。

cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
 <short>Public</short>
 <description>For use in public areas. You do not trust ………
 <service name="http"/>
 <service name="https"/>
 <service name="ntp"/>
 <service name="ftp"/>
 <service name="cockpit"/>
 <port port="2222" protocol="tcp"/>
</zone>

ファイアウォール( firewalld )の設定内容を確認する。

 
firewall-cmd --list-all

上記設定で ファイアウォールの設定は、下記の様になります。
----------------------------------------------------------
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: enp2s0
 sources:
 services:
ftp http https ntp
 ports:
2222/tcp
 protocols:
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:
-----------------------------------------------------------


             ※※ 準備中 ※※


6. Tera Termでvsftpd( FTPサーバ )を転送しインストール

ここでは、先人の知恵を借りて、vsftpd のインストールと設定に挑戦してみました。
設定は、管理者のみ・LAN 内のみの接続にしています。また、個人使用の為、ログは取りません。


※ 役に立つ情報 ※

私は、サーバ再構築の際保存したある vsftpd.conf を上書きして設定しています。
ffftp が使えないので、Tera Term の転送機能を利用して行います。
その方法は、[ CentOS 7.7 6-1. Tera Termでproftpd( FTPサーバ )を転送しインストール ]で解説しています。


@ vsftpd のインストールと設定

vsftpd-3.0.3-31.el8.x86_64.rpm は、Tera Term の転送機能を利用してホームディレクトリに読込み
  cp コマンドで /usr/local/src/ へ コピーします。

 
cp /home/miyasaka/vsftpd-3.0.3-31.el8.x86_64.rpm /usr/local/src/

Tera Term の転送機能の利用方法の詳細は、CentOS 7 自宅サーバ構築 の6-1.Tera Termでproftpd
( FTPサーバ )を転送しインストールの @で紹介しています

cd /usr/local/src/;\
rpm -ivh vsftpd-3.0.3-31.el8.x86_64.rpm


  yum でのインストールは、下記の通りです。

 
yum -y install vsftpd

A vsftpd の設定

  編集前の vsftpd.conf を .bak を付けて保存しておきます。

  cp /etc/vsftpd/vsftpd.conf /home/miyasaka/vsftpd.conf.bak

編集済の vsftpd.conf が有る場合には、Tera Term の転送機能を利用してホームディレクトリに読込み
cp コマンドで上書きします。

  cp /home/miyasaka/vsftpd.conf /etc/vsftpd/

下記の操作を sed コマンドで一括処理してみました。下記を実行します。
( sed -i は、上書き編集、/○○○/s/^#// は、文字列○○○がある行の先頭の # を削除、\$a\ は、 最終行[\$]の行末[a]に \ 以降の文字列を追加・\ は、先頭の改行、\n は、文字列中の改行
\n\ の \ は、継続行の指示です。)

cp /etc/vsftpd/vsftpd.conf /home/miyasaka/vsftpd.conf.bak; \
sed -i -e "/anonymous_enable=/s/YES/NO/
/xferlog_enable=/s/YES/NO/
#   先頭の # を削除
/#ascii_upload_enable/s/^#//
/#ascii_download_enable/s/^#//
/#chroot_local_user/s/^#//
/#chroot_list_enable/s/^#//
/#chroot_list_file/s/^#//
/#ls_recurse_enable/s/^#//
/listen=/s/NO/YES/
/listen_ipv6=/s/YES/NO/
##### ここからは、最終行後に追加です。
\$a\local_root=public_html\n\
use_localtime=YES\n\
text_userdb_names=Yes\n\
force_dot_files=YES\n\
pasv_min_port=50010\n\
pasv_max_port=50020" /etc/vsftpd/vsftpd.conf

  vi /etc/vsftpd/vsftpd.conf


12行目 匿名ログイン禁止

  anonymous_enable=NO

40行目:転送記録をログに残す

  xferlog_enable=NO

82,83行目 コメント解除 ( アスキーモードでの転送を許可 )

  ascii_upload_enable=YES
  ascii_download_enable=YES

100,101行目:コメント解除 ( chroot有効 )

  chroot_local_user=YES
  chroot_list_enable=YES

103行目 コメント解除 ( chroot リストファイル指定 )

  chroot_list_file=/etc/vsftpd/chroot_list

109行目 コメント解除 ( ディレクトリごと一括での転送有効 )

  ls_recurse_enable=YES

114行目 変更 ( IPv4を有効にする )

  listen=YES

123行目 変更 ( IPv6 は、無視させる )

  listen_ipv6=NO

### 最終行へ追記 ###

# PAM認証のサービス名指定 ( これを設定しないと接続できない為、設定しておく。)

  pam_service_name=vsftpd

# アクセスユーザーリストファイルの使用
# NO : 「/etc/vsftpd/user_list」内の指定ユーザに関わらず接続が許可される。

  userlist_enable=NO

# tcp_wrappers( IPアドレスの制限 )を使用する

  tcp_wrappers=YES

# ルートディレクトリ指定 (指定しない場合はホームディレクトリがルートディレクトリとなる)

  local_root=public_html

# ローカルタイムを使う

  use_localtime=YES

# Windows( ffftp )側で所有者名の表示

  text_userdb_names=Yes

# Windows( ffftp )側で . ファイルの表示

  force_dot_files=YES

# PASVモードでの接続のためのポート番号を設定します。
# PASVモードは、デフォルトで有効になっています。
# ポート番号の設定は、任意の番号で良いと思います。

# CentOS 7.X では、無くても動作しましたが、CentOS 8.X では、設定しないと動作しません。

  pasv_min_port=50010    ←   pasvモード通信用 任意のポート番号
  pasv_max_port=50020   ←   pasvモード通信用 任意のポート番号

B B-1 Port 50010 〜 50020 を有効化( 追加 )する。

  ( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)

 
firewall-cmd --zone=public --add-port=50010-50020/tcp --permanent

  success が表示すれば OK

B-2 設定を読込みこませて、有効にします。

 
firewall-cmd --reload

  success が表示すれば OK

C 上層への ディレクトリへのアクセスを許可するユーザーを追加

 
vi /etc/vsftpd/chroot_list または、

 
echo "miyasaka" >> /etc/vsftpd/chroot_list

  私の場合 miyasaka を書込みました。

D hosts.allowとhosts.denyの設定( IPアドレスの制限 )

この設定は、hosts.allow が優先されます。つまり、全てを拒否し、hosts.allow で指定された   IPアドレスは、許可になります。

D-1 /etc/hosts.deny に、 vsftpd:ALL ( すべての接続を拒否 )と書込みます。

 
vi /etc/hosts.deny

 
vsftpd:ALL

  または、

 
echo "vsftpd:ALL" >> /etc/hosts.deny

D-2 /etc/hosts.allow で接続を許可するIPアドレスを指定します。

 
vi /etc/hosts.allow

 
vsftpd:192.168.0.

  または、

 
echo "vsftpd:192.168.0." >> /etc/hosts.allow

  192.168.0.0/24 は、私の環境下ですべてのローカルIPアドレスを許可する設定です。

E vsftpd を自動起動を有効にし、起動する。

 
systemctl enable vsftpd; \
  systemctl start vsftpd


  # が表示すれば OK です。

F B 〜 E のコマンドをまとめて実行させると下記の様になります。

echo "○○○○" >> /etc/vsftpd/chroot_list; \
echo "vsftpd:ALL" >> /etc/hosts.deny; \
echo "vsftpd:192.168.0." >> /etc/hosts.allow; \
systemctl start vsftpd; \
systemctl enable vsftpd

ユーザー名 ○○○○・接続を許可するIPアドレスは、あなたの環境に合わせてください。

G
SELinux 有効化では、下記を設定しないと FFFTP での読み書きができません。

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


H ここで、windows 側から、ffftp で接続できるか確認をしておきます。


7. ファイルの転送プログラムの作成

             ※※ 準備中 ※※

8. サーバの時刻を日本標準時に同期させるル

(設定方法等は、先人の知恵を借りて行いました。)

@ vi /etc/chrony.conf を入力して、設定ファイルを下記の様に変更します。
3行目あたり

pool 2.centos.pool.ntp.org iburst

こうなっている部分を以下のように変更します。

server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp

※ 参考 ※ 1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。

cp /etc/chrony.conf /home/miyasaka/chrony.conf.bak; \
sed -i -e "/pool/s/^/#/
/pool/aserver ntp1\.jst\.mfeed\.ad\.jp\n\
server ntp2.\jst.mfeed\.ad\.jp" /etc/chrony.conf

A chrony を再起動します。 ( chrony のサービス名は、chronyd です。)

systemctl restart chronyd.service

# が表示すば、OKです。

B 再起動後も chrony を有効にします。

systemctl enable chronyd.service

# が表示すば、OKです。

C chronyd のステータス( 動作 )の確認。

chronyc sources

下記の様に表示します。

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===========================================
^+ ntp1.jst.mfeed.ad.jp  2  9  377 125 -462us[ -462us] +/- 93ms
^* ntp2.jst.mfeed.ad.jp  2 10 377 1019 +140us[ +265us] +/- 97ms


以下のように*印がついていたら同期ができています。
                (起動してから同期までに10分ぐらいかかります。)


9. リポジトリを導入する


dnf でインストールします。

  dnf -y install epel-release

使用方法は、下記の通りです。

  dnf --enablerepo=elrepo install [パッケージ名]

             ※※ 以下 準備中 ※※


10-1. apache2( httpd-2.4.46 )のインストールと設定

@ httpd-2.4.46 を展開して apr を展開したファイルをフォルダ ./httpd-2.4.46/srclib/ へ書き込む。

 2020.08.05付けで httpd-2.4.46 がリリースされました。

1. httpd-2.4.46 を展開する。

   tar xzvf httpd-2.4.46.tar.gz; \
   chown -R root. httpd-2.4.46; \
   cd ./httpd-2.4.46/srclib

2. apr を展開する。

   tar xzvf apr-1.7.0.tar.gz; \
   chown -R root. apr-1.7.0/; \
   mv apr-1.7.0 apr; \
   tar xzvf apr-util-1.6.1.tar.gz; \
   chown -R root. apr-util-1.6.1/; \
   mv apr-util-1.6.1/ apr-util

A configure( make 用にソースファイルの配置をする ) の実行

   cd /usr/local/src/httpd-2.4.46; \
   ./configure \
   --with-included-apr \
   --enable-rewrite \        <---- リクエストされた URL の
                                       動的書き換えを行うモジュール
   --enable-so \              <---- モジュールの有効化
   --enable-deflate=shared   <---- 圧縮する処理を追加

  SSL を有効にしたい時には、[./configure \]の後に[--enable-ssl \]を追加します。
  mod_ssl.so が追加されます。

  ・enable-rewrite     : Rewriteサポート(mod_rewrite)
  Apache側で要求されたURLを書き換えたり、リダイレクトしたりしてくれるモジュール
  ・enable-so        : mod_soモジュールを静的に組み込む
  ・enable-deflate=shared : データの転送を圧縮するモジュールを組み込む

  以下で、終われば、OK

------------------------------------------------------------------
config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
configure: summary of build options:

    Server Version: 2.4.46
    Install prefix: /usr/local/apache2
    C compiler:     gcc -std=gnu99
    CFLAGS:          -g -O2 -pthread
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE
    LDFLAGS:
    LIBS:
    C preprocessor: gcc -E

B make( コンパイル ) & install

   make && make install

以下で、終われば、OK

------------------------------------------------------------------
Installing CGIs
mkdir /usr/local/apache2/cgi-bin
Installing header files
Installing build system files
Installing man pages and online manual
mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: ディレクトリ `/usr/local/src/httpd-2.4.46' から出ます
-------------------------------------------------------------------

C 私のサーバの環境でした、httpd.confの設定は、下記のとおりです。

※ 注意 ※

○○○○.conf ファイルは、編集前にバックアップを取るようにしましょう。

ex, httpd.confの場合( 私のサーバ機の場合 )


 cp /usr/local/apache2/conf/httpd.conf /home/miyasaka/httpd.conf.bak


下記は、修正箇所の一覧ですが、ディレクトリは、私のサーバ機の環境での設定値です。

機能は、「cgi, SSI, が、.htmlで使用可能・cgi, SSI のファイルは、ホームページファイルと同一 ディレクトリで可能にする・png, jpg ファイル以外は、圧縮して転送する」を設定しています。
なお、ドメインは一つしか使用しないのでバーチャルドホストの設定は、していません。

圧縮設定は、最後に追加していますが、圧縮ログの出力は、コメントアウトしていませんのでローカ ルで確認後コメントアウトしてください。Al1as を使用して定点カメラ関係のデータとプログラムを 別ドキュメントルート上で実行させています。不要な方は、削除してください。

sed 文を簡略化するために、アクセスログの設定と圧縮処理の設定を conf ファイルとして作成し、 本文の conf から、Include conf/extra/○○○○.conf で読み込ませるようにしています。

conf ファイルの作成方法は、少し下に表示 している「 httpd-2.4.43 httpd.conf の編集項目 」の中で解 説しています。

下記は、httpd.conf の編集を sed コマンドで一括編集をした時の sed コマンドのリストです。
( sed コマンドをより理解するため無駄ですが挑戦してみました。)
Linux の正規表現等が良く理解できました。( 自己満足 )


[ sed コマンドによる httpd-2.4.43 の httpd.conf の一括編集 ] の詳細は、

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

[ httpd-2.4.43 httpd.conf の編集項目 ] の詳細は、
             [ここをクリック]してください。

Alias を使用して、別 DocumentRoot を作り CGI, SSI, html を動作させる方法を下記に紹介します。

この方法は、当ホームページのトップページ内の指定した「日」および「月」の保存した定点カメラ
の映像表示で使用しています。なお、デフォルトの httpd-2.4.37-12 では、私が試したところ、
Alias の機能は、動作しませんでした。

[ Alias で別 DocumentRoot を作り CGI, SSI, html を動かす ] の詳細は、

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

編集済の httpd.conf は、再構築時使用すると便利なので windows PC へ保存します。
なお、ファイルの属性・所有者を変更しないと windows PC へ保存できないので変更します。
( ディレクトリ・ユーザ名は、私のサーバ機の場合の設定です。)

  cp /usr/local/apache2/conf/httpd.conf /home/miyasaka/; \
  chown -R miyasaka:miyasaka /home/miyasaka/httpd.conf; \
  chmod 644 /home/miyasaka/httpd.conf

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

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

G httpd.confの設定に間違いが無いか確認します。

   /usr/local/apache2/bin/apachectl configtest

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

※※ 注意 ※※

configtest を実行する時に、DocumentRoot で指定したディレクトリが無いと下記エラーが出ますの でディレクトリを作成してから、configtest を実行してください。


  DocumentRoot must be a directory

H apache2を systemctl start で起動する。

デフォルトで httpd.servce が用意されていますが httpd.servce では、apache の実行ファイルの パスが /usr/sbin/httpd に成っている為使用できませんので新規に作成します。

  systemctl start apache2 のコマンドが使えるように設定する。

  以下に、新規にサービス( systemctl ○○○○.servce )を作成登録する方法を紹介します。

  apache2 の起動をサービスとして登録し、起動・システム再起動時の自動起動に使用しています。


  [ systemctl service の新規作成 ] の詳細は、

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


 〇 apache2 ( httpd ) の起動確認

現在実行されているプロセスをツリー表示するコマンド pstree で確認します。

下記の様に表示すれば、OKです。


   systemd-+-NetworkManager---2*[{NetworkManager}]
      ( 省略 )
       |-firewalld---{firewalld}
       |-httpd-+-httpd
       |     |-3*[httpd---63*[{httpd}]]
       |     `-3*[rotatelogs]

I
アクセスログ・エラーログ・圧縮の確認用ログは、/usr/local/apache2/logs のディレクトリに書込まれます。

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

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

  [ ホームページテストプログラム ] の詳細は、
             [ここをクリック]してください。

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

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



私の場合は、自宅サーバの現用機で、毎日下記のファイルを圧縮してバックアップファイルとし

   
1.ホームページのhtml・cgi・SSI・写真のファイルとデータ
    2.システム管理用に作成した perl・sh等の各種プログラム
    3.webalizerが解析した apacheのアクセスデータ(htmlデータ)
    4.apache のログデータ(1カ月分)
    5.root宛てメールデータ(10日分)
    6.SSL 用の認証鍵データ

作成しているので、専用の転送プログラムと展開プログラムで簡単に、前日の24時の時点に数分で

復元できるようにシステムを構築しています。


K
動作確認は、予備機のローカルIPアドレスを別の PC から入力して確認します。
予備機を現用機とした時には、[
ホームページが外部へ公開 ] されているかの確認が出来るサイ
トで行います。下記をクリックするとそのサイトへジャンプします。
[サーバー監視/ネットワーク監視サービス]



10-2. SELinux を有効にした時の apache2 のポリシー設定

※※※ 参考情報 1 ※※※ 2020.03.05 追加

CentOS 7.X でバックアップしたホームページデータを CentOS 8.1, 8.2 で復元したら、CentOS 7.X で設定した httpd のポリシーも 継続されていたので、ポリシー値設定なしで復元できました。確か、 CentOS 8.0 では、駄目でした。??
※※※ 参考情報 2 ※※※

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


○ httpd に設定したポリシー値


  ホームページ本体     ---> 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

○ .html のプログラムファイルは、初期設定値 httpd_sys_content_t のままにしています。

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

   設定コマンドは、setsebool -P httpd_×××× 1 又は、on で行います。

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


  
httpd_ssi_exec  --> off   ← Web ページ内の SSI (server side include) 要素を 実行可能にするかどうかを定義。
   これを on するかは、動作結果を見て決めて見てださい。

httpd-2.4.XX でも off のままで OK です。
httpd-2.4.6 の場合は、off しないと動作しない SSI プログラムがありました。

私のホームページでは、SELinux を有効にするにあたってプログラムの配置を変更しました。
理由は、SELinux のポリシーの設定を明確にし、一括設定をできるようにする為です。
変更設定は、コマンド semanage fcontext でポリシーを宣言してコマンド restorecon でポリシーを 恒久的に設定しています。


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


プログラムは、すべて 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つのホルダー内に格納。


ファイルは、すべてホームページからの読み書き有効なポリシー 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/


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


※※ 参考情報 2 ※※ SELinux 有効化でのバックアップの作成について。


バックアップは、コマンド tar で圧縮ファイルを作成しますが、その時、下記の様にオプション --selinux を付けるとバックアップの各ファイルに設定されている SELinux のコンテキスト( SELinux ポリシー )も一緒にバックアップされるので復元先でも各ファイルは、バックアップ元と 同じ SELinux のコンテキストになります。
なお、解凍先でコマンド semanage fcontext -l -C でポリシーの設定内容を見ても何の表示もあ りません。このサーバ機では、何も設定して無い為です。但し、httpd-2.4.XX でバックアップし た HTMLファイルを httpd-2.4.6 の HTMLファイルとして解凍しても SELinux のコンテキスト等は、 引継ぎされませんので再設定が必要です。


/bin/tar
--selinux -zcvf ○○○○.tar.gz △△△△

△△△△ : バックアップとして、まとめたいファイルを指定。複数ある時には、半角スペ ースを入れて続けて指定します。具体的には、下記のようにします。

例 BackUP_Dir="/var/html/www/home_page"
  BackUP_Dir="${BackUP_Dir} /home/miyasaka/home_page_date"
    ・           
↑ 半角スペースを入れる事
    ・
○○○○ : 圧縮後のファイル名を指定。○○○○の前に保存先ディレクトリを指定します。
例 /home/BackUP_Dir/back_www_data20180225.tar.gz ${BackUP_Dir} バックア ップは、毎日行うので日付を入れておくと良いと思います。
Let's Encrypt の認証鍵データもバックアップを取るようにしています。

※ semanage fcontext と restorecon オプションの説明 ※

semanage fcontext -a -t    <----- ポリシーの宣言

「-a」オプションを指定して、コンテキストの設定の追加を行うようにしています。

「-t」オプションで、タイプ「httpd_sys_script_exec_t」のコンテキストを設定するようにしています。
ディレクトリの指定は、正規表現を用いる。例 "/www(/.*)?" : ディレクトリ /www を指定
「-d」オプションで、ポリシーの削除を指定します。


restorecon -vF    <----- 強制的にポリシーを恒久的に設定する。

  「-R」オプションを指定して、ディレクトリの下層にもコンテキストの設定が行われるように

   します。単独ファイル時には、宣言しない。
  「-v」オプションを指定して、コンテキストの変更内容がコマンド実行結果に表示されるように
   します。
  「/var/www/……/」は、設定対象のディレクトリになります。
  「-F」オプションを指定して、強制的に変更を適用します。指定しないと変わらない時があるの
   で指定します。


semanage fcontext -l -C    <----- 自分で設定したポリシーの設定内容を見る



10-3. nghttp2 を使用して SSL プロトコル
HTTP/1.1, HTTP/2 対応の設定

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

デフォルトでインストール済のパッケージ nghttp2 のバージョンは、httpd の configure の時点で バージョンが、古いと怒られるので 、最新バージョンをダウンロードして使用します。

Let's Encrypt の認証鍵データ CentOS 7.X から CentOS 8.X への移設方法

※※※ 注意事項 ※※※

下記の設定で使用している www.smiyasaka.comsmiyasaka.commiyasaka は、私のサーバ機環境の固有名称です。
コマンドをコピーする時には、あなたのサーバ機環境に合わせて変更して使用してください。

1. 無償の Let's Encrypt の認証鍵を使用します。

ここでは、私のサーバ機 CentOS 7.X で取得ている「 認証鍵の証明書」データを移設して動作確認をします。
( コマンドのフルパスは、which ○○○○で確認してください。)

Let's Encrypt の認証鍵データ保存ディレクトリ( /etc/letsencrypt )ごと 下記のようにして圧縮保存し、移行先で解凍し使用しています。
ファイルの場所は、読み書きができるユーザーディレクトリーにしています。

#!/bin/bash
#-------- CentOS 7.X 側の保存処理 -------------
BACKUP_IN="/etc/letsencrypt"       # バックアップ元ディレクトリ
BACKUP_TO="/home/miyasaka/Lets_backup"    # バックアップファイル出力先
# 圧縮・保存し、属性変更をします。
/bin/tar --selinux -zcvf ${BACKUP_TO}.tar.gz ${BACKUP_IN}
/bin/chmod 644 ${BACKUP_TO}.tar.gz

ここで、ffftp を使用して移行先のサーバ機へ圧縮ファイルを windows PC 経由で転送します。
コピー元 : /home/miyasaka
転送先  : /home/miyasaka
圧縮ファイルの名称 : Lets_backupt.tar.gz

#!/usr/bin/bash
#-------- CentOS 8.X 側の復元処理 ------------
# 一度 /rootへ移動する。
\cp -f /home/miyasaka/Lets_backup.tar.gz /
cd /
# ファイルを展開する。
/usr/bin/tar zxvf Lets_backup.tar.gz
# バックアップファイルを削除する。
rm Lets_backup.tar.gz

〇 CentOS 8.X での certbot のインストール

2020年 8 月 現在 certbot-auto 又は、CentOS 7.X と同じく certbot python3-certbot-apache を使用してインストール・設定をすることは、わかりました。
但し CentOS 8.X では、python3 になります。
certbot python3-certbot-apache のインストール確認は、していますが、実際のテストは、時期を見て実機サーバ機で cron での自動更新をさせてみようと計画しています。

下記コマンドでインストールしています。


dnf install -y epel-release
dnf -y --enablerepo=epel install certbot python3-certbot-apache

CentOS 7 のサポート終了が、2024年 6月 30日 なので、CentOS 8.X への移行は、まだ先になりそうです。

 ちなみに、CentOS 7 での認証鍵データのアップデートは、cron で下記コマンドを月一回決まった日時に実行させています。
CentOS 8.X での認証鍵データのアップデートのテストは、未実行です。


/bin/certbot certonly --webroot -w /var/www/html/www.smiyasaka.com -d smiyasaka.com -d www.smiyasaka.com --renew-by-default && /bin/systemctl reload apache2

2. openssl を 新規にインストールします。

   2020年 11 月 現在、

   opensslのパージョンは、1.1.1h に成っています。

  cd /usr/local/src/;\
  tar zxf openssl-1.1.1h.tar.gz; \
  cd ./openssl-1.1.1h; \
  ./config \
  --prefix=/usr/local/openssl \
  --openssldir=/usr/local/openssl/shared \
  enable-md2 enable-rc5 sctp zlib

  make && make install

ライブラリへのパス通しは、行いません。

※※ make install で sh: pod2html: command not found のエラーが出る時の対処 ※※

perl-core をインストールしてみてください。

dnf install -y perl-core

3. HTTP/2 のパッケージ nghttp2 をインストールする。

ソースパッケージは、下記 URL から、最新バージョンをダウンロードします。


    https://github.com/tatsuhiro-t/nghttp2/releases/

   2020年 11 月 現在、

   nghttp2 のパージョンは、1.41.0 に成っています。

〇 nghttp2 のソースからのインストール

nghttp2 のコンパイルに必要なパッケージをインストールします。
パッケージ c-ares-devel は既にインストールされていますので "jansson-devel" と "libev-devel" を dnf でインストールします。

 
dnf -y install jansson-devel libev-devel

  cd /usr/local/src; \
  tar xvzf nghttp2-1.41.0.tar.gz; \
  cd ./nghttp2-1.41.0; \
  env OPENSSL_CFLAGS="-I/usr/local/openssl/include" \
  OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto" \
  ./configure -enable-app

コンパイル後下記の様に表示するか確認してください。

     ( 上記省略 )
 Test:
  CUnit:     no (CFLAGS='' LIBS='')
  Failmalloc:   yes
 Libs:
     特にここが yesに成っている事。
          ↓

  OpenSSL:    yes (CFLAGS=' ' LIBS='-lssl -lcrypto ')
  Libxml2:    yes (CFLAGS='' LIBS='-lxml2 ')
  Libev:     yes (CFLAGS='' LIBS='')
  Libc-ares    yes (CFLAGS=' ' LIBS='-lcares ')
  Libevent(SSL): no (CFLAGS='' LIBS='')
  Jansson:     yes (CFLAGS='' LIBS='')
  Jemalloc:    no (LIBS='')
  Zlib:      yes (CFLAGS=' ' LIBS='-lz ')
  Systemd:    yes (CFLAGS=' ' LIBS='-lsystemd ')
     ( 途中 5 行省略 )
 Third-party:
  http-parser:  yes
  MRuby:     no (CFLAGS='' LIBS='')
  Neverbleed:   no
 Features:
  Applications:  yes
  HPACK tools:  yes
  Libnghttp2_asio:no
  Examples:    no
  Python bindings:no
  Threading:   yes

OK なら、インストールします。

  
make && make install

ライブラリへのパス通しは、行いません。

4. httpd-2.4.46 の再インストール

apr-1.7.0.tar.gz と apr-util-1.6.1.tar.gz をインストールします。

 APR のソースコードをインストール

  cd /usr/local/src; \
  tar xzvf /usr/local/src/apr-1.7.0.tar.gz; \
  cd ./apr-1.7.0; \
  ./configure; \
  make && make install

 APR-Util のソースコードをインストール

  cd /usr/local/src; \
  tar xzvf /usr/local/src/apr-util-1.6.1.tar.gz; \
  cd ./apr-util-1.6.1; \
  ./configure \
  --with-apr=/usr/local/apr; \
  make && make install

プロトコル HTTP/2 対応化のための mod_http2.so の組込は、個別のインストールでなく、再インストールで対応します。

 @ 下記コマンドでインストールしている apache2 を削除します。

  systemctl stop apache2; \
  systemctl disable apache2; \
  rm -rf /usr/local/apache2; \
  rm -rf /usr/local/src/httpd-2.4.46

 A mod_http2.so を追加する為の再インストール

    [省略]  詳細は、10-1 項を参照してください。
    cd /usr/local/src/;\
    tar xzvf httpd-2.4.46.tar.gz; \
    cd ./httpd-2.4.46;\
    ./configure \
    --enable-ssl \
    --with-ssl=/usr/local/openssl \        <-------  openssl のパス
    --enable-ssl-staticlib-deps \ <-------  OS 標準の openssl の
                                ライブラリが、動的にリンクされる
                                ことを防ぐため。つまり、Apacheの
                                実行ファイルと一緒に  SSL 
                                モジュールを組み込む為です。
    --enable-http2 \            <-------  mod_http2.so の追加
    --with-apr=/usr/local/apr \            <-------  apr-1.7.0 のパス
    --with-apr-util=/usr/local/apr \       <-------  apr-util-1.6.1 のパス
    --enable-rewrite \
    --enable-so \
    --enable-deflate=shared \
    --enable-mods-shared=all

-----------------------------------------------------------------
  以下の様に、SSL, http2 がビルドされます。
-----------------------------------------------------------------
         ( 途中省略 )
    creating modules/slotmem/Makefile
    creating modules/ssl/Makefile
    creating modules/test/Makefile
    creating os/unix/Makefile
    creating modules/http2/Makefile
    creating modules/md/Makefile

          ( 途中省略 )

    config.status: creating docs/conf/extra/httpd-multilang-……
    config.status: creating docs/conf/extra/httpd-ssl.conf
    config.status: creating docs/conf/extra/httpd-userdir.conf
    config.status: creating docs/conf/extra/httpd-vhosts.conf

          ( 途中省略 )

    configure: summary of build options:

        Server Version: 2.4.46
        Install prefix: /usr/local/apache2
        C compiler:     gcc -std=gnu99
        CFLAGS:          -g -O2 -pthread
        CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE
        LDFLAGS:
        LIBS:
        C preprocessor: gcc -E

-----------------------------------------------------------------
   〇 httpd-2.4.46 の make と install を実行する。

   make && make install

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

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

原本は、保存しておきます。 以下設定で SSL プロトコル TLS1.3 が、 有効になりました。

([ SSL Server Test ]のサイトで確認できました。下記 11 項の 写真)

   cp /usr/local/apache2/conf/extra/httpd-ssl.conf\
 /home/miyasaka/httpd-ssl.conf.bak

   vi /usr/local/apache2/conf/extra/httpd-ssl.conf

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

    52  SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
           ↓   ↓
        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"

    60  SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
            ↓   ↓
        SSLProxyCipherSuite "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"

    79  SSLProtocol all -SSLv3
          ↓   ↓
        SSLProtocol -all +TLSv1.2 +TLSv1.31

        SSL プロトコル のすべてを無効にして、
                              TLSv1.2 ・TLS1.3 を有効にする。

    80  SSLProxyProtocol all -SSLv3
          ↓   ↓↓
        SSLProxyProtocol -all +TLSv1.2 +TLSv1.3

        SSL プロトコル のすべてを無効にして、
                              TLSv1.2 ・TLS1.3 を有効にする。

   124  DocumentRoot "/usr/local/apache2/htdocs"
          ↓   ↓
        DocumentRoot "/var/www/html/www.smiyasaka.com"

   125  ServerName www.example.com:443
          ↓   ↓
        ServerName (サーバ機のホスト名):443 
     
   126  ServerAdmin you@example.com
          ↓   ↓↓
        ServerAdmin (メールアドレス)

   127  ErrorLog "/usr/local/apache2/logs/error_log"
          ↓   ↓
        ErrorLog "| /usr/local/apache2/bin/rotatelogs\
 /usr/local/apache2/logs/www.smiyasaka.com_error_log_%Y%m%d\
 86400 540"

    132行目 SSLEngine on の次の行に下記を追加

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

h2 とは、TLS暗号化接続によるHTTP/2プロトコル http/1.1 とは、従来のHTTP/1.1プロトコル。
非暗号化接続および、TLS(SSL)暗号化接続の両方で利用可


   133行目に以下を追加する

      Header set Strict-Transport-Security\
 "max-age=315360000;includeSubDomains"
      Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
      Header always set X-Frame-Options SAMEORIGIN

上記の設定は、HSTS (HTTP Strict Transport Security) の導入・常時 SSL 化になります。
これは、HTTPで接続した際に、強制的にHTTPSへリダイレクトし、 そのドメインへの接続はすべてHTTPSとする機能です。
         315,360,000 秒 というのは 3,650 日間 (10年間)

 144  SSLCertificateFile "/usr/local/apache2/conf/server.crt"
          ↓   ↓
      # 証明書を指定する
        SSLCertificateFile\
 "/etc/letsencrypt/live/www.smiyasaka.com/cert.pem"

 154  SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
          ↓   ↓
      # 秘密鍵を指定する
        SSLCertificateKeyFile\
 "/etc/letsencrypt/live/www.smiyasaka.com/privkey.pem"

 165  #SSLCertificateChainFile "/usr/local/apache2/
           ↓    ↓                        conf/server-ca.crt"
      # 取得した中間証明書を指定
        SSLCertificateChainFile\
 /etc/letsencrypt/live/www.smiyasaka.com/chain.pem

   249  <Files ~ "\.(cgi|shtml|phtml|php)$">
          ↓   ↓
        <FilesMatch "\.(cgi|shtml|html)$"$gt;
 
   252  <Directory "/var/www/cgi-bin"> 〜 <Directory>
                                       までコメントアウトします。
   
   287  #CustomLog "/usr/local/apache2/logs/ssl_request_log" \
   288  #     "%t %h %{SSL_……L}x %{SSL_……R}x \"%r\" %b"
          ↓   ↓↓
        Include conf/extra/httpd-log.conf <--- ログ条件設定用 conf
        標準のログローテーション( Apache logrotate )を使用する時には、
        コメントアウトしないでください。
        私の場合、自前でログローテーションをしています。

  ( httpd-log.conf の作成方法は、[ここをクリック]してください。)

   最終行の後に下記を追加します。

        #
        Include conf/extra/httpd-zgip.conf   <---- 新規に作成します。
        #--------------------------------------------------
        # セキュリティ対策のため、最終行に追加しておきます。
        # サーバ署名(バージョンとサーバ名)のOFF
        ServerSignature Off
        #

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

  〇 httpd-zgip.conf の新規作成
    ( 設定が長いので別 conf ファイルにしています。)

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

       touch /usr/local/apache2/conf/extra/httpd-zgip.conf

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

       vi /usr/local/apache2/conf/extra/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>

httpd-SSL.conf の編集を sed コマンドで一括編集をした時の sed コマンドのリスを公開しています。

興味のある方は、[ここをクリック]してください。別ページで表示します。

   ( sed コマンドをより理解するため無駄ですが挑戦してみました。)
    Linux の正規表現等が良く理解できました。( 自己満足 )

6. httpd-2.4.46 httpd.conf 設定ファイルの SSL( h2 ) 追加設定

なお、mod_deflate での圧縮設定部分は、削除して設定してください。

10-1 項の設定が完了してから、下記4ヶ所の # を削除してコメント文解除する。

   vi /usr/local/apache2/conf/httpd.conf

   〇 mod_socache_shmcbを有効化する。

 88 #LoadModule socache_shmcb_module……d_socache_shmcb.so
     ↓   ↓
    LoadModule socache_shmcb_module mod……_shmcb.so

      尚、mod_socache_shmcb.soは、httpdに含まれています。

   〇 mod_ssl.so の読み込みを行う。

   133 #LoadModule ssl_module modules/mod_ssl.so
     ↓   ↓
       LoadModule ssl_module modules/mod_ssl.so

   〇 mod_http2.so を有効化するため、コメントアウトを解除します。

   134 #LoadModule http2_module modules/mod_http2.so
     ↓   ↓
        LoadModule http2_module modules/mod_http2.so

   〇 https:// のアクセスを https:// に変換させる処理の追加。

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

   〇 「httpd-ssl.conf」の読み込みを行う。

   494 #Include conf/extra/httpd-ssl.conf
     ↓   ↓
        Include conf/extra/httpd-ssl.conf

    上記の操作を sed コマンドで一括処理してみました。

sed -i -e "/mod_socache_shmcb\.so/s/^#//
/mod_ssl\.so/s/^#//
/mod_http2\.so/s/^#//
/mod_rewrite\.so/s/^#//
/httpd-ssl\.conf/s/^#//" /usr/local/apache2/conf/httpd.conf

7. URL の正規化をします。

 http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加と index.html 無し・ www ありに統一する設定をします。

 www ありに統一したのは、Google Search Console のサイトマップ作成時、ドメインを www ありにしているからです。
.htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込みます。
 ( ローカル LAN からのアクセスを考慮しています。 )

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
#
###  301リダイレクト http ---> htpps  ###
#
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#
###  index.htmlあり  →  index.html無し  ###
###  %{HTTP_HOST} にしているのは、ローカルLAN からの
###  アクセスを有効にする為。
#
  RewriteCond %{REQUEST_URI} ^.*/index\.html$
  RewriteRule ^(.*)index.html$ https://%{HTTP_HOST}/$1 [R=301,L]
#
###  www ありのドメインに統一する  ###
###  [NC] は、大文字、小文字の区別なしの指定
#
  RewriteCond %{HTTP_HOST} ^smiyasaka\.com$ [NC]
  RewriteRule ^(.*) https://www.smiyasaka.com/$1 [R=301,L]
#
</IfModule>

※※※ 参考情報 ※※※
上記の設定をしなかった時には、http:// と https:// 共用になります。
リダイレクトの確認サイトは、「リダイレクトチェッカー」で検索するとヒットします。

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

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. エラーのチェック

   /usr/local/apache2/bin/apachectl configtest

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

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

10. apache2.service の変更して reload を追加します。

   vi /usr/lib/systemd/system/apache2.service 
 ------------------------------------------------------
  [Unit]
  Description=httpd-2.4.46 daemon

  [Service]
  Type=forking
  ExecStart=/usr/local/apache2/bin/apachectl start
  ExecReload=/usr/local/apache2/bin/apachectl graceful <--- 安全な
                                               再起動を追加します。
  ExecStop=/usr/local/apache2/bin/apachectl stop

  [Install]
  WantedBy=multi-user.target
 -------------------------------------------------------

   systemctl start apache2    <-------  起動
  systemctl reload apache2   <-------  安全な再起動
   systemctl stop apache2     <-------  停止

11. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス

systemctl start apache2

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

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

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


自分のホームページの表示は、セキュリティの警告画面で [ リスクを理解して続行 ]等をクリック して表示させます。

私の PC の場合、セキュリティアプリは、カスペルスキーですが、数回 [ 続行 ]をクリックしない と表示しませんで した。( IPアドレスでの証明を取っていないためだと思います。)

12. 証明書の更新

CentOS 8.0 のバージョンでは、まだ、確認していないのでわかり次第 更新いたします。


13. エラーのチェック

/usr/local/apache2/bin/apachectl configtest

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


14. apache2 を起動して https://(サーバ機の LAN 内 IP アドレス)でアクセス

systemctl start apache2

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

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

この結果、セキュリティの警告が表示すれば OK です。


プロトコルの検証は、Microsoft Edge で検証するとよくわかります。

ホームページが表示している状態で 画面上で[ 右クリック ] ---> [ 開発者ツールで調査する。(N) ] をクリッ ク、しばらくすると画面右側に開発者ツールが表示します。次に上部メニュー [ ネットワーク ]をクリックし、ホームページを再表示させます。

名前/パス の隣にプロトコルの欄があり、そこが HTTP/2 HTTP2 h2 とかに成っていれば成功です。
なお、HTTPS は、プロトコル HTTP/1.1 です。

※ 追伸 ※
この方法での構築が良いのかの判定は、私のスキルでは出来ませんすが、まずは動作したので紹 介しています。

15. セキュリティアプリで LAN 内 IP アドレスでのサーバへのアクセスがブロックされる時の対策

私の PC では、カスペルスキーを使用していますが、 LAN 内 IP アドレスでのアクセスがブロック され表示出来なくなってしまいました。( Windows edge, IE11, firefox, Safari でブロックされ ていました。)その対策として、カスペルスキーのセキュリティ条件を下記の手順で変更しました。

その結果、[ このサイトは、安全ではありません ]の画面の下にある [ 詳細 ] ---> [ webペ ージへ移動 ]のクリックで見られるようになりました。


セキュリティ設定の変更手順

カスペルスキーのトップ画面の左下にある [ 設定マーク (ギヤマーク) ] ---> [ 詳細 ] ---> [ ネットワーク設定 ]をクリックして、[ 暗号化された接続のスキャン ] の設定を [ 暗号化された 接続のスキャンしない ] ---> [ 続行 ] ( 変更の確認 )に変更してカスペルスキーを閉じます。


10-4 圧縮パッケージ Brotli を使用しての圧縮処理の追加

圧縮パッケージ Brotli を使用しての圧縮処理の追加をしてみました。
この追加処理は、10-3 項までの構築が終了している事が前提となります。

@ 圧縮アルゴリズムフォーマット( br )パッケージ Brotli のインストール

openssl のアップデート・nghttp2 の最新版をインストール・ 設定ファイルの反映をさせてから、Brotli のインストールをしてください。

〇 Brotli のインストール
  brotli のコンパイルには、cmake を使用しますので、dnf でインストールします。

        cd /usr/local/src; \
        dnf -y install cmake; \
        tar xvzf brotli-1.0.9.tar.gz; \
        cd brotli-1.0.9/; \
        mkdir out && cd out; \
        ../configure-cmake


   終了直前に、CMake Warning at CMakeLists.txt:319 (message): の警告が出ますが、無視してください。

   上記終了したら、 make ---> make install を実行します。

ライブラリへのパス通しは、行いません。

A インストール済の httpd-2.4.46 を削除します。


  systemctl stop apache2; \
  systemctl disable apache2; \
  rm -rf /usr/local/apache2; \
  rm -rf /usr/local/src/httpd-2.4.46

B httpd-2.4.46 の再インストール

  SSL と HTTP/2、Brotli モジュールを有効にしてインストールします。


        cd /usr/local/src; \
        tar xzvf httpd-2.4.46.tar.gz; \
        cd ./httpd-2.4.46;\
        ./configure \
        --enable-http2 \
        --enable-ssl \
        --with-ssl=/usr/local/openssl \
        --with-apr=/usr/local/apr \
        --with-apr-util=/usr/local/apr \
        --enable-brotli       <-------  Brotli の組み込み
        --with-brotli=/usr/local/lib <-------  Brotli のパス
        --enable-rewrite \
        --enable-so \
        --enable-mods-shared=all

   上記終了したら、 make ---> make install を実行します。

C /usr/local/apache2/conf/httpd.conf への設定の追加

   httpd.conf 編集後の全文は、[ここをクリック]してください

   106行目のコメントを削除する。

   #LoadModule brotli_module modules/mod_brotli.so


D /usr/local/apache2/conf/extra/httpd-ssl.conf への設定の追加

   httpd-ssl.conf 編集後の全文は、[ここをクリック]してくださ

   132行目 SSLEngine on の後に下記を追加する。

   Include conf/extra/httpd-Brotli.conf   
<------- 新規に作成します。

   Include conf/extra/httpd-zgip.conf は、コメントアウトしといてください。

〇 httpd-Brotli.conf の新規作成 ( 設定が長いので別 conf ファイルにしています。)

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

   touch /usr/local/apache2/conf/extra/httpd-Brotli.conf

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

   vi /usr/local/apache2/conf/extra/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 brotli_module>

E apache を起動します。

   systemctl start apache2


F apache2 起動後、下記コマンドで組み込みモジュールを確認してみてください。

   /usr/local/apache2/bin/apachectl -M


     (省略)
   deflate_module (shared)  
<------- zgip モジュール
   brotli_module (shared)  
<------- Brotli モジュール
   mime_module (shared)
     (省略)
   ssl_module (shared)    
<------- ssl モジュール
   http2_module (shared)  
<------- http2(h2) モジュール
   (省略)

G 圧縮ログでの圧縮率の確認


   圧縮結果のログデータは、管理者か゜root の為、ffftp でダウンロードできないので、ユーザー権限に変更します。


    chown -R miyasaka:miyasaka\
     /usr/local/apache2/logs/Brotil_access_log; \
    chmod -R 666 /usr/local/apache2/logs/Brotil_access_log

   保存場所 ----> /usr/local/apache2/logs/Brotil_access_log

   圧縮した時の圧縮ログデータは、このようになりました。( notepad 等で見ます。)

    (出力バイト数)↓ ↓(入力)↓( 元データに対するデータの大きさ[ % ] ) を意味します。
   "GET / HTTP/2.0" 5781/31172 (18%) Mozilla/5.0 (Windows NT 10.0) …………………………

   圧縮率の計算は、( BrotliCompressionQuality 5 の時 )
     {(入力バイト数)-(出力バイト数)}÷(入力バイト数)×100 %になるので
   上記1行目の場合、( 31172 - 5781 ) ÷ 31172 × 100 = 81.45 % になります。


   下記は、試しに圧縮レベルを 1 〜 5 に変化した時の圧縮率の結果です。

  BrotliCompressionQuality 1 ----> "GET / HTTP/2.0" 12619/31172 (40%) ……………

  BrotliCompressionQuality 2 ----> "GET / HTTP/2.0" 6759/31172 (21%) ………………

  BrotliCompressionQuality 3 ----> "GET / HTTP/2.0" 6613/31172 (21%) ………………

  BrotliCompressionQuality 4 ----> "GET / HTTP/2.0" 6214/31172 (19%) ………………

  BrotliCompressionQuality 5 ----> "GET / HTTP/2.0" 5781/31172 (18%) ………………

H web ( Microsoft Edge or Google Chrome )での圧縮処理の確認
web ページでホームページを表示し、画面上右クリックで[ 要素の検査 ]を選択 ---> 表示画面のメニューバーの[ ネットワーク ]を選択します。
[ ネットワーク ]を選択したら、一度、表示中のページを再更新して、ページ名をクリックしてください。
この時、ホームページが表示するようでしたら、[ヘッダー]をクリックしてください。
次にファイル一覧の jpg, png 以外の 〇〇〇〇.html, 〇〇〇〇.js, 〇〇〇〇.css 等のファイルの名前をクリックすると画面右側右の写真のような情報が取得できます。

-------------------------------------------
content-encoding:br

br は、Brotli の圧縮アルゴリズムフォーマット

content-type:text/html

圧縮対象ファイル html
-------------------------------------------

応答ヘッダーの情報
B


Brotliを使用時に圧縮されたかの確認ができるwebサイトが存在していましたので紹介します。
下記 URL をクリックしてあなたのホームページの URL を入れるだけです。
tools.paulcalvano.com

私のドメインでアクセスした結果は、下記の通りです。 入力するドメインには、必ず、https:// を付けてください。

      B


11. fswebcom-20100622.tar.gz のインストールと定点カメラの設定


fswebcam-20100622 のバージョンをインストールしすが、タイトル文字が正しく表示しませんが使用します。

fswebcomを使った定点カメラの設定方法については、定点カメラの実現方法のページで詳細に 解説していますので参考にしてください。


fswebcam-20100622.tar.gz のインストール手順

@ fswebcam-20100622 の展開と configure

     tar zxvf fswebcam-20100622.tar.gz;\
     cd ./fswebcam-20100622; \
     ./configure --prefix=/usr

     以下で、終われば、OK 
   -------------------------------------------------------
     checking for working mmap... yes
     checking for gdImageCreateTrueColor in -lgd... yes
     checking for gdImageStringFT in -lgd... yes
     checking for gdImageJpeg in -lgd... yes
     checking for gdImagePngEx in -lgd... yes

        Buffer type ........... 16 bit
        PNG support ........... yes
        JPEG support .......... yes
        Freetype 2.x support .. yes
        V4L1 support .......... yes
        V4L2 support .......... yes

     configure: creating ./config.status
     config.status: creating Makefile
     config.status: creating config.h

A make と インストール

     make && make install

make では、下記の様なエラーがでますがそのままインストールします。

------------------------------------------------------
cc -g -O2 -DHAVE_CONFIG_H -c src_v4l2.c -o src_v4l2.o
src_v4l2.c: 関数 'src_v4l2_show_control' 内:
src_v4l2.c:338:32: 警告: 'strncat' specified bound 3 equals source length
   [-Wstringop-overflow=]
   if(m < queryctrl->maximum) strncat(t, " | ", 3);

以下で、終われば、インストールOK です。

   ------------------------------------------------------
   mkdir -p /usr/bin
   mkdir -p /usr/share/man/man1
   install -m 755 fswebcam /usr/bin
   install -m 644 fswebcam.1.gz /usr/share/man/man1

B
Logicool C270 の UVC 対応 USB カメラの輝度・明るさの調整は、下記の様に設定しています。
   -s Brightness=65%
   -s Contrast=15%   
<---- 明るさは、ここまで下げないと綺麗な画像になりません。
C
Logicool C270 のカメラが認識された時の認識データは、 CentOS 8.0 では

   cat /proc/bus/usb/devices ----> cat /sys/kernel/debug/usb/devices

に変わっていますので、変更する必要があります。

   cat /sys/kernel/debug/usb/devices で下記の様になります。

S: SerialNumber=E981E810 (E981E810 は、USBカメラのシリアル番号なので同一機種でも、カメラを入れ替えれば変わります。)

D 私が気に入ったフォントが無いので、別バージョンの Linux でダウンロードしたフォントデー タをホームページのエリヤに保存して使用しています。
私が使用しているフォントは、VL-Gothic-Regular.ttfです。( 下記が書体の見本です。)
必要な方は、http://www.smiyasaka.com/VL-Gothic-Regular.ttf でダウンロード出来ますの で使用してください。

tenki and time
                                 
 
 

12. clamav ( アンチウィルスソフト )のインストール

clamav のインストール・設定手順

最新版は、エラーが出るので、2019年 10月頃のバージョンでインストールしてから、アップデートして最新版にします。


freshclam の自動実行は、/etc/cron.d/clamav-update で行わせ、clamscan の自動実行は、実行用のプログラムを作成して /etc/cron.daily/ に登録し行わせる設定にしています。
( デーモン動作をさせない設定です。)


@ ダウンロードパッケージのインストール
   下記順序でインストールします。

     cd /usr/local/src; \
     rpm -Uvh clamav-filesystem-0.101.4-1.el8.noarch.rpm; \
     rpm -Uvh clamav-data-0.101.4-1.el8.noarch.rpm; \
     rpm -Uvh clamav-lib-0.101.4-1.el8.x86_64.rpm; \
     rpm -Uvh clamav-update-0.101.4-1.el8.x86_64.rpm; \
     rpm -Uvh clamav-0.101.4-1.el8.x86_64.rpm


〇 dnf でのインストール

  cd /usr/local/src; \
  dnf --enablerepo=epel -y install clamav clamav-update

  インストール済み:
  clamav-0.101.4-1.el8.x86_64
  clamav-update-0.101.4-1.el8.x86_64
  clamav-filesystem-0.101.4-1.el8.noarch
  clamav-lib-0.101.4-1.el8.x86_64

   完了しました!

※※ 参考情報 ※※ clamav 旧バージョンのアンインストール

1.
旧バージョンのアンインストールは、まず、rpm -qa | grep clam でインストール済のパ ッケージの確認をします。
アンインストールは、インストールと逆の順番に行ってください。順序が違うと依存性 のエラーが出ます。
なお、各パッケージ名は、.rpm を取った名前になります。注意してください。
2. バージョンアップのインストールした時の再設定は、下記のC,D,H項の設定を行い、 freshclam を実行するだけです。


A
ユーザ : clamupdate とグループ : clamupdate は、上記のインストールで作成されます。
更にユーザ(clamav)とグループ(clamav)が必要なので作成しておきます。???


   グループ名 clamav の作成

   groupadd clamav   
<---- グループ clamav 作成

   ユーザー clamav の作成

   ログインシェルは、/bin/false、コメントは、"Clamav AntiVirus"

   useradd -g clamav -s /bin/false -c "Clamav AntiVirus" clamav>

   -g : 所属するグループ名指定 -c : コメント設定( 任意設定 )
   -s : ユーザーのログインシェルを指定します。
     /bin/false : ログインされても何もせずに終了します。


B clamav のグループ名とユーザ名を確認しておきます。

   グループの確認(私の場合の表示例です。)

   grep clam /etc/group

   clamupdate:x:990:
   clamav:x:1001:

   ユーザーの確認(私の場合の表示例です。)

   grep clam /etc/passwd

   clamupdate:x:991:990:Clamav database update user:/var/lib/clamav:/sbin/nologin
   clamav:x:1001:1001:Clam AntiVirus:/home/clamav:/bin/false

C freshclam 設定ファイル編集

cp /etc/freshclam.conf /home/miyasaka/freshclam.conf.bak; \
sed -i -e "s/#DatabaseDirectory/DatabaseDirectory/g
s/#UpdateLogFile/UpdateLogFile/g 
s/#DatabaseOwner /DatabaseOwner /g " /etc/freshclam.conf

  vi /etc/freshclam.conf
  :13 で13行目へジャンプ

   以下コメントを取る。

   13 DatabaseDirectory /var/lib/clamav >   
<---- ウィルスデータベースの保存先

   17 UpdateLogFile /var/log/freshclam.log   
<---- ログデータの保存先

   56 DatabaseOwner clamupdate   
<---- ウィルスデータベースの所有者

D freshclam_sleep で初期値 3時間毎に自動更新させる設定に成っているので変更します。

私の場合、 3時間毎は、多いので 6時間毎に変更しています。

    vi /etc/cron.d/clamav-update

    ## It is ok to execute it as root; freshclam drops privi………
    ## user 'clamav' as soon as possible
    0 */3 * * * root /usr/share/clamav/freshclam-sleep
        ↑    ここを 6 に変更します。

E ウィルス定義ファイルの最新化
下記コマンドを実行。

   freshclam

定義ファイルのダウロードが極端に遅い時には、一度 [Ctrl]+c で強制終了させ再度実行させて見てください。

※ 参考情報 ※
   freshclam を実行した時に、下記エラーになる時の対策方法


   ERROR: Can't change dir to /usr/local/share/clamav

   ディレクトリ /usr/local/share/clamav を作り、所有者を clamav に移行する。

     mkdir /usr/local/share/clamav;\
     chown clamav /usr/local/share/clamav

   所有者を移行しないと、下記の様なエラーメッセージが出ます。

   ERROR: Can't create temporary directory /usr/local/share/clamav/clamav-a…(省略)….tmp
   Hint: The database directory must be writable for UID 1001 or GID 1001

F ウイルスチェックの実行(テスト)
下記コマンドを実行。


   clamscan>

   実行結果の表示例

   /root/.bash_logout: OK
   /root/.bash_profile: OK
   /root/.bashrc: OK
   /root/.cshrc: OK
   /root/.tcshrc: OK
   /root/anaconda-ks.cfg: OK
   /root/.bash_history: OK

   ----------- SCAN SUMMARY -----------
   Known viruses: 4830340
   Engine version: 0.99.2
   Scanned directories: 1
   Scanned files: 7
   Infected files: 0   
<---- 検知したウイルスの数。
   Data scanned: 0.00 MB
   Data read: 0.00 MB (ratio 0.00:1)
   Time: 38.824 sec (0 m 38 s)

※ 参考情報 ※

 httpd のインストール時に一緒にインストールする apr-util は、初回のウ ィルスチェック時にウィルスありとして検知・削除されますので注意してください。


   検知されたウィルスのリスト

   /usr/local/src/apr-util-1.5.4.tar.gz: Xml.Exploit.CVE_2013_3860-3 FOUND
   /usr/local/src/httpd-2.4.23/srclib/apr-util/test/data/billion-laughs.xml:
Xml.Exploit.CVE_2013_3860-3 FOUND

G ウィルススキャン定時実行スクリプト作成

作成方法は、下記リンクの「アンチウィルスソフト導入(Clam AntiVirus)」を参照してください。

   ※ 参考にしたサイト アンチウィルスソフト導入(Clam AntiVirus)


   上記サイトの例を参考にしてチョット手を入れてみました。

[ ウィルススキャンを定期的に実行させるためのスクリプトの作成 ] の詳細は、

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


H freshclam の更新ログの管理の変更

freshclam の更新ログ閲覧は、下記コマンドで出来ます。( 今日の更新ログ閲覧には、年月日は不要です。)

   cat /var/log/freshclam.log-yyyymmdd
<---- yyyy : 西暦 mm : 月 dd : 日

   コマンド例 cat /var/log/freshclam.log-20160922

   freshclam の更新ログローテーションは、デフォルトでは、一月毎になっているので変更します。

    vi /etc/logrotate.d/clamav-update

cp /etc/logrotate.d/clamav-update\
 /home/miyasaka/clamav-update.bak; \
sed -i -e "s/monthly/daily/g
3i\        missingok\n\
        rotate 5" /etc/logrotate.d/clamav-update

   デフォルト値は、下記の通りなので

   /var/log/freshclam.log {
    monthly   
<---- 毎月ログローテーションする。
    notifempty   
<---- ログファイルが空ならローテーションしない。
   }

     ↓   ↓   ↓    貴方の環境に合わせて変更します。私の場合、5日にしています。

   /var/log/freshclam.log {
     daily      
<---- 毎日ログローテーションする。
     missingok    
<---- ログファイルが存在しなくてもエラーを出さない。
     rotate 5     
<---- 5日分を保存します。
     notifempty   
<---- ログファイルが空ならローテーションしない。
   }

I ClamAV のSELinuxのポリシーの設定

設定は、setsebool コマンドで下記の様に行います。
この設定で ClamAV は、ディスク上のすべてのファイルにアクセスし、データ定義ファイルの更新ができるようになります。

    setsebool -P antivirus_can_scan_system 1;\
setsebool -P antivirus_use_jit 1

設定確認コマンド

  getsebool -a | grep antivirus

  antivirus_can_scan_system --> on
  antivirus_use_jit --> on

dnf を使用して ClamAV のバージョンアップする手順

  ClamAVは EPELレポジトリにあるので、EPELレポジトリがインストールされている事が前提です。

  @ dnf で ClamAV をアップデートします。


   dnf install -y epel-release; \
      dnf -y --enablerepo=epel update clamav

  A バージョンを確認してみます。

    下記コマンドで確認します。

    rpm -qa | grep clam
       ( 2020.03.10 現在 )

    clamav-lib-0.102.2-2.el8.x86_64
    clamav-data-0.102.2-2.el8.noarch
    clamav-0.102.2-2.el8.x86_64
    clamav-update-0.102.2-2.el8.x86_64
    clamav-filesystem-0.102.2-2.el8.noarch

  B ※ 注意 ※

0.102.2-2.el8 のバージョンでインストールするとエラーが発生しますので 0.101.4-1.el8 のバージョンでインストールしてから update してください。


13. chkrootkitの導入


@ chkrootkit のインストール

   make で下記エラーでるので不足パッケージ( glibc-static )をインストールしておきます。

   ---------------------------------------------------
   /bin/ld: -lc が見つかりません

   collect2: エラー: ld はステータス 1 で終了しました
   make: *** [strings-static] エラー 1。

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


   ここは、依存性が多いので yum でインストールします。

     cd /usr/local/src/; \
     dnf -y install glibc-static

A 今までの設定では、CentOS 8.0 では、mailのコマンドが使えないのでインストールします。

   インストール前に コマンド rpm -qa | grep mailx が有るか確認してください。

     dnf install mailx

   インストール済み:
   mailx-12.5-29.el8.x86_64

   完了しました!

B chkrootkit のインストール

     cd /usr/local/src; \
     tar zxvf chkrootkit.tar.gz; \
     cd chkrootkit-0.53; \    <--- chkrootkit-0.5X の X は、
     mkdir -p /root/bin; \         確認する事
     mv ./chkrootkit-0.53/chkrootkit /root/bin 

 C 起動用シェルスクリプトの作成

     cd /usr/local/src; \
     vi rootkit.sh
-----------------------------------------------------------
#!/bin/sh
# コマンドパスの設定
PATH=/usr/bin:/bin:/root/bin  <--- 環境変数へ chkrootkit のパス設定
#
LOG='/var/log/chkrootkit.log'

# chkrootkit実行
chkrootkit > ${LOG}

if [ ! -z "$(grep INFECTED$ ${LOG})" ]; then  <--- 改ざんがあったか
                                                   チェック
  #  改ざんがあった時の root 宛メール
  #  upstartパッケージ更新時のSuckit誤検知対策
  if ! rpm -V `rpm -qf /sbin/init` >/dev/null 2>&1;
    then
      cat "$(grep INFECTED$ ${LOG})" | mail -s "rootkit discovery"\
       root
  fi
else
  echo "**** rootkit check OK ****"  <--- 手動実行時の確認メッセージ

  # 改ざんが無かった時の root 宛メールの出力の有
  echo "**** rootkit check OK ****" |\
   mail -s "*** rootkit check ***" root 
fi
#
chmod 600 ${LOG}

※ 参考情報 ※ if ! rpm -V `rpm -qf /sbin/init` > /dev/null 2>&1; とは、何か?

rpm -qf ○○○○は、

パッケージ名○○○○が、どのRPMパッケージでインストールされているかを調べるコマンドです。


私のサーバ機で rpm -qf /sbin/init 実行すると upstart-0.6.5-13.el6_5.3.x86_64 のパッケージ名がられました。

rpm -V ○○○○は、パッケージ名○○○○が、改ざんされていないかを検証するコマンドです。

改ざんがなかった時には、何の出力もありません。


if ! ○○○○は、○○○○の文字列が、0 の時に then 以下が実行されます。

つまり、「/sbin/init」のパッケージがアップデートされた時には、改ざんなしとする処理です。
> /dev/null 2>&1; で出力結果とエラーメッセージは、捨てられます。


なお、本当に改ざんがあり、かつ、「/sbin/init」のパッケージがアップデートされた時には、

改ざんなしになってしまいます。

D rootkit.sh に属性設定

   chmod 700 rootkit.sh

E 毎日2時に実行するよう cron に設定する。

   0 2 * * * /usr/local/src/rootkit.sh

F ハッカーの攻撃にあったかの確認

root 宛てにメールが、来ているので確認する。

mail コマンドを入力して rootkit check OK が、表示すれば、ハッカーの攻撃は、なしです。


詳細の設定は、下記サイトを参考にしてください。

※ 参考にしたサイト rootkit検知ツール導入(chkrootkit)

G 遊び心で上記オリジナルに処理時間の計算結果の表示や改ざんあった時には、chkrootkit が 検知した結果のしたした結果の表示機能を追加したスクリプトです。

[ chkrootkitを定期的に実行させるためのスクリプトの作成 ] の詳細は、
             [ここをクリック]してください。

H 「 Searching for Suckit rootkit... Warning: /sbin/init INFECTED 」の誤検知対策

( 2018.09.16 追加 )
この誤検知は、必ず出るので、ウィルススキャン実行スクリプト rootkit.sh で chkrootkit を実行した時に誤検知情報をカットする方法にしました。
その改良点は、下記のの通りです。


   # chkrootkit実行 実行結果は、chkrootkit.log へ出力

   chkrootkit > ${LOG}

     ↓   ↓   ↓

   # chkrootkit実行 実行結果は、chkrootkit.log へ出力

   ## [Searching for Suckit rootkit... Warning: /sbin/init INFECTED] は、###
   ## 当然誤検知で出るので事前にカットしておく ###


   chkrootkit
| grep INFECTED | egrep -v "/sbin/init" > ${LOG}

  ##   説明   ##
   | grep INFECTED で "INFECTED" の有る行を抽出します。その中で "/sbin/init" のある行は、

   | egrep -v "/sbin/init" でカットします。


14. sendmail のインストール


○ root 宛てのメールは、sendmail が、無いと来ないみたいのでインストールします。

    cd /usr/local/src; \
    rpm -Uvh procmail-3.22-47.el8.x86_64.rpm; \
    rpm -Uvh sendmail-8.15.2-31.el8.x86_64.rpm

チョット時間がかかります。

   dnf( yum ) でのインストールは、下記の通りです。

     dnf -y install sendmail

○ CentOS 8.0 では、mailのコマンドが使えないので該当パッケージを dnf でインストールします。

     dnf install mailx

   インストール済み:
   mailx-12.5-29.el8.x86_64

○ sendmail を起動します。

    systemctl start sendmail

   # が表示するまで、結構時間がかかるので待ちます。

○ 再起動後も有効にする設定


    systemctl enable sendmail

   # が表示するば OK です。


15. Logwatch のインストールと毎日のメールを簡単にチェックする方法

○ サーバー上のログを定期的にまとめ、集約してレポートを出してくれるソフトウェア

   Logwatch のインストールは、依存関係から、下記の順序で行ってください。

    cd /usr/local/src/; \
    rpm -ivh mailx-12.5-29.el8.x86_64.rpm; \
    rpm -ivh perl-Date-Manip-6.60-2.el8.noarch.rpm ; \
    rpm -ivh perl-Sys-CPU-0.61-14.el8.x86_64.rpm; \
    rpm -ivh perl-Sys-MemInfo-0.99-6.el8.x86_64.rpm; \
    rpm -ivh logwatch-7.4.3-9.el8.noarch.rpm

   dnf でのインストールは、下記の通りです。

    dnf -y install logwatch

   インストール済み:
   logwatch-7.4.3-9.el8.noarch
   mailx-12.5-29.el8.x86_64
   perl-Date-Manip-6.60-2.el8.noarch
   perl-Sys-CPU-0.61-14.el8.x86_64
   perl-Sys-MemInfo-0.99-6.el8.x86_64

完了しました!

○ logwatch.conf は、下記の箇所を変更して 実行させれば root宛てにメールがきます。


※ 参考 ※

1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。
念のため、バックアップを取ってから置換します。

cp /usr/share/logwatch/default.conf/logwatch.conf\
 /home/miyasaka/logwatch.conf.bak; \
sed -i -e "s/#Archives = No/Archives = YES/g
s/Detail = Low/Detail = Med/g
s/sendmail -t/sendmail -t -f root@localhost/g"\
 /usr/share/logwatch/default.conf/logwatch.conf

    vi /usr/share/logwatch/default.conf/logwatch.conf


   アーカイブされたログも含めるかどうかの指定。
   60行目 コメントアウトの解除
   #Archives = Yes
     ↓
   Archives = Yes

   ログの詳細度、Low (=0), Med (=5), High (=10) または 0から10までの数字。
   72行目 私の場合、Med にしました。
   Detail = Low
     ↓
   Detail = Med

   メールコマンドパスの変更
   109行目 rooo宛てにする。
   [ Can't execute sendmail -t: No such file or directory ]というエラーが出るので修正します。

   mailer = "sendmail -t"
   ↓   ↓   ↓
   mailer = "sendmail -t -f root@localhost"

Logwatch の定時実行は、cron.daily の設定で午前 3時から 4時頃の間のランダムな時刻に 毎日実行されるのでcrontab に設定する必要は、無いようです。

Logwatch の rooo宛てメールを毎日簡単にチェック出来るように下記のようなプログラムを 作ってみました。

1.
Logwatch の rooo宛てメールを前日の日付でユーザーエリヤに保存するとともに、パスワード のかかったヘージから、ホームページから日にちを指定して見られるようにしています。

2. 保存したLogwatch の rooo宛てメールは、10日間としそれ以前は、削除するようにした。

3. プログラムは、cron で毎日一回4時以降に実行させています。

4. /var/spool/mail/root のメールデータは、本プログラムで転送後肥大を防ぐため削除して います。

5. また、ついでに chkrootkit 実行結果・DiCE のイベントログも同時に見られるようにもし ています。

   こんな具合に表示します。

   表示例


   ★ 12/13 13:34 にmiyasaka.comが実行されました
     IPアドレスを更新しました
   × 12/14 10:46 IPアドレスチェック タイムアウト
   × 12/16 16:37 IPアドレスチェック タイムアウト
   × 12/18 15:54 IPアドレスチェック タイムアウト
   ○ 12/19 15:03 IPアドレスが変わりました >183.176.129.222
<---- 変更後のグロバル
   ★ 12/19 15:03 にmiyasaka.comが実行されました         
IPアドレス
     IPアドレスを更新しました

※※ 参考情報 ※※
corn で定時的に実行させている処理のコマンドの最後に [
> /dev/null 2>&1 ] を付け
ましょう。
これを付けないと実行結果が rooo宛てメールとして残ってしまいます。
( これは、実行結果を表示させない処理です。 メールデータの肥大化防止にもなります。)


6.
DiCE のイベントログの rooo宛てメールは、シェルスクリプトで簡単なプログラムを作り、 IPアドレスの更新が7日毎なので、これに合わせて、週一回 cron で実行させています。
( DiCE の IPアドレスの更新実行は、起動した日を基準に繰返し行われます。 )


7.
Logwatch の rooo宛てメールは、漢字があるので文字化けしない様に漢字コードをJcode で Shift_JIS 変換にしてユーザーエリヤに保存しています。

8.
rooo宛てメールをホームページエリヤに移動保存すると、不正に見られることがあるかもし れないので、移動保存は、ホームディレクトリにしていますが、perl では、cp( コピーコ マンド )使えないので、ユーザーエリヤに保存してあるメールデータを読みだすため、 open コマンドで変数 ( get_data )に書込む方法をとりました。
コピーコマンド( cp )の替りに open を使つてプログラムを組むとデータの読込みが簡単になり、便利です。
皆さんも是非マスターしてください。


open( get_data, "<ユーザーエリヤの保存先のパス+ファイル名");


下記がシェルスクリプト・cgi のプログラムと Logwatch の rooo宛てメールの内容です。
ユーザーエリヤ等のパスは、○表記にしていますが、使用するときには、あなたの環境に合わせてください。


※ 注意 ※
「rooo宛てメール」が見られる様になるのは、システムを起動後、翌々日からになりますので注意してください。

[ Logwatch の rooo宛てメールをホームページとして簡単にみられるプログラム ] の詳細は、
             [ここをクリック]してください。


16. 漢字コード変換用に nkf のインストール


○ apache のアクセスログの文字化けを修正するための漢字コード変換パッケージ nkf をインス トールします。
CentOS 6.6 までは、Jcode を使用していましたが、CentOS 7 で cron から実行させると Jcode が見えないらしく、実行されないという現象が発生しました。
CentOS 7 からは、漢字を含んだデータ( UTF-8 コード )から目的とするデータを取得する処理 をする為、 nkf を使用する事にしました。
更に良いことには、Jcode で処理するよりもプログラムが簡単になりました。


○ nkf のインストール

    cd /usr/local/src; \
    tar zxvf nkf-2.1.5.tar.gz; \
    cd nkf-2.1.5; \
    make && make install

   以下で、終われば、OK
   -----------------------------------------------------------
   mkdir /usr/local/bin   
<---- ここが nkf のフルパスです。
   mkdir: ディレクトリ `/usr/local/bin' を作成できません: ファイルが存在します
   make: [install] エラー 1 (無視されました)
   mkdir /usr/local/man
   mkdir /usr/local/man/man1
   mkdir /usr/local/man/ja
   mkdir /usr/local/man/ja/man1
   cp -f nkf /usr/local/bin/
   cp -f nkf.1 /usr/local/man/man1/
   cp -f nkf.1j /usr/local/man/ja/man1/nkf.1
   -----------------------------------------------------------
○ nkf の使用方法

私のサーバ機の環境では、EUC-JP コードを ホームページ表示コード Shift_JIS に変換す
るので下記の様な設定をします。なお、cronで自動実行させる時には、パスが通らないので フルパスで nkfコマンドを実行させてください。

   1) 変換後上書き保存する時は、

   /usr/local/bin/nkf -s --overwrite ( 元ファイルのフルパス )

   -s : 変換コード Shift_JIS 指定
   -e : 変換コード EUC 指定
   -w : 変換コード UTF-8 指定

   ( オプション --overwrite を付けると変換後のテキストデータが上書きされます。)

   2) 変換後別ファイルへ保存する時は、

/usr/local/bin/nkf -s ( 元ファイルのフルパス ) > ( 保存先ファイルのフルパス )

   3) コマンド実行後の結果が文字化けする時 nkf の使用方法
   文字化けは、Tera Term の文字コードが EUC なので起こります。コマンドの後ろに    | nkf -e を付けるだけです。

   ex. cat -n ○○○○ | nkf -e

○ ファイルの文字コードの確認

   GMODE でのコマンド実行は、パス不要です。 結果は、Shift-JIS, EUC-JP の様に表示します

   nkf -g ( ファイルのフルパス )

○ コマンドのフルパスの確認

   Linux のコマンドのフルパスは、which コマンドで確認できます。

   例 nkf の場合

   which nkf ---> /usr/local/bin/nkf

○ perl,シェルスクリプト(sh)でnkfを使用する時にも、パスが通らないのでフルパスでコマンド を記述してください。

○ cron で起動させる perl, シェルスクリプト(sh)で日本語を使用する時の文字化け対策

1.
Tera Term 使用して遠隔管理しているサーバ機では、ユーザの文字コードを初期設定で eucJP( EUC )に変更しているので cron で起動させる perl, シェルスクリプト(sh)で nkf を使用する時には、root 権限の文字コード( ja_JP.UTF-8 )になるので下記の様に 文字コードを一時的に変更して実行させてください。

   11 */1 * * *
export LANG=ja_JP.eucJP; /(DocumentRoot)/ondo_○○○.pl

2.
日本語を含むデータをコマンド等で取得・解析する時には、nkf コマンドで EUC コードに 変換してから解析をして下さい。
Tera Term 等から実行した時には、上手く動くのに「 cron での実行時には、設計道理にな らない 」という現象が発生します。( cron での実行は、root 権限なので文字コードは、 UTF-8 になります。 )
( Tera Term の文字コードが EUC 、サーバ側のユーザー文字コードも EUC になっているか らです。)


○ Tera Tarm で自作プログラム( perl, sh )等のデバック時に出力結果が文字化けする時の 対策方法


例えば、perl SD_Card_Check.pl を実行したら出力結果が 「 <b>SD J[h }Eg nj </b> 」 の様になってしまいました。
これを nkf を使用して perl SD_Card_Check.pl | nkf -e と実行させると出力結果は、下記の様に正しく表示します。
つまり、Tera Term 側の文字コード EUC に変換して出力する指定を追加するだけです。


   perl SD_Card_Check.pl | nkf -e ----> 「 <b>SD カード マウント OK </b>

3.
cron で起動させた perl のプログラムで日本語を使用して無くとも、プログラム内から、 実行させるシェルスクリプト(sh)内で日本語を使用している時には、
    
export LANG=ja_JP.eucJP; を追加して実行させてください。


17. 自前プログラムでダイナミック DNS を定期更新させる。

 2020年10月10日 変更( DiCE の処理関係を削除し、下記を追加する。)
ダイナミック DNS サービスとは、動的( ダイナミック )に、変動するユーザーのグローバルIPアドレスに対して、固定のホスト名( ドメイン名 )でつないでくれるサービスのことです。 一般的に ネームサーバー( 別名 DNS サーバー ・ DNS とは Domain Name System と呼んでいます。)

長年ネームサーバーの更新は、DiCE に頼って行ってきましたが、最近、更新してもすべて 「 Error: エラー! 」になり、対策に思案してきました。

色々検証しましたが、解決することができないので、自前ですることにしました。
私のドメインのネームサーバーは、VALUE DOMAIN を使用しています。
VALUE DOMAIN のネームサーバーの更新は、下記の様なコマンドを送信することで出来ます。

https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[ドメイン]&p=[パスワード]&h=[ホスト名]&i=[IP アドレス]

なお、&i=[IP アドレス] を諸略した時には、アクセス時のグローバル IP アドレスが割り振られます。
このコマンドでは、a レコード( ホストのIPアドレス )のみの書き換えになります。

このコマンドを利用して sh (シェルスクリプト)で、下記の様なプログラムを作成して crontab で定期的に実行させネームサーバーの定期更新( 1日と15日 )を させる方法にしました。( たぶん、DiCE の処理もこのコマンドで処理していると思います。)
crontab で定期更新 1日と15日 の 23 時に実行させるのは、
* 23 1,15 * * /root/VALUE_DOMAIN_DNS_set.sh > /dev/null 2>&1
と設定しています。

  プログラムの説明

アクセス用のコマンドは、sh からは、wget を使用して行います。
実行結果は、DiCE のログと同じファイルに追加書き込みしています。
今まで、DiCE のログをチェックしてきたので、同じファイルにすることにより、DiCE のログとしてチェックできるようにする為です。

https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip は、実行時のグローバルIPアドレスをログに残すために挿入しています。

sleep 2s は、同じサイトを連続してアクセスしないよう、待ち時間を入れてます。

vi VALUE_DOMAIN_DNS_set.sh

----------------------------------------------------------------------
#!/usr/bin/sh
#
# 
VALUE DOMAIN DNS サーバー 更新処理 IPアドレスは、省略
# 
省略時は、アクセス時のIPアドレスがセットされる。
#
#  
date コマンド %-d : 先頭の 0 カット
#  
%_H : 先頭の 0 をスペースにする H : 24時間表示
#  
mm/dd hh:mm 形式 日付データ作成
#
echo -ne "$(date +"%_m")/$(date +"%-d") $(date +"%_H"):$(date +"%M")\n" >> /usr/local/DiCE/log/events.log
#
#   
IPアドレス取得
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip' >> /usr/local/DiCE/log/events.log
#
#   
改行 追加
#
echo -ne "\n" >> /usr/local/DiCE/log/events.log
#
sleep 2s     
# 2 秒待
#
#  
VALUE DOMAIN ネームサーバー登録IPアドレス更新
#
wget -O - 'https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=XXXXXX.XXX&p=○○○○&h=*' >> /usr/local/DiCE/log/events.log
#
----------------------------------------------------------------------

※ wget -O - (大文字オー)で実行結果を書き出す。(引数に「-」を指定すると標準出力)
※ >> /usr/local/DiCE/log/events.log で出力結果を events.log へ追加する。
※ XXXXXX.XXXは、www 無しのドメイン名です。
※ 〇〇〇〇は、VALUE DOMAIN ログイン用のパスワードです。
※ echo -ne は、改行(\n)を echo コマンドで有効にさせるためのオプションです。
※ 他社のネームサーバーを利用したいときには、最終行の https:// の設定以下をそのネームサーバーの仕様に合わせて使用ください。


下記は、上記のプログラムを実行した時の出力結果です。

10/9 23:00
119.150.8.211
status=0
OK

   グローバルIPアドレスが、変化したときの対策

私のサーバ機の環境で グローバル IP アドレス が、変化する要因は、99% 停電によるモデム(ブロードバンドルータ)の再起動によるインターネットサービスプロバイダ(ISP)の グローバル IP アドレス 再割り当てです。
その他、光回線のメンテナンス等て、数年に一回ほどありました。( 事前に連絡ありました。)

私は、その都度 VALUE DOMAIN に直接アクセスして グローバル IP アドレス の変更を手作業で行ってきました。
この方法だと、10〜20分でネームサーバーが反映してくれました。

アクセス先は、https://www.value-domain.com/moddns.php?action=moddns2&domainname=[ドメイン] で直ぐログインできます。

DiCE 等のアプリからの グローバル IP アドレス 変更では、数時間〜2日かかるので現実的ではありません。

なお、VALUE DOMAIN のホームページには、「 通常、24〜48時間程度かかります。
データベースの混雑によっては、それ以上かかる場合がございます。
汎用JPドメインの場合は、翌日の午前4〜5時頃にレジストリのデータベースが更新されますので、その時間以降の反映となります。」と掲載されています。

以上のことから、私の場合 グローバル IP アドレス の変更の自動検知は、したとしても一日一回程度で良いのかと思うことから、 不要と結論付け自動検知の処理を組み込むを止め、変更時は、手作業で変更作業をすることにしました。

グローバル IP アドレス の定期更新は、最低でも月一回程度しないとネームサーバー側に無視されるので上記の方法で定期更新を実行するようにしました。

※※ 参考になりますか?。[ グローバル IP アドレス 変化チェックのプログラム ] ※※

下記の様な、グローバル IP アドレス 変化チェックのプログラムを作ってみました。

下記 crontab は、10分毎実行させる時の設定例です。

*/10 * * * * /root/IP_Check.sh > /dev/null 2>&1

vi IP_Check.sh

#!/usr/bin/sh
#
#------------------------------------------------
#
モデム(ブロードバンドルータ)が、管理しているIPアドレスを取得
#
Atermip=$(wget -O - 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip')
#
#Atermip="000.000.000.000"   
# Test 用 IPアドレス
echo "Aterm G.IP $Atermip"      
# 確認用
#
#------------------------------------------------
#
dig コマンドでネームサーバが認識しているIPアドレスを取得
#
結果を get_data に格納する
#
;; ANSWER SECTION:行の次の行を取得する( grep -A 1 )
#
get_data=$(dig
[www 付きドメイン名]> | grep -A 1 ";; ANSWER SECTION:" | grep [www 付きドメイン名])
#
#
ドメインのある行のみが抽出されます
#
IP_file_Array=(`echo ${get_data}`) 
# 配列として代入
#
echo "dig G.IP ${IP_file_Array[4]}"   
# 5番目に IPアドレス 確認用
#
myip=$(echo -n ${IP_file_Array[4]})
# 改行削除
#
#echo "${myip} 改行削除"       
# 改行削除確認用
#---------------------------------------------------------
#
グローバルIPアドレス 判定  相違の時 更新処理をさせる。
#
if [ ${Atermip} != ${myip} ]; then
#
        echo "IPアドレス変更"
## ( ここに グローバルIPアドレス 更新の処理を記述する。)
#
else
        echo "変化無し"
fi
#
# 終了
#------------------------------------------------

私のサーバ機では、ホームページ上から、今の ネームサーバー側 ・ モデム側 の グローバル IP アドレス を取得して、表示するページを用意して グローバル IP アドレス 変化した時に 慌てずに VALUE DOMAIN にワンクリックでアクセスして変更作業が出来るように備えています。
( すべての作業は、同一 LAN 内で行っています。)
下記がそのページの表示結果です。

A

18. 自宅サーバの管理・運用監視 等


1 ). apache のメンテナンス用に、httpd-2.4.XX と httpd-2.4.34 を常駐させ、
  コマンドで簡単に切り替えられる様にする。


数か月単位で httpd-2.4.XX、nghttp2、brotli のバージョンアップあり、その都度、サーバを停止するのは、まずいので バージョンアップに対するメンテナンスの時には、一時的に apache を htppd-2.4.34 に切り替えて行えるように htppd-2.4.34 も 動作するよう設定しておきます。
なお、SELinux のポリシーは、htppd-2.4.34 用として新規に設定をする必要があります。

httpd-2.4.XX と httpd-2.4.34 を切り替えは、sh でプログラムを作り root に登録してコマンドで簡単に切り替えられる様にしています。

下記は、その切り替え用のプログラム( sh プログラム )です。
動作確認の為に status 表示をするようにしています。


  apache2 ---->> httpd-2.4.34 への切り替え

#!/bin/bash
# apache2 ---->> httpd
#-----------------------------
# apache2 の 無効化
systemctl disable apache2
systemctl stop apache2

# httpd の有効化
systemctl enable httpd
systemctl start httpd
systemctl status httpd
#-----------------------------

  httpd-2.4.34 ---->> apache2 への切り替え

#!/bin/bash
# httpd ---->> apache2
#-----------------------------
# httpd の 無効化
systemctl disable httpd
systemctl stop httpd

# apache2 の有効化
systemctl enable apache2
systemctl start apache2
systemctl status apache2
#-----------------------------

2 ). CPU 温度の監視

CPU 温度を取得するには、sensors のインストールが必要となります。
lm_sensors のrpm パッケージは、その時点での最新版をインストールしてください。
古いと依存性エラーが発生します。その時には、yum でインストールします。
下記は、2019年 9月 現在の最新バージョンのインストールです。


 cd /usr/local/src; \
 rpm -Uvh lm_sensors-3.4.0-17.20180522git70f7e08.el8.x86_64.rpm

   dnf でのインストールは、下記の通りです。

      dnf -y install lm_sensors

運用・管理は、32bit CentOS 6.7 自宅サーバ構築を参照ください。

※※ CPU 温度を取得する SSI プログラム例の紹介 ※※

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

    #!/usr/bin/perl
    #----------------------------------------------------
    #  lm_sensorsを使用して CPU の温度を抽出する。
    #----------------------------------------------------
    # 先頭に Core の文字列がある行のみ抽出する

    $Data1 = `/bin/sensors | grep Core`;

    # 複数 CPU の時には、一行毎分割する
    @Data2 = split("\n",$Data1);
    # 文字列を スペースで分割する
    @Data = split(" ",$Data2[0]);
    # 3番目の配列に温度データがある> 
    $temp = substr( $Data[2], 0,3 );
    # 温度データを HTML へ出力する
    print "CPU 温度 $temp 度\n";

 -----------------------------------------------------------
3 ). ftp のインストール

   ftp は、ホームページデータなどのバックアップの際、外部へ出力する際に必要となります。

      cd /usr/local/src; \
      rpm -Uvh ftp-0.17-78.el8.x86_64.rpm

   dnf でのインストールは、下記の通りです。

      dnf -y install ftp


TOPへ戻る