テーマをCocoonに変更しました!
その他

VPSの不正アクセスを確認する方法|SSHのログイン成功・失敗の記録の見方をやさしく解説

FavoriteLoadingお気に入り登録
その他

はじめに

VPSでWordPressサイトを運用していると、ふと「自分のサーバー、誰かに入られていないかな?」と不安になることがあります。

実際にわが家のConoHa VPS(KUSANAGI)でも、SSHへのログイン失敗が数百回記録されていました。世界中の攻撃者が、パスワードを総当たりで試してきていたのです。

そこで先日、SSHのポート番号を標準の22番から別の番号に変更しました。この記事では、その後に行った「本当に不正アクセスされていないか」を確認する方法を、コマンドの意味や結果の読み方まで、初心者の方にもわかるようにくわしく解説します。

ポート変更の手順については、別の記事でまとめています。

この記事でわかること

確認することわかること大事さ
ログイン成功の記録誰かに入られていないか一番大事
今ログインしている人今この瞬間、誰かが中にいないか大事
ログイン失敗の記録どれだけ狙われているか、どんな攻撃か参考
fail2banのブロック状況攻撃者がちゃんとブロックされているか参考

ポイントは、「失敗」がたくさんあっても、「成功」が自分だけなら入られていないということです。失敗の数に驚く前に、まず成功の記録を確認しましょう。

作業した環境

項目内容
サーバーConoHa VPS
OSKUSANAGI(AlmaLinux 9)
接続に使うソフトWindows PowerShell
ログインユーザーroot
SSHのポート番号22番から別の番号に変更済み(この記事では XXXXX と表記)
攻撃者のブロックfail2ban を導入済み

この記事で紹介するコマンドは、すべて「見るだけ」のコマンドです。実行してもサーバーの設定は何も変わらないので、安心して試してください。

また、記事内のIPアドレスは実際のものではなく、説明用に置き換えています。

準備:サーバーにログインする

PowerShellを開いて、いつも通りサーバーにログインします。ポート番号を変更している場合は、-p で番号を指定するのを忘れないでください。

ssh -p XXXXX root@サーバーのIPアドレス

行の先頭が「[root@… ~]#」になれば、サーバーの中に入れています。以降のコマンドは、すべてこの状態で実行します。

ステップ0:まず自分のIPアドレスを確認する

ログインの記録を見ても、どれが自分のIPアドレスなのかがわからないと判断できません。最初に確認しておきましょう。

echo $SSH_CLIENT

次のように表示されます。

203.0.113.10 60192 XXXXX
表示意味
203.0.113.10今接続している自分のPCのIPアドレス
60192自分のPC側で使っている番号(毎回変わるので気にしなくてOK)
XXXXXサーバー側のSSHのポート番号

一番左の数字が、自宅のIPアドレスです。メモしておきましょう。

自宅のIPアドレスは変わることがある

家庭用のインターネット回線は、ルーターの再起動などでIPアドレスが自動で変わることがあります。そのため、過去の記録に自宅の別のIPアドレスが残っていることもあります。

同じ回線であれば、最初の2つの数字(203.0 の部分)が同じか似ていることが多いので、判断の目安にしてください。

ステップ1:ログイン成功の記録を見る(一番大事)

「誰かに入られていないか」を確認するには、ログインに成功した記録を見ます。

1-1:過去7日間の成功記録を表示する

journalctl -u sshd --since "7 days ago" | grep "Accepted"

長いコマンドに見えますが、3つの部分に分かれています。

部分意味
journalctl -u sshdSSHの記録(ログ)を表示する
–since “7 days ago”7日前から今までの分だけにする
| grep “Accepted”その中から「Accepted(受け入れた=ログイン成功)」の行だけを取り出す

「|」(パイプ)は、左のコマンドの結果を、右のコマンドに渡すという記号です。キーボードの「Shift」+「¥」で入力できます。

1-2:結果の読み方

次のような行が表示されます。

9月 17 13:28:10 vm-xxxxxxxx.novalocal sshd-session[837896]: Accepted password for root from 203.0.113.10 port 60192 ssh2
部分意味
9月 17 13:28:10ログインした日時
vm-xxxxxxxx.novalocalサーバーの名前
Accepted passwordパスワードでのログインに成功した
for rootrootユーザーでログインした
from 203.0.113.10どこからログインしたか(ここが一番大事)
port 60192接続元のPC側の番号(気にしなくてOK)

