www.smiyasaka.com は、 2021 年 1月から CentOS Stream 8 にバージョンアップしました。

● CentOS Stream 9 ●
●   httpd-2.4.54 のインストールと自宅サーバ構築  ●

アクセス数 昨日 5 今日 7
  累計 4,667   

CentOS-Stream-9-20220613.0-x86_64-dvd1.iso (8.1GB)
自 宅 サ ー バ を 試 験 的 に 構 築 し て み ま し た。

サーバ構築は、openssl 1.1.1X + nghttp2 + Brotli + httpd-2.4.54 +
mod_dosdetector(DoS 攻撃対策) の 構成で行います。


セキュリティは、ファイアウォール・SELinux とも 有効 の設定で行っています。

動作確認は、ホームページデータ・Let's Encrypt の認証鍵データを現用サーバ機から、
コピーし、ローカルネットワークで確認しました。

構築方法は、CentOS Stream 8 とほとんど変わりがありません。
現時点(2022年 3月 現在)で CentOS Stream 9 で dnf install epel-release の対応がされました。
しかし、リポジトリを使用してインストールする certbot, python3-certbot-apache 等は、対応がありません。

CentOS Stream 9 の標準 apache は、
2022年 3月現在 デフォルトで httpd-2.4.51-5 ( OpenSSL 3.0.1 , http2 対応 ) がサポートされていますので
改めて httpd-2.4.54 をインストールする意味がないのですが一応試験的に試してみました。

( CentOS Stream 9 で httpd-2.4.51 を使用する方法は、[CentOS 8.X httpd-2.4.37-XX ] で解説している方法と同様でOKです。 )

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

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


0.  現在稼働中のサーバ機のスペック


このウェブサイトは、
下記のシステム仕様で小型パソコンを使用して私の自宅から発信しています。


サーバ機の OS は、 Oracle Linux 8.10  64bit
  Web サーバは、 httpd-2.4.62  を使用して運用しています。
SELinux mode : Enforcing ( 有効 )
SSL 認証鍵の証明書 = Let's Encrypt を使用・SSL プロトコル HTTP/2 に対応
( Let's Encrypt は、一か月毎更新しています。 )
カーネルのバージョンは、2024.11.04 に更新された
  Kernel 5.15.0-302.167.6.el8uek.x86_64 です。

[ サーバ機 連続稼働時間 7 日と 14 時間 48 分 SSD 機器温度 33 ]
[ SSD 稼動時間 1,925 時間 ( 80 5 時間 ) ]
[ CPU 利用率 0.36 % CPU 温度 +33 ]

稼 働 中 サ ー バ 機 の ス ペ ッ ク
-------------------------------------------------------------------------
私の自宅サーバ機のスペック
型   式 :
Mouse Pro-M591F-WA CPU : Intel i3-7100U 2コア/4スレッド 2.40GHz
消費電力 : 約 10W   メ モ リ : 8GBSSD : 128GB
インターネット回線 : STNet 光回線(ギガビット対応)
USBカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点)
-------------------------------------------------------------------------

1. CentOS Strem 9 のインストール


CentOS-Stream-9-2022XXXX.X-x86_64-dvd1.iso の更新履歴


2022年  1月  6日付けで CentOS-Stream-9-20220106.0-x86_64-dvd1.iso
2022年  1月  7日付けで CentOS-Stream-9-20220107.0-x86_64-dvd1.iso
2022年  1月12日付けで CentOS-Stream-9-20220112.1-x86_64-dvd1.iso
2022年  1月13日付けで CentOS-Stream-9-20220113.0-x86_64-dvd1.iso
2022年  1月17日付けで CentOS-Stream-9-20220117.1-x86_64-dvd1.iso
2022年  1月18日付けで CentOS-Stream-9-20220118.0-x86_64-dvd1.iso
2022年  1月20日付けで CentOS-Stream-9-20220120.0-x86_64-dvd1.iso
2022年  1月21日付けで CentOS-Stream-9-20220121.1-x86_64-dvd1.iso
2022年  1月25日付けで CentOS-Stream-9-20220125.0-x86_64-dvd1.iso
2022年  1月27日付けで CentOS-Stream-9-20220127.0-x86_64-dvd1.iso
2022年  2月  1日付けで CentOS-Stream-9-20220201.0-x86_64-dvd1.iso
2022年  2月  2日付けで CentOS-Stream-9-20220202.0-x86_64-dvd1.iso
2022年  2月  4日付けで CentOS-Stream-9-20220204.0-x86_64-dvd1.iso
2022年  2月  7日付けで CentOS-Stream-9-20220207.0-x86_64-dvd1.iso
2022年  2月  8日付けで CentOS-Stream-9-20220208.1-x86_64-dvd1.iso
2022年  2月11日付けで CentOS-Stream-9-20220211.1-x86_64-dvd1.iso
2022年  2月16日付けで CentOS-Stream-9-20220216.0-x86_64-dvd1.iso
2022年  2月17日付けで CentOS-Stream-9-20220217.0-x86_64-dvd1.iso
2022年  2月21日付けで CentOS-Stream-9-20220221.0-x86_64-dvd1.iso
2022年  2月22日付けで CentOS-Stream-9-20220222.0-x86_64-dvd1.iso
2022年  2月23日付けで CentOS-Stream-9-20220223.0-x86_64-dvd1.iso
2022年  2月24日付けで CentOS-Stream-9-20220224.0-x86_64-dvd1.iso
2022年  3月  2日付けで CentOS-Stream-9-20220302.0-x86_64-dvd1.iso
2022年  3月  9日付けで CentOS-Stream-9-20220309.0-x86_64-dvd1.iso
2022年  3月10日付けで CentOS-Stream-9-20220310.0-x86_64-dvd1.iso
2022年  3月15日付けで CentOS-Stream-9-20220315.0-x86_64-dvd1.iso
2022年  3月21日付けで CentOS-Stream-9-20220321.4-x86_64-dvd1.iso
2022年  3月25日付けで CentOS-Stream-9-20220325.0-x86_64-dvd1.iso
2022年  3月28日付けで CentOS-Stream-9-20220328.0-x86_64-dvd1.iso
2022年  3月31日付けで CentOS-Stream-9-20220331.0-x86_64-dvd1.iso
2022年  4月  5日付けで CentOS-Stream-9-20220405.0-x86_64-dvd1.iso
2022年  4月13日付けで CentOS-Stream-9-20220413.0-x86_64-dvd1.iso
2022年  4月19日付けで CentOS-Stream-9-20220419.0-x86_64-dvd1.iso
2022年  4月26日付けで CentOS-Stream-9-20220426.0-x86_64-dvd1.iso
2022年  5月  2日付けで CentOS-Stream-9-20220502.1-x86_64-dvd1.iso
2022年  5月  5日付けで CentOS-Stream-9-20220505.0-x86_64-dvd1.iso
2022年  5月  9日付けで CentOS-Stream-9-20220509.0-x86_64-dvd1.iso
2022年  5月16日付けで CentOS-Stream-9-20220516.0-x86_64-dvd1.iso
2022年  5月23日付けで CentOS-Stream-9-20220523.0-x86_64-dvd1.iso
2022年  5月31日付けで CentOS-Stream-9-20220531.0-x86_64-dvd1.iso
2022年  6月  7日付けで CentOS-Stream-9-20220607.0-x86_64-dvd1.iso
2022年  6月13日付けで CentOS-Stream-9-20220613.0-x86_64-dvd1.iso
2022年  6月21日付けで CentOS-Stream-9-20220621.1-x86_64-dvd1.iso
2022年  6月29日付けで CentOS-Stream-9-20220629.0-x86_64-dvd1.iso
2022年  7月  5日付けで CentOS-Stream-9-20220705.0-x86_64-dvd1.iso
2022年  7月11日付けで CentOS-Stream-9-20220711.0-x86_64-dvd1.iso
2022年  8月22日付けで CentOS-Stream-9-20220822.0-x86_64-dvd1.iso
2022年  9月19日付けで CentOS-Stream-9-20220919.0-x86_64-dvd1.iso
2022年  9月28日付けで CentOS-Stream-9-20220928.0-x86_64-dvd1.iso
2022年  10月  3日付けで CentOS-Stream-9-20221003.2-x86_64-dvd1.iso
2022年  10月17日付けで CentOS-Stream-9-20221017.0-x86_64-dvd1.iso
2022年  10月24日付けで CentOS-Stream-9-20221024.0-x86_64-dvd1.iso

