当記事の概要
IBM Cloud VPC Gen 2上にUbuntuのVSIを立てた際に、セキュリティ確保のために実施したことを備忘録としてまとめました。
実施した内容は以下になります。
- 一般ユーザの作成
- 一般ユーザのsudoの設定
- 一般ユーザでのSSH公開鍵認証の設定
- rootでのSSHログインを禁止
- パスワード認証を無効化
- デフォルトセキュリティグループの変更(アクセス元IPアドレスの限定)
また、当記事では以下の記事を参考にしています。
- HTTP Proxy経由でSSH接続する方法(Mac)
- プロキシ環境下のWindows10から外部へSSHでアクセスする方法
- SSH公開鍵認証で接続するまで
- Ubuntuでsshのrootログインを禁止する
前提事項
当記事では以下を前提としています。
- VSIのOSはUbuntuである
- ローカルの端末がMacである
一般ユーザの作成
初期状態ではrootでのSSHログインになりますが、rootをそのまま使用し続けるのは危険なため、一般ユーザを作成します。
Ubuntuではuseradd
コマンド、adduser
コマンドの2種類が使用可能ですが、useradd
コマンドではホームディレクトリが作成されないなどの不都合があるため、adduser
コマンドを使用します。
adduser
コマンドを実行すると、対話式にパスワードの設定などが行えます。
# adduser <ユーザID>
一般ユーザのsudoの設定
この後rootでのSSHログインを禁止するため、一般ユーザがsudo su
でrootになれるようにします。
ユーザをsudoグループに追加することで可能になるため、以下のコマンドを実行します。オプションが-G
だけだと指定したグループを追加ではなく置き換えになるため、-aG
を指定します。
# usermod -aG sudo <ユーザID>
一般ユーザでのSSH公開鍵認証の設定
ローカルの端末でSSH鍵を作成します。
ssh-keygen -t rsa -b 4096 -f id_rsa_ubuntu
上記コマンドにより、id_rsa_ubuntuファイル(秘密鍵)、id_rsa_ubuntu.pubファイル(公開鍵)が作成されるので、id_rsa_ubuntu.pubファイル(公開鍵)の内容をコピーします。
次にUbuntu側で、対象の一般ユーザにsuし、.ssh/authorized_keys
ファイルを作成・編集し、コピーした公開鍵の内容をペーストします。
# su - <ユーザID>
$ mkdir ~/.ssh
$ vi ~/.ssh/authorized_keys
この後一旦ログアウトし、一般ユーザでSSHアクセスできることを確認します。
ssh -i <秘密鍵ファイルのパス> <ユーザID>@<VSIのIPアドレス>
rootでのSSHログインを禁止 & パスワード認証を無効化
rootでのSSHログインを禁止、パスワード認証を無効化するため、/etc/ssh/sshd_config
ファイルを以下の通り編集します。
# rootのログイン許可設定。yes -> no に変更する。コメントアウトされている場合は解除して変更する。
PermitRootLogin no
# パスワード認証の設定。yes -> no に変更する。コメントアウトされている場合は解除して変更する。
PasswordAuthentication no
ファイルを保存した後、以下のコマンドでsshdを再起動します。
sudo /etc/init.d/ssh restart
[2021年5月追記]
なお、Ubuntu 20.04のインスタンスを作成した際、上記の設定だけではrootでのSSHログイン、および、パスワード認証を無効化できませんでした。/etc/ssh/sshd_config.d/50-cloudimg-settings.conf
というファイルにも同様の設定が記述されており、こちらも上記の通り yes -> no に変更する必要がありました。(/etc/ssh/sshd_config において、/etc/ssh/sshd_config.d/*.conf
をincludeする指定がされているので、実際のファイル名は前述とは異なっているかもしれません)
デフォルトセキュリティグループの変更(アクセス元IPアドレスの限定)
VPCのセキュリティグループの設定で、アクセス元IPアドレスを特定のIPアドレスのみに限定します。
VPCのセキュリティグループのページにアクセスします。
対象のVPCにはデフォルトのセキュリティグループが存在するため、それを選択します。(この例ではsamplevpcというVPCのデフォルトセキュリティグループを選択)
デフォルトのセキュリティグループのインバウンド・ルールでは、VPC作成時にデフォルト指定から変更していなければ、ポート22(SSH)のアクセスを任意のIPアドレスから受け付けています。これを特定のIPアドレスレンジのみに限定します。
「TCP」の行の右端の3点ブロックをクリックし、「削除」を選択して削除します。
次に、「作成」ボタンをクリックします。
新規のインバウンド・ルールとして、「プロトコル」に「TCP」、「ポート範囲」に最小値「22」、最大値「22」を指定します。
また、「CIDRブロック」を選択し、許可するアクセス元IPアドレスのレンジを指定し、「保存」ボタンをクリックします。
以下は、2種類のレンジを指定したルールを作成した後の状態です。
以上により、特定のIPアドレスからしかSSHアクセスできず、rootでのSSHログインが禁止され、パスワード認証も無効化された状態になりました。
プロキシ指定でのSSHアクセス
昨今のリモート業務では自宅からサーバにアクセスするケースがありますが、その場合、インターネットプロバイダーにより動的にIPアドレスが割り振られ、IPアドレスレンジを絞れないケースがあります。会社でリモート用のHTTPプロキシが提供されている場合、そのプロキシを経由することで、IPアドレスを許可対象のIPアドレスに限定できる場合があります。
HTTP Proxy経由でSSH接続する方法(Mac)では、Macを使用した場合のHTTPプロキシ経由のSSHアクセスが紹介されています。これに沿って以下のコマンドを実行することで、アクセス元IPアドレスを許可対象のアドレスにすることが可能となります。
ssh -i <秘密鍵ファイルのパス> <ユーザID>@<VSIのIPアドレス> -o ProxyCommand='nc -X connect -x <HTTPプロキシのホスト名>:<HTTPプロキシのポート番号> %h %p'
なお、Windowsの場合はプロキシ環境下のWindows10から外部へSSHでアクセスする方法で同様に実施可能です。