Amazon Linux へ let’s encript設定

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 が起動するようになります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です