上記の通り次々と iso のバージョンが更新されています。

アップデートは、日々で行われていますので、インストールする時には、最新バージョンの iso で行ってください。

2022.03.17 現在の CentOS-Stream-9-20220613.0-x86_64-dvd1.iso (8.1GB) でインストール・動作確認を本ページでの手順で行いました。
( カーネルのバージョンは、2022.06.10 付け Linux 5.14.0-109.el9.x86_64 です。)
その検証結果 ---> インストール時の言語指定 日本語がトップにありませんでした。

インストールの方法は、基本的には、CentOS Stream 8 と同じですが、若干表示形式が変更されています。
ソフトウエアの選択は、英文になっています。

[ CentOS Stream 9-2022XXXX のダウンロードは、ここをクリック] してください。

ダウンロードは、「 セントOSストリーム 」からもできます。
但し、iso バージョンは、CentOS-Stream-9-latest-x86_64-dvd1.iso になります。

[セントOSストリームからのダウンロードは、ここをクリック] してください。

ソフトウエアの選択は、「Minimal Install」+ 「Development Tools」を選択して行っています。
root のパスワード設定画面でチェック項目が二か所有りますがどちらの項目もチェック無しにしています。 root SSH ログインをしたい時には、[パスワードによる root SSH ログインを許可]にチェックを入れて下さい。

インストールの詳細は、CentOS Stream 8 のインストールを参照してください。



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


ここからは、 Windows側から、Tera Term でアクセスして行います。

○ Tera Term での接続は、IP アドレスとポート番号 22 で行います。
  後は、[ ユーザー名 ]と[ ユーザー のパスワード ]でログインします。


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

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

dnf -y groupinstall "Base" "Additional Development"

※※ 参考情報 ※※

CentOS-Stream-9-20220201.0-x86_64-dvd1.iso での groupinstall は、下記の様にしないとできませんでした。

dnf -y groupinstall "Base"
dnf -y --skip-broken groupinstall "Additional Development"


CentOS-Stream-9-20220204.0-x86_64-dvd1.iso では、修正されていました。

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

日本語コード UTF-8 にする時には、ここをパスしてください。

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

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

vi /etc/locale.conf

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

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

変更した日本語コードを反映させるには、一度 exit で TeraTerm を閉じて再度ログインします。

③ Windows側から、Tera Term でアクセスするポート番号を変更します。

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

vi /etc/ssh/sshd_config

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

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

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

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

success が表示すれば OK

④-2 SELinux に Port 2222 を semanage コマンドで追加します。

semanage port -a -t ssh_port_t -p tcp 2222

SELinux が有効としている ssh の Portを確認します。

semanage port -l | grep ssh

ssh_port_t    tcp  2222, 22

Port 2222 が追加されています。

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

firewall-cmd --reload

success が表示すれば OK

⑤ sshdの再起動

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

⑥ ファイアウォール( 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)
以下省略

⑦ ここで一度 再起動[ reboot を入力 ]して再度接続し、TCPポート 2222 でログインします。
  これで文字化けは、解消します。


各種コマンドの設定を連続で実行させてみました。
以下が、その設定コマンドの一部ですが、サーバ構築が簡単に済むようになります。

簡単なプログラムの書込みは、ヒアドキュメント( cat << EOF > )で行っています。



