LoginSignup
3
2

More than 3 years have passed since last update.

[AWS]サーバーがssh攻撃を受けていたのでポートを変更した

Last updated at Posted at 2019-09-04

はじめに

AWSに構築していたVPNサーバー(Shadowsocks)がsshブルートフォースアタックを受けていたので、対応のために22番のsshポートを変更したので、その変更例を示します。
最近繋がりずらいなと思っていてログを見たら、悲惨なことになっていたのがきっかけです。

インスタンスはCentOSのAmazon Linux 2です。
sshdへの接続ログは CentOSなので/var/log/secureにあります。
adminやuser、fake,butterなど色々なユーザー名で試しに来ていますね。clouderaやhadoopなんてのもありました。
各種サーバーに利用されるデフォルトのユーザー名を利用しているようです。以下は一部ログの抜粋です。
このようなログが数千行とありました。暇あったら解析したいと思います。

sshd[323]: Invalid user admin from 37.49.224.132 port 35940
sshd[323]: input_userauth_request: invalid user admin [preauth]
sshd[323]: Received disconnect from 37.49.224.132 port 35940:11: Bye Bye [preauth]
sshd[323]: Disconnected from 37.49.224.132 port 35940 [preauth]
sshd[325]: Invalid user cloudera from 37.49.224.132 port 38668
sshd[325]: input_userauth_request: invalid user cloudera [preauth]
sshd[325]: Received disconnect from 37.49.224.132 port 38668:11: Bye Bye [preauth]
sshd[325]: Disconnected from 37.49.224.132 port 38668 [preauth]
sshd[327]: Received disconnect from 37.49.224.132 port 40988:11: Bye Bye [preauth]
sshd[327]: Disconnected from 37.49.224.132 port 40988 [preauth]
sshd[329]: Invalid user butter from 37.49.224.132 port 43376
sshd[329]: input_userauth_request: invalid user butter [preauth]
sshd[329]: Received disconnect from 37.49.224.132 port 43376:11: Bye Bye [preauth]
sshd[329]: Disconnected from 37.49.224.132 port 43376 [preauth]

ということで22番ポートを塞ぐ手順を記載しておきます。

ポートの変更

sshの設定ファイルは /etc/ssh/sshd_configにあります。
初期状態ですと以下のようになっているかと思います。

/etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...

このファイルを編集します。今回はssh接続変更先のポートを2222に変更する例を示します。
まず、22番のコメントアウトを外します。そしてその下にもう一行、2222番を指定したPortを追加します。

/etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...

いきなり22番を塞いで、2222でも接続できなくなると困りますので、デフォルトの22番を残したまま新しいポートでも接続できるかをテストして、OKでしたら22番を塞ぐというステップを取ります。

sshd再起動

変更を反映させるためにsshdを再起動します。

$ sudo service sshd restart

ファイアーウォールの変更

これは人それぞれだと思いますが、AWSならSecurityGroupの変更です。
今回はポート2222番のTCPルールを追加します。
Selection_931.png

22番ポートはデフォルトsshのポートです。上記の設定で22番と2222番をssh用に開けておきます。

接続テスト

新しいターミナルを開いて、両方のポートで入れることを確認しましょう。sshコマンドでのポート指定は-pです。指定していない場合はデフォルトの22番で繋ぎに行きます。
もともと繋いであるターミナルはそのままにしましょう。失敗したときのためです。
ssh -i path/to/pem ec2-user@IPADDRESS -p 2222
ssh -i path/to/pem ec2-user@IPADDRESS

22番ポートを削除

2222番ポートでも無事入れることが確認できましたら、以下のようにsshd_configの22番を指定を削除します。

/etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...

そしたら変更を反映させるために再度sshdを再起動します。

$ sudo service sshd restart

AWSのセキュリティグループからも以下のように22番を削除します。
Selection_932.png

これで再度22番と2222番へのssh接続を試してみます。
ssh -i path/to/pem ec2-user@IPADDRESS -p 2222
ssh -i path/to/pem ec2-user@IPADDRESS

2222番で接続できて、22番で接続できなければ成功です。

さいごに

今まで個人用サーバーでは22番はssh用にいつも開けていました。よくはないと思っていなかったのですが、どうせ認証できないだろうから大丈夫かなと思っていました。
ですが、今回攻撃を受けているのを発見して、考えが変わりました。
サーバーでのssh認証以前の段階(AWSだとセキュリティグループ)で弾いておくべきだと。
少しでも皆様のセキュリティ意識が高まる一助となりますように。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2