Published
- 1 min read
sshの接続ポート番号を変更することで、意図しない不正アクセスを防ぐ方法

検証背景
EC2を建てて、ssh接続するポート番号を22のデフォルトにしておくと、 以下の様な不正アクセスを試みるログが残ることがある。
こうした不正アクセスを防ぐため、sshのポート番号を変更するだけでも効果があるとのことで、実際に1週間ほどEC2を放置してみた。
検証環境
OS : Ubuntu14.04
Instance Type : t2.micro
設定内容
そのため、/etc/ssh/sshd_config の下記の部分を書き換え、service ssh restart を行う。
[Tips]
sshを再起動するときは、いったん22と10022の両方をセキュリティグループに登録しておき、新しいセッションで10022に接続できることを確認した後、 sshを再起動したセッションを閉じる方が混乱せずにすむ
結果
注)個人検証のために、SSHの接続を一時的に全許可するだけのハニーポットを準備したときの結果です。 ホスト名などが外に漏れているサーバであれば、これが数万数十万件の規模で不正アクセスがきます。
不正アクセス件数
ポート番号を変更するだけで、見事に不正アクセス数がなくなった。 #他の運用中サーバでも、1700~2200ぐらいは不正アクセスを試みた記録が残っている
ユーザごとの不正アクセス件数
不正アクセスを試みようとしている主なユーザは、以下のようなユーザであった。 test,admin,guestなどは結構作りがちだが、パスワード認証とかだと破られる可能性があるので、注意しておいた方がよさげ。
対応方針
AWSのデザインパターンの一つ、CDP:OnDemand Bastionパターンを使う。
必要なタイミングで踏み台サーバを起動する
可能であれば、これが一番やりやすい方針だと思うけど、 OnDemand Bastionについて基本的なところおさらいを見ていると、やはり踏み台サーバを常時稼動させておきたいという要件も出てくる。
踏み台サーバのポートだけ変更しておく
下図のような構成で、踏み台サーバだけsshのポート番号を変更しておけば、 不正アクセスも防げ、かつVPC内部のssh接続はデフォルトの22ポートが利用できる。

appサーバに接続する際は、~/.ssh/configに以下のような定義を記載しておく。
この状態で、$ssh app.testと接続すれば、bastion.test経由でapp.testまでsshでログイン可能となる。