○○○○は、貴方のユーザー名です。

〇 ポート番号の変更から、public.bak.xml への https,ntp,ftp 追加設定
------------------------------------------------------

sed -i 's/#Port 22/ Port 2222/g' /etc/ssh/sshd_config\
 && \
firewall-cmd --zone=public --add-port=2222/tcp --permanent\
 && \
semanage port -a -t ssh_port_t -p tcp 2222\
 && \
semanage port -l| grep ssh\
 && \
cp /etc/firewalld/zones/public.xml /home/○○○○/public.bak.xml;\
sed -i -e"s/<service name=\"dhcpv6-client\"\/>/<service name=\"http\"\/>\n\
  <service name=\"https\"\/>\n\
  <service name=\"ntp\"\/>\n\
  <service name=\"ftp\"\/>/g" /etc/firewalld/zones/public.xml; \
cat /etc/firewalld/zones/public.xml

-----------------------------------------------------------
〇 ここまでで 次回のログインは、ポート番号 2222 でOKです。
-----------------------------------------------------------

ここで、vsftpd-3.0.3-49.el9.x86_64.rpm をドラッグする
~/ を消去 か /home/○○○○ を書き込む

-------------------------------------------------------
〇 vsftpd のインストールから、各種設定まで
-------------------------------------------------------

cp /home/○○○○/vsftpd-3.0.3-49.el9.x86_64.rpm /usr/local/src/; \
cd /usr/local/src/; \
rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm\
 && \
cp /etc/vsftpd/vsftpd.conf /home/○○○○/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=50012" /etc/vsftpd/vsftpd.conf\
 && \
firewall-cmd --zone=public --add-port=50010-50012/tcp --permanent; \
firewall-cmd --reload\
 && \
echo "○○○○" >> /etc/vsftpd/chroot_list; \
echo "vsftpd : ALL" >> /etc/hosts.deny; \
echo "vsftpd : 192.168.0.0/24" >> /etc/hosts.allow; \
systemctl start vsftpd; \
systemctl enable vsftpd\
 && \
setsebool -P ftpd_full_access 1;\
setsebool -P httpd_enable_ftp_server 1;\
setsebool -P httpd_enable_homedirs 1;\
firewall-cmd --reload

-----------------------------------------------------------
〇 ここで 各ソースプログラムを ffftp で転送できます。
-----------------------------------------------------------

# インストールプログラムの転送を実行
chmod 777 -R /home/○○○○/root_program/;\
/home/○○○○/root_program/tensou.sh;\
#;\
# chrony.conf;\
cp /etc/chrony.conf /home/○○○○/chrony.conf.bak; \
sed -i -e "s/pool 2\.centos/#pool 2\.centos/
/pool 2\.centos\.pool\.ntp\.org iburst/aserver ntp\.nict\.jp\n\
server ntp1\.jst\.mfeed\.ad\.jp\n\
server ntp2.\jst.mfeed\.ad\.jp" /etc/chrony.conf;\
systemctl restart chronyd\
 && \
# service_stop プログラムの書込み;\
cat <<EOF > /home/○○○○/service_stop.sh
#!/usr/bin/sh
systemctl stop atd.service
systemctl disable atd.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 smartd.service
systemctl disable smartd.service
systemctl stop dm-event.socket
systemctl disable dm-event.socket
echo "サービス_STOP 完了"
EOF
 && \
chmod 755 /home/○○○○/service_stop.sh;sh /home/○○○○/service_stop.sh

------------------------------------------------
〇 ここからは、httpd-2.4.54 のインストールです。
------------------------------------------------

# perl-core のインストール;\
cd /usr/local/src/;\
dnf install -y perl-core\
 && \
# openssl-1.1.1o.tar.gz のインストール;\
tar zxf openssl-1.1.1o.tar.gz;\
cd ./openssl-1.1.1o;\
./config \
--prefix=/usr/local/openssl \
--openssldir=/usr/local/openssl/shared \
enable-md2 enable-rc5 sctp zlib;\
make && make install\
 && \
# openssl のパスを通します。;\
echo /usr/local/openssl/lib > /etc/ld.so.conf.d/openssl.conf;\
ldconfig\
 && \
# nghttp2-1.47.0.tar.gz のインストール;\
cd /usr/local/src; \
tar xvzf nghttp2-1.47.0.tar.gz; \
cd nghttp2-1.47.0/; \
env OPENSSL_CFLAGS="-I/usr/local/openssl/include" \
OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto" \
./configure \
 --disable-static  \
 --enable-lib-only \
 -enable-app;\
make && make install\
 && \
# cmake のインストール;\
cd /usr/local/src;\
dnf -y install cmake\
 && \
# brotli-1.0.9.tar.gz のインストール;\
cd /usr/local/src;\
tar xvzf brotli-1.0.9.tar.gz; \
cd brotli-1.0.9/; \
mkdir out && cd out; \
../configure-cmake;\
make;\
make install

---------------------
〇 チョット休憩です。
---------------------

# apr-1.7.0.tar.gz のインストール;\
cd /usr/local/src; \
tar xzvf /usr/local/src/apr-1.7.0.tar.gz; \
cd ./apr-1.7.0; \
./configure; \
make && make install;\
cd /usr/local/src\
 && \
# apr-util-1.6.1.tar.gz のインストール;\
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\
 && \
# httpd-2.4.54.tar.gz のインストール;\
cd /usr/local/src; \
tar xzvf httpd-2.4.54.tar.gz; \
cd ./httpd-2.4.54;\
./configure \
  --enable-http2 \
  --enable-brotli \
  --with-brotli=/usr/local/lib \
  --enable-ssl \
  --with-ssl=/usr/local/openssl \
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \
  --enable-rewrite \
  --enable-so \
  --enable-mods-shared=all;\
make && make install

