40代サラリーマンのあれこれ

サラリーマンのパラメーター

WordPressブログをAWSで構築する(2) - EC2編

WordPressブログをAWSで構築する(2) - EC2編

前回は、サーバー構築時に必要な「ドメイン」と「SSL」を購入しました。
今回は、これらを設定するサーバーを構築していきます。

 

今回のゴール(システム構成)

今回のゴールは WordPress をインストールするための EC2 構築になります。

 

EC2インスタンスを起動しよう

以下の考え方で、EC2インスタンスを起動していきます。

  • インスタンスタイプは、利用料が抑えられるARM系インスタンス t4g.micro にする
  • セキュリティグループは自分の命名ルールに変更する
  • セキュリティグループのポートは、22番と22番を閉じたとき用のSSH接続ポート番号のみを空ける
  • セキュリティグループのアクセスは、自身のパブリックIPのみを許可する
  • SSDは無料で利用できる30GBに増やす

AWSアカウントはすでにあるので、EC2管理コンソールでインスタンスを起動します。

Amazon Linux 2 を選択し、CPU は Arm を選択します。
以降の設定で t4g.micro を選択予定で、無料利用枠の対象ではなくなりますが、月額コストを削減できます。

nano では起動しない可能性が高いので、micro を選択します。

インスタンスの詳細では「バースト」がされないように、「クレジット仕様」のチェックボックスを外しています。

ストレージは30GBまで無料なので、8から30に変更します。

Nameタグで命名をして(後からでもできます)、次の設定へ移ります。

セキュリティグループが適当な命名をされてしまいそうになっているので、自身の命名ルールで作成します。
sg-で始まる命名をしたくなりますが、そうすると起動時に怒られます。

空けるポートは、22番と22番を閉じたとき用(後述)のSSH接続ポート番号 を指定します。
私は 5桁の空きポート を使います。(仮に 44044 とします)

また、マイIPを選択して、自身が現在割り当てられているパブリックIPからのみアクセス可とします。自宅からだとパブリックIPは変わることがありますが、その際はマイIPを選択し直して接続します。

いざ起動! と思ったら、キーペアをどうするかと聞かれます。
key_で始まる命名をして、pemファイルをダウンロードすると、ようやく起動できます。(pemファイルはSSH接続時に必要となります)

 

EC2インスタンスにSSH接続しよう

EC2が問題なく起動したかは、EC2管理コンソールで確認します。
サーバー名(Nameタグ)は一覧上で設定・変更することができます。

概要欄にサーバーのパブリックIPが記載されていますので、さっそくSSH接続します。

ツールは Mac の iTermを使用します。

その前に、IPアドレスが逆引きできるかを確認します。
※ 11.222.33.444 部分は、EC2 の IPアドレスに読み替えてください

$ nslookup 11.222.33.444
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
444.33.222.11.in-addr.arpa name = ec2-11-222-33-444.ap-northeast-1.compute.amazonaws.com.

問題なさそうですね。
次に、ローカルに保存したpemファイルが参照できるかを確認します。
Downloadsフォルダに保存した状態であれば、以下で表示されるかを確認します。

$ cat Downloads/key_wordpress_1.pem
-----BEGIN RSA PRIVATE KEY-----

...

-----END RSA PRIVATE KEY-----

参照できれば、いざ接続です。
ルート権限(sudo)で接続します。Passwordは、Macのログインするときのパスワードと同じになります。
EC2のデフォルトユーザーは ec2-user になります。

$ sudo ssh ec2-user@11.222.33.444 -i Downloads/key_wordpress_1.pem
Password:

Are you sure you want to continue connecting (yes/no/[fingerprint])?

と聞かれるので

yes

と打ち込むとログインできます。

__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/

 

Amazon Linux2サーバーを初期設定しよう

続いて、Linux の設定を進めていきましょう。
参考にさせていただいたサイトは、こちらです。

それではさっそく設定していきます。
何はともあれ、最新化です。

$ sudo yum -y update
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00
No packages marked for update

アップデートは何もありませんでした。
ザーっとコンソールが流れるのが気持ちよかったりするのですが...

  • タイムゾーンと時刻の設定
気を取り直して、dateコマンドを叩きます。

$ date
2020年 9月 17日 木曜日 13:11:21 UTC

UTCですね。ではJPTにします。

$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ date
2020年 9月 17日 木曜日 22:14:24 JST

バッチリ変わりました。
時刻も変更します。

$ sudo vi /etc/sysconfig/clock
ZONE="UTC"
UTC= true

viでは i を押すと編集モードになるので、UTC の部分を Asia/Tokyo に変更します。

ZONE="Asia/Tokyo"

escボタンで編集モードを終わらせて、: w q を順に押して保存します。(: q は保存せずに終了します)
終了後はいったん再起動します。

$ sudo reboot

  • 不要なサービス停止
再びSSHで接続したら、不要なサービスを停止します。

$ sudo ntsysv

スペースタブで * マークは消えます。
私の場合も参考サイトに書いてある 8つのサービスのうち、7つのサービスだけをONにしています。(ntpd, ntpdateはないため、6つです)

