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


はじめに

少し前になりますが「Amazon Lightsail」という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アドレスやネットワークを制限する事は出来ません。

本記事では、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マネジメントコンソールへログインします。

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

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

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

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

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

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

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

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

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

作成したLightsail仮想マシンのWordPressサーバのIPアドレスを確認します。
本記事では例として、Lightsail仮想マシンのIPアドレスを「54.173.XXX.XXX」と表記します。

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

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

(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:~$ 

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

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

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

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

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

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

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

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

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

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」をクリックします。

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

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

(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アドレスへアクセスしてみます。

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

また、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アドレスへアクセスしてみます。

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

また、iptablesでアクセスを許可していないネットワークのマシンからはAmazon Lightsail仮想マシンへssh接続出来ない事を確認します。
このようになっていれば、iptablesによるアクセス制限は有効になっております。

PC001:~ user$ ssh -i SSH鍵ファイル [email protected]
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を使う事で、数クリック・数分で仮想マシンを作成出来るので、社内サーバや開発用サーバを気軽に作成出来る便利なサービスだと思います!

以上になります。