「from」の後ろのIPアドレスが、すべて自宅のIPアドレスかどうかを確認します。日時が、自分が作業した時間と合っているかも見ておくと安心です。

1-3:件数が多いときはIPアドレスごとに集計する

ログインの回数が多いと、画面が流れてしまって全部を確認できません。わが家でも、上のほうが流れて見えなくなりました。

そんなときは、IPアドレスだけを取り出して、回数を数えるコマンドが便利です。

journalctl -u sshd --since "7 days ago" | grep "Accepted" | awk '{print $11}' | sort | uniq -c
部分意味
awk ‘{print $11}’各行の11番目の単語(IPアドレスの部分)だけを取り出す
sort同じIPアドレスが並ぶように並べ替える
uniq -c同じものをまとめて、回数を数える

11番目というのは、行をスペースで区切って左から数えた順番です。「9月」が1番目、「17」が2番目…と数えていくと、IPアドレスがちょうど11番目になります。

わが家の結果は次の通りでした。

     18 203.0.113.10

1行だけで、自宅のIPアドレスから18回です。つまり、過去7日間にサーバーへ入ったのは自分だけということがわかりました。

1-4:結果の判断のしかた

結果判断
自宅のIPアドレスが1行だけ入ったのは自分だけ。問題なし
2行以上あり、どれも最初の数字が似ている自宅のIPアドレスが途中で変わっただけの可能性が高い
まったく見覚えのないIPアドレスがある要注意。後半の「怪しいIPがあったとき」を参照
何も表示されない7日間ログインしていない、または記録が残っていない

1-5:もっと前までさかのぼる

「7 days ago」の部分を変えると、見る期間を変えられます。

journalctl -u sshd --since "30 days ago" | grep "Accepted" | awk '{print $11}' | sort | uniq -c
書き方意味
“today”今日の0時から
“yesterday”昨日の0時から
“7 days ago”7日前から
“30 days ago”30日前から
“2026-09-17 04:00”指定した日時から

ただし、記録は古いものから自動で消されていくので、あまり昔の分は残っていないこともあります。

ステップ2:ログイン履歴を一覧で見る(last)

ステップ1とは別に、ログインの履歴をシンプルな一覧で見られるコマンドもあります。

last -i | head -20
部分意味
lastログインの履歴を新しい順に表示する
-i接続元を名前ではなくIPアドレスで表示する
| head -20最初の20行だけにする

表示の例です。

root     pts/1        203.0.113.10     Thu Sep 17 13:28   still logged in
root     pts/0        203.0.113.10     Thu Sep 17 04:21 - 05:02  (00:41)
表示意味
rootログインしたユーザー名
pts/0、pts/1SSHなどでつないだ画面の番号
203.0.113.10接続元のIPアドレス
still logged in今もログイン中
(00:41)接続していた時間(この例では41分)

一番下に「wtmp は ○月○日 から始まっています」と表示されることがあります。これはその日以降の記録しか残っていないという意味です。サーバーを作った日や、記録が整理された日が表示されます。

ステップ3:今ログインしている人を確認する(who)

who

今この瞬間、サーバーにつながっている人の一覧が表示されます。

root     pts/1        2026-09-17 13:28 (203.0.113.10)

自分の接続だけなら問題ありません。PowerShellの窓を複数開いている場合は、その数だけ行が表示されます。

見覚えのない接続がある場合は、今まさに誰かが中にいる可能性があります。後半の「怪しいIPがあったとき」を確認してください。

ステップ4:ログイン失敗の記録を見る(lastb)

ここからは「どれだけ狙われているか」を確認します。ログイン失敗の記録は、lastb(ラストビー)というコマンドで見られます。

4-1:最近の失敗を20件見る

lastb | head -20

わが家の結果の一部です。

root     ssh:notty    198.51.100.23    Thu Sep 17 03:53 - 03:53  (00:00)
debian   ssh:notty    198.51.100.45    Thu Sep 17 03:52 - 03:52  (00:00)
harry    ssh:notty    198.51.100.23    Thu Sep 17 03:46 - 03:46  (00:00)
admin    ssh:notty    192.0.2.118      Thu Sep 17 03:46 - 03:46  (00:00)
almalinu ssh:notty    192.0.2.118      Thu Sep 17 03:45 - 03:45  (00:00)
         ssh:notty    192.0.2.118      Thu Sep 17 03:45 - 03:45  (00:00)
