Amazon Lightsail インスタンス作成時にSSHのIP制限をかける

eyecatch_lightsail

こんにちは、菊池です。

簡単・手軽にインスタンスを作成できるAmazon Lightsailですが、そのシンプルさ故に機能的な制限も多くあります。特に、インスタンスへSSH接続する際、EC2のSecurity Groupのように接続元IPアドレスを制限することができない点に、セキュリティ的な不安を感じる方も多いのではないでしょうか。

ということで、インスタンス作成と同時に、OSでIP制限をかける方法を紹介します。

IP制限の方法

前述の通り、Amazon Lightsailの機能では通信元IPアドレスで制限をすることができません。なので、必要な場合にはOSより上のレイヤで対応する必要があります。OS標準のiptablesを使う方法などが一般的かと思います。

今回は、Lightsailの機能であるLaunchScriptを使って起動と同時にiptablesを設定することで、IPアドレスによるフィルタリングを適用します。

LaunchScriptの実行

Lightsailのインスタンス作成画面上に目立たないですが、LaunchScriptを設定するボタンがあります。

ls-ssh-001

選択すると、スクリプトの入力欄が出てきます。

ls-ssh-02

SSHの接続元のみ制限できればいいので、以下のコマンドを入力し、インスタンスを作成します。xxx.xxx.xxx.xxx/xxの部分は接続を許可するIPアドレスです。複数の接続元がある場合は、2行目のDROPの前に追加しましょう。

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx/xx --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

コマンドを入れてインスタンスを作成します。

ls-ssh-003

許可されたIPでSSHすれば接続可能です。iptablesの設定を確認すると、以下のようになっています。

$ sudo iptables -nvL
 Chain INPUT (policy ACCEPT 43 packets, 3736 bytes)
  pkts bytes target     prot opt in     out     source               destination
    88  8293 ACCEPT     tcp  --  *      *       xxx.xxx.xxx.xxx      0.0.0.0/0            tcp dpt:22
     0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination

 Chain OUTPUT (policy ACCEPT 107 packets, 11818 bytes)
  pkts bytes target     prot opt in     out     source               destination

上記で入力したコマンドのみでは、設定が永続化されませんので再起動すると消えてしまいます。以下の手順を実行することで再起動後も設定が残るようにします。

Ubuntuの場合(Bitnamiイメージ含む):

iptables-persistentをインストールします。

sudo apt-get install -y iptables-persistent

Amazon Linuxの場合:

iptables saveで設定を保存します。

sudo /etc/init.d/iptables save

LaunchScriptで設定の保存まで行うことも可能ですが、その場合、接続元IPアドレスを間違えると接続する方法がないので、インスタンスを再作成するしかなくなりますのでご注意ください。上記で手順であれば、リブートで設定が消えますので、接続の確認ができてから保存するのがよいかと思います。

注意点

以下の点にご注意ください。

  • 前述の通りOSレイヤの設定のため、接続元IPの設定を間違えたり、IPが変更された場合にログインができなくなるリスクがあります。そうなると、インスタンスを再作成するしか手段が無くなりますのでご注意ください。
  • 上記のように制限した場合、コンソールからブラウザ経由の接続もできなくなります

まとめ

いかがでしょうか。

シンプルで機能制限も多いLightsailですが、Launch Scriptが使えることで、工夫次第で利用の幅も広がると思いました。

 

AWS Cloud Roadshow 2017 福岡