Amazon Lightsail インスタンス作成時にSSHのIP制限をかける
こんにちは、菊池です。
簡単・手軽にインスタンスを作成できるAmazon Lightsailですが、そのシンプルさ故に機能的な制限も多くあります。特に、インスタンスへSSH接続する際、EC2のSecurity Groupのように接続元IPアドレスを制限することができない点に、セキュリティ的な不安を感じる方も多いのではないでしょうか。
ということで、インスタンス作成と同時に、OSでIP制限をかける方法を紹介します。
IP制限の方法
前述の通り、Amazon Lightsailの機能では通信元IPアドレスで制限をすることができません。なので、必要な場合にはOSより上のレイヤで対応する必要があります。OS標準のiptablesを使う方法などが一般的かと思います。
今回は、Lightsailの機能であるLaunchScriptを使って起動と同時にiptablesを設定することで、IPアドレスによるフィルタリングを適用します。
LaunchScriptの実行
Lightsailのインスタンス作成画面上に目立たないですが、LaunchScriptを設定するボタンがあります。
選択すると、スクリプトの入力欄が出てきます。
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
コマンドを入れてインスタンスを作成します。
許可された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が使えることで、工夫次第で利用の幅も広がると思いました。