Edited at

Amazon Lightsail により数クリックでWordPressサーバを作成する + WordPressサーバ用のiptables設定(接続元IPアドレスによるhttp,https,sshの接続制限)

More than 1 year has passed since last update.


はじめに

少し前になりますが「Amazon Lightsail」というVPSサービスの提供が開始されました。

https://aws.amazon.com/jp/blogs/news/amazon-lightsail-the-power-of-aws-the-simplicity-of-a-vps/

Amazon Lightsailを使うと、WordPress, LAMPスタック, Node.js等がインストールされた仮想マシンを数分で簡単に作成出来るので便利です。

本記事では、以下の手順について記します。これにより、Amazon Lightsailにより、指定したIPアドレスやネットワークからのみ閲覧可能なWordPressサーバを簡単に作成する事が可能です。

 ・Amazon LightsailでWordPressサーバを作成する手順。

 ・Amazon Lightsailで作成したWordPressサーバに対して、iptablesにより指定したポート + 指定したIPアドレスやネットワークのみアクセスを許可する設定


本記事の補足

2017年2月26日時点では、Amazon Lightsailで作成した仮想マシンはhttp,https,sshといったポート単位でしかアクセス制限をかける事が出来ません。

Amazon Lightsailの仮想マシンでは、EC2にようにセキュリティグループを適用出来ない為、ポート単位 + IPアドレス単位のアクセス制限を適用出来ず、仮想マシンへアクセス可能なIPアドレスやネットワークを制限する事は出来ません。

スクリーンショット 2017-02-26 21.10.27.png

本記事では、Amazon Lightsail仮想マシンを作成し、iptablesで指定したIPアドレスやネットワークからのみhttp,https,ssh接続を許可する手順を記します。


iptablesを設定する環境について

iptablesを設定するAmazon Lightsail仮想マシンのOSはUbuntuになります。

root@ip-172-26-XXX-XXX:~# uname -a

Linux ip-172-26-XXX-XXX 3.13.0-107-generic #154-Ubuntu SMP Tue Dec 20 09:57:27 UTC 2016 x86_64 x86_64 x86_64 GN
U/Linux


Amazon LightsailでWordPressサーバを作成する手順


(1) AWSマネジメントコンソールへログインします。

スクリーンショット 2017-02-26 21.14.39.png


(2)「すべてのサービス」->「コンピューティング」->「Lightsail」をクリックします。

スクリーンショット 2017-02-26 18.07.15.png


(3) Lightsailコンソールが表示されます。「Let's get started」をクリックします。


(4) Lightsailコンソールで、作成したいLightsail仮想マシンの種類を選択します。「Pick your instance image」で「WordPress」を選択します。

スクリーンショット 2017-02-26 18.13.23.png


(5) Lightsailコンソールを下にスクロールさせて、作成するLightsail仮想マシンのインスタンスプランを選択します。「Choose your instance plan」で「$ 5 month」を選択します。

スクリーンショット 2017-02-26 18.15.39.png


(6) Lightsail仮想マシンを作成するリージョンを選択します。「Change zone」をクリックします。

スクリーンショット 2017-02-26 18.17.39.png


(7)「Select Availability Zone」で「Zone A (us-east-1a)」を選択します。

なお、2017年2月26日時点では、us-eastリージョンしか選択出来ません。

スクリーンショット 2017-02-26 18.20.14.png


(8)「Create」をクリックして、Lightsail仮想マシンの作成を開始します。

スクリーンショット 2017-02-26 18.20.32.png


(9) WordPressがインストールされたLightsail仮想マシンが作成されます。インスタンス名(例:WordPress-512MB-Virginia-1)をクリックします。

test1.png

作成したLightsail仮想マシンのWordPressサーバのIPアドレスを確認します。

本記事では例として、Lightsail仮想マシンのIPアドレスを「54.173.XXX.XXX」と表記します。


(10) Lightsail仮想マシンの設定画面が表示されます。「Connect using SSH」をクリックして、Lightsail仮想マシンへsshログインします。

test2.png


(11) Lightsail仮想マシンへsshログイン出来ます。sshログインユーザやパスワード入力は不要で、sshでLightsail仮想マシンへログインした状態の画面が表示されます。

スクリーンショット 2017-02-26 18.29.53.png


(12) Lightsail仮想マシンのWordPress管理画面の初期パスワードを確認します。

Lightsail仮想マシンのWordPress管理画面へログインする初期パスワードを確認します。パスワードは/home/bitnami/bitnami_application_passwordファイルに記載されています。

