SSHポートが攻撃される理由
SSHポートはサーバーを動かすのに必須なためポートが空いていることが多く、攻撃されやすいです。
通常パスワードや公開鍵認証が設定されているはずなので、実際にログインされることは無いと思いますが、安易なパスワードを利用していると突破される可能性もあります。
また、ログインはされなくても大量のアクセスでサーバに負荷がかかることもしばしばあります。
例えば借りているクラウドサーバーに対する攻撃で発生したトラフィック分の料金が請求されたという事例があります。
https://qiita.com/hnw/items/a4e395d047b382e7dc5f
ここではSSHへの攻撃の調査と解決方法を紹介します。
SSHのログ
SSHへの攻撃のログはlinuxでは通常/var/log/以下のディレクトリに保存されます。
- /var/log/secure (CentOSなど)
- /var/log/auth.log (ubuntuなど)
実際にこれまでSSHのポートに来た攻撃アクセスを国別に集計してみました。
攻撃防止策
sshに限らずあらゆる攻撃の対処方法の基本は「デフォルトを使用しない」です。攻撃者は設定がよくわからない人→デフォルト設定のまま運用している人→セキュリティ対策が甘そう
という感じで攻撃するのにも都合がよいからです。
ポートの変更
SSHのデフォルトポートは22から変更することで攻撃アクセスが減ります。
多数のSSH接続があるようなサーバーの場合は勝手にポートを変更すると接続できないトラブルが起こりますが、個人用途であれば変更は問題はないはずです。ウェルノーウンポート(0~1023)以外のポートであればなんでもよく、2022などが覚えやすくよく使われていそうです。11222などでもよいです。
rootの禁止(デフォルトのユーザー名を避ける)
デフォルトユーザー名として最も基本なものはrootです。rootは名前を変えることができないので、rootでのsshは拒否するという対処になります。他にも下記のような良くあるデフォルトのユーザー名も避けるべきです。
- root ルートユーザー名
- admin ( Administrator)
- user (user1)
- demo
- pi ラズベリーパイ
他にもよくある人物名や機器名等も避けたほうがよいでしょう。
ちなみに実際に私がテスト用に公開しているサーバー攻撃で使われてユーザー名です
- 87331 root
- 14506 admin
- 11696 test
- 9884 user
- 5424 ubuntu
- 3804 postgres
- 3110 oracle
- 2804 ftpuser
- 2686 git
- 2158 teamspea
- 1672 minecraf
- 1654 student
- 1636 deploy
- 1564 testuser
- 1552 guest
- 1294 mysql
- 1208 server
- 1208 administ
- 1182 support
- 1174 user1
安易なパスワードは避ける→公開鍵認証に
passwordなどの安易なパスワードは認証が有っても突破されます。そのため複雑なパスワード認証にするかなるべく公開鍵認証にしたほうがよいです。
踏み台サーバーを用意する
踏み台とは自分のPCとSSHしたいサーバーの間に中継する形で設置するサーバーのことです。攻撃を防ぐというよりも管理しやすくするという目的のほうが大きいです。特に複数のサーバーがある場合は踏み台サーバーからしかSSHできないようにすることで管理しやすくなります。踏み台サーバーのIP以外は遮断というように設定が容易になります。
接続試行回数に応じてIPを落とす
攻撃は総当たり的な感じで同じIPから何度もアクセスがあるのが特徴です。そのため一定回数以上の接続試行が同じIPから合った場合に接続を遮断するという設定を行うことで攻撃を防ぎます。よくあるツールとしてはfail2banがあります。
海外IPを落とす
攻撃の多くは海外IPです。日本やアメリカなどの国以外のアクセスは全て遮断するように設定すると多くの攻撃を回避できるようになります。
国別にみればCN(中国)が半分を占めています。中国からのアクセスを落とすだけで攻撃件数はかなり減らせそうです。
ポートノッキング
ポートノッキングはあらかじめ決められたポートに順番に接続することで特定のポートを開くようにする方法です。ポートノッキングを利用すれば普段とじている22番ポートに対して、10015, 4001ポートを順番に接続すると22番ポートが開くというような設定をすることが可能です。単にポートを変更するよりも強力ですが、ポートノッキングを利用するためにknockdなどのアプリケーションを導入する必要があり、利用がやや煩雑という欠点があります。