rabbit   ssh:notty    192.0.2.210      Thu Sep 17 03:31 - 03:31  (00:00)
test2    ssh:notty    192.0.2.218      Thu Sep 17 03:14 - 03:14  (00:00)
意味
1列目(root、debianなど)攻撃者が試したユーザー名
2列目(ssh:notty)SSHでの接続で、画面は開かれなかった(=失敗した)という意味
3列目攻撃者のIPアドレス
4列目以降失敗した日時

記録は新しい順に並んでいます。一番上が、最後に失敗した記録です。

4-2:記録から読み取れる攻撃の特徴

試された名前攻撃者の狙い
rootサーバーの管理者。入れれば何でもできるので一番狙われる
adminよくある管理者の名前
debian、almalinuOSをインストールしたときの初期ユーザー名
test2、harry、rabbitありがちな名前の総当たり

どれも人が手で打っているのではなく、自動の攻撃プログラムが、よくある名前とパスワードを片っ端から試しているものです。

「almalinu」と途中で切れている理由

lastbのユーザー名の欄は8文字までしか表示されないため、「almalinux」が途中で切れて「almalinu」になっています。AlmaLinuxの初期ユーザー名を狙った攻撃です。

ユーザー名が空欄の行について

ユーザー名が表示されていない行は、ユーザー名を送らずに接続だけ試した記録です。サーバーが動いているかを調べる、下見のような接続です。

4-3:失敗の合計回数を数える

lastb | grep -c "ssh:"

「ssh:」を含む行の数、つまりSSHのログイン失敗の合計回数が数字で表示されます。

数日後にもう一度実行して、数字の増え方を比べると、対策の効果がわかります。

4-4:攻撃の多いIPアドレス上位10件

lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -10
部分意味
awk ‘{print $3}’3列目(IPアドレス)だけを取り出す
sort | uniq -c同じIPアドレスをまとめて回数を数える
sort -rn回数の多い順に並べ替える
head -10上位10件だけ表示する

左の数字が失敗回数、右がIPアドレスです。同じIPアドレスから何十回も来ていれば、しつこく狙われているということです。

ユーザー名が空欄の行は列がずれるため、まれにIPアドレス以外の文字が混ざることがありますが、大まかな傾向を見るには十分です。

4-5:狙われたユーザー名上位10件

lastb | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

4-4の「$3」を「$1」(1列目=ユーザー名)に変えただけです。rootが上位に来ることが多く、rootのパスワードを強くしておくことの大切さがよくわかります。

ステップ5:対策の効果を確認する

ポート番号を変更した場合は、変更した後に失敗があるかどうかで効果を確認できます。

5-1:変更した時刻以降の失敗だけを見る

journalctl -u sshd --since "2026-09-17 04:00" | grep -E "Failed|Invalid"

日時の部分は、自分がポートを変更した時刻に置き換えてください。

キーワード意味
Failedパスワードが間違っていた
Invalid存在しないユーザー名で試された

「grep -E」を使うと、「Failed または Invalid」のように複数のキーワードをまとめて探せます。

5-2:結果の判断

結果判断
何も表示されない新しいポート番号はまだ攻撃者に見つかっていない
何か表示される新しい番号を見つけた攻撃者がいる。fail2banがブロックするので慌てなくてOK

わが家の結果

lastbで最近の失敗を見たところ、一番新しい失敗が、22番を閉じた直後の03時53分でした。

確認したのは13時過ぎだったので、22番を閉じてから約9時間半、ログイン失敗が1件もありませんでした。

作業する前は、数分おきに攻撃が来ていたので、ポート変更の効果がはっきりと出ています。

ステップ6:fail2banのブロック状況を確認する

fail2banを導入している場合は、ブロックの状況も確認しておきましょう。

fail2ban-client status sshd

表示の例です。

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd + _COMM=sshd-session
`- Actions
   |- Currently banned: 29
   |- Total banned:     29
   `- Banned IP list:   192.0.2.118 198.51.100.23 ...
項目意味
Currently failed今、見張っている最中の失敗の数(ブロックされる前の状態)
Total failedfail2banを起動してからの失敗の合計
Currently banned今ブロックしているIPアドレスの数
Total bannedfail2banを起動してからブロックした合計
Banned IP listブロック中のIPアドレスの一覧

「Total failed」や「Total banned」は、fail2banを再起動すると0から数え直しになります。わが家では、設定を変えて再起動した直後だったので、失敗は0でした。

もし自分がブロックされてしまったら

自分でパスワードを何度も間違えると、自宅のIPアドレスがブロックされてしまうことがあります。そのときは、ConoHaの管理画面の「コンソール」からログインして、次のコマンドでブロックを解除できます。

