1419 文字
7 分
サーバーを立てて 7 時間で、知らない誰かが 132 回ログインしに来た

前の記事で、このブログを自分の VPS に引っ越しました。その VPS の SSH のログを、立てた初日に見てみたら、こうでした。(((( ;゚Д゚)))

  • サーバーを起動してから 約 7 時間
  • 存在しないユーザー名でのログインの試しが 132 回
  • root でのログインの試しも、たくさん
  • そのうち 9 つの IP が、自動で締め出されていた

インターネットにサーバーを出すと、こういうものが勝手に来ます。名前も宣伝もしていない、立てたばかりのサーバーにです。

来ていたユーザー名#

ログ(journalctl -u ssh)から、試されたユーザー名を数えました。

ユーザー名回数
admin24
user7
apache4
sysadmin・postgres3
test・newuser・user02 など2

よくある名前を、片っ端から試しています。人が手で打っているのではなく、インターネット中の IP を順に叩いて回るプログラムです。

でも入れない#

このサーバーの SSH は、最初からこうしてあります。

passwordauthentication no # パスワードでは入れない
permitrootlogin no # root では入れない
pubkeyauthentication yes # 鍵だけで入れる

パスワードを当てに来ても、そもそもパスワードでは入れません。鍵が無ければ、何回試しても入れない。なので、132 回来ても怖くはないです。

それでも、ログが当て試しで埋まるのは気持ちよくないし、相手に何度も試させる理由もありません。そこで働いているのが fail2ban です。

fail2ban がしていること#

fail2ban は、ログを見張って、失敗を繰り返す IP をファイアウォールで締め出す道具です。今回の VPS(ConoHa の Debian 13)には、最初から入っていました。

flowchart TB
    A[知らない IP] -- SSH のログインの試し --> B[sshd]
    B -- 失敗を書く --> C[ログ]
    C -- 見張る --> D[fail2ban]
    D -- 10 分に 5 回失敗したら締め出す --> E[nftables]
    E -. 次からは届かない .-> A

設定は「10 分に 5 回失敗したら、1 日締め出す」でした。それで、初日だけで 9 つの IP が締め出されていたわけです。

自分も締め出されていた#

ここで白状すると、締め出された IP の中に自分も入っていました。(;´Д`)

サーバーを立てたとき、「パスワードや root で入れないこと」を確かめたくて、わざとログインを失敗させたのです。何回か。いつもと違う回線から。

当然、fail2ban から見れば、それは当て試しと同じです。その回線の IP が 1 日締め出され、私は「なぜか SSH がつながらない」と悩むことになりました。最初は「途中の回線で止められている」と思い込み、まちがった見立てまで記録に書いていました。

学んだこと:

  • 確かめるために、わざとログインを失敗させない
  • 設定を確かめたいなら、サーバーの中で sudo sshd -T を見れば、今効いている設定が全部出る
  • 「つながらない」ときは、まずサーバー自身が止めていないかを見る(sudo fail2ban-client status sshd で、締め出し中の IP の一覧が出る)

守りを少し足した#

せっかくなので、少しだけ守りを足しました。

1. 繰り返し来る相手ほど長く締め出す#

1 日締め出しても、明けたらまた来ます。そこで、fail2ban の bantime.increment を有効にしました。2 回目は 2 日、3 回目は 4 日…と倍になり、上限は 4 週間です。

/etc/fail2ban/jail.d/stardust.local
[sshd]
bantime.increment = true
bantime.maxtime = 4w

ただし、これだけでは効きません。fail2ban は締め出しの記録を、既定では 1 日で消してしまうので、2 回目かどうかを覚えていられないのです。記録を残す期間も合わせて延ばしました。

/etc/fail2ban/fail2ban.d/stardust.local
[Definition]
dbpurgeage = 4w

sudo fail2ban-client -t で設定を検査してから再起動しました。再起動しても、締め出し中の 9 つはそのまま残っていました。

2. 使っていない口を閉じる#

待っている口(ポート)を一覧にしたら(sudo ss -tulpn)、SSH・Web のほかに、5355 番が開いていました。LLMNR という、同じネットワークの中で名前を解決する仕組みです。ファイアウォールで捨てているので外からは届きませんが、使っていないので止めました。使わないものは閉じる。

/etc/systemd/resolved.conf.d/no-llmnr.conf
[Resolve]
LLMNR=no
MulticastDNS=no

3. 設定を git で残す#

サーバーの設定(ファイアウォール・fail2ban・nginx)を、手元のリポジトリに写して git で残すようにしました。変えたら写してコミットする。壊したときに、前の設定に戻せます。

まとめ#

  • サーバーを公開すると、数時間で知らない誰かがログインを試しに来る
  • 鍵だけで入れるようにしておけば、何回来ても入れない
  • fail2ban は、繰り返す相手をファイアウォールで締め出してくれる。自分も締め出されるので、わざと失敗させない
  • 繰り返す相手には bantime.increment。ただし記録を残す期間(dbpurgeage)も延ばす
  • 使わない口は閉じる。設定は git に残す

インターネットの片隅にも、ノックの音は絶えず届きます。ドアに鍵をかけて、のぞき穴から眺めるくらいがちょうどいい。(`・ω・´)ゞ

サーバーを立てて 7 時間で、知らない誰かが 132 回ログインしに来た
https://blog.stardust.box/posts/ssh-knocking/
作者
Stardust✨
公開日
2026-10-12
ライセンス
CC BY-NC-SA 4.0