-------------------------------------
〇 連続コマンド紹介は、ここまでです。
-------------------------------------


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-49.el9.x86_64.rpm
ftp-0.17-89.el9.x86_64.rpm
---------------------------------------------------------------
httpd
httpd-2.4.XX.tar.gz
旧バージョン(httpd-2.4.XX)から最新バージョンhttpd-2.4.54)の httpd ダウンロード
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
openssl-1.1.1X.tar.gz
nghttp2-1.XX.X.tar.gz
brotli-1.0.X.tar.gz
---------------------------------------------------------------
fswebcam
fswebcam-20100622.tar.gz
fswebcam-20200725.tar.gz
---------------------------------------------------------------
sendmail
---------------------------------------------------------------
logwatch
---------------------------------------------------------------
clamav Fedora のパッケージを使用します。
libprelude-5.2.0-9.el9.x86_64.rpm
clamav-0.103.5-1.el9.x86_64.rpm
clamav-update-0.103.5-1.el9.x86_64.rpm
clamav-lib-0.103.5-1.el9.x86_64.rpm
clamav-data-0.103.5-1.el9.noarch.rpm
clamav-filesystem-0.103.5-1.el9.noarch.rpm
---------------------------------------------------------------
chkrootkit
chkrootkit.tar.gz
---------------------------------------------------------------
nkf-2.1.5.tar.gz
---------------------------------------------------------------
sensors


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 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 smartd.service
systemctl disable smartd.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;\
cat /etc/firewalld/zones/public.xml;\
firewall-cmd --reload


変更内容を確認します。

<?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 内のみの接続にしています。また、個人使用の為、ログは取りません。


※ 役に立つ情報 ※

ffftp が使えないので、vsftpd の rpm の転送は、Tera Term の転送機能を利用して行います。
その方法は、実に簡単です。
 下記にその手順を説明します

----------------------------------------------
Tera Term が、表示している状態で vsftp の
rpm が保存されているフォルダを開きます。
開いたら、書込みたい vsftp を Tera Term の
画面上にドラッグします。
そうすると右に表示している画面が表示します。
矢印に示すように書き込み先のパスを
書き込むか、
送信先(T)の内容 " ~/ " を削除します。
最後に[OK]をクリックして終了です。
----------------------------------------------

写真vsftp_SSH

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

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

cp /home/miyasaka/vsftpd-3.0.3-49.el9.x86_64.rpm /usr/local/src/;\
cd /usr/local/src/;\
rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm


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

 
dnf -y install vsftpd

 インストール済み:
  vsftpd-3.0.3-48.el9.x86_64

 完了しました!

② vsftpd の設定

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

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

下記の操作を 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モード通信用 任意のポート番号

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

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

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

  success が表示すれば OK

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

 
firewall-cmd --reload

  success が表示すれば OK

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

 
vi /etc/vsftpd/chroot_list または、

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

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

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

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

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

 
vi /etc/hosts.deny

 
vsftpd:ALL

  または、

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

⑤-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アドレスを許可する設定です。

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

 
systemctl enable vsftpd; \
  systemctl start vsftpd


  # が表示すれば OK です。

⑦ ③ ~ ⑥ のコマンドをまとめて実行させると下記の様になります。

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アドレスは、あなたの環境に合わせてください。

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

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


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


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

             ※※ 準備中 ※※

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

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

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


pool 2.centos.pool.ntp.org iburst

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

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

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

sed -i -e "s/pool 2\.centos/#pool 2\.centos/
/pool 2\.centos\.pool\.ntp\.org iburst/aserver ntp\.nict\.jp\n\
server ntp1\.jst\.mfeed\.ad\.jp\n\
server ntp2.\jst.mfeed\.ad\.jp" /etc/chrony.conf

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

systemctl restart chronyd.service

# が表示すば、OKです。

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

systemctl enable chronyd.service

# が表示すば、OKです。

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

chronyc sources

下記の様に表示します。


 =============================================================================== 
 ^? ntp-a3.nict.go.jp             1   6     1     5   -161us[ -161us] +/- 8903us 
 ^? ntp1.jst.mfeed.ad.jp          2   6     1     5   -920us[ -920us] +/-   65ms 
 ^? ntp2.jst.mfeed.ad.jp          2   6     1     4   -864us[ -864us] +/-   56ms 
 ------------------------------------------------------------------------------- 

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


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


※※ 以下 準備中 ※※


10-1. SELinux を有効にした時の apache2 の

  ポリシー設定の詳細は、[ centOS Stream 8 サーバ構築 ]を参照して下さい。


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

※※※ 注意事項 ※※※
1. Let's Encrypt の認証鍵データ更新に必要なパッケージのインストール。
dnf install -y epel-release と certbot python3-certbot-apache のパッケージが、まだ対応されていない為、 認証鍵データは、CentOS Strem 8 で取得したデータを使用しています。

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

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

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


    https://www.openssl.org/source/

make install で 
sh: pod2html: command not found の
エラーが出るので perl-core をインストールしします。
dnf install -y perl-core

   2022年 6月 現在、

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

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

  make && make install

ライブラリへのパス通します。
パスを通さないと httpd-2.4.XX のインストール時に libssl.so.1.1 not found のエラーが出ます。

echo /usr/local/openssl/lib > /etc/ld.so.conf.d/openssl.conf;\
ldconfig

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

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


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

   2022年 9 月 現在、

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

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

※※ 注意 ※※

nghttp2-1.42.0 で ./configure の途中で下記のようなエラーがでました。


  ERROR!
  You probably have to install the development version of the Python package
  for your distribution. The exact name of this package varies among them.

このエラーは、ほっといても問題ないようですが、python3-devel を dnf でインストールすることで出なくなりました。

cd /usr/local/src;\
dnf -y install python3-devel

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

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


nghttp2-1.43.0 以降では、--disable-static と --enable-lib-only を入れないとエラーになります。

--disable-static とは、スタティックライブラリをインストールしないようにします。
--enable-lib-only とは、libnghttp2のみをビルドします。

