Linux
AWS
Ubuntu
SSH
Security

AWSのSSHの設定を変更してセキュリティを向上させる方法まとめ

More than 3 years have passed since last update.


AWSのSSHの設定を変更してセキュリティを向上させる方法まとめ

AWSのSSH通信、デフォルトの設定のまま使ってはいませんか?

SSHの仕組みについて、よくわからないまま使ってはいませんか?

SSHには、通常/etc/ssh/ssh_configという設定ファイルがあります。

この設定ファイルの項目を変更してあげるだけで、セキュリティを大幅に

向上させることができます。


ssh_configのマニュアルを表示する

ターミナルで以下のコマンドを入力してください。

オプションについての詳細な説明が必要なときや、

自分でもっと調べたいときは一度マニュアルを読まれることをおすすめします。


$ man 5 ssh_config


SSHのバージョンを2にする(1を禁止する)

SSHのバージョン1は安全性が確保できないので

SSHバージョン2のみ利用を許可します。

/etc/ssh/ssh_config:

# 以下はバージョン1

# Protocol 1

# バージョン2のみ許可するように変更
Protocol 2

SSHにおいては、バージョン1とバージョン2の後方互換性は基本ありません。

SSHの開発の歴史はWikipediaを参照してください。


"Secsh" was the official Internet Engineering Task Force's (IETF) name for the IETF working group responsible for version 2 of the SSH protocol.[19] In 2006, a revised version of the protocol, SSH-2, was adopted as a standard. This version is incompatible with SSH-1. SSH-2 features both security and feature improvements over SSH-1. Better security, for example, comes through Diffie–Hellman key exchange and strong integrity checking via message authentication codes.


バージョン1とバージョン2の違いは以下の表を参考にしてください。

title
SSH Protocol Ver. 2(SSHv2)
SSH Protocol Ver. 1(SSHv1)

プロトコル校正
通信、認証、接続のプロトコルをそれぞれ分離
すべてひとつのプロトコル

公開鍵の認証方法
DSA, RSA系、OpenPGPをサポート
RSAのみ

サーバー側の鍵
Diffie-Helmanを用いているので不要
必要

パスワード変更のサポート

X

公開鍵認証のサポート

X

定期的なセッションキーの変更

X

3DES(Triple Data Encryption Standard)のサポート

X

MAC(Message Authentication Code)のサポート

X

参考リンク:


パスワード認証を禁止し公開鍵認証のみ有効にする

SSH通信には基本的に、以下の2つの認証方法が有ります。


  1. パスワード認証

  2. 公開鍵認証

パスワード認証の場合、盗聴やソーシャルエンジニアリングなどによって知られる可能性が

大いに有りますし、ブルートフォースアタック等によってパスワード認証が破られる可能性も

大いにありえます。したがって、基本的にはパスワード認証を禁止にすべきです。

そのためには、PasswordAuthenticationの項目をnoにしてください。

/etc/ssh/ssh_config:


# パスワード認証の禁止
PasswordAuthentication no

なお、公開鍵認証の仕組みについては過去に書いた以下記事などを参考にしてください。

http://qiita.com/KENJU/items/b09199c4b3e7203a2867


rootログインの禁止

rootユーザは権限が強いことから、rootログインを禁止することも検討します。

/etc/ssh/ssh_config:


# rootログインの禁止
PermitRootLogin no


ユーザ・グループごとの制限

ユーザ単位、グループ単位でログインを許可・拒否することができます。

関連する設定項目は以下の4つです。


  • AllowUsers

  • DenyUsers

  • AllowGroups

  • DenyGroups

具体的な記述例は以下のとおりです。

/etc/ssh/ssh_config:


# ユーザ「qiita」のみ許可
AllowUsers qiita

# 複数ユーザの許可
AllowUsers qiita aws

# ユーザ「qiita」の固定IPからのログインのみ許可
AllowUsers qiita@176.34.29.161

# 固定IPのみ許可
AllowUsers *@176.34.29.161


SSHログイン時に毎回「randomart」を表示させる

これはクライアント側(ローカルPC側)の作業になります。

「randomart」とは、人間が読みやすいように記号絵図として表現された鍵フレーズです。

下記のような図を見たことはありませんか?

ssh-keygenコマンドを実行して秘密鍵と公開鍵のペアを作成した際、

ターミナルに現れたかと思います。


The key's randomart image is:
+--[ RSA 2048]----+
| o=. |
| o o++E |
| + . Ooo. |
| + O B.. |
| = *S. |
| o |
| |
| |
| |
+-----------------+

これを毎回SSHログイン時に表示させることによって、

鍵フレーズが変更されていないかどうか目視で確認することができます。

もちろん目視なので、かなり細かい違いなどはわからないかもしれませんが

よりセキュリティを強化するためにオンにしても悪くない設定だと思います。

これを表示させるには、以下の2つの方法があります。


  • 毎回sshコマンドを実行するたびに-o VisualHostKey=yesを付与する


  • ~/.ssh/configファイルにVisualHostKey=yesという行を追加


    • なお、デフォルトでない場合は追加する(追加すればすぐに反映される)



~/.ssh/config:


VisualHostKey=yes


おまけ:/etc/ssh/ssh_configの主な設定項目まとめ

Title
Description

Port
ポート番号。イントラネットなどから外部への通信でポート22による通信が禁止されている場合など変更したりします

Protocol
SSHのバージョン(1 or 2)

HostKey
ホスト鍵のファイルのパス

PermitRootLogin
rootログインを許可するかどうか

StrictModes
ストリクトモード(厳密なパーミッションのチェック)を有効にするかどうか

MaxAuthTries
認証を試みることができる最大回数

AuthorizedKeysFile
公開鍵を登録するファイル

PasswordAuthentication
パスワード認証を許可するかどうか

X11Forwarding
X11フォワーディングを有効にするかどうか

AllowUsers
ログインを許可するユーザ

DenyUsers
ログインを拒否するユーザ

AllowGroups
ログインを許可するグループ

DenyGroups
ログインを拒否するグループ