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

目次

検証背景

EC2を建てて、ssh接続するポート番号を22のデフォルトにしておくと、
以下の様な不正アクセスを試みるログが残ることがある。

Nov  8 09:25:43 ip-xxx-xx-x-xxx sshd[2210]: Invalid user admin from xxx.xxx.xxx.xxx
Nov  8 09:25:43 ip-xxx-xx-x-xxx sshd[2210]: input_userauth_request: invalid user admin [preauth]
Nov  8 09:25:43 ip-xxx-xx-x-xxx sshd[2210]: Received disconnect from xxx.xxx.xxx.xxx: 11: Bye Bye [preauth]

こうした不正アクセスを防ぐため、sshのポート番号を変更するだけでも効果があるとのことで、実際に1週間ほどEC2を放置してみた。

検証環境

  • OS : Ubuntu14.04
  • Instance Type : t2.micro

設定内容

そのため、/etc/ssh/sshd_config の下記の部分を書き換え、service ssh restart を行う。

# What ports, IPs and protocols we listen for
Port 22 
# What ports, IPs and protocols we listen for
Port 10022
  • [Tips]

sshを再起動するときは、いったん22と10022の両方をセキュリティグループに登録しておき、新しいセッションで10022に接続できることを確認した後、
sshを再起動したセッションを閉じる方が混乱せずにすむ

結果

注)個人検証のために、SSHの接続を一時的に全許可するだけのハニーポットを準備したときの結果です。
ホスト名などが外に漏れているサーバであれば、これが数万数十万件の規模で不正アクセスがきます。

不正アクセス件数

PORT 不正アクセス数
22(default)}1835
10022 0
20022 0

ポート番号を変更するだけで、見事に不正アクセス数がなくなった。
#他の運用中サーバでも、1700~2200ぐらいは不正アクセスを試みた記録が残っている

  • ユーザごとの不正アクセス件数

不正アクセスを試みようとしている主なユーザは、以下のようなユーザであった。
test,admin,guestなどは結構作りがちだが、パスワード認証とかだと破られる可能性があるので、注意しておいた方がよさげ。

回数(10回以上のものを抜粋) ユーザ
151 test
143 admin
75 nagios
63 guest
54 zabbix
32 user
24 ubnt
24 apache
21 tomcat
20 zxin10
20 oracle
16 hadoop
14 postgres
14 git
13 weblogic
13 web
13 pi
13 ftpuser
12 zhaowei
12 mysql
12 ftp
11 informix

対応方針

AWSのデザインパターンの一つ、CDP:OnDemand Bastionパターンを使う。

必要なタイミングで踏み台サーバを起動する

可能であれば、これが一番やりやすい方針だと思うけど、
OnDemand Bastionについて基本的なところおさらいを見ていると、やはり踏み台サーバを常時稼動させておきたいという要件も出てくる。

踏み台サーバのポートだけ変更しておく

下図のような構成で、踏み台サーバだけsshのポート番号を変更しておけば、
不正アクセスも防げ、かつVPC内部のssh接続はデフォルトの22ポートが利用できる。

bastion

appサーバに接続する際は、~/.ssh/configに以下のような定義を記載しておく。

Host bastion.test
  HostName [bastion.testのPublic IP]
  User ubuntu
  Port 10022
  Identityfile ~/.ssh/test.pem
Host app.test
  User ubuntu
  Port 22
  Identityfile ~/.ssh/test.pem
  ProxyCommand ssh bastion.test -W [app.testのPrivate IP]:22

この状態で、$ssh app.testと接続すれば、bastion.test経由でapp.testまでsshでログイン可能となる。