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

AWS に phpmyadmin インストール

AWS に phpmyadmin と インストール

cloud9 からのデータをインポートするときに便利なので
phpmyadmin をインストールします

epel レポジトリを使い、インストールします

yum --enablerepo=epel install -y phpMyAdmin

次に設定ファイルを書き換えますが
apache のバージョンにより書き換える場所が変わるので

httpd -v

でバージョン確認をしておきます

確認方法については
Apacheのバージョン確認方法

を参考にさせていただきました

 vim /etc/httpd/conf.d/phpMyAdmin.conf

でファイルを開きます

最初の設定だと

   Allow from 127.0.0.1

というように25行目に設定されていて
外部接続不能になっています

なので
どこでもアクセス可能にしたいのなら

   Allow from 127.0.0.1 all

とすればどれでもアクセス可能になります

さすがにこれだとセキュリティリスクがありそうなので
AWSへのSSHログイン制限を許可したIPのみ
アクセス可能にします

これはAWSのセキュリティグループのSSH で設定した
IPを使います

phpmyad

このIPを追記します

   Allow from 127.0.0.1 SSH可能なIP

すると Y!mobile ではアクセスできるけど
スマホからではアクセスできない
という状態にできます

あとは設定反映のため

/etc/init.d/httpd restart

を実行し httpd を再起動します

これで
http://ドメイン名/phpmyadmin/
とするとアクセスできるようになります

ログインするときのユーザ名とパスワードは
以前に設定した mysql の root ユーザと
rootパスワードになります

phpmyad2

AWS バーチャルホスト設定 その2

AWS バーチャルホスト設定 その2

お名前.com でサブドメインの取得ができたので
次に
AWS での設定を行います

まず ssh でログインします

ssh -i 鍵ファイル名.pem ec2-user@パブリックDNS名

でアクセスします

もし、接続できないときには
セキュリティグループのアクセス可能なIPアドレスを確認
Y!mobile のような回線の場合
IPが変更されていてアクセスできない可能性があります

sshログインできたら
httpd.conf の編集をします

sudo su -

で root 権限で編集していきます

vim /etc/httpd/conf/httpd.conf 

で編集します

最終行に追記します


NameVirtualHost *:80
#元ドメイン
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName snowpool.info
</VirtualHost>

#追記ドメイン用
<VirtualHost *:80>
DocumentRoot /var/www/html/wp.snowpool.info
ServerName wp.snowpool.info
</VirtualHost>

として :wq で保存します

次に、追加ドメインのためのディレクトリを作成します

mkdir /var/www/html/wp.snowpool.info

ここへテストファイルをおいて、実際にみれるかテストします

 vim /var/www/html/wp.snowpool.info/index.html

でファイルを作成します

内容は

hello

としておきます

これで準備できたので apache を再起動します

/etc/init.d/httpd restart

これで
元のドメインでアクセスして
追加ドメインでアクセスできれば成功です

vh

vh2

次回は cloud9 からデータ移行のために phpmyadmin をインストールします

AWS バックアップとスペック変更

AWS バックアップとスペック変更
#09 バックアップとスペック変更
http://dotinstall.com/lessons/basic_aws/9509
を参考に
AWSのバックアップとスペック変更を学習
バックアップは
Create Snaphot
でOK
Name にはバックアップ名
Description には、解説
このバックアップから新しく仮想マシンをつくるには
Create Image from Snapshot
で作成する
インスタンスのスペックを変更するには
一度
stop
そして、止まったのを確認したら
Change Instance Type を選択して
startで起動
運用においてSnapshotを自動でとりたい場合
PHPなどでスクリプトを書く必要があるので
スクリプト言語なども学習しておくと運用が楽になる
http://aws.amazon.com/jp/sdkforphp/
にSDKがある
また、
スナップショットからAMIを作成する際に
Kernel ID を指定しておかないと
カーネルパニックになるようなので、この辺も注意したいところ
http://blog.fkoji.com/2012/11111925.html

AWS のバーチャルホスト設定

value domain でドメイン取得したので
AWSで設定してみました
参考サイト
http://centossrv.com/apache-virtualhost.shtml

http://www.server-world.info/query?os=CentOS_6&p=httpd&f=6
まず、バーチャルホストのためのディレクトリ作成
cd /var/www/html
mkdir ドメイン名
どちらのサイトを参考にしても
NameVirtualHost *:80
の#を消すとあるので実行
しかしうまくいかないため
aws バーチャルホストで検索
http://qiita.com/items/075ccbf147ca8eb568b8
を参考にしたら、
元ドメインも定義しないとダメということなので
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName ドメイン名
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/www.ドメイン名/
ServerName www.ドメイン名
</VirtualHost>
と最終行にいれて
apache2 再起動したら、独自ドメインが反映されたけど
バーチャルドメインはダメでした
つまり、
ドメイン名
はOK
でも
www.ドメイン名
はダメ
という状態でした
今回は value domain だったので、他のところも試してみようと思います

AWS のポート設定

今回、AmazonEC2 のポート開放を行って気づいたのが
自宅サーバーの iptables 設定と ルータのポート開放に似ていると
いうことです
先日試した結果
3000番ポートを開放するには iptables の設定を変更し
セキュリティグループで Custom port の設定を行いました
どうやら、ウェルノウンポートと呼ばれる
一般的なポートについては、セキュリティグループの設定だけでもつながるようですが
それ以外の場合、両方設定する必要があるようです
例えば tomcat の 8080
ssh のポート変更などです
ssh はデフォルトの22番ポートの場合
すさまじい数のログになることがあります
念のため、公開鍵認証のみにして、パスワードログインを禁止していますが
やはり、ポートは変更したほうが無難と思われます