コンパイル後下記の様に表示するか確認してください。
nghttp2-1.45.1 から、表示項目が増えています。



    Test:
      CUnit:          no (CFLAGS='' LIBS='')
      Failmalloc:     yes
    Libs:
      OpenSSL:        yes (CFLAGS='-I/usr/local/openssl/include' LIBS='-L/usr/local/openssl/lib -lssl -lcrypto')
      Libxml2:        yes (CFLAGS='-I/usr/include/libxml2 ' LIBS='-lxml2 ')
      Libev:          no (CFLAGS='' LIBS='')
      Libc-ares:      yes (CFLAGS='' LIBS='-L/usr/usr/lib64 -lcares ')
      libngtcp2:      no (CFLAGS='' LIBS='')
      libngtcp2_crypto_openssl: no (CFLAGS='' LIBS='')
      libngtcp2_crypto_boringssl: no (CFLAGS='' LIBS='')
      libnghttp3:     no (CFLAGS='' LIBS='')
      libbpf:         no (CFLAGS='' LIBS='')
      Libevent(SSL):  no (CFLAGS='' LIBS='')
      Jansson:        no (CFLAGS='' LIBS='')
      Jemalloc:       no (CFLAGS='' LIBS='')
      Zlib:           yes (CFLAGS='' LIBS='-lz ')
      Systemd:        yes (CFLAGS='' LIBS='-lsystemd ')
      Boost CPPFLAGS:
      Boost LDFLAGS:
      Boost::ASIO:
      Boost::System:
      Boost::Thread:
    Third-party:
      http-parser:    no
      MRuby:          no (CFLAGS='' LIBS='')
      Neverbleed:     no
    Features:
      Applications:   no
      HPACK tools:    no
      Libnghttp2_asio:no
      Examples:       no
      Python bindings:no
      Threading:      yes
      HTTP/3 (EXPERIMENTAL): no

   make && make install

5. httpd-2.4.54 のインストール

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

 〇 httpd-2.4.54 の configure

    cd /usr/local/src/;\
    tar xzvf httpd-2.4.54.tar.gz; \
    cd ./httpd-2.4.54;\
    ./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.54
        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.54 の make と install を実行する。

   make && make install

6. httpd-2.4.54 の 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"

    53  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.3

        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 の正規表現等が良く理解できました。( 自己満足 )

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

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

下記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 の読み込みを行う。

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

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

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

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

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

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

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

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

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

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



vi ( ドキュメントルートのパス )/.htaccess

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /

### 2020.12.08 追加 ###

# 有効化(DoS攻撃確定判定時)
RewriteCond %{ENV:SuspectHardDoS} =1

# 条件に合致する場合は503ステータスをレスポンス
RewriteRule ^.*$ - [R=503,L]

#
###   301リダイレクト http ---> htpps ###
#
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#
###   index.htmlあり→index.html無し  ###
#
RewriteCond %{REQUEST_URI} ^.*/index\.html$
RewriteRule ^(.*)index.html$ https://%{HTTP_HOST}/$1 [R=301,L]
#
###   www ありのドメインに統一する  ###
#
   RewriteCond %{HTTP_HOST} ^smiyasaka\.com$ [NC]
   RewriteRule ^(.*) https://www.smiyasaka.com%{REQUEST_URI} [R=301,L]
#
</IfModule>

ErrorDocument 401 /error401.html
ErrorDocument 403 /error403.html
ErrorDocument 404 /error404.html
ErrorDocument 500 /error500.html
ErrorDocument 503 /error503.html


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

9. 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/

10. エラーのチェック

   /usr/local/apache2/bin/apachectl configtest

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

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

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

   vi /usr/lib/systemd/system/apache2.service 
 ------------------------------------------------------
  [Unit]
  Description=httpd-2.4.54 daemon
  After=network.target <--- これを忘れないように

  [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     <-------  停止

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

systemctl start apache2

Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスして動作確認します。

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

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


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

13. Apache を DoS 攻撃から守る処理の導入

 ( 実際は、現用サーバ機から、コピーして使用しています。 )

apxs が、無いので、dnf で httpd-devel をインストールします。

dnf -y install httpd-devel

① mod_dosdetector のダウンロード

cd /usr/local/src/;\
git clone https://github.com/stanaka/mod_dosdetector.git


② mod_dosdetector のインストール( コンパイルは、不要です。)

インストールする前に apxs コマンドのパスを確認し、Makefile を修正してから、[ make install ] を実行します。
apxs コマンドパスの確認は、which apxs で行います。
CentOS8.X の場合は、/usr/bin/apxs のはずです。


Makefile の apxs コマンドのパス修正を修正します。

vi /usr/local/src/mod_dosdetector/Makefile

APXS=/usr/sbin/apxs
   ↓
APXS=/usr/bin/apxs

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

cd mod_dosdetector/;\
make install


③ mod_dosdetector.so のコピー

モジュールは、httpd-2.4.37 のモジュールとして作成されるので httpd-2.4.54 のモジュールエリヤにコピーします。

cp /usr/lib64/httpd/modules/mod_dosdetector.so /usr/local/apache2/modules/

※※ 参考情報 ※※

次回の httpd のインストールの為、mod_dosdetector.so を保存しておきます。
次回からは、保存してた mod_dosdetector.so をディレクトリ /usr/local/apache2/modules/ へ保存し直し、
モジュールに実行権限を与えるだけ済みます。


chmod 755 /usr/local/apache2/modules/mod_dosdetector.so

④ httpd.conf への設定

④-1
LoadModule dosdetector_module modules/mod_dosdetector.so の 1行をモジュールエリヤの最後に追加します。

④-2 下記 IfModule mod_dosdetector.c を 最終行の近くに挿入します。

<IfModule mod_dosdetector.c>>
  # 30 秒間に 100回 アクセスで オンする
  DoSDetection on
  DoSThreshold 100
  DoSHardThreshold 100
  DoSPeriod 30
  # 解除する時間 60秒
  DoSBanPeriod 60
  DoSShmemName  DoSshm
  DoSTableSize 100
  DoSForwarded on
  DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)