bitnami@ip-172-26-XXX-XXX:~$ cat /home/bitnami/bitnami_application_password 

初期パスワード
bitnami@ip-172-26-XXX-XXX:~$

スクリーンショット 2017-02-26 22.20.58.png


(13) 作成したLightsail仮想マシンのWordPressページへアクセスし、WordPressページが閲覧出来るか確認します。

http://54.173.XXX.XXX/

スクリーンショット 2017-02-26 22.18.51.png


(14) Lightsail仮想マシンのWordPress管理画面へログイン出来るか確認します。

WordPressの管理画面URLへアクセスします。

http://54.173.XXX.XXX/wp-login.php

 ユーザ名: user

 パスワード: (12)で/home/bitnami/bitnami_application_passwordファイルに記載されていたパスワードを入力します。

スクリーンショット 2017-02-26 22.24.59.png

WordPressの管理画面へログイン出来る事を確認します。

スクリーンショット 2017-02-26 22.27.21.png


Amazon Lightsailで作成したWordPressサーバにiptablesでネットワークアクセス制限を設定する手順


(1) Amazon Lightsail仮想マシンへsshログインしたら、rootユーザへスイッチします。

以下のコマンドを実行します。rootユーザへスイッチします。

bitnami@ip-172-26-XXX-XXX:~$ sudo su - 

スクリーンショット 2017-02-26 18.47.29.png

Amazon Lightsail仮想マシンのOSを確認します。

WordPressサーバの場合、仮想マシンのOSはUbuntuです。

root@ip-172-26-XXX-XXX:~# uname -a

Linux ip-172-26-XXX-XXX 3.13.0-107-generic #154-Ubuntu SMP Tue Dec 20 09:57:27 UTC 2016 x86_64 x86_64 x86_64 GN
U/Linux
root@ip-172-26-XXX-XXX:~#


(2) Amazon Lightsail仮想マシンにiptables設定保存用コマンドをインストールします。

以下のコマンドを実行して、iptables-persistentをインストールします。

root@ip-172-26-12-149:~# apt-get install iptables-persistent

「Save current IPv4 rules」と表示されるので「Yes」をクリックします。

スクリーンショット 2017-02-26 18.59.56.png

「Save current IPv6 rules」と表示されるので「No」をクリックします。

スクリーンショット 2017-02-26 19.01.02.png

iptables-persistentコマンドがインストールされます。

スクリーンショット 2017-02-26 19.02.07.png


(3) Amazon Lightsail仮想マシンにiptablesによるネットワークアクセス制限を設定します。

前述の手順でiptables-persistentをインストールすると、/etc/iptables/rules.v4というiptables設定ファイルが作成されます。

root@ip-172-26-XXX-XXX:~# ls -lrta /etc/iptables/

total 12
drwxr-xr-x 92 root root 4096 Feb 26 10:01 ..
-rw-r--r-- 1 root root 199 Feb 26 10:01 rules.v4
drwxr-xr-x 2 root root 4096 Feb 26 10:01 .
root@ip-172-26-XXX-XXX:~#

以下のコマンドを実行して、iptablesによるアクセス制限を行います。

 ・以下のiptables設定では、指定したIPアドレスやネットワークのみからAmazon Lightsail仮想マシンへのhttp,https,ssh接続を許可するようにしております。

 ・「72.21.217.0/24」からのssh接続を許可しているのは、Amazon Lightsailコンソールで「Connect using SSH」をクリックした時、Lightsail仮想マシンへのsshログインを許可する為の設定です。72.21.217.0/24からの接続を許可しないと、どのIPアドレスやネットワークからAmazon Lightsailコンソールの「Connect using SSH」をクリックしても、Lightsail仮想マシンへsshログイン出来なくなります。

 ・DNS名前解決の為、Amazon Lightsail仮想マシンから外部へのDNS通信(ポート53)は全て許可しております。

 ・時刻同期の為、Amazon Lightsail仮想マシンから外部へのNTP通信(ポート123)は全て許可しております。


Lightsail仮想マシン(WordPressサーバ)のiptables設定

root@ip-172-26-XXX-XXX:~# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

root@ip-172-26-XXX-XXX:~# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