AmazonEC2 一般ユーザログインについて

AmazonEC2 で公開鍵認証で root ログインはできるものの
一般ユーザでは、ログインできないということでかなり悩みましたが
解決策が見当たりました
SSHでPermission denied (publickey,gssapi-keyex,gssapi-with-mic)の対処法
を参考にさせていただきました
リモートサーバの
ユーザのホームディレクトリに
公開鍵ファイルを置いてないと原因となるようです
(/home/ユーザ名/.ssh/公開鍵)
というように設定します
$ mkdir /home/ユーザ名/.ssh
$ su –
$ cp /root/.ssh/公開鍵 /home/ユーザ名/.ssh/
$ chown ユーザ名.ユーザ名 /home/ユーザ名/.ssh/公開鍵
$ chmod 0700 /home/ユーザ名/.ssh
$ chmod 0644 /home/ユーザ名/.ssh/公開鍵
ちなみに AmazonEC2 の場合、SSHポート開放状態になるので
パスワード認証はかなり危険と思われます
今月の日経 Linux – 2012-03 にも
クラッキングされた事例が掲載されました

AmazonEC2 で独自ドメイン

AmazonEC2 で独自ドメインを使う方法を調べています
以前、固定IPの取得をするため
Elastic IPs
を使い
HTTPS の設定でhははまるということがありました
このときには
グローバルIPではなく、ローカルIPを指定ということがわかり
解決しました
今回の問題は
独自ドメイン取得したものの
ドメインでアクセスできないという
問題です
valuedomainで取得し
数時間してからアクセスしようとしても
できないため
一度設定を変更し
グローバルIPでアクセスしたら
できました
ほかのサイトを参考にしてみたところ
どうやらDDNSの設定が必要らしいです

Elastic IPs でも private IP は変わる

Amazon からのメールがきたため、念のためインスタンスを停止
また、いい機会だったので、
Elastic IPs をつけたときにインスタンスを停止したらどうなるか実験
結果、Elastic IPs をつけていても
インスタンスを停止すると、設定が外れました
インスタンスを再起動し、再度 Elastic IP の設定を行います
次に、HTTPSでの接続を実験
念のため、確認したら Private IP の数値が変わっていたため
firefox でアクセスすると
SSL received a record that exceeded the maximum permissible length.
(エラーコード: ssl_error_rx_record_too_long)
が表示されました
仕方ないため、再度設定ファイルを変更
記述されている IP を Private IP の数値に変更して
Apache2 を再起動
再度アクセスすると、問題なく表示されました
どうやら、Elastic IP は、インスタンスが起動しているときのみ
有効になるようです
そして、一度再起動などをすると
設定が外れてしまうようです
AmazonEC2 API なども公開されていますので
スクリプトを組めるようにスキルアップし
このあたりを対処できるようにするのが今後の課題になりそうです

AmazonEC2 からメールきました

先日、AmazonEC2 からメールがきました
そして、内容はすべて英語です
内容は
Hello,
We have noticed that one or more of your instances is running on a host degraded due to hardware failure. The host needs to undergo maintenance and will be taken down after 12:00 GMT on 2011-11-08. If you do not take action before this time they will be terminated at this point.
The risk of your instances failing is increased at this point. We cannot determine the health of any applications running on the instances. We recommend that you take appropriate action.
If your instance was launched from an EBS-backed AMI, issuing a stop and start from the AWS Management Console will migrate your instance to new hardware and help avoid any unforeseen downtime.
For more options to stop and start your instance please see:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/starting-stopping-instances.html
If your instance was launched from an instance store-backed AMI, you should launch a replacement instance from your most recent AMI and migrate all necessary data to the replacement instance.
Should have you have any additional questions, we offer AWS Basic Support via our Community Forums for free, or Premium Support for one-on-one assistance direct from an AWS Developer Support Engineer at http://aws.amazon.com/support.
Sincerely,
The Amazon EC2 Team
ここは手っ取り早く
Google 翻訳
を使って見ました
翻訳してみると
こんにちは、
我々は、インスタンスの1つまたは複数が原因でハードウェア障害のために縮退ホスト上で実行されていることに気づいた。ホストは、メンテナンスを受ける必要があり、2011年11月8日の12:00 GMT後に停止します。あなたがこの時間より前に行動をとらないならば、それらはこの時点で終了されます。
失敗、インスタンスのリスクは、この時点で増加している。我々は、インスタンス上で実行される任意のアプリケーションの健全性を判断することはできません。我々はあなたが適切なアクションをとることをお勧めします。
インスタンスがEBSでバックアップされたAMIから起動した場合、ストップを発行し、AWS Management Consoleから起動すると、新しいハードウェアにインスタンスを移行し、不測のダウンタイムを防ぐことができます。
停止し、インスタンスを起動できるオプションについての詳細は参照してください。
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/starting-stopping-instances.html
あなたのインスタンスがインスタンスストア担保AMIから起動された場合、あなたの最も最近のAMIから交換用のインスタンスを起動し、交換用インスタンスに必要なすべてのデータを移行する必要があります。
何かご質問がいるはず、私達は自由のための私達のコミュニティフォーラムを経由してAWSベーシックサポート、またはhttp://aws.amazon.com/supportでAWS開発者サポートエンジニアから直接一対一の支援のためのプレミアムサポートを提供します。
誠実に、
Amazon EC2のチーム
どうやら、メンテのため、インスタンスを停止するとか
バックアップしておくようにということらしいです
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?starting-stopping-instances.html
をみたかんじでは
stop とかかれているため、インスタンスを一時停止しておこうと思います