</IfModule>


上記の設定は、「 30秒間に 100回アクセスがあったら、DoS の環境変数 SuspectHardDoS を ON にします。
DoS の環境変数 SuspectHardDoS の解除は、60秒後に行う。」という内容です。


⑤ DoS攻撃を検知した時に表示させるエラーページの表示設定

⑤-1 設定は、.htaccess を開き、 RewriteBase / の後に以下を追加します。

# 有効化(DoS攻撃確定判定時)
RewriteCond %{ENV:SuspectHardDoS} =1
# 条件に合致する場合は503ステータスをレスポンス
# ( エラー警告ページ error503.html を表示させる。)
RewriteRule ^.*$ - [R=503,L]


⑤-2 エラーページ表示 HTML の設定

ErrorDocument 500 /error500.html の後に以下を追加します。

ErrorDocument 503 /error503.html

⑥ apache を再起動したら、終了です。

動作の確認は、一時的に 10回に設定して 30 秒以内に 10回以上、ページを切り替えてら、所定の 503 エラーのページが表示するかで行います。

14. エラーのチェック

/usr/local/apache2/bin/apachectl configtest


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


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

systemctl start apache2

Windows PC の Web で、サーバ機の LAN 内 IP アドレスを使いアクセスして動作確認します。

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

ホームページが表示している状態で 画面上で[ 右クリック ] ---> [ 開発者ツールで調査する。(N) ] をクリック、 しばらくすると画面右側に開発者ツールが表示します。次に上部メニュー [ ネットワーク ]をクリックし、ホームページを再表示させます。
プロトコル の表示がない時には、[ 名前 ]の欄でマウスの右クリックで表示される一覧表の プロトコル にチェックを入れて下さい。

名前・状態の次にプロトコルの欄があり、そこが h2 に成っていれば成功です。
なお、HTTPS は、プロトコル HTTP/1.1 です。


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

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

① 圧縮アルゴリズムフォーマット( 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 を実行します。

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

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

③ httpd-2.4.54 の再インストール

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

        cd /usr/local/src; \
        tar xzvf httpd-2.4.54.tar.gz; \
        cd ./httpd-2.4.54;\
        ./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 を実行します。

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

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

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

   #LoadModule brotli_module modules/mod_brotli.so


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

⑥ apache を起動します。

   systemctl start apache2


⑦ 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) モジュール
   (省略)

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


   圧縮結果のログデータは、管理者か゜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%) ………………

⑨ web ( Microsoft Edge or Google Chrome )での圧縮処理の確認

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

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

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

content-type:text/html

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

応答ヘッダーの情報
B

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

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

CentOS Stream 9 では、文字化けの現象は出ませんでした。
しかし、実行時にコンソールのモニター画面にエラーが出ます。( 原因は、不明 )
試しに、同じ PC で、OSを CentOS Stream 8 にして見ましたが、エラーは、出ませんでした。

① fswebcam-20200725 の展開と configure

     tar zxvf fswebcam-20200725.tar.gz;\
     cd ./fswebcam-20200725; \
     ./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

② make と インストール

     make; make install

以下で、終われば、インストール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

Logicool C270 の UVC 対応 USB カメラの輝度・明るさの調整は、下記の様に設定しています。
   -s Brightness=65%
   -s Contrast=15%   
<---- 明るさは、ここまで下げないと綺麗な画像になりません。
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カメラのシリアル番号なので同一機種でも、カメラを入れ替えれば変わります。)


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

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

    [ 2022年 1月 現在 ]
○ clamav-0.103.5-1.el9 のインストール・設定手順


インストールの順序は、下記の通りにしてください。
    「エラー: 依存性の欠如:」になります。


  cd /usr/local/src; \
  rpm -Uvh libprelude-5.2.0-9.el9.x86_64.rpm; \
  rpm -Uvh clamav-filesystem-0.103.5-1.el9.noarch.rpm; \
  rpm -Uvh clamav-data-0.103.5-1.el9.noarch.rpm; \
  rpm -Uvh clamav-lib-0.103.5-1.el9.x86_64.rpm; \
  rpm -Uvh clamav-update-0.103.5-1.el9.x86_64.rpm; \
  rpm -Uvh clamav-0.103.5-1.el9.x86_64.rpm


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

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


インストール済み:
clamav-0.103.5-1.el9.x86_64         clamav-data-0.103.5-1.el9.noarch
clamav-filesystem-0.103.5-1.el9.noarch    clamav-lib-0.103.5-1.el9.x86_64
clamav-update-0.103.5-1.el9.x86_64    libprelude-5.2.0-9.el9.x86_64

 完了しました!

ユーザ : 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 : ログインされても何もせずに終了します。


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

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

   
grep clam /etc/group

   clamupdate:x:983:
   virusgroup:x:982:clamupdate
   clamav:x:1001:

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

   
grep clam /etc/passwd

   clamupdate:x:986:983:Clamav database update user:/var/lib/clamav:/sbin/nologin
   clamav:x:1001:1001:Clamav AntiVirus:/home/clamav:/bin/false

④ freshclam 設定ファイル編集

 sed コマンドによる一括変換

cp /etc/freshclam.conf /home/miyasaka/freshclam.conf.bak; \
sed -i -e "s/#DatabaseDirectory/DatabaseDirectory/
s/#UpdateLogFile/UpdateLogFile/
s/#LogFileMaxSize/LogFileMaxSize/
s/#LogTime/LogTime/
s/#LogRotate/LogRotate/
/instead\./aDatabaseMirror db.jp.clamav.net" /etc/freshclam.conf

  vi /etc/freshclam.conf

  :13 で13行目へジャンプ

   コメントを取る。

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

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

   26 LogFileMaxSize 2M

   30 LogTime yes

   47 LogRotate yes