root@ip-172-26-XXX-XXX:~# iptables -A OUTPUT -p tcp --dport 123 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A OUTPUT -p udp --dport 123 -j ACCEPT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 192.0.2.0/24 --dport 22 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 198.51.100.0/24 --dport 22 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 203.0.113.11/32 --dport 22 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 72.21.217.0/24 --dport 22 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp --dport 22 -j REJECT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 192.0.2.0/24 --dport 80 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 198.51.100.0/24 --dport 80 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 203.0.113.11/32 --dport 80 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp --dport 80 -j REJECT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 192.0.2.0/24 --dport 443 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 198.51.100.0/24 --dport 443 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp -s 203.0.113.11/32 --dport 443 -j ACCEPT
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -p tcp --dport 443 -j REJECT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -i lo -j ACCEPT

root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 10.0.0.0/8 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 172.16.0.0/12 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 192.168.0.0/16 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 127.0.0.0/8 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 169.254.0.0/16 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 192.0.2.0/24 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 224.0.0.0/4 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -s 240.0.0.0/5 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -d 0.0.0.0/8 -j DROP
root@ip-172-26-XXX-XXX:~# iptables -A INPUT -d 255.255.255.255/32 -j DROP



(4) Amazon Lightsail仮想マシンでiptablesによるアクセス制限を有効化します。

以下のコマンドを実行します。

root@ip-172-26-XXX-XXX:~# /etc/init.d/iptables-persistent save

* Saving rules...
* IPv4...
* IPv6... [ OK ]
root@ip-172-26-XXX-XXX:~#

root@ip-172-26-XXX-XXX:~# /etc/init.d/iptables-persistent reload

* Loading iptables rules...
* IPv4...
* IPv6... [ OK ]
root@ip-172-26-XXX-XXX:~#


(5) Amazon Lightsail仮想マシンのネットワークアクセス制限が有効になっているか確認します(iptablesでhttp通信を許可したIPアドレスからの接続確認)。

iptablesでアクセスを許可しているネットワークのWebブラウザからAmazon Lightsail仮想マシンのIPアドレスへアクセスしてみます。

http://54.162.XXX.XXX

以下のようにAmazon Lightsail仮想マシンのWordPressページが表示される事を確認します。

スクリーンショット 2017-02-26 19.49.27.png

また、iptablesでアクセスを許可しているネットワークのマシンからAmazon Lightsail仮想マシンへssh接続出来る事を確認します。

PC001:~ user$ ssh 54.173.XXX.XXX

The authenticity of host '54.173.XXX.XXX (54.173.XXX.XXX)' can't be established.
 (中略)

PC001:~ user$ nc -z -v 54.173.XXX.XXX 22

found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 198.51.100.21 port 52095
dst 54.173.XXX.XXX port 22
rank info not available
TCP aux info available

Connection to 54.173.XXX.XXX port 22 [tcp/ssh] succeeded!
PC001:~ user$


(6) Amazon Lightsail仮想マシンのネットワークアクセス制限が有効になっているか確認します(iptablesでhttp通信を許可していないIPアドレスからの接続確認)。

iptablesでアクセスを許可していないネットワークのWebブラウザからAmazon Lightsail仮想マシンのIPアドレスへアクセスしてみます。

http://54.162.XXX.XXX

Amazon Lightsail仮想マシンのWordPressページが表示されない事を確認します。

スクリーンショット 2017-02-26 19.58.20.png

また、iptablesでアクセスを許可していないネットワークのマシンからはAmazon Lightsail仮想マシンへssh接続出来ない事を確認します。

このようになっていれば、iptablesによるアクセス制限は有効になっております。

PC001:~ user$ ssh -i SSH鍵ファイル bitnami@54.173.XXX.XXX

ssh: connect to host 54.173.XXX.XXX port 22: Connection refused
PC001:~ user$

PC001:~ user$ nc -z -v 54.173.XXX.XXX 22

nc: connectx to 54.173.XXX.XXX port 22 (tcp) failed: Connection refused
PC001:~ user$



最後に

Amazon Lightsailは設定がシンプルな分、EC2と比較するとセキュリティグループ機能がなかったり、きめ細かな設定は行えないようです。

また、2017年2月26日時点では、us-eastリージョンでしかAmazon Lightsail仮装マシンを作成出来ません。体感的に気になる程ではありませんが、日本からAmazon Lightsail仮装マシンのWordPressぺージを表示する場合は少しレイテンシがあると思います。

しかし、それらを踏まえても、Amazon Lightsailを使う事で、数クリック・数分で仮想マシンを作成出来るので、社内サーバや開発用サーバを気軽に作成出来る便利なサービスだと思います!

以上になります。