SysV initscripts
[*] network
systemd services
[*] cloud-final.service
[*] crond.service
[*] irqbalance.service
[*] rsyslog.service
[*] sshd.service

$ chkconfig --list | grep 3:on
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off

$ systemctl list-unit-files | grep enabled
brandbot.path enabled
autovt@.service enabled
cloud-final.service enabled
crond.service enabled
getty@.service enabled
irqbalance.service enabled
rsyslog.service enabled
sshd.service enabled
default.target enabled
graphical.target enabled
nfs-client.target enabled
remote-fs.target enabled
runlevel5.target enabled

不要なコンソールも減らす設定(ACTIVE_CONSOLES)は、Amazon Linux 2 ではなさそうです。

  • 独自のrootユーザー作成
さて、次はec2-userを削除して、独自のrootユーザーを作ります。
まずは、独自ユーザーがどのくらいあるかを確認します。

$ tail -2 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash

$ grep wheel /etc/group
wheel:x:10:ec2-user

現状は ec2-user のみです。
ここに新しいルートユーザーを作成します。taro としましょう。

$ sudo adduser taro
$ sudo usermod -G wheel taro
$ echo 'taro ALL = NOPASSWD: ALL' | sudo tee --append /etc/sudoers.d/cloud-init
taro ALL = NOPASSWD: ALL

ほぼ最後の方にある NOPASSWD 行を有効にします。
また、その上にある行はコメントアウトします。

$ sudo visudo
...
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL

新しいrootユーザーに ec2-user のパーミッションをコピーします。

$ sudo rsync -a ~/.ssh/authorized_keys ~taro/.ssh/
$ sudo chown -R taro:taro ~taro/.ssh
$ sudo chmod -R go-rwx ~taro/.ssh
$ sudo ls -al ~taro/.ssh
合計 4
drwx------ 2 taro taro 29 9月 17 22:56 .
drwx------ 3 taro taro 74 9月 17 22:56 ..
-rw------- 1 taro taro 397 9月 17 21:35 authorized_keys

新しいユーザーで sudo権限があるかを確認します。

[ec2-user@ip-111-22-33-44 ~]$ sudo su - taro
[taro@ip-111-22-33-44 ~]$ sudo -s
[root@ip-111-22-33-44 taro]# exit
exit
[taro@ip-111-22-33-44 ~]$ exit
[ec2-user@ip-111-22-33-44 ~]$

新しいユーザー taro でSSH接続し直します。

$ sudo ssh taro@11.222.33.444 -i Downloads/key_wordpress_1.pem

問題ないので ec2-user を削除します。

$ sudo userdel ec2-user

ポート22番も閉じて、独自ポートで接続するようにします。(独自ポートを 44044 とした場合)

$ sudo vi /etc/ssh/sshd_config
...
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Port 44044

$ sudo service sshd reload
$ sudo netstat -anp | grep sshd
tcp 0 0 0.0.0.0:44044 0.0.0.0:* LISTEN 3316/sshd
...
tcp6 0 0 :::44044 :::* LISTEN 3316/sshd
...

セキュリティグループで 44044 ポートはすでに空けていますので、上記の変更後も接続はされます。
再度 SSH接続をポート指定で実施します。

$ sudo ssh taro@11.222.33.444 -p 44044 -i Downloads/key_wordpress_1.pem

問題なく接続できたら、次にセキュリティグループで22番ポートを削除します。

その後、もう1回接続して問題なければ完了です。
SSHポート22番 と rootユーザー ec2-user に関する脆弱性対応ができました。

念のための対処として、ウイルス対策ソフトの導入も検討しましたが
どうやら micro では動作しなさそうなので、諦めます。

rkhunter もひとまずはいいかな。

次は、いよいよWordPressをインストールします!

が、その前にいったんここで AMI を作っておきます。
まだWordPressはインストールできていないので、それっぽい名称にしておきます。

ちなみに、まだ ElasticIP を利用していないので、EC2を立ち上げ直した(停止→起動した)場合は IPアドレス が変更になってしまいます。
SSH接続は、新しく割り当てられた IPアドレスを確認した上で接続します。

 

LAMP環境を作ろう

AWS公式マニュアルに従い、設定を進めます。

まずは、前提条件として、LAMP環境の設定が必要なので、以下に従ってインストールを進めます。

「ステップ 1: LAMP サーバーを準備する」
サイト上ではコマンドコピーもできるので、便利ですね。

パッケージを最新化して、ApacheとMySQLをインストール、Apacheの起動まで終わったら セキュリティグループにHTTPを許可する80番を追加します。
セキュリティグループは、すでに wordpress-1 を作成していますので、そちらに追加します。

http://サーバーIP/ 

にアクセスして、Apache のテストページが表示されればOKです。

「ファイルの許可を設定するには」項の設定では、
ec2-user を削除して別のルートユーザーでログインしている場合は、ec2-user でなく作成したルートユーザーを追加するようにしてください。

  • B!