72行目の DatabaseMirror database.clamav.net の前に日本のデータベースミラーサイトを追加します。

   DatabaseMirror db.jp.clamav.net

⑤ freshclam.log のディレクトリ・ファイルが無いので作成し、所有者・属性を変更します。

touch /var/log/freshclam.log;\
chown clamav:clamav /var/log/freshclam.log
chmod 666 /var/log/freshclam.log

※※ 参考情報 ※※

  freshclam のログファイルのパスに関して

本ページでは、ログファイルの書込み先パスを /var/log/freshclam.log にしていますが
Web 上には、ログファイルの書込み先パスが
/var/log/clamav/freshclam.logにしている場合もあります。
私が、色々試したところ、どちらのパスでも良いようです。
Logwatch は、clam-update のログファイルを検索する時は、
/var/log/freshclam.log を見に行って該当する日時が無いと
/var/log/clamav/freshclam.log を見に行くようです。
/var/log/ 上に freshclam.log を二か所作成するのまずいと思います。
どちらかにして下さい。
ちなみに書込み先パス /var/log/clamav/freshclam.log は、下記の様にして作成します。


mkdir /var/log/clamav/;\
touch /var/log/clamav/freshclam.log;\
chown clamav:clamav /var/log/clamav/freshclam.log;\
chmod 666 /var/log/clamav/freshclam.log

パスを /var/log/clamav/freshclam.log にしたばあいは、該当する箇所すべてを修正してください。

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


   freshclam

※※ 参考情報 ※※ logwatch のリポート確認方法
  freshclam 実行後、下記コマンドで確認できます。
  ( -range today : 今日のリポート出力 )
  ( -service clam-update : clamav update を指定 )


  logwatch -range today  
<---- 初回は、こちらを実行
  logwatch -range today --service clam-update

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


   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)

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

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

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


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

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


  vi /usr/local/src/virusscan.sh 

#!/usr/bin/bash

START_Messge=" 開始時間  `date +"%k時%M分%S秒"`"
START_TIME=`date +%s`   # 秒で開始時刻を取得

# 除外ファイル・ディレクトリーの文字列作成
# "--exclude=^/var/www/backup/www_bak --exclude-dir=^/proc" の様な文字列作成
# 変数名の { } は、分かり易くするために入れています。

excludelist=/root/clamscan.exclude

if [ -s ${excludelist} ]; then
   for i in `cat ${excludelist}`
   do
     if [ $(echo "$i"|grep \/$) ]; then    # 行末に "/" があるか?

         # -n を付けなくとも string の文字列長が 0 より大ならば「真」となり
         # 実行されます。if [ -n $(echo "$i"|grep \/$) ]と同じです。
         # 削除対象 ディレクトリー 末尾の / を削除する処理
         # ^\([^ ]*\) スペース以外の先頭文字からを \1 に代入する
         # \/$ で末尾の / を削除して \1 に代入する
         # オリジナル i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`

         ii=`echo ${i}|sed -e 's/^\([^ ]*\)\/$/\1/'`

         excludeopt="${excludeopt} --exclude-dir=^${ii}"

     else

         # 削除対象 特定ファイル
         excludeopt="${excludeopt} --exclude=^$i"

     fi
   done
fi

# mktemp (適当なファイル名の空ファイルを作成するコマンド)

CLAMSCANTMP=`mktemp`    # ウイルスに関するメッセージを入れる変数作成

# システム全体をサブディレクトリごと再帰的(--recursive)にスキャンし ウィルスを発見次第削除(--remove)する
# --recursive   ディレクトリ内に存在するものに一つ一つに対して処理をする
# スキャンサイズの設定 --max-filesize=200M --max-scansize=200M 
#/usr/bin/clamscan --recursive --remove ${excludeopt} / > ${CLAMSCANTMP}
 
/usr/bin/clamscan --max-filesize=200M --max-scansize=200M \
--recursive --remove ${excludeopt} / > ${CLAMSCANTMP}

#  ウィルスが発見された場合、FOUNDの文字列が付加される
#  FOUNDの文字列があるかのチェックをする

  M_swith=0          # 処理結果メッセージ切替スイッチ OFF
  Virus_FOUND="\n"   # ウィルスなしにする

  if [ ! -z "$(grep FOUND$ ${CLAMSCANTMP})" ]; then
     # ウィルスに感染したファイル名を変数 Virus_FOUND に出力
     Virus_FOUND=$(grep FOUND$ ${CLAMSCANTMP})

     # ウィルスに感染したファイルの個数の表示メッセージ行を取得
     Virus_FOUND_No=$(grep Infected ${CLAMSCANTMP})

     M_swith=1   # 処理結果メッセージ切替スイッチ ON
  fi

rm -f ${CLAMSCANTMP}    # -f 作成したファイル CLAMSCANTMP を確認なしで削除する

END_Messge=" 終了時間  `date +"%k時%M分%S秒"`"
#---------------------------------------------------------
END_TIME=`date +%s`     # 秒で終了時刻を取得

# 処理時間計算とその結果をメール本文として出力

SS=`expr ${END_TIME} - ${START_TIME}`  # 経過時間を求める(秒)
#  時を求める時には、3600で割る
MM=`expr ${SS} / 60`   # 分を求める
SS=`expr ${SS} % 60`   # 秒を求める (1分で割ったあまり)

SYORI_Messge=" 処理時間  ${MM}分 ${SS}秒"

 # 処理結果メッセージ切替

 if [ $M_swith -eq 1 ]; then
     # ウィルスの感染数のみを取得する
     i_CNT=`echo ${Virus_FOUND_No}|sed -e 's/Infected files://'`
     KETUKA__Messge=" *** Clamscan ${i_CNT} Virus Found ***\n"
 else
     KETUKA__Messge=" *** Clamscan normal END ****"
 fi

