Amazon Linux へ let’s encript設定
まずはインスタンスの起動
なお、毎回ブラウザを立ち上げるのは面倒なので
AWS CLI を使ってインスタンス起動します
EC2インスタンスをAWS CLIで起動する
に記載されているのを参考にしました
起動コマンドは
aws ec2 start-instances --instance-ids "起動したいインスタンスID"
となります
なお、AWS CLI で設定にあたりIAMユーザ作成が必須
設定については
ubuntu14.04 に awscli インストール
のときに行いました
インストールに関しては
AWS CLI のインストールと設定
に
Mac Linux WIndows での方法が載っています
インスタンスIDは
AWSコンソールで確認できます
なお、起動後の状態をみるには
aws ec2 describe-instance-status --instance-ids "インスタンスID"
となります
停止させるには
aws ec2 stop-instances --instance-ids "停止させたいインスタンスID"
となります
とりあえず、起動できたら
Amazon Linux 初期設定
まずは ubuntu で ssh 接続の準備
mv ダウンロード/wp-aws.pem .ssh/
chmod 400 .ssh/wp-aws.pem
で鍵ファイルの移動と権限変更
次にEC2インスタンスのIPを取得
aws ec2 describe-instances --instance-ids "インスタンスID" --query 'Reservations[0].Instances[0].PublicIpAddress'
で取得できるので
これで
ssh -i .ssh/wp-aws.pem ec2-user@54.250.245.32
というようにすれば接続OK
なおデフォルトユーザは
ec2-user になります
次に
AWSのEC2で行うAmazon Linuxの初期設定
を参考に初期設定
まずパッケージのアップデート
sudo yum update -y
次に yum-cron をいれて自動更新できるように設定
sudo yum install yum-cron -y
sudo chkconfig yum-cron on
sudo sed -i "s/^apply_updates.*$/apply_updates = yes/g" /etc/yum/yum-cron.conf
sudo service yum-cron start
次にタイムゾーンを日本にする
sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
sudo sed -i "s/\"UTC\"/\"Japan\"/g" /etc/sysconfig/clock
sudo reboot
これで再起動してから
date コマンドで日時を確認
date
次に文字コードを日本語対応に
sudo sed -i "s/en_US\.UTF-8/ja_JP\.UTF-8/g" /etc/sysconfig/i18n
ここまでできたら
LAMPサーバーのインストール
やり方については
チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする
を参考に
まずは必要なパッケージのインストール
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
次に webサーバの起動と
chkconfig で
ブート時に起動するように設定
sudo service httpd start
sudo chkconfig httpd on
これでブラウザでAWSインスタンスのIPへ接続し
Amazon Linux AMI Test Page
が表示されればOK
IPを知りたい場合
aws ec2 describe-instances --instance-ids "インスタンスID" --query 'Reservations[0].Instances[0].PublicIpAddress'
で取得できる
次にファイル許可の設定
今回は ec2-user を apache グループへ追加
sudo usermod -a -G apache ec2-user
一度ログアウトして
再度ログインし
groups
を実行すると
apache グループが作成されています
ログアウトしないとでませんでした
次に /var/www/以下のコンテンツグループ所有権
を apacheグループへ変更
sudo chown -R ec2-user:apache /var/www/
グループの書き込み許可を追加し
これからのサブディレクトにグループ ID を設定
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
そしてグループ書き込みの許可設定する
find /var/www -type f -exec sudo chmod 0664 {} \;
次にmysql のセキュリティ強化
まず mysql の起動
sudo service mysqld start
で起動
sudo mysql_secure_installation
でセキュリティ設定
内容は
Enter current password for root (enter for none):
はroot アカウントのパスワードだけど
最初は mysql root パスワードはないので
Enter でOK
Set root password? [Y/n]
は
パスワード設定しますかなので y
New password:
でパスワード設定
ただしセキュリティのため表示はされない
Re-enter new password:
で確認のためもう一回入力
こちらも表示はされない
Remove anonymous users? [Y/n]
は匿名アカウントの削除なので
y
Disallow root login remotely? [Y/n]
はリモート root ログインを無効化するなので
y
Remove test database and access to it? [Y/n]
はテストDB削除なので
y
Reload privilege tables now? [Y/n]
は権限テーブルのリロードと変更保存なので
y
そして次回起動時に mysqld を自動起動したいので
sudo chkconfig mysqld on
次に Let’s Encrypt の適用
ドメインと固定IPが必要になるので
お名前.com でドメイン取得し
Elastic IP を取得
Elastic IP の取得については
AWS Elastic IP 設定
AWS Elastic IP 設定
お名前.com で Elastic IP を反映するには
お名前.com へ Elastic IP を反映
お名前.com へ Elastic IP を反映
を参考に
設定後、取得したドメインへ
ブラウザからアクセスし apache のテスト画面が表示されれば成功
念の為、ここまでやったことをAMIにして保存
次に
チュートリアル: Amazon Linux で SSL/TLS を使用できるように Apache ウェブサーバーを設定する
を参考に
SSL/TLS の有効化
Elastic IP を別のマシンで使っていて
割り当てを変更して使う場合
ubuntu では
Offending ECDSA key in /home/snowpool/.ssh/known_hosts:17
というようになってしまうことがあるので
この場合
sudo vim /home/snowpool/.ssh/known_hosts
というように
.ssh/known_host
を開き
該当する行を削除すると接続可能に
今回なら :17 となっているので
17行目を削除
ログインできたら
sudo yum install -y mod24_ssl
でSSL/TLS のサポートを追加
次に Cerbot のインストールと実行
まずEPELパッケージを有効化
sudo yum-config-manager --enable epel
次に cerbot インストール
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
wget https://dl.eff.org/certbot-auto
で cerbot を取得
chmod a+x certbot-auto
で権限付与
sudo ./certbot-auto --debug
を実行するとインストールが開始される
最初にパッケージのインストールをするか聞かれるので
y
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):
でメルアド入力
(A)gree/(C)ancel:
で規約同意するか聞かれるので
A
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
で
メーリングリストに登録するかきかれるので
いまは不要なので N
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)
ではドメインを入力
しかし、最後にエラーになるため
Let’s Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache)
を参考に実践
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
でファイル取得と権限付与
sudo /usr/bin/certbot-auto certonly --webroot -w /var/www/html --email メルアド -d ドメイン名
で証明書作成
sudo vim /etc/httpd/conf.d/ssl.conf
でファイルを開き
102行目あたりの
SLCertificateFile /etc/pki/tls/certs/localhost.crt
をコメントアウトし
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
とする
110行目あたりの
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
をコメントアウトし
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
とする
保存したら
sudo service httpd restart
で再起動し
https://ドメイン名
で接続したときにセキュリティ警告がでなkればOK
sudo /usr/bin/certbot-auto renew --post-hook "sudo service httpd restart"
を実行し
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/snowpool.info.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/www.snowpool.info.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
The following certs are not due for renewal yet:
/etc/letsencrypt/live/snowpool.info/fullchain.pem (skipped)
/etc/letsencrypt/live/www.snowpool.info/fullchain.pem (skipped)
No renewals were attempted.
No hooks were run.
となればOK
次にLet’s Encript の更新自動化
これは Let’s Encript の有効期限が3ヶ月のため
sudo vim /etc/cron.d/letsencript
でファイルを作成
00 16 * * 2 root /usr/bin/certbot-auto renew --post-hook "service httpd restart"
で毎週火曜日の16時にrenew が起動するようになります