fail2ban-client set sshd unbanip 自宅のIPアドレス

怪しいIPアドレスがあったとき

ログイン成功の記録や、whoの結果に見覚えのないIPアドレスがあった場合の対応です。

まずは落ち着いて確認する

次のような場合は、自分自身の接続である可能性があります。

よくあるケース確認のしかた
自宅のIPアドレスが途中で変わった最初の数字が今のIPアドレスと似ているか見る
スマホや外出先から接続したその日時に自分が接続したか思い出す
ConoHaのコンソールや管理ツールを使ったその日時に管理画面で作業したか思い出す

IPアドレスは、「IPアドレス 検索」などで出てくるWebサービスで調べると、どの国の、どの会社の回線かがわかります。自分が使っているプロバイダ名が出てくれば、自分の接続と考えてよいでしょう。

本当に心当たりがない場合

すぐにrootのパスワードを変更してください。

passwd

新しいパスワードを2回入力します。入力中は画面に何も表示されませんが、ちゃんと入力されています。

そのうえで、次の点も確認しておきましょう。

  • そのIPアドレスでいつログインされたか(ステップ1のコマンドで確認)
  • ホームページが書き換えられていないか
  • 見覚えのないファイルやユーザーが増えていないか

自分で判断が難しい場合は、サーバー会社のサポートや専門家に相談することも検討してください。

おすすめの定期チェック

毎回すべてのコマンドを実行する必要はありません。わが家では、次のペースで確認することにしました。

タイミング確認することコマンド
週に1回知らないIPアドレスからログインされていないかステップ1-3の集計コマンド
週に1回攻撃の増え方lastb | grep -c “ssh:”
気になったとき最近の攻撃の様子lastb | head -20
気になったときブロックの状況fail2ban-client status sshd

週1回チェック用のコマンドまとめ

次の2つだけ覚えておけば、まずは十分です。

journalctl -u sshd --since "7 days ago" | grep "Accepted" | awk '{print $11}' | sort | uniq -c
lastb | grep -c "ssh:"

1つ目で自宅のIPアドレスだけなら安心、2つ目で前回からの増え方を見る、という使い方です。

よくある疑問とトラブル

疑問・症状答え・解決法
ログイン失敗が何百回もあって怖い失敗は「入れなかった」記録です。成功の記録が自分だけなら入られていません
成功の記録で画面が流れて全部見えないステップ1-3のIPアドレスごとの集計コマンドを使う
lastbで「Permission denied」と出るrootでログインしているか確認する(一般ユーザーでは見られません)
lastbのユーザー名が途中で切れている表示が8文字までのためです。攻撃の内容には影響ありません
lastbでユーザー名が空欄の行があるユーザー名を送らずに接続だけ試した下見の記録です
「wtmp は ○月○日 から始まっています」と出るその日以降の記録しか残っていないという意味です
古い日付の記録が出てこない記録は古いものから自動で消されるため、残っていないことがあります
fail2banの回数が0になっているfail2banを再起動すると0から数え直しになります
サーバーにログインできないポート番号を変えている場合は、ssh -p XXXXX の -p を付け忘れていないか確認する

おわりに

ログイン失敗の記録を初めて見たときは、その数の多さにびっくりしました。しかし、確認するべきなのは「成功の記録が自分だけかどうか」です。そこさえ押さえておけば、必要以上に怖がることはありません。

今回紹介したコマンドは、どれも見るだけのものなので、気軽に試せます。週に1回、コーヒーを飲みながらサーバーの様子をのぞく習慣をつけておくと、いざというときにも落ち着いて対応できます。

次のステップとしては、パスワードの代わりに鍵ファイルでログインする「鍵認証」に挑戦すると、さらに安全になります。

気になる中古パソコン

パソコン

Supported by Rakuten Web Service

コメント

タイトルとURLをコピーしました
PR

当サイトは、Amazon、楽天アソシエイト・他プログラムの参加者です。リンクを通じて商品を購入すると、紹介料を得る場合があります。

⚠ 免責事項

本記事は、筆者が実際に行った作業を記録したものです。サーバーの環境や設定によっては、同じ手順でも結果が異なる場合があります。

作業を行う際は、事前にバックアップを取ったうえで、ご自身の責任で実施してください。本記事の内容を参考にしたことによって生じたトラブルや損害について、当サイトは一切の責任を負いかねますので、あらかじめご了承ください。