# 処理時間計算をメール本文として出力
# 開始時間 + 終了時間 + 処理時間 + 処理結果メッセージ + ウィルスに感染したファイル名 を
# メール本文として合成し出力

echo -e "${START_Messge}\n${END_Messge}\n${SYORI_Messge}\n${KETUKA__Messge}\n${Virus_FOUND}" | mail -s "*** SYORI_KETSUKA_REPORT ***  " root

#---------------------------------------------------------

〇 ウィルススキャン実行スクリプトへ実行権限付加とテスト

   chmod +x virusscan.sh  
<---- 実行権限を有効にします。

ウィルススキャンの実行テストをする時には、
clamscan --recursive --remove ${excludeopt}
/ > ………
/ を削除して行うと短時間で終了します。

〇 削除対象ファイルとディレクトリーの設定例

   echo "/var/www/backup/www_bak" >> clamscan.exclude
<--- ファイル www_bak をスキャン対象外にする

   echo "/home/miyasaka/www/" >> clamscan.exclude  
<--- ディレクトリ www をスキャン対象外にする
   echo "/var/www/system/" >> clamscan.exclude


   ※※ ディレクトリを除外する場合は末尾に「/」を付加すること

〇 clamdscanの定期自動実行設定

   一般的には、毎日実行させるので 下記の様に /etc/cron.daily に保存します。

   mv virusscan.sh /etc/cron.daily/

これで、毎日定期的に全ファイルのウィルススキャンが行われ、
   ウィルスを検知した場合は、 *** Virus Found ***
   ウィルスを未検知した場合は、*** Virus Not Found ***
が root 宛にメールとして送られてくるようになります。
しかし、cron.daily では、4時前後にウィルススキャンが行われるので Logwatch のレポート作成時間に間に合わず翌日のレポートとして報告されてしまうことが度々あ るので、私のサーバ機では、cron で 2時30分に実行するように設定し直しました。
しかし、スキャンの時間がかなりかかる為、時々、Logwatch の処理時間にかかってしま うという現象が出た為、現在では、2時5分にしています。


〇 root 宛メールの表示例( 実際に私のサーバ機で表示した内容です。)

  
apr-util-1.5.4.tar.gz は、故意に保存・スキャンさせています。

   ※  Logwatch の出力結果です  ※

   From root@○○○○ Sat Feb 10 02:31:55 2018
      (途中省略)

   Date: Sat, 10 Feb 2018 02:31:54 +0900
   To: root@○○○○
   Subject: *** SYORI_KETSUKA_REPORT ***
   User-Agent: Heirloom mailx 12.5 7/5/10
   MIME-Version: 1.0
   Content-Type: text/plain; charset=utf-8
   Content-Transfer-Encoding: 8bit

   開始時間 2時05分01秒
   終了時間 2時31分54秒
   処理時間 26分 53秒
   *** Clamscan 2 Virus Found ***

   /home/miyasaka/x86_64-src2/apr-util-1.5.4.tar.gz: Xml.Exploit.CVE_……
   /usr/local/src/apr-util-1.5.4.tar.gz: Xml.Exploit.CVE_2013_3860-3 FOUND


⑨ 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

⑩ ログローティションの定義ファイルの作成
 ( 主な設定内容 毎日実行・5日分残す )


vi /etc/logrotate.d/clamav-update

/var/log/freshclam.log {  <---- ここのパスは、
          daily               ⑤ 項で設定したパスを指定します。
          missingok
          rotate 5
          notifempty
          missingok
          postrotate
                  systemctl try-restart clamav-freshclam.service
          endscript
  }

⑪ freshclam の定時実行の設定

 設定は、下記の様に crontab で行います。
 私の場合、毎日 午前 1時に実行するようにしています。

 ※ 注意事項 ※
  ログローティションは、午前3時から4時の間に実行されるのでその前に実行する設定にして下さい。

0 1 * * * /usr/bin/freshclam > /var/log/freshclam.log


13. chkrootkitの導入

① 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

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

     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」のパッケージがアップデートされた時には、

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

③ rootkit.sh に属性設定

   chmod 700 rootkit.sh

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

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

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

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

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


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

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

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

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

⑦ 「 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 のインストール


○ dnf でのインストールとインストールされるバッケージは、下記の通りです。

 
dnf -y install sendmail

 インストール済み:
  procmail-3.22-56.el9.x86_64  sendmail-8.16.1-10.el9.x86_64
  tinycdb-0.78-17.el9.x86_64

 完了しました!

○ sendmail を起動します。

    systemctl start sendmail

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

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

    systemctl enable sendmail

   # が表示するば OK です。


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

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

  dnf でのインストールとインストールされるバッケージは、下記の通りです。

 
dnf -y install logwatch

 インストール済み:
   logwatch-7.5.5-4.el9.noarch    perl-Date-Manip-6.85-3.el9.noarch
   perl-Sys-CPU-0.61-26.el9.x86_64  perl-Sys-MemInfo-0.99-18.el9.x86_64
   s-nail-14.9.22-6.el9.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 実行結果も同時に見られるようにもし ています。

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


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

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


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


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


※ 注意 ※

「rooo宛てメール」が見られる様になるのは、システムを起動後、翌日からになりますので注意してください。
直ぐに見たい時には、コマンド
logwatch -range today を入力します。

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


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


○ apache のアクセスログの文字化けを修正するための漢字コード変換パッケージ nkf をインス トールします。


○ 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. 自宅サーバの管理 等

1 ). ftp のインストール

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

      cd /usr/local/src; \
      rpm -Uvh ftp-0.17-89.el9.x86_64.rpm

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

      dnf -y install ftp

※※ 参考情報 ※※

コマンド[ passive : パッシブモードを使用をOFFする ]は、CentOS 7.X では、 必要ですが、 CentOS 8.X、centOS Stream 8、centOS Stream 9 では、エラー ( 425 Failed to establish connection. ) が出ます。


戻る