CloudFront や ALB 適用済みの WordPress サイトにおいて、新しいバージョンの AMIMOTO AMI (Amazon Linux) へのリプレースをしてみる。

# ０．はじめに

以下の様な対応を行なった WordPress サイトにおいて、

* [AMIMOTO AMI を使って、WordPress を立ち上げて、接続先を RDS に変更してみる \- Qiita](https://qiita.com/kusokamayarou/items/58d550b82b960c321c3a)
* [SSL 化済みの WordPress サイトに CloudFront を適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/21e4bcdaa7c8dd8523ab)
* [CloudFront 適用済みの WordPress サイトに ALB を適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/1229bed12462eee48e68)
* [CloudFront 適用済みの WordPress サイトに AWS WAF も適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/099a97fc0edc493e22fb)
* [CloudFront 適用済みの WordPress サイトに ALB を適用後、ALB \- WordPress 間を HTTP\(80番\) で通信させてみる \- Qiita](https://qiita.com/kusokamayarou/items/edffa0f1159f60a2ce82)

新しいバージョンの AMIMOTO AMI への リプレース をしてみます。

# １．EC2 インスタンス (AMIMOTO AMI)

* 基本的には、以下の手順通り。
    * [AMIMOTO AMIでWordPressを立ち上げる \- Qiita](https://qiita.com/Ichiro_Tsuji/items/88f9009f80f3439ad9fa)
* 構成についても、リプレース元と同じ構成と設定にします。
    * WordPress powered by AMIMOTO (5.2)
    * ![FireShot Capture 114 - インスタンスウィザードを起動 - EC2 Management Console_ - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/499f7936-c7bd-3183-89f7-2e9783b773d5.png)
    * ![FireShot Capture 115 - インスタンスウィザードを起動 - EC2 Management Console_ - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/79f2cc59-15ca-b538-dfb1-d4a8a95781b3.png)

# ２．サーバー (Amazon Linux)

### ■ ログイン

1. 以下のセッションマネージャーのコンソールから、インスタンスにログインする。
    *  [AWS Systems Manager \- Session Manager](https://ap-northeast-1.console.aws.amazon.com/systems-manager/session-manager/sessions?region=ap-northeast-1)

### ■ Root ユーザーのパスワードの変更

1. 以下のコマンドを実行し、Root ユーザーのパスワードを変更する。
    * `sudo su -`
    * `passwd`
<br><br>
    * ※参考
        * [AWSの初期設定でrootパスワードを設定する \- Qiita](https://qiita.com/shanonim/items/5496e0c6f6bf09e76f7c)

### ■ ec2-user ユーザーの削除

1. 以下のコマンドを実行し、ec2-user ユーザーを削除する。
    * `cat /etc/passwd | grep ec2-user`
    * `sudo userdel -r ec2-user`
    * `cat /etc/passwd | grep ec2-user`
    * `ls -ld /home/*`
<br><br>
    * ※参考
        * [AmazonLinux で EC2を立てたらとりあえずやること \- 忘備録](http://mktktmr.hatenablog.jp/entry/2016/12/07/154736)

### ■ タイムゾーンと言語の設定

* ※参考
    * [Amazon Linux （OS の基本設定）\-Amazon EC2 \- Qiita](https://qiita.com/leomaro7/items/4e667b32a9ac9e7211ba)

1. 以下のコマンドを実行し、/etc/cloud/cloud.cfg の値を変更する。
    * `ls -ld /etc/cloud/cloud.cfg*`
    * `sudo cp -fp /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.ORG`
    * `ls -ld /etc/cloud/cloud.cfg*`
    * `sudo vi /etc/cloud/cloud.cfg`
    * `diff /etc/cloud/cloud.cfg.ORG /etc/cloud/cloud.cfg`
    * <pre><code>
22a23,24
>
> locale: ja_JP.UTF-8</code></pre>
1. 以下のコマンドを実行し、/etc/sysconfig/i18n の値を変更する。
    * `ls -ld /etc/sysconfig/i18n*`
    * `sudo cp -fp /etc/sysconfig/i18n /etc/sysconfig/i18n.ORG`
    * `ls -ld /etc/sysconfig/i18n*`
    * `sudo vi /etc/sysconfig/i18n`
    * `diff /etc/sysconfig/i18n.ORG /etc/sysconfig/i18n`
    * <pre><code>
1c1
< LANG="en_US.UTF-8"
---
> LANG="ja_JP.UTF-8"</code></pre>

### ■ ホスト名の変更

1. 以下のコマンドを実行し、/etc/sysconfig/network の値を変更する。
    * `ls -ld /etc/sysconfig/network*`
    * `sudo cp -fp /etc/sysconfig/network /etc/sysconfig/network.ORG`
    * `ls -ld /etc/sysconfig/network*`
    * `sudo vi /etc/sysconfig/network`
    * `diff /etc/sysconfig/network.ORG /etc/sysconfig/network`
    * <pre><code>
2c2
< HOSTNAME=localhost.localdomain
---
> HOSTNAME=[ホスト名]</code></pre>
1. 以下のコマンドを実行し、/bin/hostname の値を変更する。
    * `/bin/hostname`
    * `sudo /bin/hostname [ホスト名]`
    * `/bin/hostname`
1. 以下のコマンドを実行し、/etc/hosts の値を変更する。
    * `ls -ld /etc/hosts*`
    * `sudo cp -fp /etc/hosts /etc/hosts.ORG`
    * `ls -ld /etc/hosts*`
    * `sudo vi /etc/hosts`
    * `diff /etc/hosts.ORG /etc/hosts`
    * <pre><code>
2a3,4
>
> [IPアドレス] [ホスト名] [ドメイン]</code></pre>
    * ※参考
        * [Linuxでホスト名を変更する方法 \- \[Linux \[Red Hatなど\]/サーバー\] ぺんたん info](http://pentan.info/server/linux/hostname.html)
        * [「My unqualified host name」「unable to qualify my own domain name」の対処法](https://hivecolor.com/id/169)
        * [№2342 Sendmail 特定のドメイン宛へのメールが送信できない。 \- Web Patio \- CentOSで自宅サーバー構築](http://centossrv.com/bbshtml/webpatio/2342.shtml)

### ■ SSH の設定 (nginx)

1. 以下のコマンドを実行し、/etc/passwd の値を変更する。
    * `ls -ld /etc/passwd*`
    * `sudo cp -fp /etc/passwd /etc/passwd.ORG`
    * `ls -ld /etc/passwd*`
    * `sudo vi /etc/passwd`
    * `diff /etc/passwd.ORG /etc/passwd`
    * <pre><code>
26c26
< nginx:x:498:497:Nginx web server:/var/lib/nginx:/bin/bash
---
> nginx:x:498:497:Nginx web server:/var/www/vhosts:/bin/bash
</pre></code>
    * ※参考
        * [nginx ユーザとして ssh 接続できるようにするには? \| 超高速 WordPress AMI AMIMOTO](https://ja.amimoto-ami.com/how-to-ssh-as-nginx-user/)
1. 以下のコマンドを実行し、/etc/ssh/sshd_config の値を変更する。
    * `ls -ld /etc/ssh/sshd_config*`
    * `sudo cp -fp /etc/ssh/sshd_config /etc/ssh/sshd_config.ORG`
    * `ls -ld /etc/ssh/sshd_config*`
    * `sudo vi /etc/ssh/sshd_config`
    * `diff /etc/ssh/sshd_config.ORG /etc/ssh/sshd_config`
    * <pre><code>
17c17
< #Port 22
---
> Port [SSHポート番号]
38c38
< #PermitRootLogin yes
---
> PermitRootLogin no
45c45
< #PubkeyAuthentication yes
---
> PubkeyAuthentication yes
65c65
< PasswordAuthentication no
---
> PasswordAuthentication yes
140c140,144
< #     ForceCommand cvs server
\ No newline at end of file
---
> #     ForceCommand cvs server
> AllowUsers nginx
>
> Match User nginx
> PasswordAuthentication no</code></pre>
    * `sudo service sshd restart`
<br><br>
    * ※参考
        * [接続制限の設定](http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/ssh_filter.html)
1. 以下のコマンドを実行し、/etc/sysconfig/iptables の値を変更する。
    * `ls -ld /etc/sysconfig/iptables*`
    * `sudo vi /etc/sysconfig/iptables`
    * <pre><code>
# Generated by iptables-save v1.4.18 on Fri Oct  3 13:11:31 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport [SSHポート番号] -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j LOG --log-prefix "[iptables] " --log-level 6
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Oct  3 13:11:31 2014
</pre></code>
    * `sudo service iptables restart`

### ■ logwatch のインストール

1. 以下のコマンドを実行し、logwatch をインストールする。
    * `sudo yum install logwatch`
    * `sudo /usr/sbin/logwatch --print`
1. 以下のコマンドを実行し、logwatch のメールレポートを設定する。
    * `ls -ld /etc/logwatch/conf/logwatch.conf*`
    * `sudo cp -fp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.ORG`
    * `sudo vi /etc/logwatch/conf/logwatch.conf`
    * `diff /etc/logwatch/conf/logwatch.conf.ORG /etc/logwatch/conf/logwatch.conf`
    * <pre><code>
1a2,5
>
> MailFrom = [From メールアドレス]
> MailTo = [To メールアドレス]
> mailer = "sendmail -t -f [送信者アドレス]"</code></pre>
    * ※参考
        * [Logwatch改造でEvernoteにノートブック、タグを指定して追加するよ！ – oki2a24](https://oki2a24.com/2012/02/29/logwatch-mail-evernote/)

### ■ AIDE のインストール

* ※参考
    * [CentOS で行なっておきたいセキュリティ設定: ある SE のつぶやき](http://fnya.cocolog-nifty.com/blog/2012/03/centos-6aa8.html)
    * [2010\-01\-25](https://mtbtaizo.hatenadiary.org/entries/2010/01/25)
    * [AIDEで改竄検知 \- たていすのメモ2](http://tateisu.hatenablog.com/entry/2012/02/20/100939)
    * [mail コマンドで from を変更する方法まとめ \- akishin999の日記](http://akishin.hatenablog.jp/entry/20121029/1351470238)

1. 以下のコマンドを実行し、AIDE をインストールする。
    * `sudo yum -y install aide`
    * `sudo aide -i`
1. 以下のコマンドを実行し、AIDE の初期設定をする。
    * `sudo ls -la /var/lib/aide/`
    * `sudo cp -fp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz`
    * `sudo ls -la /var/lib/aide/`
    * `sudo aide -C`
1. 以下のコマンドを実行し、/etc/aide.conf に除外設定を追加する。
    * `sudo ls -ld /etc/aide.conf*`
    * `sudo cp -frp /etc/aide.conf /etc/aide.conf.ORG`
    * `sudo ls -ld /etc/aide.conf*`
    * `sudo vi /etc/aide.conf`
    * `sudo diff /etc/aide.conf.ORG /etc/aide.conf`
    * <pre><code>
221a222,225
>
> #
> !/var/log/*
> !/etc/lvm/cache/.cache</code></pre>
1. 以下の２つのファイルを作成し、AIDE のメールレポートの設定する。
    * /etc/default/aide
    * /etc/cron.daily/aide
        * `sudo chmod +x /etc/cron.daily/aide` で実行権限を付与すること。

```config:/etc/default/aide
# These settings are mainly for the wrapper scripts around aide,
# such as aideinit and /etc/cron.daily/aide

# This is the email address reports get mailed to

MAILTO="-r [From メールアドレス] [To メールアドレス]" 

# Set this to suppress mailings when there's nothing to report

#QUIETREPORTS=1

# This parameter defines which aide command to run from the cron script.
# Sensible values are "update" and "check".
# Default is "check", ensuring backwards compatibility.
# Since "update" does not take any longer, it is recommended to use "update",
# so that a new database is created every day. The new database needs to be
# manually copied over the current one, though.

COMMAND=update

# This parameter defines how many lines to return per e-mail. Output longer
# than this value will be truncated in the e-mail sent out.

LINES=1000

# This parameter gives a grep regular expression. If given, all output lines
# that _don't_ match the regexp are listed first in the script's output. This
# allows to easily remove noise from the aide report.

NOISE="" 

# This parameter defines which options are given to aide in the daily
# cron job. The default is "-V4".

AIDEARGS="" 

#
#
DATABASE="/var/lib/aide/aide.db.gz" 
DATABASE_NEW="/var/lib/aide/aide.db.new.gz" 
```

```bash:/etc/cron.daily/aide
#!/bin/bash

PATH="/sbin:/usr/sbin:/bin:/usr/bin" 
LOGDIR="/var/log/aide" 
LOGFILE="aide.log" 
CONFFILE="/etc/aide.conf" 
ERRORLOG="error.log" 
ERRORTMP=`mktemp -t "$ERRORLOG".XXXXXXXXXX`

[ -f /usr/sbin/aide ] || exit 0

AIDEARGS="-V4" 

if [ -f /etc/default/aide ]; then
        . /etc/default/aide
fi

FQDN=`hostname`
DATE=`date +"at %Y-%m-%d %H:%M"`

# default values

MAILTO="${MAILTO:-root}" 
DATABASE="${DATABASE:-/var/lib/aide/aide.db.gz}" 
DATABASE_NEW="${DATABASE_NEW:-/var/lib/aide/aide.db.new.gz}" 
LINES="${LINES:-1000}" 
COMMAND="${COMMAND:-check}" 

if [ ! -f $DATABASE ]; then
        (
        echo "Fatal error: The AIDE database does not exist!" 
        echo "This may mean you haven't created it, or it may mean that someone has removed it." 
        ) | /bin/mail -s "Daily AIDE report for $FQDN" $MAILTO
        exit 0
fi

aide $AIDEARGS --$COMMAND >"$LOGDIR/$LOGFILE" 2>"$ERRORTMP" 
RETVAL=$?

if [ -n "$QUIETREPORTS" ] && [ $QUIETREPORTS -a \! -s $LOGDIR/$LOGFILE -a \! -s $ERRORTMP ]; then
        # Bail now because there was no output and QUIETREPORTS is set
        exit 0
fi

mv ${DATABASE_NEW} ${DATABASE}

(cat << EOF;
This is an automated report generated by the Advanced Intrusion Detection
Environment on $FQDN ${DATE}.

EOF

# include error log in daily report e-mail

if [ "$RETVAL" != "0" ]; then
        cat > "$LOGDIR/$ERRORLOG" << EOF;

*****************************************************************************
*                    aide returned a non-zero exit value                    *
*****************************************************************************

EOF
        echo "exit value is: $RETVAL" >> "$LOGDIR/$ERRORLOG" 
else
        touch "$LOGDIR/$ERRORLOG" 
fi
< "$ERRORTMP" cat >> "$LOGDIR/$ERRORLOG" 
rm -f "$ERRORTMP" 

if [ -s "$LOGDIR/$ERRORLOG" ]; then
        errorlines=`wc -l "$LOGDIR/$ERRORLOG" | awk '{ print $1 }'`
        if [ ${errorlines:=0} -gt $LINES ]; then
                cat << EOF;

****************************************************************************
*                      aide has returned many errors.                      *
*           the error log output has been truncated in this mail           *
****************************************************************************

EOF
                echo "Error output is $errorlines lines, truncated to $LINES." 
                head -$LINES "$LOGDIR/$ERRORLOG" 
                echo "The full output can be found in $LOGDIR/$ERRORLOG." 
        else
                echo "Errors produced  ($errorlines lines):" 
                cat "$LOGDIR/$ERRORLOG" 
        fi
else
        echo "AIDE produced no errors." 
fi

# include de-noised log

if [ -n "$NOISE" ]; then
        NOISTEMP=`mktemp -t aidenoise.XXXXXXXXXX`
        NOISTEMP2=`mktemp -t aidenoise.XXXXXXXXXX`
        sed -n '1,/^Detailed information about changes:/p' "$LOGDIR/$LOGFILE" | \
        grep '^\(changed\|removed\|added\):' | \
        grep -v "^added: THERE WERE ALSO [0-9]\+ FILES ADDED UNDER THIS DIRECTORY" > $NOISETMP2

        if [ -n "$NOISE" ]; then
                < $NOISETMP2 grep -v "^\(changed\|removed\|added\):$NOISE" > $NOISETMP
                rm -f $NOISETMP2
                echo "De-Noised output removes everything matching $NOISE." 
        else
                mv $NOISETMP2 $NOISETMP
                echo "No noise expression was given." 
        fi

        if [ -s "$NOISETMP" ]; then
                loglines=`< $NOISETMP wc -l | awk '{ print $1 }'`
                if [ ${loglines:=0} -gt $LINES ]; then
                        cat << EOF;

****************************************************************************
*   aide has returned long output which has been truncated in this mail    *
****************************************************************************

EOF
                        echo "De-Noised output is $loglines lines, truncated to $LINES." 
                        < $NOISETMP head -$LINES
                        echo "The full output can be found in $LOGDIR/$LOGFILE." 
                else
                        echo "De-Noised output of the daily AIDE run ($loglines lines):" 
                        cat $NOISETMP
                fi
        else
                echo "AIDE detected no changes after removing noise." 
        fi
        rm -f $NOISETMP
        echo "============================================================================" 
fi

# include non-de-noised log

if [ -s "$LOGDIR/$LOGFILE" ]; then
        loglines=`wc -l "$LOGDIR/$LOGFILE" | awk '{ print $1 }'`
        if [ ${loglines:=0} -gt $LINES ]; then
                cat << EOF;

****************************************************************************
*   aide has returned long output which has been truncated in this mail    *
****************************************************************************

EOF
                echo "Output is $loglines lines, truncated to $LINES." 
                head -$LINES "$LOGDIR/$LOGFILE" 
                echo "The full output can be found in $LOGDIR/$LOGFILE." 
        else
                echo "Output of the daily AIDE run ($loglines lines):" 
                cat "$LOGDIR/$LOGFILE" 
        fi
else
        echo "AIDE detected no changes." 
fi
) | /bin/mail -s "Daily AIDE report for $FQDN" $MAILTO
```

### ■ yum-cron-security のインストール

* ※参考
    * [AWS EC2 Amazon Linuxインスタンス セキュリティ関連モジュールの自動アップデート \- Qiita](https://qiita.com/yangci/items/2ccac2b598900eb5928d)

1. 以下のコマンドを実行し、yum-cron-security をインストールする。
    * `sudo yum install yum-cron-security`
    * `sudo service yum-cron status`
    * `sudo service yum-cron start`
    * `sudo service yum-cron status`
    * `sudo chkconfig yum-cron on`
    * `sudo chkconfig --list yum-cron`
1. 以下のコマンドを実行し、yum-cron-security のメールレポートを設定する。
    * `sudo ls -ld /etc/yum/yum-cron-security.conf*`
    * `sudo cp -fp /etc/yum/yum-cron-security.conf /etc/yum/yum-cron-security.conf.ORG`
    * `sudo vi /etc/yum/yum-cron-security.conf`
    * `sudo diff /etc/yum/yum-cron-security.conf.ORG /etc/yum/yum-cron-security.conf`
    * <pre><code>
#
44c44
< emit_via = stdio
---
> emit_via = email
53c53
< email_from = root
---
> email_from = [From メールアドレス]
56c56
< email_to = root
---
> email_to = [To メールアドレス]
59c59
< email_host = localhost
---
> email_host = [メールホスト]:[ポート]</code></pre>
    * `sudo ls -ld /usr/sbin/yum-cron*`
    * `sudo cp -fp /usr/sbin/yum-cron /usr/sbin/yum-cron.ORG`
    * `sudo vi /usr/sbin/yum-cron `
    * `sudo diff /usr/sbin/yum-cron.ORG /usr/sbin/yum-cron`
    * <pre><code>
247,248c247,253
<             s = smtplib.SMTP()
<             s.connect(self.opts.email_host)
---
>             #s = smtplib.SMTP()
>             #s.connect(self.opts.email_host)
>             s = smtplib.SMTP(self.opts.email_host)
>             #s.set_debuglevel(1)
>             s.ehlo()
>             s.starttls()
>             s.login("[ログインID]", "[ログインパスワード]")
519,525c524,531
<         if res == 0:
<             # success, empty transaction
<             sys.exit(0)
<         elif res == 2:
<             # success, dependencies resolved
<             pass
<         else:
---
>         #if res == 0:
>         #    # success, empty transaction
>         #    sys.exit(0)
>         #elif res == 2:
>         #    # success, dependencies resolved
>         #    pass
>         #else:
>         if res != 2:
</code></pre>

### ■ Clam AntiVirus のインストール

* ※参考
    * [AWS\(EC2\)で無料ウィルス対策 : アジャイル株式会社](http://www.agilegroup.co.jp/technote/ec2-clamav.html)
    * [はじめての自宅サーバ構築 \- Fedora/CentOS \- アンチウィルスソフトの導入\(Clam AntiVirus\)](http://kajuhome.com/clam_antivirus.shtml)
    * [アンチウィルスソフト ClamAV の導入 \- Linux で自宅サーバ \[ Home Server Technical\. \]](http://www.miloweb.net/clamav.html#6)
    * [AmazonLinuxでclamavを使う \| インフラ関係のメモ書き](http://rikuga.me/2015/02/22/amazonlinux%E3%81%A7clamav%E3%82%92%E4%BD%BF%E3%81%86/)
    * [Debian 9\.3 ClamAV高負荷問題の対処 \(Linux自作PC\) \- ksk\-log](https://ksk-log.com/post/2017/12/2017-12-25-high-load2/)

1. 以下のコマンドを実行し、Clam AntiVirus をインストールする。
    * `sudo yum install clamav clamav-scanner-sysvinit clamav-update`
1. 以下のコマンドを実行し、freshclam の初期設定をし、実行する。
    * `sudo ls -ld /etc/freshclam.conf*`
    * `sudo cp -fp /etc/freshclam.conf /etc/freshclam.conf.ORG`
    * `sudo ls -ld /etc/freshclam.conf*`
    * `sudo vi /etc/freshclam.conf`
    * `sudo diff /etc/freshclam.conf.ORG /etc/freshclam.conf`
    * <pre><code>
13c13
< #DatabaseDirectory /var/lib/clamav
---
> DatabaseDirectory /var/lib/clamav
17c17
< #UpdateLogFile /var/log/freshclam.log
---
> UpdateLogFile /var/log/freshclam.log
56c56
< #DatabaseOwner clamupdate
---
> DatabaseOwner clamupdate
191a192,194
>
> #DatabaseMirror db.XY.clamav.net
> DatabaseMirror db.jp.clamav.net
</pre></code>
    * `sudo ls -ld /etc/clamd.d/scan.conf*`
    * `sudo cp -fp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.ORG`
    * `sudo ls -ld /etc/clamd.d/scan.conf*`
    * `sudo vi /etc/clamd.d/scan.conf`
    * `sudo diff /etc/clamd.d/scan.conf.ORG /etc/clamd.d/scan.conf`
    * <pre><code>
8c8
< Example
---
> #Example
93c93
< #LocalSocket /var/run/clamd.scan/clamd.sock
---
> LocalSocket /var/run/clamd.scan/clamd.sock
117c117
< #TCPAddr 127.0.0.1
---
> TCPAddr 127.0.0.1
177,178c177,178
< #ExcludePath ^/proc/
< #ExcludePath ^/sys/
---
> ExcludePath ^/proc/
> ExcludePath ^/sys/
182c182
< #MaxDirectoryRecursion 20
---
> MaxDirectoryRecursion 20
207c207
< User clamscan
---
> User root
468c468
< #ScanArchive yes
---
> ScanArchive no
</pre></code>
    * `sudo freshclam`
1. 以下のコマンドを実行し、clamd.scan の初期設定をし、実行する。
    * `sudo ls -ld /var/run/clamd.scan`
    * `sudo /etc/rc.d/init.d/clamd.scan start`
    * `sudo ls -ld /etc/clamd.conf`
    * `sudo ln -s /etc/clamd.d/scan.conf /etc/clamd.conf`
    * `sudo ls -ld /etc/clamd.conf`
    * `sudo chkconfig --list | grep clamd`
    * `sudo chkconfig clamd.scan on`
    * `sudo chkconfig --list | grep clamd`
1. 以下のファイルを作成し、/etc/cron.daily/clamdscan.sh を作成する。
    * /etc/cron.daily/clamdscan.sh
        * `sudo chmod +x /etc/cron.daily/clamdscan.sh` で実行権限を付与すること。

```bash:/etc/cron.daily/clamdscan.sh
#!/bin/sh

PATH=/usr/bin:/bin
TMPCLAMSCAN=`mktemp`

## Scan
clamdscan / > $TMPCLAMSCAN
grep "FOUND" $TMPCLAMSCAN > /var/log/clamav/scan.log
grep "FOUND" $TMPCLAMSCAN | mail -s "ClamAV Scan Report for ${HOSTNAME}" -r "[From メールアドレス]" "[To メールアドレス]"
rm -r $TMPCLAMSCAN

exit
```

### ■ chef 関連

* ※参考
    * [AMIMOTO AMI を使って、WordPress を立ち上げて、接続先を RDS に変更してみる \- Qiita](https://qiita.com/kusokamayarou/items/58d550b82b960c321c3a#%EF%BC%93chef-%E9%96%A2%E9%80%A3%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4)

1. デフォルト言語の変更
    * /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/attributes/default.rb`

    ```bash
1c1
< default[:sysconfig][:lang] = 'en_US.UTF-8'
---
> default[:sysconfig][:lang] = 'ja_JP.UTF-8'
```
<br>
1. ローカルの MySQL の設定を削除
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/default.rb`

    ```bash
47c47
< include_recipe 'amimoto::mysql'
---
> #include_recipe 'amimoto::mysql'
    ```
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/wordpress.rb`

    ```bash
7c7
< include_recipe 'amimoto::mysql'
---
> #include_recipe 'amimoto::mysql'
    ```
<br>
1. 複製によるインスタンス ID 変更時の対応の設定
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb
        * …ベースディレクトリ名の対応
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/httpd.rb`

    ```bash
24a25,48
> if !(File.exist?(node[:wordpress][:document_root])) then
>   pre_servername_tmp = `ls -Ft /var/www/vhosts/ | grep / | grep ^i- | grep -v #{node[:ec2][:instance_id]} | head -n 1 | tr -d ^/`.chomp
>   case pre_servername_tmp
>   when /^i-/
>     pre_document_root = '/var/www/vhosts/' + pre_servername_tmp
>     execute "pre_document_root zip" do
>       command "zip -r '#{pre_document_root}'.zip '#{pre_document_root}'"
>       action :run
>     end
>     execute "pre_document_root rename" do
>       command "mv '#{pre_document_root}' '#{node[:wordpress][:document_root]}'"
>       action :run
>     end
>   end
> end
>
> template "/etc/httpd/conf/httpd.conf" do
>   variables node[:httpd][:config]
>   source "httpd/conf/httpd.conf.erb"
>   if node[:httpd][:service_action].include?(:start)
>     notifies :restart, 'service[httpd]'
>   end
> end
>
    ```
    * /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb
        * …conf ファイル内の設定の対応
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb`
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb.ORG /opt/local/chef-repo/cookbooks/amimoto/recipes/nginx.rb`

    ```bash
22a23,38
> %w{ default.conf default.backend.conf }.each do | file_name |
>   template "/etc/nginx/conf.d/" + file_name do
>     variables(
>       :listen => node[:nginx][:config][:listen],
>       :listen_backend => node[:nginx][:config][:listen_backend],
>       :server_name => node[:ec2][:instance_id],
>       :document_root => node[:wordpress][:document_root],
>       :wp_multisite => node[:nginx][:config][:wp_multisite],
>       :mobile_detect_enable => node[:nginx][:config][:mobile_detect_enable],
>       :phpmyadmin_enable => node[:nginx][:config][:phpmyadmin_enable]
>     )
>     source "nginx/conf.d/" + file_name + ".erb"
>     notifies :restart, 'service[nginx]'
>   end
> end
>
     ```
<br>
1. ~~PHP Warning:  session_start(): の対応~~
1. server reached MaxClients setting, consider raising the MaxClients setting の対応
    * /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb
<br><br>
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb*`
    * $ `sudo cp -fp /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb.ORG`
    * $ `ls -ld /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb*`
    * $ `sudo vi /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb `
    * $ `diff /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb.ORG /opt/local/chef-repo/cookbooks/amimoto/templates/default/httpd/conf/httpd.conf.erb`

    ```bash
106,107c106,107
< ServerLimit       <%= node[:nginx][:config][:upstream_keepalive].to_i + 2 %>
< MaxClients        <%= node[:nginx][:config][:upstream_keepalive].to_i + 2 %>
---
> ServerLimit       <%= node[:nginx][:config][:upstream_keepalive].to_i + 112 %>
> MaxClients        <%= node[:nginx][:config][:upstream_keepalive].to_i + 112 %>
    ```
<br>
1. nginx のログファイル名
    * 以下のファイルにおいて、 `<%= @server_name %>-` や `<%= @server_name %>.`
 の部分を削除

    ```bash
    $ cd /opt/local/chef-repo/cookbooks/amimoto/templates/default/nginx/conf.d

    $ grep 'access\.log' *.erb

    default-ssl.conf.erb:    access_log  /var/log/nginx/<%= @server_name %>-ssl.access.log  main;
    default.backend.conf.erb:    access_log  /var/log/nginx/<%= @server_name %>.backend.access.log backend;
    default.conf.erb:    access_log  /var/log/nginx/<%= @server_name %>.access.log  main;

    $ grep 'error\.log' *.erb

    default-ssl.conf.erb:    error_log   /var/log/nginx/<%= @server_name %>-ssl.error.log;
    default.conf.erb:    error_log   /var/log/nginx/<%= @server_name %>.error.log;
    ```

### ■ PHP のバージョンアップ ※[2019.07.01]追記

* ※参考
    * [How to change PHP from 7 to version 5\.6 \| Amimoto Help Center](https://support.amimoto-ami.com/articles/968043-how-to-change-php-from-7-to-version-5-6)

1. PHP の 旧バージョン(7.2) を削除し、新バージョン(7.3) をインストールする。

    ```bash
php -v
sudo yum remove php php-*
cd /opt/local
echo '{"phpfpm":{"enabled": true, "version":"73"}}' > /tmp/php-fpm-73.json
sudo jq -s '.[1] * .[0]' /tmp/php-fpm-73.json /opt/local/amimoto.json > /tmp/amimoto.json
sudo mv -f /tmp/amimoto.json /opt/local/amimoto.json
sudo /opt/local/provision
php -v
sudo service monit stop; sudo service nginx restart; sudo service php-fpm restart; sudo service monit start
```

# ３．DB (MySQL on RDS)

### ■ ログイン

1. 以下のコマンドで、MySQL on RDS へ接続する。
    * $ `mysql -h [RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] [DATABASE]`
        * RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
        * PORT : ex) 3306
        * USER : ※接続するユーザー
        * PASSWORD : ※接続するユーザーのパスワード
        * DATABASE : ※接続するデータベース

### ■ MySQL ユーザーの追加と削除

1. 以下のコマンドで、ユーザー情報を確認し、所定のデータベースへ接続できるユーザーを追加する。
    * mysql> `select Host, User, Password from mysql.user order by User;`
    * mysql> `grant all privileges on [DATABASE].* to [USER]@"[IP-ADDRESS]" identified by '[PASSWORD]' with grant option;`
        * DATABASE : ※所定のデータベース
        * USER : ※接続ユーザー
        * IP-ADDRESS : ※接続元 IP アドレス
        * PASSWORD : ※接続ユーザーのパスワード
    * mysql> `select Host, User, Password from mysql.user order by User;`
    * ※参考
        * [MySQLで他のサーバーからの接続を許可する \- Qiita](https://qiita.com/n0bisuke/items/bd86dd3a79cd7cbcd92e)
1. 以下のコマンドで、ユーザー情報を確認し、所定のデータベースへ接続できるユーザーを削除する。
    * mysql> `select Host, User, Password from mysql.user order by User;`
    * mysql> `drop user [USER]@"[IP-ADDRESS]";`
        * USER : ※接続ユーザー
        * IP-ADDRESS : ※接続元 IP アドレス
    * mysql> `select Host, User, Password from mysql.user order by User;`

### ■ 【補足】MySQL データベースの バックアップ と リストア

1. 以下のコマンドで、MySQL on RDS から所定のデータベースをバックアップする。
    * $ `mysqldump -h [RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] --databases [DATABASE] > [BACKUP-FILE]`
        * RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
        * PORT : ex) 3306
        * USER : ※接続するユーザー
        * PASSWORD : ※接続するユーザーのパスワード
        * DATABASE : ※バックアップするデータベース
        * BACKUP-FILE : ※バックアップするデータベース ex) ~~~~.sql
1. 以下のコマンドで、MySQL on RDS に所定のデータベースをリストアする。
    * $ `mysql -h RDS-EndPoint] -P [PORT] -u [USER] -p[PASSWORD] [DATABASE] < [RESTORE-FILE]`
        * RDS-EndPoint : ex) XXXX.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
        * PORT : ex) 3306
        * USER : ※接続するユーザー
        * PASSWORD : ※接続するユーザーのパスワード
        * DATABASE : ※バックアップするデータベース
        * RESTORE-FILE : ※リストアするデータベース ex) ~~~~.sql
<br><br>
    * mysql> `show databases;`
    * mysql> `show tables;`
<br><br>
    * <b><font color="red">※サイトの URL が変更になる場合は、事前にリストアファイルの内容を全て置換しておくこと !!</font></b>

# ４．WordPress

* ※ リプレース元のベースディレクトリの WordPress データを、そのままリプレースします。
    * /var/www/vhost/i-*

# ５．ALB

1. 以下のリンクから、ターゲットグループのコンソールを開きます。
    * [ターゲットグループ \| EC2 Management Console](https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1&state=hashArgs%23TargetGroups%3Asort%3DtargetGroupName#TargetGroups:)
1. 所定のターゲットグループを選択し、「編集」ボタンを押下します。
    * ![FireShot Capture 123 - ターゲットグループ - EC2 Management Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/e040f28c-0b04-f703-dd47-f5a44ffa0cb7.png)
1. インスタンスの一覧から、作成したインスタンスを選択後、「登録済みに追加」ボタンを押下し、作成したインスタンスを登録済みターゲットに追加します。
    * ![FireShot Capture 124 - ターゲットグループ - EC2 Management Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/60107742-f87c-e490-4ea7-ae431ad08f1a.png)
1. 「保存」ボタンを押下します。

# ９９．ハマりポイント

* 特に、ハマったところはないけど…。

# ＸＸ．まとめ

検証とか、どうしようかな…。

CloudFront とかも含めた、検証環境を構築するのとか、メンドイ…。

何か良い方法ないかしら？？？

うーん…。