www.smiyasaka.com は、 2022 年 11月から Oracle LInux 8.X にOSを変更しました。 |
● CentOS 7.9.2009 と httpd-2.4.53 の |
アクセス数 昨日 1 今日 2 累計 32,956 |
CentOS-7-x86_64-DVD-2009.isoを使用し極力 yum なしで、自宅サーバを構築しました。
2022年5月 現在カーネルのバージョンは、Linux 3.10.0-1160.66.1.el7.x86_64 になっています。
インストールは、openssl + nghttp2 + Brotli + httpd-2.4.53 の構成で行います。
ここでのサーバ構築は、ファイアウォール有効・SELinux は、有効/無効を選択できる設定で行っています。
(﹃ コピペ ﹄で簡単にサーバ構築が出来るよう心掛けた作りにしています。)
ファイル転送プログラム vsftpd は、Tera Term の転送機能を使用して windows PC 側から直接転送し、インストールします。
vsftpd インストール後 ダウンロードしたファイルを サーバ機に ffftp で書き込み、 各種設定は、Windows PC ( Tera Term を使用 )からの遠隔操作で web サーバを構築していきます。
※※※ サポート期限は、2024年6月30日までです。※※※
|
目 次 |
||
※ [ 総てを表示する ] ※ 0. [ 現在稼働中のサーバ機のスペック ] 1. [ CentOS 7-x86_64 のインストール ] 2. [ CentOS 7 再起動後のコンソールからの各種設定(SELinux を含む) ] 3. [ 事前にダウンロードするファイル一覧と探し方 ] 4. [ セキュリティ対策のため停止したサービス ] 5. [ ファイアウォール( firewalld )と Systemd ] 6. [ Tera Termでvsftpd( FTPサーバ )を転送しインストール ] 7. [ ファイルの転送プログラムの作成 ] 8. [ サーバの時刻を日本標準時に同期させる ] 9. [ リポジトリを導入する ] 10-1. [ apache2( httpd-2.4.53 )のインストールと設定 ] 10-2. [ SELinux を有効にした時の apache2 のポリシー設定 ] 10-3. [ apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の設定 ] 10-4. [ nghttp2 を使用して SSL プロトコル HTTP/1.1, HTTP/2 対応の設定 ] 10-5. [ 圧縮パッケージ Brotli を使用しての圧縮処理の追加 ] 11. [ fswebcom-20200725.tar.gz のインストールと定点カメラの設定 ] 12. [ clamav( アンチウィルスソフト )のインストール ] 13. [ chkrootkitの導入 ] 14. [ sendmail のインストール ] 15. [ Logwatch のインストールと毎日のメールを簡単にチェックする方法 ] 16. [ 漢字コード変換用に nkf のインストール ] 17. [ 自前プログラムでダイナミック DNS を定期更新させる。 ] 18. [ 自宅サーバの管理・運用監視等 ] |
||
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.07.17 に更新された Kernel 5.15.0-208.159.3.2.el8uek.x86_64 です。 [ サーバ機 連続稼働時間 21 時間 27 分 SSD 機器温度 30 度 ] [ SSD 稼動時間 15,007 時間 ( 625 日 7 時間 ) ] [ CPU 利用率 1.29 % CPU 温度 +40 度 ] 稼 働 中 サ ー バ 機 の ス ペ ッ ク ------------------------------------------------------------------------- 私の自宅サーバ機のスペック 型 式 : Mouse Pro-M591F-WA CPU : Intel i3-7100U 2コア/4スレッド 2.40GHz 消費電力 : 約 10W メ モ リ : 8GB SSD : 128GB インターネット回線 : STNet 光回線(ギガビット対応) USBカメラ : Logicool UVC対応 C270sCW 120万画素(固定焦点) ------------------------------------------------------------------------- |
1. CentOS 7-x86_64 のインストール |
||
インストールは、CentOS-7-x86_64-DVD-2009.isoで行います。
2020年11月04日付けで CentOS 7.9.2009 がリリースされました。
参考情報ですが、CentOS 7 は 2024 年6月30日にサポート終了になっているようです。
ダウンロードは、[ CentOS 7.9.2009 は、ここをクリック] してください。
ソフトウエアの選択は、﹁最小限のインストール﹂を選択して行っています。
httpd のバージョンは、デフォルトで 2.4.6 ですが 最新版の 2.4.52 をインストールします。
インストールの詳細は、﹁ 10-1. apache2( httpd-2.4.53 )のインストールと設定 ﹂を参照してください。
※※ 参考情報 ※※
インストールが途中で固まって進まない現象(マウスポインターは表示しするが設定の初期画面が表示しない現象。
なお、ディスプレイは、XP時代の代物です。)が発生しました。対処は、初期のバージョンの iso
を使用したらインストールが上手くできました。
この原因は、画面の表示範囲が極端にズレた為で対策は、インス
トールオプションでディスプレイの解像度を指定する事で解消出来ます。
私の onkyo PC では、 CentOS 7.5 の時かなり画面からはみ出るので、試してみたところ上手くいきました。
手順は下記の通りです。
インストールの初期画面(2行目が選択されている。)で、[Tab]キーを押します。
画面の下に下記の様に表示するので
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet_
quiet_ の後にそのままインストールオプション [半角スペース] + resolution=1024x768 と追加し、
[Enter]キーを押します。
なお、[=]は、[^]を押します。解像度は、使用するディスプレイの 表示モード XGA に合わせます。
[ CentOS-7.X DVD のインストール手順 ] の詳細は、
[ここをクリック]してください。
|
2. CentOS 7 再起動後のコンソールからの各種設定( 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" で変更する。② SELinux を無効にしてサーバ機を構築する時は、④ に進んでください。 SELinux を有効にしてサーバ機を構築する時は、③ に進んでください。 ③ SELinux を有効にしてサーバ機を構築する時は、下記の手順で各種設定を行ってください。 [ CentOS 7 SELinux のアクセス制限を有効にした時の設定手順 ] の詳細は、 [ここをクリック]してください。 ④ Windows側から、Tera Term でアクセスするポート番号を設定する。 下記コマンドで sshd の設定ファイルを編集します。 vi /etc/ssh/sshd_config
#Port 22の前の # を削除して、﹁ Port 2222 ﹂に変更します。
ポート番号22のままで良い場合は、設定なし、SELinux 有効のままで Tera Term でログイン
が可能です。
④-1 Port 2222 を有効化( 追加 )する。
( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)
firewall-cmd --zone=public --add-port=2222/tcp --permanent
success が表示すればOK
firewall のコマンドで --zone=public は、省略してもデフォルトで zone は、public にな
っているで zone=public で設定されます。
④-2 設定を読込みこませて、有効にします。
firewall-cmd --reload
success が表示すればOK
※※ 参考情報 ※※ キーボードから長いコマンドを入力するのが面倒な方へのアドバイス。
ポート番号を﹁ 2222 ﹂に変更しないで初期値のまま(22) Tera Term にログインしてしまいます。
後は、各設定をコピペですれば良いのです。 SELinux 有効のままで Tera Term には、ログインが
可能です。
ポート番号を﹁ 2222 ﹂に変更したい時には、変更後再ログインするだけでOKです。
⑤ sshdの再起動
再起動するので、sshd の再起動は、不要です。また、デフォルトでサービスが有効になっています。
⑥ SELinux を無効にする設定。
この変更を忘れると Tera Term から接続できなくなってしまいますから、注意してください。
vi /etc/sysconfig/selinux SELINUX=enforcing ----> SELINUX=disabled に変更する。※※ 参考情報 ※※ 後から、SELinux を有効にしたくなり、ここを permissive または、enforcing に設定し直して再起 動すると SELinux のポリシー情報が無いためにエラーになり再起動できなくなります。注意してく ださい。 私の場合、SELinux は、enforcing のままで各種設定をしています。 ⑦ 不足パッケージのインストール ﹁ベース﹂と﹁その他の開発﹂を groupinstall でインストールします。 パッケージ数は、﹁ベース﹂+﹁その他の開発﹂: 797個です。 ( ※※ 注意 ※※ yum -y update を先にすると Base のインストールがエラーになりますので 注意してください。 つまり、カーネルのバージョンを先に最新バージョンにしないことです。) yum -y groupinstall "Base" "Additional Development"
groupinstall は、時間がかかるので、追加処理として update 後、シャットダウンするコマンドを追加します。
yum -y groupinstall "Base" "Additional Development" && yum -y update && poweroff
※※ 参考情報 ※※ Minimal でインストールした時には、"Development" を追加してください。
⑧ ファイアウォール( firewalld )の動作状況の確認
下記コマンドで、ファイアウォールが有効な状態か確認しておきます。
systemctl status firewalld
下記の様に表示すればファイアウォールは、有効になっています。
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/l……/system/firewalld.service; enabled)
Active: active (running) si……ago
Main PID: 567 (firewalld)
以下省略
⑨ システムのアップデート後、再起動をします。
初回の update は、数が多いので時間がかかります。
yum -y update && reboot または、poweroff
停止したい時は、poweroff にしてください。
⑩ 再起動後、セキュリティ強化の為、sshd のアクセス制限を設定します。
( TCP Wrapper による SSH 接続のアクセス制御 )
この設定は、必要とする方のみ行ってけてた下さい。
私の場合、サーバ機の管理・設定は、ローカルのPC以外しないので設定しています。
hosts.allowとhosts.denyの設定(IPアドレスの制限 )
この設定は、hosts.allow が優先されます。つまり、全てを拒否し、hosts.allow で指定されたIPアドレスは、許可になります。
⑩-1 /etc/hosts.deny に、 sshd:ALL ( すべての接続を拒否 )と書込みます。
vi /etc/hosts.deny で sshd:ALL または、 echo "sshd:ALL" >> /etc/hosts.deny⑩-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 7 の rpm パッケージは、el7.x86_64.rpm の名前が付きます。
ソースファイル( tar )は、32bit・64bit の区別がありません
---------------------------------------------------------------
ftp
proftpd-1.3.6.tar.gz
vsftpd-3.0.2-25.el7.x86_64.rpm
ftp-0.17-67.el7.x86_64.rpm
---------------------------------------------------------------
RPMforgeリポジトリ
yum-plugin-priorities-1.1.31-42.el7.noarch.rpmm
rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
---------------------------------------------------------------
httpd
httpd-2.4.XX.tar.gz
旧バージョンから最新バージョン(httpd-2.4.53)の 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
gd-progs-2.0.35-26.el7.x86_64.rpm
gd-devel-2.0.35-26.el7.x86_64.rpm
---------------------------------------------------------------
sendmail
hesiod-3.2.1-3.el76.x86_64.rpm
procmail-3.22-36.el7.x86_64.rpm
sendmail-8.14.7-5.el7.x86_64.rpm
---------------------------------------------------------------
logwatch
logwatch-7.5.4-1.noarch.rpm
---------------------------------------------------------------
clamav
libprelude-5.2.0-2.el7.x86_64.rpm
pcre2-10.23-2.el7.x86_64.rpm
clamav-filesystem-0.103.2-1.el7.noarch.rpm
clamav-data-0.103.2-1.el7.noarch.rpm
clamav-lib-0.103.2-12.el7.x86_64.rpm
clamav-update-0.103.2-1.el7.x86_64.rpm
clamav-0.103.2-1.el7.x86_64.rpm
---------------------------------------------------------------
chkrootkit
chkrootkit.tar.gz
glibc-static-2.17-55.el7_0.1.x86_64.rpm
---------------------------------------------------------------
nkf-2.1.5.tar.gz
Jcode-2.07.tar.gz
---------------------------------------------------------------
sensors
lm_sensors-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm
|
4. セキュリティ対策のため停止したサービス |
||
暫定的に停止したサービスは、下記のとおりです。 |
サービス名 |
機 能
# 単発的にスケジュール化した コマンド を実行させるデーモンです。
# 監査メッセージのログファイルを出力するデーモン。
# ???
# システムがクラッシュした時、原因を特定するためのdumpファイルを
保存してくれるサービス。
# 論理ボリュームマネージャー(LVM) 利用時の障害監視のためのデーモン。
# ソフトウェアRAID 監視サービ
# インテル系CPUのマイクロコード更進サポート
# メールサーバ
# ハードウェア を元に乱数を発生させるためのデーモンです。
# ハードディクスのS.M.A.R.T.による自己診断機能情報を取得する。
# CPUガバナーを利用して強制的にCPUを最大パフォーマンスで動作させる。
# ???
|
※※ 参考情報 ※※
IEEE802.1X/WPAを無線LANクライアントに 提供するツールのサービス( wpa_supplicant )は、停止
させても再起動すると 勝手に起動してしまいます。wpa_supplicant のサービスは、disable にし
ています。
私のサーバ機では、wpa_supplicantをシステム起動時に自動的に停止する様に スクリプトを作成し
てsystemdのサービスとして登録しています。そのサービスの作成手順を下記に紹介します。
この現象は、ONKYO PC では、起こりますが、mousePC では、発生していません。
① wpa_supplicant を停止するコマンド実行するスクリプトを作成します。
vi /usr/local/src/wpa_supplicant_stop.sh
|
||
#!/bin/bash
# wpa_supplicant を停止するコマンド実行
systemctl stop wpa_supplicant |
||
wpa_supplicant_stop.sh に実行権限を付加します。
chmod 755 /usr/local/src/wpa_supplicant_stop.sh ② wpa_supplicant_stop.service という名のサービスを追加します。 vi /usr/lib/systemd/system/wpa_supplicant_stop.service
で下記をコピペする。 |
||
[Unit] Description= wpa_supplicant_stop After=network.target <-- 先に起動しておいてほしいサービスを 定義してます。 [Service] Type=simple <-- プロセスを起動するだけの指定。 ExecStart=/usr/local/src/wpa_supplicant_stop.sh <-- 起動する。 プロセスの指定。 [Install] WantedBy=multi-user.target |
||
UnitセクションのAfterで先に起動しておいてほしいサービスを定義してます。 systemctl enable wpa_supplicant_stop
|
5. ファイアウォール( firewalld )と Systemd |
||
ファイアウォール( firewalld ) の設定
私が設定したファイアウォール( firewalld )の内容は、下記の通りです。
SSL 化しているので ポート 443 も有効にしています。
CentOS 7.X では、下記の設定が、CentOS 6.X の時の iptables の設定に相当します。
|
firewall-cmd --add-service=http --permanent |
<---- 80/tcp の有効化 |
※※ 参考情報 ※※
コマンドは、.service を省略してもOKです。
--permanent は、再起動後も設定を有効にする指定です。
--zone=public を省略してもデフォルトで zone=public になっています。
ファイアウォール( firewalld )の設定内容を確認する。
firewall-cmd --list-all
上記設定で ファイアウォールの設定は、下記の様になります。
---------------------------------------------------------- public (default, active) interfaces: enp2s0 sources: services: ftp http ntp https ports: 2222/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: |
||
CentOS 7.X のファイアウォール( firewalld )の、実際の動作は iptables が動いているらしい。
よって、ファイアウォールの設定を一覧で見る時には、コマンド iptables-save で見られます。
新規追加したサービスは、最後に追加されています。下記は、表示例です。
|
||
上 部 省 略 -A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 80 -m…… NEW -j ACCEPT
-A IN_public_allow -p udp -m udp --dport 123 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 21 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 443 -m…… NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 2222 -m…… NEW -j ACCEPT
COMMIT
※※ ここからは、参考情報です。 ※※ |
||
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 の追加をするように編集して
みます。
public.xml のオリジナルデータは、下記の通りです。
vi /etc/firewalld/zones/public.xml
|
||
<?xml version="1.0" encoding="utf-8"?> |
||
下記の様に編集します。
<service name="ssh"/>
<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 コマンドで一括処理してみました。
sed -i -e"s/ssh/ntp/g s/<service name=\"dhcpv6-client\"\/>/<service\ name=\"http\"\/>\n\ <service name=\"ftp\"\/>\n\<service name=\"https\"\/>/g"\ /etc/firewalld/zones/public.xml 編集保存したら、firewall-cmd --reload で設定を反映します。public の設定データを確認すると下記の様に変更が反映されています。 firewall-cmd --list-all ------------------------------------------------------------- public (default, active) interfaces: enp2s0 sources: services: ftp http ntp https <-- 追加されたサービス ports: 2222/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: |
||
Systemd でのサービスの管理と設定コマンド |
||
CentOS 7.X ではサービスの管理は一部のサービスを除き systemd で行うといった仕様に変更と |
||
① ファイアウォールを無効にする設定。
systemctl stop firewalld.service
# が表示したら完了です。
② 再起動後も、ファイアウォールを無効にする設定。
systemctl disable firewalld.service <---- 再起動後も無効にする。③ ファイアウォールを有効にする設定。 systemctl enable firewalld.service <---- 再起動後も有効にする。下記が表示すればOK ln -s '/usr/lib/systemd/system/firewalld.service' .......
ln -s '/usr/lib/systemd/system/firewalld.service' .......
④ ファイアウォールを起動する
systemctl start firewall.service
# が表示すればOK
⑤ ファイアウォール﹁サービス﹂の追加コマンド( 所定のポートを有効する設定 )
proftpd、vsftpd、httpd( apache ) をファイアウォール有効下で有効にする設定です。
⑤-1 proftpd、vsftpd の 21番ポートを有効にする。
システムの再起動後も有効にする為、﹁ --permanent ﹂を必ず付けてい下さい。
--zone=public を省略した時には、デフォルト値 zone=public になります。
firewall-cmd --add-service=ftp --zone=public --permanentfirewall-cmd --reload のコマンドを実行しないと設定は、反映されません。 コマンド毎に success と表示したら OKです。 ⑤-2 httpd( apache ) の 80番ポートを有効にする firewall-cmd --add-service=http --zone=public --permanentコマンド毎に success と表示したら OKです。 ⑤-3 設定を確認します firewall-cmd --list-services --zone=public
下記の様に表示であればファイアウォール有効下で各サービス名に対応したポートが有効になっています。
dhcpv6-client ftp http ssh
⑤-5 追加したサービスの削除
--add を --remove にすると削除になります。
同時に systemctl enable をしたサービスは、disable にしてください。
⑥ 特定のポートの開放方法
⑥-1 例として Port 2222を追加する。
( --permanent は、再起動後も設定を有効にする指定。忘れない様にしてください。)
firewall-cmd --zone=public --add-port=2222/tcp --permanent
success が表示すればOK
|
||
デフォルトで設定されている サービス ssh を編集してポートを変更する方法を下記に紹介します。 |
||
⑥-2 設定を読込みこませて、有効にします。 firewall-cmd --reload
success が表示すれば OK firewall-cmd --zone=public --list-ports
表示例 2222/tcp firewall-cmd --zone=public --remove-port=2222/tcp
success が表示すれば OK systemctl list-unit-files | grep enable
有効なサービス( enable ) 一覧の表示例 |
abrt-ccpp.service |
enabled |
⑧ デフォルトの定義ファイル﹁サービス﹂( service )は、下記コマンドで取得できます。
( ﹁サービス﹂とは、TCP/UDPポート番号の事で下記の一覧にある ﹁サービス﹂は、
firewall-cmd --add-service=﹁サービス名﹂ --permanent) で該当ポートを有効にすることができます。)
firewall-cmd --get-services
下記は、取得した定義ファイル( service )一覧です。
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability
http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns
mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql
proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client
transmission-client vnc-server wbem-https
⑨ 任意にインストールしたパッケージを service として追加する方法
サービスを追加するとシステムの再起動で自動で実行されるようになります。
任意にインストールしたパッケージを service として追加するには、下記のフォルダにサービスの設定ファイルを書き込みます。
systemctl ○○○○.service の書込み先は、/usr/lib/systemd/system/○○○○.serviceです。
( ○○○○は、任意につけるサービス名で、デフォルトのサービス名と同一でなければOKです。)
⑨-1 httpd-2.4.46 のサービスの設定ファイルを apache2.service として作成してみます。
このファイル作成で、systemctl apache2 の start, stop, enable, disable, status のコマ
ンドが実行できます。ただし、80番ポートは、開放されませんので 上記 ⑤-2 の操作をしてください。
vi /usr/lib/systemd/system/apache2.service で下記をコピペします。)
|
||
[Unit] |
||
⑨-2 「起動」と「システム再起動時の自動起動」の設定 |
||
ln -s '/usr/lib/systemd/system/apache2.service' '/etc/systemd/system/multi- |
||
⑨-3 サービスとして追加されたかの確認 |
||
( 省略 ) |
|
⑨-4 本ヘージでは、proftpd, apache, DiCE, clamd の ○○○○.service を作成しています。 |
写真 ①![]() |
写真 ②![]() |
写真 ③![]() |
4. 写真 ④ の様にファイルを選択するダイヤログ画面が開くので、 |
写真 ④![]() |
写真 ⑤![]() |
② proftpd のインストール
1. 転送した proftpd-1.3.6.tar.gz を /usr/loacl/src/ コピーする。
cp /home/miyasaka/proftpd-1.3.6.tar.gz /usr/loacl/src/
2. proftpd-1.3.6.tar.gz を展開する。
cd /usr/loacl/src/ ;tar zxvf proftpd-1.3.6.tar.gz
3. 展開したソースファイルの configure を実行する。
cd proftpd-1.3.6; \
./configure --prefix=/usr/local/proftpd
1~3をまとめて実行させると
cp /home/miyasaka/proftpd-1.3.6.tar.gz /usr/loacl/src/; \
cd /usr/loacl/src/; \
tar zxvf proftpd-1.3.6.tar.gz; \
cd proftpd-1.3.6; \
./configure --prefix=/usr/local/proftpd
4. make とインストールをする。
make && make install
※※ 注意 ※※>
make で下記エラー出ますが、問題なく動作します。
In file included from pr_fnmatch.c:256:0:
pr_fnmatch_loop.c: 関数 'internal_fnmatch' 内:
pr_fnmatch_loop.c:75:7: 警告: 変数 'is_seqval' が設定されましたが使用されていません
③ proftpd.confの設定
vi /usr/local/proftpd/etc/proftpd.confで、"# Bar use of SITE CHMOD by default"以降をす
べて削除し、下記の文を追加します。
※ まとめて削除する方法 ※
"# Bar use of SITE CHMOD by default"の行へカーソルを移動して (削除行数)dd と入力する。
#
# Bar use of SITE CHMOD by default
# サイト内ファイルの属性変更を許可するグループ
#
<Limit SITE_CHMOD>
#DenyAll
AllowAll
</Limit>
#ファイル一覧表示(ドットファイルの可視化)
ListOptions "-a"
#
#ログイン時間の短縮化(DNS問い合わせしない・Identの停止)
UseReverseDNS off
IdentLookups off
#
# アクセス時刻の修正 GMT-->JST
TimesGMT off
# LAN内のみアクセスを許可する。
<Limit LOGIN>
Allow from 192.168.0.0/24 <--- ここの 192.168.0. は、あなたの環境のIPアドレスに
合わせてください。
</Limit>
※ 参考 ※1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。
( sed -i -e の -i は、上書き編集の指定です。)
( 39a は、39行目にa以降の文字列を追加・\n は、改行指定です。)
( s/△△/□□/ は、△△の文字列が□□文字列に置換されます。)
( \ は、メタ文字[ $,/, . 等 ]の指定です。)
cp /usr/local/proftpd/etc/proftpd.conf /home/miyasaka/proftpd.conf.bak;\
sed -i -e "40,65d
39a# サイト内ファイルの属性変更を許可するグループ\n\
<Limit SITE_CHMOD>\n\
#DenyAll\n\
AllowAll\n\
<\/Limit>\n\
#ファイル一覧表示\n\
ListOptions \"-a\"\n\
\n\
#ログイン時間の短縮化\(DNS問い合わせしない・Identの停止\)\n\
UseReverseDNS off\n\
IdentLookups off\n\
\n\
# アクセス時刻の修正 GMT-->JST\n\
TimesGMT off\n\
\n\
# LAN内のみアクセスを許可する。\n\
<Limit LOGIN>\n\
Allow from 192\.168\.0\.0\/24\n\
<\/Limit>\n" /usr/local/proftpd/etc/proftpd.conf
④ proftpdの起動ファイルをコピー・編集する。
作成された起動ファイル proftpd.init.d を /etc/rc.d/init.d/proftpd へコピーする。
cp /usr/local/src/proftpd-1.3.6/contrib/dist/rpm/proftpd.init.d \
/etc/rc.d/init.d/proftpd
⑤ proftpdの起動ファイルの32、46行目を編集する。
vi /etc/rc.d/init.d/proftpd
32行目に追加( 環境変数 PATH に /usr/local/proftpd/sbin を追加・有効にする処理 )
これは、proftpd のコンパイル後の保存先が、/usr/local/proftpd にしているためです。
( この操作を proftpd の﹁ パスを通す ﹂と言います。つまり、 proftpd を実行させる時に
フルパスを入れなくても実行できるようにする為です。)
export PATH="$PATH:/usr/local/proftpd/sbin"
46行目を修正する
# Make sure the binary is present.
[ -x /usr/sbin/proftpd ] || exit 5
↓ ↓
[ -x /usr/local/proftpd/sbin/proftpd ] || exit 5
cp /usr/local/src/proftpd-1.3.6/contrib/dist/rpm/proftpd.init.d;\
sed -i -e "31aexport PATH=\$PATH\:\/usr\/local\/proftpd\/sbin
s/-x \/usr\/sbin\/proftpd/-x \/usr\/local\/proftpd\/sbin\/proftpd/g"\
/etc/rc.d/init.d/proftpd
⑥ proftpd.conf は、グループの初期値が
30行目 User nobody
31行目 Group nogroup
の設定なので、グループ名 nogroup を追加( groupadd nogroup )するか、
31行目を Group nobody に変更します。
私は、groupadd nogroup のコマンド入力をしています。
⑦ proftpdの起動ファイルに実行権限を付けます。
chmod 755 /etc/rc.d/init.d/proftpd
⑧ proftpd のサービスを新規作成して追加します。
⑧-1 proftpd.service の作成
vi /usr/lib/systemd/system/proftpd.service で下記をコピペします。)
|
||
[Unit] |
||
※ 注意 ※
必ず systemctl enable proftpd のコマンド実行後、start させてください。
start を先に実行すると、コマンドがいつまで待っても終了しなくなります。
その時には、[Ctrl]+[c] で強制終了してください。
⑧-2 システム再起動時の自動起動設定
systemctl enable proftpd
以下の様な表示が出ます。(表示の都合で2行にしています。)
|
||
ln -s '/usr/lib/systemd/system/proftpd.service' |
||
⑧-3 起動・停止 |
||
rm '/etc/systemd/system/multi-user.target.wants/proftpd.service' |
||
⑧-5 ステータスの表示 |
||
* proftpd.service - ProFTPD FTP Server |
||
⑨ ファイアウォール有効下で ftp( proftpd ) を有効にします。
⑨-1 現在有効なサービスを確認します。
firewall-cmd --list-services
下記が表示するはずです。( デフォルトての設定サービス )
dhcpv6-client ssh
⑨-2 ftp( proftpd ) をサービスに追加して有効にします
firewall-cmd --add-service=ftp --permanent
success が表示すればOKです。
⑨-3 コマンドを有効にします。
firewall-cmd --reload
success が表示すればOKです。
⑨-4 再度有効なサービスを確認します。
firewall-cmd --list-services
下記の様に ftp が追加されるはずです。
dhcpv6-client ftp ssh
ここで、windows 側の ffftp で接続できるか確認します。
これで FFFTP がつながらない時は、ポート ftp(21)がオープンしていないので
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
で追加します。
※※ 注意事項 ※※
ffftp の設定は、
ホスト名(アドレス)(N) ----> CentOS 7 のIPアドレス
ユーザー名(U) ----> CentOS 7 のユーザー名
パスワード/パスフレーズ(N) ----> CentOS 7 のユーザー名パスワード
ホスト側の漢字コード ----> 無変換
ファイル名の漢字コード ----> 自動
に設定してください。
⑩ windows側にある各種インストールするためのプログラムは、ffftpで一度ホームデレクトリィに
転送し、コマンドで所定デレクトリィに移動なり、コピーしてから、インストールします。
⑪ ffftpの時間ずれを直すには、ffftpの設定を変更します。
windows側でFFTPを起動し、接続時に設定変更で﹁拡張﹂を選び、ホストタイムゾーンをGMT+9:00
に変更します。
⑫ ffftpの設定で[アップロードするファイルの属性]を事前に設定しておくと、転送後の属性設定が
不要になるので便利です。
その方法は、ffftp のツールバーの[オプション(O)][環境設定(S)]を選び、表示されるオプション
の画面のタグ[転送3]をクリック、[追加(A)]で拡張子毎に設定追加します。
設定例
*.pl *.cgi *.sh ---> 755
*.txt *.cnt ---> 666
*.html は、設定不要です。
※ 参考になるサイト linuxmaster.jp
|
6. Tera Termでvsftpd( FTPサーバ )を転送しインストール |
||
〇 Tera Term から、vsftpd をサーバ機のホームデレクトリィにファイルを転送する方法は、
次の通りです。
[ 転送方法 ]
1. Tera Term の画面上・左端 [ファイル] をクリックする。 <--- 写真 ①
2. プルダウンメニューの SSH SCP...をクリックする。 <--- 写真 ②
3. 中央に窓が開くので写真 ③ の矢印で示すボタン[…]をクリックする。 <--- 写真 ③
|
写真 ①![]() |
写真 ②![]() |
写真 ③![]() |
4. 写真 ④ の様にファイルを選択するダイヤログ画面が開くので、 |
写真 ④![]() |
写真 ⑤![]() |
① vsftpd のインストールと設定 |
||
編集済の vsftpd.conf が有る場合には、Tera Term の転送機能を利用してホームディレクトリ
に読込み cp コマンドで上書きします。 |
||
下記の操作を 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﹄/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
|
||
編集済の vsftpd.conf は、再構築時使用すると便利なので windows PC へ保存します。 |
||
③ 上層への ディレクトリへのアクセスを許可するユーザーを追加
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 start vsftpd
# が表示すればOKです。
⑥ vsftpd の自動起動を有効にする。
systemctl enable vsftpd
# が表示すればOKです。
⑦ ファイアウォール有効下で ftp( vsftpd ) を有効にします。
⑦-1 現在有効なサービスを確認します。
firewall-cmd --list-services
下記が表示するはずです。( デフォルトての設定サービス )
dhcpv6-client ssh
⑦-2 ftp( vsftpd ) をサービスに追加して有効にします。
firewall-cmd --add-service=ftp --permanent
success が表示すればOKです。
⑦-3 コマンドを有効にします。
firewall-cmd --reload
success が表示すればOKです。
⑦-4 再度有効なサービスとポートを確認します。
firewall-cmd --list-services
下記の様に ftp が追加されるはずです。
dhcpv6-client ftp ssh
有効なポートの確認
firewall-cmd --zone=public --list-ports
下記の様に表示します。
2222/tcp
⑦-5 ③ ~ ⑥ のコマンドをまとめて実行させると下記の様になります。
echo "miyasaka" >> /etc/vsftpd/chroot_list; \
echo "vsftpd:ALL" >> /etc/hosts.deny; \
echo "vsftpd:192.168.0." >> /etc/hosts.allow; \
systemctl start vsftpd; \
systemctl enable vsftpd
⑧ ここで、windows 側の ffftp で接続できるか確認します。
これで FFFTP がつながらない時は、ポート ftp(21)がオープンしていないので
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
で追加します。
※※ 注意事項 ※※
ffftp の設定は、
ホスト名(アドレス)(N) ----> CentOS 7 のIPアドレス
ユーザー名(U) ----> CentOS 7 のユーザー名
パスワード/パスフレーズ(N) ----> CentOS 7 のユーザー名パスワード
ホスト側の漢字コード ----> 無変換
ファイル名の漢字コード ----> 自動
に設定してください。
⑨ windows側にある各種インストールするためのプログラムは、ffftpで一度ホームデレクトリィに
転送し、コマンドで所定デレクトリィに移動なり、コピーしてから、インストールします。
⑩ ffftpの時間ずれを直すには、ffftpの設定を変更します。
windows側でFFTPを起動し、接続時に設定変更で﹁拡張﹂を選び、ホストタイムゾーンをGMT+9:00
に変更します。
⑪ ffftpの設定で[アップロードするファイルの属性]を事前に設定しておくと、転送後の属性設定が
不要になるので便利です。
その方法は、ffftp のツールバーの[オプション(O)][環境設定(S)]を選び、表示されるオプション
の画面のタグ [転送3]をクリック、[追加(A)]で拡張子毎に設定追加します。
設定例
*.pl *.cgi *.sh ---> 755
*.txt *.cnt ---> 666
*.html は、設定不要です。
|
7. ファイルの転送プログラムの作成 |
||
私の場合、インストールするプログラムのファイルは、windows側でダウンロードし、windows側の
フォルダ src2 にまとめて保存しおき、ffftpで /home/miyasaka/に転送し、サーバ機側では、転
送プログラムで所定のディレクトリに転送しています。
ファイルのダウンロードは、ファイル名で検索するとダウンロード先を見つけることができます。
ファイルを転送するシェルスクリプトのプログラムをホームディレクトリに作成して行います。
下記は、私が作成したプログラム例です。
[ ファイルの転送プログラム ] の詳細は、
[ここをクリック]してください。
|
8. サーバの時刻を日本標準時に同期させる |
||
CentOS 7.0 からは、NTP が、Chrony に変更されインストールされています。
(設定方法等は、先人の知恵を借りて行いました。)
① vi /etc/chrony.conf を入力して、設定ファイルを下記の様に変更します。
3行目あたり
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.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/server 0\.centos\.pool\.ntp\.org iburst/server\
ntp\.nict.\jp/g
s/server 1\.centos\.pool\.ntp\.org iburst/server\
ntp1\.jst\.mfeed\.ad\.jp/g
s/server 2\.centos\.pool\.ntp\.org iburst/server\
ntp2\.jst\.mfeed\.ad\.jp/g
s/server 3\.centos\.pool\.ntp\.org iburst//g』\
/etc/chrony.conf
② chrony を再起動します。 ( chrony のサービス名は、chronyd です。)
systemctl restart chronyd.service
# が表示すば、OKです。
③ 再起動後も chrony を有効にします。
systemctl enable chronyd.service
# が表示すば、OKです。
④ chronyd のステータス( 動作 )の確認。
chronyc sources
下記の様に表示します。
MS Name/IP address Stratum Poll Reach LastRx Last sample
==========================================
^* ntp-a3.nict.go.jp 1 6 377 9 -430us[ -627us] +/- 8332us
^+ ntp1.jst.mfeed.ad.jp 2 6 377 8 +551us[ +551us] +/- 16ms
^- ntp2.jst.mfeed.ad.jp 2 6 377 7 -307us[ -307us] +/- 35ms
以下のように*印がついていたら同期ができています。
︵起動してから同期までに10分ぐらいかかります。︶
⑤ システム時刻(年月日,曜日,時刻)の確認と手動での修正方法
date を入力して時刻が確認できます。
例えば、下記の様に表示します。
2013年10月7日 月曜日 13:21:17 JST
時刻の修正は、date MMDDhhmmYYYY の様に入力します。
[MM月01~12 DD 日01~31 hhmm 時刻24時表示 YYYY 年(西暦) ]
ex. 2013年10月07日 09:05 --> date 100709052013
⑥ ntp の 123 番ポートを有効にする。
※※ 参考情報 ※※
web上に﹁ ntpdでは問い合わせに行く時のポートも123だが、chronydは問い合わせには空いている
適当なポートを使う﹂という情報がありますが、念のため 123 番ポートを開放してみます。
firewall-cmd --add-service=ntp --zone=public --permanentコマンド毎に success と表示したら OKです。 |
9. RPMforgeリポジトリを導入する |
||
① yum-prioritiesインストール
cd /usr/local/src/; \
rpm -ivh yum-plugin-priorities-1.1.31-42.el7.noarch.rpm
yum でのインストールは、下記の通りです。
cd /usr/local/src/; \
yum -y install yum-plugin-priorities
② 標準リポジトリ設定ファイル編集
※ 参考情報 ※
1行毎直すのが面倒な時には、sed コマンドで下記の様にすると同じ事ができます。
念のため、バックアップを取ってから置換します。
( 27i は、27行目にi以降の文字列が追加されます。 )
cp /etc/yum.repos.d/CentOS-Base.repo /home/miyasaka/CentOS-Base.repo.bak; \
sed -i -e﹃19ipriority=1
27ipriority=1
35ipriority=1﹄/etc/yum.repos.d/CentOS-Base.repo
vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releas...
#baseurl=http://mirror.centos.org/centos/$releasever/os/...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$release...
#baseurl=http://mirror.centos.org/centos/$releasever/upda...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$release...
#baseurl=http://mirror.centos.org/centos/$releasever/extr...
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1 ← 追加する
#additional packages that extend functionality of existin...
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasev...
#baseurl=http://mirror.centos.org/centos/$releasever/cento...
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
③ RPMforgeリポジトリインストール
rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
④ RPMforgeリポジトリのアップデート
ここは、アップデートなので yum を使用します。
yum -y update rpmforge-release
以下のメッセージ表示で終わります。
11 packages excluded due to repository priority protections
No packages marked for update
⑤ ロードしたファイルを消去します。
rm -f rpmforge-release-*
⑥ CentOS-Base.repo のファイルも編集済のファイルを上書きできるので保存しておくことをすすめます。
cp /etc/yum.repos.d/CentOS-Base.repo /home/miyasaka/CentOS-Base.repo.bak
※ 参考にしたサイト RPMforgeリポジトリ導入(RPMforge)
|
10-1. apache2( httpd-2.4.53 )のインストールと設定 |
||
「 ベーシック Web サーバー 」を選択 による httpd-2.4.6 の httpd.conf 設定・起動 は、 |
||
2021.05.25付けで httpd-2.4.48 がリリースされています。
2021.09.15付けで httpd-2.4.49 がリリースされています。
2021.10.04付けで httpd-2.4.50 がリリースされました。
2021.10.07付けで httpd-2.4.51 がリリースされました。
2021.12.20付けで httpd-2.4.52 がリリースされました。
2022.03.14付けで httpd-2.4.53 がリリースされました。
① httpd-2.4.53 を展開して apr を展開したファイルをフォルダ ./httpd-2.4.53/srclib/ へ書き込む。
1. httpd-2.4.53 を展開する。
cd /usr/local/src/;\
tar xzvf httpd-2.4.53.tar.gz; \
chown -R root. httpd-2.4.53; \
cd ./httpd-2.4.53/srclib
2. apr を展開する。
tar xzvf /usr/local/src/apr-1.7.0.tar.gz; \
chown -R root.apr-1.7.0/; \
mv apr-1.7.0 apr; \
tar xzvf /usr/local/src/apr-util-1.6.1.tar.gz; \
chown -R root. apr-util-1.6.1/; \
mv apr-util-1.6.1/ apr-util
② configure( make 用にソースファイルの配置をする ) の実行
cd /usr/local/src/httpd-2.4.53; \
./configure \
--with-included-apr \
--enable-rewrite \ <---- リクエストされた URL の動的書き換えを行うモジュール
--enable-so \ <---- モジュールの有効化
--enable-deflate=shared <---- 圧縮する処理を追加
SSL を有効にしたい時には、[./configure \]の後に[--enable-ssl \]を追加します。
mod_ssl.so が追加されます。
|
||
・enable-rewrite : Rewriteサポート(mod_rewrite) |
||
以下で、終われば、OK |
||
③ make( コンパイル ) & install |
||
④ 私のサーバの環境でした、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 を使用して定点カメラ関係のデータとプロ
グラムを別ドキュメントルート上で実行させています。不要な方は、削除してください。
下記は、httpd.conf の編集を sed コマンドで一括編集をした時の sed コマンドのリストです。
( sed コマンドをより理解するため無駄ですが挑戦してみました。)
Linux の正規表現等が良く理解できました。( 自己満足 )
興味のある方は、下記をクリックしてください。別ページで表示します。
[ sed コマンドによる httpd-2.4.XX の httpd.conf の一括編集 ] の詳細は、
[ここをクリック]してください。
|
||
※ httpd.conf の設定が、終わったファイルを ffftp で、windows側に転送しておくと、再構築の
時にそのファイルを上書きすれば、設定内容は、すべて有効になります。ただし、直接上書き
はできないので、一度ホームディレクトリへ転送し、コピーコマンドで、上書きします。
cp /home/miyasaka/src2/httpd.conf /usr/local/apache2/conf/
[ httpd-2.4.XX httpd.conf の編集項目 ] の詳細は、
[ここをクリック]してください。
|
||
Alias を使用して、別 DocumentRoot を作り >CGI, SSI, html を動作させる方法を下記に紹介します。
この方法は、当ホームページのトップページ内の指定した﹁日﹂および﹁月﹂の保存した定点カ
メラの映像表示で使用しています。
[ Alias で別 DocumentRoot を作り CGI, SSI, html を動かす ] の詳細は、
[ここをクリック]してください。
|
||
編集済の httpd.conf は、再構築時使用すると便利なので windows PC へ保存します。 |
||
⑦ホームページの書き込み先のフォルダを作成・所有者の変更・属性変更をします。
( /var/www/html/www.smiyasaka.com は、私の場合の DocumentRoot です。)
mkdir -p /var/www/html/www.smiyasaka.com; \
chown -R miyasaka:miyasaka /var/www/; \
chmod 777 /var/www/html/www.smiyasaka.com
⑧ httpd.confの設定に間違いが無いか確認します。
/usr/local/apache2/bin/apachectl configtest
﹁ Syntax OK ﹂と表示されればOKです。
※※ 注意 ※※
configtest を実行する時に、DocumentRoot で指定したディレクトリが無いと下記エラーが出
ますのでディレクトリを作成してから、configtest を実行してください。>
DocumentRoot must be a directory
⑨ apache2を systemctl start で起動する。
デフォルトで httpd.servce が用意されていますが httpd.servce では、apache の実行ファイ
ルのパスが /usr/sbin/httpd に成っている為使用できませんので新規に作成します。
systemctl start apache2 のコマンドが使えるように設定する。
以下に、新規にサービス( systemctl ○○○○.servce )を作成登録する方法を紹介します。
apache2 の起動をサービスとして登録し、起動・システム再起動時の自動起動に使用しています。
[ systemctl service の新規作成 ] の詳細は、
[ここをクリック]してください。
⑩ 80, 443 番ポートを有効にする。
デフォルトなサービス http をサービス一覧に追加することによりファイアウォールの有効状
態で80番ポートが有効になり、ホームページが見られるようなります。
firewall-cmd --add-port=80/tcp --permanent
または、
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=443/tcp --permanent
または、
firewall-cmd --add-service=https --permanent
success が表示すればOK
firewall-cmd --reload
success が表示すればOK
追加されたかの確認
firewall-cmd --list-all
下記の様に http が追加されていれば、OK
dhcpv6-client ftp http ssh
⑪ アクセスログ・エラーログ・圧縮の確認用ログは、/usr/local/apache2/logs のディレクトリに書込まれます。
⑫ ここで、 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時の時点に数分
で復元できるようにシステムを構築しています。
⑬ 動作確認は、予備機のローカルIPアドレスを別のPCから入力して確認します。
予備機を現用機とした時には、[ ホームページが外部へ公開 ] されているかの確認が出来る
サイトで行います。下記をクリックするとそのサイトへジャンプします。
[サーバー監視/ネットワーク監視サービス]
⑭ 書き込んだプログラムを定時実行させるため、cron への設定もします。
|
||
※ 圧縮されたかの確認ができるwebサイトを紹介します。下記 URL をクリックしてあなたの
ホームページの URL を入れるだけです。
www.gidnetwork.com または、www.port80software.com
私のドメインでアクセスした結果は、下記の通りです。(圧縮レベル1で設定)
入力するドメインには、必ず、http:// 又は、https:// を付けてください。
|
|
www.gidnetwork.com からの回答![]() |
||
圧縮結果のログデータは、管理者か゜root の為、ffftp でダウンロードできないので、ユーザー
権限に変更します。
chown -R miyasaka:miyasaka /usr/local/apache2/logs/deflate_log; \
chmod -R 666 /usr/local/apache2/logs/deflate_log
保存場所 ----> /usr/local/apache2/logs/deflate_log
圧縮した時の圧縮ログデータは、このようになりました。( TeraPad で見ます。)
(出力バイト数)↓ ↓(入力)↓( 元データに対するデータの大きさ[ % ] ) を意味します。
"GET / HTTP/1.1" 10335/53768 (19%) Mozilla/5.0 (compatible; MSIE 9.0;………
"GET /.webcam/camdata.jpg HTTP/1.1" 730/1235 (59%) Mozilla/5.0 (compatible;…
"GET /.webcam/camdata.jpg HTTP/1.1" -/- (-%) Mozilla/4.0 (compatible; )………
"GET /fswebcam.html HTTP/1.1" 16258/71964 (22%) Mozilla/5.0 (compatible; ……
"GET /server.html HTTP/1.1" 13682/55830 (24%) Mozilla/5.0 (Windows NT 6.1; …
"GET /html_point.html HTTP/1.1" 14973/70669 (21%) Mozilla/5.0 (Windows NT …
"GET /html_point8.html HTTP/1.1" 1017/1985 (51%) Mozilla/5.0 (Windows NT ……
"GET /html_point4.html HTTP/1.1" 852/1575 (54%) Mozilla/5.0 (Windows NT………
HTMLのページによって圧縮率[ 100 - 上記の()内の値 ]が違う事が分かります。また、jpg は、
圧縮象外にしているので圧縮されてないことも分かります。
対圧縮率の計算は、
{(入力バイト数)-(出力バイト数)}÷(入力バイト数)×100 %になるので
上記1行目の場合、( 53,768 - 10,335 )÷53,768×100=80.78 % になります。
|
||
⑮ mod_status を使用した apache サーバステータスの監視機能を使用可能にする設定。
apache サーバステータスを LAN内PCから、ホームページとして見られる様に設定します。
⑮-1 httpd.conf の編集
vi /usr/local/apache2/conf/httpd.conf
139行目あたり コメントアウトされてない事を確認する。
LoadModule status_module modules/mod_status.so
473行目(原本での行数)あたり コメントアウトを解除する。
Include conf/extra/httpd-info.conf
⑮-2 httpd-info..conf の編集
vi /usr/local/apache2/conf/extra/httpd-info.conf
<Location /server-status>
SetHandler server-status
16 Require host .example.com
↓ ↓ ↓
Require host localhost
17 Require ip 127
↓ ↓ ↓
Require ip 192.168.0. <--- LAN 内のみアクセス許可にする。
</Location> ここは、あなたの環境に合わせてください
サーバステータス情報の拡張表示を行う
25 #ExtendedStatus On
↓ ↓ ↓
ExtendedStatus On
httpd の設定情報は、不要なのですべてコメントアウトする
32 #<Location /server-info>
33 # SetHandler server-info
34 # Require host .example.com
35 # Require ip 127
36 #</Location>
上記をまとめて sed コマンドで実行は、下記の様になります。なお、同じ文字列があるので、行を
指定して実行しています。
( s/ の前の数字は、置換をさせる行番号です。32,36s/^/#/ は、32~36行の先頭に #を挿入する指示です。)
sed -i -e﹃s/Require host \.example\.com/Require host localhost/g
s/Require ip 127/Require ip 192\.168\.0\./g
s/#ExtendedStatus On/ExtendedStatus On/g
32,36s/^/#/﹄/usr/local/apache2/conf/extra/httpd-info.conf
○ httpd を再起動する。
systemctl restart apache2
⑮-3 LAN内PCからのアクセス方法
[LAN内のサーバのIPアドレス]/server-status?refresh=5 <--- 5 秒更新
[LAN内のサーバのIPアドレス]/server-status <--- 更新なし
下記は、私のサーバ機で表示したサーバステータス情報です。
|
||
![]() |
||
※※ apache のバージョンの確認方法 ※※
/usr/local/apache2/bin/httpd -v のコマンドで確認できます。
Server version: Apache/2.4.52 (Unix)
Server built: Dec 21 2021 10:48:53
※※ 参考情報 ※※
1. Linux OS のバージョンの確認方法
cat /etc/redhat-release のコマンドで確認できます。
CentOS Linux release 7.9.2009 (Core)
2. Linux カーネルのバージョンの確認方法
uname -a のコマンドで確認できます。
Linux LeoMiya 3.10.0-1160.25.1.el7.x86_64 #1 SMP Wed Apr 28 21:49:45 UTC 2021………
3. restart してもコマンドが終了しない・エラーなる時の対処方法
一例としてこんな具合に、表示されます。
httpd not running, trying to start
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
これは、apacheデーモン停止が失敗したからなので、kill コマンドで強制的に該当プロセスを
停止する必要があります。まず、httpd の稼働プロセス番号を lsof コマンドで調べます。
lsof -i | grep httpd
一例としてこんな具合に、表示されます。
httpd 1242 root 4u IPv6 17421 0t0 TCP *:http (LISTEN)
httpd 1248 miyasaka 4u IPv6 17421 0t0 TCP *:http (LISTEN)
httpd 1249 miyasaka 4u IPv6 17421 0t0 TCP *:http (LISTEN)
1242,1248,1249 は、稼働プロセス番号なので、kill コマンドで強制終了( -9 )させます。
kill -9 1242 1248 1249
4. httpd を strat としたら、こんなエラーが出た時の対処方法
(20014)Internal error (specific information not available):
AH00058: Error retrieving pid file logs/httpd.pid
AH00059: Remove it before continuing if it is corrupted.
通常 apache は、停止時に httpd.pid ファイルを削除するのですが、削除されてないと
httpd.pid ファイルが存在するので、apache は起動していると、誤認識して起動できなくな
っている為です。
対処は、httpd.PID ファイルを次の手順で削除するだけです。
httpd.pid ファイルの存在とパスをコマンド find / -name httpd.pid で確認します。
表示された httpd.pid ファイルのパスを指定して下記コマンドで削除します。
( 下記のパスは、私のサーバ機の環境の場合です。)
rm /usr/local/apache2/logs/httpd.pid
5. 最新版をインストールしたい時、古いバージョンの httpd を削除する方法
( あくまでも私が行っている方法です。)
httpd-2.4.52 のバージョンを削除する場合
systemctl stop apache2 <--- apache を停止する
systemctl disable apache2 <--- apache を無効にする
rm -rf /usr/local/apache2 <--- 展開されたモジュールを削除する
rm -rf /usr/local/src/httpd-2.4.52 <--- 展開されたモジュールを削除する
インストール後は、httpd.conf の設定だけでOKです。
6. apach2 ( httpd ) の起動確認
現在実行されているプロセスをツリー表示するコマンド pstree で確認します。
下記の様に表示すれば、OKです。
systemd-+-NetworkManager---2*[{NetworkManager}]
( 省略 )
|-firewalld---{firewalld}
|-httpd-+-httpd
| |-3*[httpd---63*[{httpd}]]
| `-3*[rotatelogs]
|
10-2. SELinux を有効にした時の apache2 のポリシー設定 |
||
○ 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
SSI・CGI プログラム等で
動作しないプログラム---> httpd_unconfined_script_exec_t
○ .html のプログラムファイルは、初期設定値 httpd_sys_content_t のままにしています。
※※ 参考情報 ※※
上記の設定が面倒な時は、ブール値 httpd_unified をonしてみてください。
○ httpd のブール値は、下記をonにしています。
httpd_enable_cgi --> on ← cgi の動作を有効にする。
httpd_enable_homedirs --> on ← ホームディレクトリへのアクセスを有効にする。
httpd_sys_script_anon_write --> on ← pubuic_content_rw_t タイプのラベルが付いた
ファイルへの書き込みアクセスを HTTPスクリプトに許可するかどうかを定義
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} バックア
ップは、毎日行うので日付を入れておくと良いと思います。
|
||
※ 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. apache2 の SSL 化の手順と httpd.conf、httpd_ssl.conf の設定 |
||
※※※ 注意事項 ※※※
下記の設定で使用している www.smiyasaka.com と smiyasaka.com は、私のドメイン名です。
コマンドをコピーする時には、あなたのドメインに変更して使用してください。
※※※ 設定の基本方針 ※※※
1. http:// のアクセスを https:// に自動変換( リダイレクト )させる。
2. 秘密鍵は、無償の Let's Encrypt を使用する。
3. SELinux は、有効( Enforcing )にしたまま使用する。
※※※ 設定の前提条件 ※※※
1. 現在 http://(ドメイン) でホームページが公開されている事。
2. httpd-2.4.XX のバージョンの apache2 を使用している事。
3. epelレポジトリのインストールが完了している事。
4. http とhttps のポート80と 443 が解放されている事
5. モデムのポート80と 443 が解放されている事。
|
||
1. 無償の Let's Encrypt を使用して認証鍵の証明書を取得します。 |
||
※※ 参考情報 ① ※※ |
||
② certbotインストール後の確認
yum list installed | grep certbot
certbot.noarch 0.30.2-1.el7 @epel
python2-certbot.noarch 0.30.2-1.el7 @epel
python2-certbot-apache.noarch 0.30.2-1.el7 @epel
③ webroot認証でのサーバー証明書の作成 ( 但し、有効期限が3ヶ月間です。)
certbotコマンドの実行( Web サーバが動いている状態でも以下のコマンドで取得できます。)
下記コマンドで取得します。
オプションを指定して certbot コマンドを実行します。 -d オプションには、証明書を発行
するサーバーのドメインを、-w には DocumentRoot のパスを指定します。
指定するドメイン名は、DNS サーバで設定している通りに設定します。
私の場合は、www.smiyasaka.com と smiyasaka.com を有効にしているので両方指定しています。
なお、証明書は、指定したドメイン名のみに対して作成されます。
( 認証鍵の証明書の取得は、ホームページ公開状態でも出来ました。)
certbot certonly --webroot -w /var/www/html/www.smiyasaka.com\
-d www.smiyasaka.com -d smiyasaka.com
|
||
上記コマンド実行後、下記の問い合わせがあり回答する必要があります。
〇 メールアドレスを入力するように求められます。
Enter email address (used for urgent [省略] (Enter 'c' to cancel): メールアドレスを入力
〇 規約に同意するかを問われます。 同意するためにAと入力します。
(A)gree/(C)ancel: A
〇 メールを受け取りたければYを、受け取りたくなければNと入力します。
(Y)es/(N)o: N
|
||
コマンドが正常終了すると、下記の様に表示し、/etc/letsencrypt/live 以下に最新版の証明
書へのシンボリック リンクが作成される。 |
||
証明書へのシンボリックリンクパスの確認 |
||
2. httpd-2.4.53 の再インストール |
||
3. Apache の 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 HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH
又は、
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 HIGH:MEDIUM:!MD5:!RC4:!3DES:!DH
又は、
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 -SSLv3 -TLSv1 -TLSv1.1
SSL プロトコル SSL 3.0 を無効化・TLS1.3 サポートする。
80 SSLProxyProtocol all -SSLv3
↓ ↓
SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSL プロキシ プロトコル SSL 3.0 を無効化・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"
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 "/var/www/html/www.smiyasaka.com">
コメントアウトする
287 #CustomLog "/usr/local/apache2/logs/ssl_request_log" \
288 # "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
↓ ↓
Include conf/extra/httpd-log.conf <---- ログの設定を別 conf で新規に作成します。
標準のログローテーション( Apache logrotate )を使用する時には、コメントアウトしないでください。
私の場合、自前でログローテーションをしています。
( httpd-log.conf の作成方法は、[ここをクリック]してください。)
最終行の後に下記を追加します。
#
Include conf/extra/httpd-zgip.conf <---- SSL での圧縮処理を別 conf で新規に作成します。
#--------------------------------------------------
# セキュリティ対策のため、最終行に追加しておきます。
# サーバ署名(バージョンとサーバ名)のOFF
ServerSignature Off
#
〇 httpd-log.conf の新規作成 ( 設定が長いので別 conf ファイルにしています。)
空の httpd-zgip.conf ファイルを作成します。
touch /usr/local/apache2/conf/extra/httpd-log.conf
viコマンドで下記モジュール( カスタムログ )の設定条件を書き込みます。
vi /usr/local/apache2/conf/extra/httpd-log.conf
下記を貼り付け(コピペ)ます。
|
||
<IfModule log_config_module>
#
#======================================
# 不要なログの記録をさせない設定
#======================================
#
# 拡張子による制限
SetEnvIf Request_URI\
".(gif)|(jpg)|(jpeg)|(png)|(bmp)|(ico)|(css)|(swf)$" no-logfile
#
#内部からのアクセスをログに記録しない対策
# IPアドレスによる制限 ローカル
SetEnvIf Remote_Addr "192.168.0." no-logfile
# サーチエンジンのログは取らない。
SetEnvIf User-Agent "Gigabot" no-logfile
SetEnvIf User-Agent "Googlebot" no-logfile
SetEnvIf User-Agent "MJ12bot" no-logfile
SetEnvIf User-Agent "msnbot" no-logfile
SetEnvIf User-Agent "psbot" no-logfile
SetEnvIf User-Agent "TurnitinBot" no-logfile
SetEnvIf User-Agent "Yahoo! Slurp" no-logfile
SetEnvIf User-Agent "Zealbot" no-logfile
# ワームによる制限のログは取らない。
SetEnvIf Request_URI "default\.ida" no-logfile
SetEnvIf Request_URI "null\.ida" no-logfile
SetEnvIf Request_URI "NULL\.IDA" no-logfile
SetEnvIf Request_URI "cmd\.exe" no-logfile
SetEnvIf Request_URI "root\.exe" no-logfile
SetEnvIf Request_URI "Admin\.dll" no-logfile
SetEnvIf Request_URI "^/_mem_bin/" no-logfile
SetEnvIf Request_URI "^/_vti_bin/" no-logfile
SetEnvIf Request_URI "^/c/" no-logfile
SetEnvIf Request_URI "^/d/" no-logfile
SetEnvIf Request_URI "^/msadc/" no-logfile
SetEnvIf Request_URI "^/scripts/" no-logfile
# CGIディレクトリ
SetEnvIf Request_URI "^/cgi-bin/" no-logfile
# 巡回ロボットがアクセスする robots.txt
SetEnvIf Request_URI "robots\.txt" no-logfile
# 長いURLへの対処
#
# ログファイルは、www.smiyasaka.com_alog_( 年月日 )の
# ファイル名で保存されます。
#
SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)"\
logfile SetEnvIf Request_Method "(OPTIONS)" no-logfile
CustomLog "| /usr/local/apache2/bin/rotatelogs\
/usr/local/apache2/logs/www.smiyasaka.com_alog_%Y%m%d\
86400 540"\
combined env=!no-logfile
</IfModule> |
||
〇 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 の正規表現等が良く理解できました。( 自己満足 )
興味のある方は、下記をクリックしてください。別ページで表示します。
[ sed コマンドによる httpd-2.4.XX の httpd-ssl.conf の一括編集 ] の詳細は、
[ここをクリック]してください。
|
||
4. Apache の SSL の設定 httpd.conf ファイルの編集
下記4ヶ所のコメントアウトを解除します。
vi /usr/local/apache2/conf/httpd.conf
〇 mod_socache_shmcbを有効化する。
88 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
↓ ↓
LoadModule socache_shmcb_module modules/mod_socache_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
〇 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_rewrite\.so/s/^#//
/httpd-ssl\.conf/s/^#//﹄/usr/local/apache2/conf/httpd.conf
|
||
5. URL の正規化をします。
http:// のアクセスを https:// に自動変換させる処理( 301リダイレクト )の追加と index.html 無し・ www ありに統一する設定をします。
www ありに統一したのは、Google Search Console のサイトマップ作成時、ドメインを www ありにしているからです。
.htaccess ファイルを作成し、下記コマンドを書込み、ドキュメントルート上に書込みます。
( ローカル LAN からのアクセスを考慮しています。 )
|
||
<IfModule mod_rewrite.c> |
||
※※※ 参考情報 ※※※
上記の設定をしなかった時には、http:// と https:// 共用になります。
リダイレクトの確認サイトは、﹁リダイレクトチェッカー﹂で検索するとヒットします。
※※※ 注意事項 ※※※
httpd.conf の下記設定が All であり、mod_rewrite.so が使用できる状態である事。
#AllowOverride None
↓ ↓
AllowOverride All
サーバ機を https 専用にした時、アクセスログの設定・圧縮処理の設定は、httpd-ssl.conf
への設定だけでOKです。
|
||
6. エラーのチェック |
||
7. apache2.service の変更して reload を追加します。 |
||
8. SELinux 対策 httpd からの秘密鍵の Read / Write を有効にする。 |
||
9. apache2 を起動して https://(サーバ機の LAN 内IPアドレス)でアクセス
systemctl start apache2
Windows PC の Web で、サーバ機の LAN 内IPアドレスを使いアクセスする。
(サーバ機の LAN 内IPアドレス)
この結果、セキュリティの警告が表示すればOKです。
アクセス先の URL が、 https://(サーバ機の LAN 内IPアドレス)に成っている事を確認してください。
自分のホームページの表示は、セキュリティの警告画面で [ リスクを理解して続行 ]等をクリッ
クして表示させます。
私のPCの場合、セキュリティアプリは、カスペルスキーですが、数回 [ 続行 ]をクリックしな
いと表示しませんでした。(IPアドレスでの証明を取っていないためだと思います。)
|
||
10. 証明書の更新 |
||
10-4. nghttp2 を使用して SSL プロトコル HTTP/1.1, HTTP/2 対応の設定 |
||
1. OpenSSL , nghttp2 の最新バージョンを下記 URL から、ダウンロードします。
https://github.com/tatsuhiro-t/nghttp2/releases/
https://www.openssl.org/source/
2022年3月 現在、nghttp2 のパージョンは、1.47.0 、OpenSSL のパージョンは、1.1.1n に成っています。
最新バージョンの nghttp2 を使用するには、openssl も最新バージョンをインストールする必要があります。
ちなみに、nghttp2-1.34.0.tar.gz までは、デフォルト の openssl でインストールできます。
2. Openssl のソースからのインストール
OpenSSL のコンパイルに必要なパッケージをインストールしておきます。
cd /usr/local/src/; \
yum -y install perl-core
35個のパッケージがインストールされます。
OpenSSLのインストール︵そこそこの時間がかかります︶
インストール先は、分かり易くするため /opt/openssl にします。
cd /usr/local/src/; \
tar zxvf openssl-1.1.1n.tar.gz; \
cd openssl-1.1.1n; \
./config --prefix=/opt/openssl \
--openssldir=/opt/openssl shared zlib
make && make install
初回のみ OpenSSL1.1.1nのライブラリを /etc/ld.so.conf.d にパスとシンボリックリンクを作成しておきます。
※ 注意 ※ この設定をしないと nghttpd2 の make でエラーが沢山出ます。
ln -s /opt/openssl/lib/libcrypto.so.1.1 /lib64/libcrypto.so.1.1;\
ln -s /opt/openssl/lib/libssl.so.1.1 /lib64/libssl.so.1.1;\
echo /opt/openssl/lib > /etc/ld.so.conf.d/openssl111.conf;\
ldconfig <------- 設定ファイルを反映させる。
3 SSL ライブラリの確認
libssl.so.〇〇〇があればOKです。
ldd /opt/openssl/bin/openssl <------- lddコマンドは、共有ライブラリへの依存関係を表示するコマンドです。
linux-vdso.so.1 => (0x00007fffc3fc9000)
libssl.so.1.1 => /opt/openssl/lib/libssl.so.1.1 (0x00007f876b92a000)
libcrypto.so.1.1 => /opt/openssl/lib/libcrypto.so.1.1 (0x00007f876b43d000)
libz.so.1 => /lib64/libz.so.1 (0x00007f876b227000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f876b023000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f876ae07000)
libc.so.6 => /lib64/libc.so.6 (0x00007f876aa39000)
/lib64/ld-linux-x86-64.so.2 (0x00007f876bbbd000)
|
||
4. nghttp2 のソースからのインストール
nghttp2 のコンパイルに必要な不足パッケージ( jansson・libev )もインストールしておきます。
cd /usr/local/src/;\
yum -y install jansson-devel libev-devel
nghttpd2 は、普通に make するとエラーが出るので、ソフトウェアコレクション( SCL : Software collections ) と言う技術を使い、gcc (コンパイラ) のアップグレードをします。
yum -y install centos-release-scl;\ <--- SCLを有効にする
yum -y install devtoolset-7;\ <--- gcc をアップグレード
scl enable devtoolset-7 bash <--- gcc をアップグレードバージョンへ一時的に切り替えます
OpenSSL 1.1.1k は /opt/openssl/ 配下にインストールしてあるので、環境変数 OPENSSL_CFLAGS と OPENSSL_LIBS に
OpenSSL のディレクトリパスを指定してコンパイルします。それらは、env で指定します。
cd /usr/local/src; \
tar xvfz nghttp2-1.47.0.tar.gz; \
cd nghttp2-1.47.0/; \ env ( 環境変数を設定するコマンド ) を必ずつけてください。
env OPENSSL_CFLAGS="-I/opt/openssl/include" \
OPENSSL_LIBS="-L/opt/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=' ' LI BS='-lssl -lcrypto ')
Libxml2: yes (CFLAGS='' LIB S='-lxml2 ')
Libev: yes (CFLAGS='' LIBS ='')
Libc-ares yes (CFLAGS=' ' L IBS='-lcares ')
libngtcp2: no (CFLAGS='' LI BS='')
libngtcp2_crypto_openssl: no ( CFLAGS='' LIBS='')
libngtcp2_crypto_boringssl: no (CFLAGS='' LIBS='')
libnghttp3: no (CFLAGS='' LI BS='')
libbpf: no (CFLAGS='' LIBS ='')
Libevent(SSL): no (CFLAGS='' L IBS='')
Jansson: yes (CFLAGS='' LI BS='')
Jemalloc: no (LIBS='')
Zlib: yes (CFLAGS=' ' LIB S='-lz ')
Systemd: yes (CFLAGS=' ' LI BS='-lsystemd ')
( 途中5行省略 )
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: no
HTTP/3 (EXPERIMENTAL): no
OK なら、インストールします。
make && make install
CentOS に /usr/local/lib の [ 共有ライブラリ(.so) ] を参照させる為に下記操作をします。
必要なライブラリをシステムに認識させるには/etc/ld.so.confに/usr/local/libを追記し、
ルート権限で ldconfig を実行します。
echo /usr/local/lib >> /etc/ld.so.conf; \
ldconfig <--- 設定ファイルを反映させる。
※※ 参考情報 ※※
上記のパス反映を忘れると、httpd エラーチェックで libnghttp2.so が参照できない旨のエラーが出ます。
|
||
5. httpd-2.4.53 の再インストール |
||
※※ 注意情報 ※※
nghttp2 をインストール後に、httpd-2.4.XX をインストールする時には、make で下記の様なエラーが出ますので、エラー対策をしてから、インストールしてください。
〇 httpd-2.4.47 のインストール時( make )では、下記のようなエラーが出ます。
/bin/ld: cannot find -lidn
/bin/ld: cannot find -lssh2
collect2: error: ld returned 1 exit status
〇 httpd-2.4.48 のインストール時( make )では、下記のようなエラーが出ます。
/opt/rh/devtoolset-7/……redhat-linux/7/ld: cannot find -lidn
/opt/rh/devtoolset-7/……redhat-linux/7/ld: cannot find -lssh2
(以下省略)
※※ httpd-2.4.XX インストール時( make )のエラー対策 ※※
このエラーは、モジュール idn、ssh2 が有るのに無いというエラー( cannot find -lidn, cannot find -lssh2 )です。
これを回避するためにこのモジュールのシンボリックリンクを再度張ってから、インストールします。
まずモジュール idn と ssh2 がどこに在るのかを検索してみます。
find / -name *ssh2*
/usr/lib64/libssh2.so.1
/usr/lib64/libssh2.so.1.0.1 <--- これを使います。
find / -name *idn*
/usr/lib64/libidn.so.11
/usr/lib64/libidn.so.11.6.11 <--- これを使います。
この二つのモジュールのシンボリックリンクを張ります。
cd /usr/lib64/
ln -s libidn.so.11.6.11 libidn.so <--- [登録名] libidn.so でシンボリックリンクを張ります
ln -s libssh2.so.1.0.1 libssh2.so <--- [登録名] libssh2.so でシンボリックリンクを張ります
エラー対策は、これだけです。
※※ コマンドlnの説明 ※※
lnは、リンクを作成するコマンドでオプション -s は、シンボリックリンクを張る指定です。
コマンドは、ln -s [リンク元] [登録名] の構成になります。
|
||
httpd-2.4.53 をインストールします。
cd /usr/local/src/httpd-2.4.53;\ <--- 又は、httpd-2.4.53
./configure \
--enable-ssl \
--with-ssl=/opt/openssl \ <--- インスートルした openssl のパス
--enable-ssl-staticlib-deps \ <--- OS 標準の openssl のライブラリが、動的に
リンクされることを防ぐため。
つまり、Apache の実行ファイルと一緒に SSL モジュールを組み込む為です。
--enable-http2 \ <--- mod_http2.so の追加
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-rewrite \
--enable-so \
--enable-deflate=shared \
--enable-mods-shared=all <--- すべての共有モジュールをコンパイルするオプション
〇 httpd-2.4.53 の make と install を実行する。
make && make install
|
||
※※ 参考情報 apr、apr-util を展開だけでする方法 ※※
( apr, apr-util のインストールをしないので早く終わります。)
(1). httpd-2.4.53 を展開する。
cd /usr/local/src/;\
tar xzvf httpd-2.4.53.tar.gz; \
chown -R root. ; \
cd ./httpd-2.4.53/srclib
(2). apr, apr-util を展開する。
tar xzvf /usr/local/src/apr-1.7.0.tar.gz; \
chown -R root. apr-1.7.0/; \
mv apr-1.7.0 apr; \
tar xzvf /usr/local/src/apr-util-1.6.1.tar.gz; \
chown -R root. apr-util-1.6.1/; \
mv apr-util-1.6.1/ apr-util
(3). configureの実行
cd /usr/local/src/httpd-2.4.53; \
./configure \
(省略)
上記の --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \ を --with-included-apr \ に置き換えてください。
|
||
6. Apache の SSLの設定 httpd-ssl.confファイルの追加編集 |
||
7. Apache の SSL の設定 httpd.conf ファイルの編集 |
||
8. エラーのチェック |
||
9. apache2 を起動して https://(サーバ機の LAN 内IPアドレス)でアクセス
systemctl start apache2
Windows PC の Web で、サーバ機の LAN 内IPアドレスを使いアクセスする。
https://(サーバ機の LAN 内IPアドレス)
この結果、セキュリティの警告が表示すればOKです。
プロトコルの検証は、IE で検証するとよくわかります。
ホームページが表示している状態で 画面上で[ 右クリック ] ---> [ 要素の検査(L) ] をクリ
ックしばらくすると﹁ (IPアドレス) - F12 開発者ツール ﹂が表示します。次に上部メニュー
[ ネットワーク ]をクリックします。
名前/パス の隣にプロトコルの欄があり、そこが HTTP/2 HTTP2 h2 とかに成っていれば成功です。
なお、HTTPS は、プロトコル HTTP/1.1 です。
他の Web サイトでの検証方法も同様にして確認できますが、google と firefox では、[ ネット
ワーク ]の表示の項目欄で [右クリックからプロトコルを選択] が必要です。
|
||
10. 最新バージョンの OpenSSL が使用され、圧縮もされているかを |
----------------------------------------------------- |
www.port80software.com からの回答![]() |
※ 追伸 ※ この方法での構築が良いのかの判定は、私のスキルでは出来ませんすが、まずは動作したので紹介しています。 |
|
10-5. 圧縮パッケージ Brotli を使用しての圧縮処理の追加 |
||
Brotli を使用しての圧縮処理を使用しているサーバが、多いということで、私のサーバ機も圧縮
パッケージ Brotli を使用しての圧縮処理の追加をしてみました。この追加処理は、10-4 項までの
構築が終了している事が前提となります。
① 圧縮アルゴリズムフォーマット(br)パッケージ Brotli のインストール
openssl, nghttp2 の最新版をインストール・ 設定ファイルを反映させてから、Brotli のインストールをしてください。
〇 Brotli のインストール
cd /usr/local/src; \
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 を実行します。
〇 Brotliのライブラリが﹁/usr/local/lib﹂以下にインストールされるので、ライブラリの
パスに追加しておきます。これを忘れると動作しませんので注意です。
echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf; \
ldconfig
② インストール済の httpd-2.4.53 を削除します。
systemctl stop apache2; \
systemctl disable apache2; \
rm -rf /usr/local/apache2; \
rm -rf /usr/local/src/httpd-2.4.53
③ httpd-2.4.53 の再インストール
SSL と HTTP/2、Brotli モジュールを有効にしてインストールします。
cd /usr/local/src; \
tar xzvf httpd-2.4.53.tar.gz; \
cd /usr/local/src/httpd-2.4.53;\
./configure \
--enable-ssl \
--with-ssl=/opt/openssl \ <--- インスートルした openssl のパス
--enable-ssl-staticlib-deps \
--enable-http2 \
--enable-brotli \ <--- Brotli の組み込み
--with-brotli=/usr/local/lib \ <--- Brotli のパス
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-mods-shared=all
--enable-rewrite \
--enable-deflate=shared \ <--- 本当は、不要ですが gzip も使えるように
--enable-so 組み込みます
上記終了したら、 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 での圧縮処理の確認
web ページでホームページを表示し、画面上右クリックで﹇ 要素の検査 ﹈を選択 ---> 表示画面のメニューバーの﹇ ネットワーク ﹈を選
択する。次にファイル一覧の jpg, png 以外の 〇〇〇〇.html, 〇〇〇〇.js, 〇〇〇〇.css 等のファイルの名前をクリックすると画面右側右の写真のような情報が取得できます。
|
|
応答ヘッダーの情報![]() |
※ Brotliを使用時に圧縮されたかの確認ができるwebサイトが存在していましたので紹介します。
下記 URL をクリックしてあなたのホームページの URL を入れるだけです。
tools.paulcalvano.com
私のドメインでアクセスした結果は、下記の通りです。 入力するドメインには、必ず、https:// を付けてください。
![]() |
||
⑩ 私の Web サイトの安全性の評価を受けてみました。 |
||
![]() |
11. fswebcom-20200725.tar.gz のインストールと定点カメラの設定 |
||
最新のバージョンの fswebcam-20200725 のバージョンをインストールしました。
fswebcam-20200725 のバージョンは、このままのインストールでは、文字化けが発生するので下記の対策が必要です。
2021.07.09 変更
ダウンロードは、[※ ここをクリック ※]をクリックしたら出来ます。
インストール方法は、fswebcam-20100622.tar.gz の場合と同じです。
但し、文字化けを解消するために日本語フォント(VLゴシック )を yum でインストールする必要があります。
〇 日本語フォントのインストール
cd /usr/local/src;\
yum -y install vlgothic-*
fswebcomを使った定点カメラの設定方法については、﹁定点カメラの実現方法﹂のページで詳細に
解説していますので参考にしてください。
○ fswebcam-20100622.tar.gz のインストール手順
① 依存関係のあるパッケージのインストール
cd /usr/local/src/; \
rpm -ivh gd-progs-2.0.35-26.el7.x86_64.rpm; \
rpm -ivh gd-devel-2.0.35-26.el7.x86_64.rpm
依存性のエラーが出るときには、yum でインストールします。
yum でのインストールは、下記の通りです。
cd /usr/local/src/; \
yum -y install gd-progs gd-devel
② 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
③ 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 7.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-0.103.2-1 ( アンチウィルスソフト )のインストール |
||
[ 2021.05.13 現在 ]
○ clamav-0.103.2-1 のインストール・設定手順
2021年5月現在 警告の出ない最新版です。
freshclam の自動実行は、/etc/cron.d/clamav-update で行わせ、clamscan の自動実行は、実
行用のプログラムを作成して /etc/cron.daily/ に登録し行わせる設定にしています。 ( デー
モン動作をさせない設定です。)
① インストールの順序は、下記の通りにしてください。
﹁エラー: 依存性の欠如:﹂になります。
cd /usr/local/src; \
rpm -Uvh pcre2-10.23-2.el7.x86_64.rpm; \ <---- 0.10X.X のバージョンから必要になりました。
rpm -Uvh libprelude-5.2.0-2.el7.x86_64.rpm; \
rpm -Uvh clamav-filesystem-0.103.2-1.el7.noarch.rpm; \
rpm -Uvh clamav-data-0.103.2-1.el7.noarch.rpm; \
rpm -Uvh clamav-lib-0.103.2-1.el7.x86_64.rpm; \
rpm -Uvh clamav-update-0.103.2-1.el7.x86_64.rpm; \
rpm -Uvh clamav-0.103.2-1.el7.x86_64.rpm
rpm のインストールで依存関係のエラーが出るときには、yum でインストールしてください。
※ yum での最新版のインストール方法 ※
cd /usr/local/src;\
yum -y install epel-release;\
yum -y --enablerepo=epel install clamav clamav-update
※※ 参考情報 ※※ clamav 旧バージョンのアンインストール
1. 旧バージョンのアンインストールは、まず、rpm -qa | grep clam でインストール済のパ
ッケージの確認をします。
アンインストールは、インストールと逆の順番に行ってください。
順序が違うと依存性のエラーが出ます。
なお、各パッケージ名は、.rpm を取った名前になります。注意してください。
2. バージョンアップのインストールした時の再設定は、下記の④,⑤,⑨項の設定を行い、
freshclam を実行するだけです。
② ユーザ : 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: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
④ 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 <---- ウィルスデータベースの所有者
⑤ freshclam_sleep で初期値3時間毎に自動更新させる設定に成っているので変更します。
私の場合、3時間毎は、多いので6時間毎に変更しています。
vi /etc/cron.d/clamav-update
## It is ok to execute it as root; freshclam drops privileges and becomes
## user 'clamav' as soon as possible
0 */3 * * * root /usr/share/clamav/freshclam-sleep
↑
ここを6に変更します。
⑥ ウィルス定義ファイルの最新化
下記コマンドを実行。
freshclam
※ 定義ファイルのダウロードが極端に遅い時には、一度 [Ctrl]+c で強制終了させ再度実行さ
せて見てください。
|
||
※ 参考情報 ※ |
||
⑦ ウイルスチェックの実行(テスト)
下記コマンドを実行。
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
⑧ ウィルススキャン定時実行スクリプト作成
作成方法は、下記リンクの﹁アンチウィルスソフト導入(Clam AntiVirus)﹂を参照してください。
※ 参考にしたサイト アンチウィルスソフト導入(Clam AntiVirus)
上記サイトの例を参考にしてチョット手を入れてみました。
[ ウィルススキャンを定期的に実行させるためのスクリプトの作成 ] の詳細は、
[ここをクリック]してください。
⑨ 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 <---- ログファイルが空ならローテーションしない。
}
⑩ 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
|
||
○ yum を使用して ClamAV のバージョンアップする手順 |
13. chkrootkitの導入 |
||
① chkrootkit のインストール |
||
※ 参考情報 ※ 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 のインストール |
||
○ root 宛てのメールは、sendmail が、無いと来ないみたいのでインストールします。
cd /usr/local/src; \
rpm -Uvh hesiod-3.2.1-3.el7.x86_64.rpm; \
rpm -Uvh procmail-3.22-36.el7.x86_64.rpm; \
rpm -Uvh sendmail-8.14.7-5.el7.x86_64.rpm
yum でのインストールは、下記の通りです。
yum -y install sendmail
○ sendmail を起動します。
systemctl start sendmail
# が表示するまで、結構時間がかかるので待ちます。
○ 再起動後も有効にする設定
systemctl enable sendmail
# が表示するばOKです。
root 宛てのメールは、mail コマンドでみます。詳細は、下記サイトを参考にしてください。
※ 参考にしたサイト mail コマンドの使い方
|
15. Logwatch のインストールと毎日のメールを簡単にチェックする方法 |
||
サーバー上のログを定期的にまとめ、集約してレポートを出してくれるソフトウェアのインストール。
cd /usr/local/src/; \
rpm -ivh logwatch-7.5.4-1.noarch.rpm
yum でのインストールは、下記の通りです。
yum -y install logwatch
Logwatch のインストールは、依存関係から、上記の順序で行ってください。
○ 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/ s/Detail = Low/Detail = Med/ s/sendmail -t/sendmail -t -f root@localhost/ s/#LogDir/LogDir/﹄/usr/share/logwatch/default.conf/logwatch.conf vi /usr/share/logwatch/default.conf/logwatch.conf アーカイブされたログも含めるかどうかの指定。 71行目 コメントアウトの解除 #Archives = Yes ↓ Archives = Yes ログの詳細度、Low (=0), Med (=5), High (=10) または 0から10までの数字。 82行目 私の場合、Med にしました。 Detail = Low ↓ Detail = Med メールコマンドパスの変更 120行目 rooo宛てにする。 [ Can't execute sendmail -t: No such file or directory ]というエラーが出るので修正します。 mailer = "/usr/sbin/sendmaill -t" ↓ ↓ ↓ mailer = "/usr/sbin/sendmaill -t -f root@localhost" ログが保存されているディレクトリ 139行目 # 削除 #LogDir = /var/log ↓ LogDir = /var/log ○ 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 を実行したら出力結果が ﹁ SD J[h }Eg nj ﹂
の様になってしまいました。
これを nkf を使用して perl SD_Card_Check.pl | nkf -e と実行させると出力結果は、下記の様に正しく表示します。
つまり、Tera Term 側の文字コード EUC に変換して出力する指定を追加するだけです。
perl SD_Card_Check.pl | nkf -e ----> ﹁SDカード マウント OK ﹂
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 |
||
※ 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分でネームサーバーが反映してくれました。
( 2022年1月現在、数分で反映されています。)
アクセス先は、https://www.value-domain.com/moddns.php?action=moddns2&domainname=[ドメイン] で直ぐログインできます。
私の場合 グローバルIPアドレス の変更の自動検知は、したとしても一日一回程度で良いのかと思っています。
よって自動検知は、一日一回とし、変更時は、手作業で変更作業をすることにしました。
グローバルIPアドレス の定期更新は、最低でも月一回程度しないとネームサーバー側に無視されるので上記の方法で定期更新を実行するようにしました。
|
||
※※ 参考になりますか?。[ グローバルIPアドレス 変化チェックのプログラム ] ※※
下記の様な、グローバルIPアドレス 変化チェックのプログラムを作ってみました。
下記 crontab は、10分毎実行させる時の設定例です。
*/10 * * * * /root/IP_Check.sh > /dev/null 2>&1
|
||
|
||
18. 自宅サーバの管理・運用監視対策等 |
||
1). サーバ機交換手順の操作単純化
私のサーバ機は、サーバ専用の機器で無いので月一程度の頻度で予備機と交換して運用しています。
普段予備機は、現行サーバ機からのバックアップを取る為IPアドレスを別にしています。
サーバ機交換には、現行サーバ機の 4). CPU 温度の監視 CPU 温度を取得するには、sensors のインストールが必要となります。 lm_sensors のrpm パッケージは、その時点での最新版をインストールしてください。 古いと依存性エラーが発生します。その時には、yum でインストールします。 下記は、2019年9月 現在の最新バージョンのインストールです。 cd /usr/local/src; \ rpm -Uvh lm_sensors-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm yum でのインストールは、下記の通りです。 yum -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"; ----------------------------------------------------------- 5). ftp のインストール ftp は、ホームページデータなどのバックアップの際、外部へ出力する際に必要となります。 cd /usr/local/src; \> rpm -Uvh ftp-0.17-67.el7.x86_64.rpm yum でのインストールは、下記の通りです。 yum -y install ftp 6). OS(カーネル)のバージョンアップ後の対策(古いカーネルの削除) OSのバージョンアップがあった時( yum -y update )には、OSのバージョンは、変わります が正式には、reboot としないとカーネルのバージョンは、変わりませんので注意して下さい。 カーネルのバージョンアップは、時々ありますのでその都度、reboot する必要があります。 カーネルのバージョンは、CentOS 7 では月一位のペースで更新されその都度 reboot をしてい くと /boot エリヤを占領し古いカーネルのバージョンを削除する必要が出てきます。 古いカーネルのバージョンを削除する手順を紹介します。 削除手順 a. /boot エリヤの使用量を下記コマンドで調べます。 df -m /boot 表示例 Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda1 497 248 249 50% /boot b. /boot の中を下記コマンドで確認します。 ls -l /boot 合計 219604 -rw-------. 1 root root 2963297 5月 12 20:13 System.map-3.10.0-327.18.2.el7.x86_64 -rw------- 1 root root 2963822 6月 24 02:14 System.map-3.10.0-327.22.2.el7.x86_64 -rw------- 1 root root 2964683 8月 3 20:21 System.map-3.10.0-327.28.2.el7.x86_64 -rw------- 1 root root 2964731 8月 19 04:15 System.map-3.10.0-327.28.3.el7.x86_64 -rw-------. 1 root root 2963044 11月 20 2015 System.map-3.10.0-327.el7.x86_64 ( 以下省略 ) 五世代のカーネルのバージョンが保存されています。 c. 下記コマンドで古いカーネルをすべて削除します。 package-cleanup --oldkernels --count=1 <---- 一世代だけ残します。二世代までは、2とします。 実行例 読み込んだプラグイン:fastestmirror, langpacks, priorities ---> トランザクションの確認を実行しています。 ---> パッケージ kernel.x86_64 0:3.10.0-327.el7 を 削除 ---> パッケージ kernel.x86_64 0:3.10.0-327.18.2.el7 を 削除 ---> パッケージ kernel.x86_64 0:3.10.0-327.22.2.el7 を 削除 ---> パッケージ kernel.x86_64 0:3.10.0-327.28.2.el7 を 削除 ---> パッケージ kernel-devel.x86_64 0:3.10.0-327.el7 を 削除 ---> パッケージ kernel-devel.x86_64 0:3.10.0-327.18.2.el7 を 削除 ---> パッケージ kernel-devel.x86_64 0:3.10.0-327.22.2.el7 を 削除 ---> パッケージ kernel-devel.x86_64 0:3.10.0-327.28.2.el7 を 削除 ---> 依存性解決を終了しました。 ( 途中省略 ) インストール容量: 507 M 上記の処理を行います。よろしいでしょうか? [y/N]y <---- y を入力します。 ( 途中省略 ) 削除しました: kernel.x86_64 0:3.10.0-327.el7 kernel.x86_64 0:3.10.0-327.18.2.el7 kernel.x86_64 0:3.10.0-327.22.2.el7 kernel.x86_64 0:3.10.0-327.28.2.el7 kernel-devel.x86_64 0:3.10.0-327.el7 kernel-devel.x86_64 0:3.10.0-327.…… kernel-devel.x86_64 0:3.10.0-327.22.2.el7 kernel-devel.x86_64 0:3.10.0-327.…… 完了しました! c. どれだけ容量が減ったかの確認をします。 df -m /boot ファイルシス 1M-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 497 108 390 22% /boot 50% が 22% になりました。 d. /boot の中を下記コマンドで再確認してみます。 ls -l /boot 合計 75708 -rw------- 1 root root 2964731 8月 19 04:15 System.map-3.10.0-327.28.3.el7.x86_64 -rw-r--r-- 1 root root 126431 8月 19 04:15 config-3.10.0-327.28.3.el7.x86_64 ( 以下省略 ) 最新のカーネルのバージョンだけになっています。 7). root 権限の不要なログデータの強制削除する方法 私の場合定期的にサーバ機を入替えて使用している関係で ディレクトリ/var/log に全く必 要のないログファイルが 作成日の日付ファイル名 cron-20160918 とか maillog-20160918 , messages-20160918 といったファイル名で保存され目につくようになりました。 これらファイルは、root 権限のファイルなので通常の操作では、削除できません。何とか簡 単に削除する方法はないかと調べたら、rmに空のオプション(rm-- )を付けると削除できる 事がわかりましのた。 下記は、rmに空のオプションを付けた時のコマンド例です。なお、ファイル一覧は、コマンド ls -l で確認してください。 cd /var/log <---- ディレクトリ /var/log に移動します。 rm -- cron-20160918 <---- cron のログファイルの削除例 rm: 通常ファイル `cron-20160918' を削除しますか?の様に削除して良いか聞かれますので、 y を入力します。 くれぐれも必要なファイルを削除しないようにしてください。 ログファイルの種類
ファイル名 と 記録されるログの内容
btmp : 各ユーザーのログイン失敗情報
cron : cron実行時の情報
freshclam.log : clamavのウィルスアップデート結果
maillog : メールプログラムが出力したメッセージ
messages : デーモンの動作状況
secure : ログインなど認証を実行した情報
spooler : 印刷スプールに関する情報
wtmp : ログイン情報
yum.log : yumの操作結果
8). サーバ機のIPアドレスを簡単に変更する方法
IPアドレスの変更は、直接 vi /etc/sysconfig/network-scripts/ifcfg-enp2s0 とキー入力して行いますが
コマンドがやたら長いのでなかなか正しく入力出来なくてイライラすることがあります。
CentOS7 には、nmtui という system-config-network-tui> の代替となるコマンドがある事が
わかりました。
このコマンドを使うと簡単にアドレスが変更できるようになります。
使い方は、nmtui と入力するだけです。以下は、その手順です。
① コマンド nmtui を入力すると写真 ① が表示します。
② [接続の編集]が選択されている事を確認したら [Enter]キーを入力します。
③ 写真 ②が表示されます。デバイス名 enp2s0 が選択されている事を確認したら [Enter]
キーを入力します。
④ 写真 ③が表示されます。矢印キーで IPv4 アドレスにフォーカスを移動しアドレスを修正
してフォーカスを <OK>に移動し[Enter]キーを入力します。
IPアドレスは、 (例) 192.168.0.XX/24 の内XXだけを変更してください。
/24 は、ネットマスク(255.255.255.0)と同じ意味です。
⑤ 再度写真 ②が表示されます。矢印キーで <終了>にフォーカスを移動し[Enter]キーを
入力します。
⑥IPアドレスを有効にするには、systemctl restart NetworkManager か reboot を入力
します。
|
写真 ①![]() |
写真 ②![]() |
写真 ③![]() |
9). サーバ機起動時にSDカードを自動でマウントする方法
SDカードは、サーバ機起動時自動でマウントされないので私の場合、下記の様な方法でマウ
ントしてみました。
①SDカードを差し込んで認識されるデバイス名をコマンド lsblk で調べます。
コマンド lsblk の表示例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 119.2G 0 disk |-sda1 8:1 0 500M 0 part /boot `-sda2 8:2 0 117G 0 part ( 省略 ) sdb 8:16 1 14.7G 0 disk `-sdb1 8:17 1 14.7G 0 part <-- SDカードのデバイス名( -sdb1 が表示しない時は、SDカードのデバイス名は、sdb になります。) ※ 参考情報 ※ 上記の表示例は、ONKYO DP315 PC の場合で、 mouse PC の場合は、sdb でなく 16GB の場合 mmcblk0 179:0 0 14.7G 0 disk
`-mmcblk0p1 179:1 0 14.7G 0 part
4GB の場合
mmcblk0 179:0 0 3.7G 0 disk
となりました。
② 起動時にマウントを実行させる為のサービス(一例)を作成します。
vi /usr/lib/systemd/system/SD_Card_mount.service で下記をコピペする
( サービス名 SD_Card_mount は、適当に付けてください。)
---------------------------------------------------------------------------
[Unit]
Description= SD_Card_mount
After=network.target
[Service]
Type=simple
ExecStart=/root/SD_Card_mount.sh
[Install]
WantedBy=multi-user.target
|
||
設定項目の説明 |
||
サービス SD_Card_mount が起動時に実行する様に設定する。
systemctl enable SD_Card_mount
再起動後、systemctl status SD_Card_mount でステータスを確認をしてみると
一元のサービスなので、ステータスは、inactive (dead) 動作していない(死んでいる)に成っています。
|
||
* SD_Card_mount.service - SD_Card_mount
Loaded: loaded (/usr/lib/systemd/system/SD_Card_mount.service; enabled;
vendor preset: disabled)
Active: inactive (dead) …… 以下省略
③SDカードのマウントを実行するプログラムの作成
vi SD_Card_mount.shで下記をコピペする ( root 上に作成 )
---------------------------------------------------------------------------
#!/bin/sh
#---------------------------------------------
# システム起動時にSDカードをマウント
#---------------------------------------------
# sdb がない時(エラーの時)には、次のコマンド sdb1 をマウント実行する指定
#
mount -t vfat /dev/sdb /mnt/SD_Card || mount -t vfat /dev/sdb1 /mnt/SD_Card
---------------------------------------------------------------------------
※ 注意 ※ sdb, sdb1 は、貴方のPC環境に合わせてください。
/mnt にマウント先がない時には、事前に作成してください。
(例) マウントディレクトリ SD_Card を /mnt に作成する。
mkdir -p /mnt/SD_Card
④ マウントされるかのテスト
コマンド systemctl start SD_Card_mount を実行し、コマンド lsblk で確認する。
sdb 8:16 1 14.7G 0 disk `-sdb1 8:17 1 14.7G 0 part /mnt/SD_Cardこの例の様にマウント先が表示されれば OK です。 このサービスは、一回限りの実行なので、再実行も start になります。 |