VPSへの侵入試行は、fail2banを導入すると自動でブロックできます。 VPSをインターネットに公開すると世界中のボットから侵入試行が飛んできており、実際に運営しているサーバーのログにも、ユーザー名を変えながらの試行「Invalid user」が多数残っていました。 この記事では、攻撃の実態を自分のログで確かめる方法と、fail2banによる自動ブロックの導入を解説します。 ゲームサーバー用Linux OS(Ubuntu)の初期設定を終えた人向けの発展編です。
攻撃の実態を確認してみる
SSHへの試行はログに残っています。件数を数えてみましょう。
sudo grep -c "Invalid user" /var/log/auth.log
sudo grep -c "Failed password" /var/log/auth.log実際に不正なアクセス試行があった場合、ログにはこんな行が並びます。
sshd[740348]: Invalid user brian from xx.xx.xx.xx port 54200
sshd[740348]: Received disconnect from xx.xx.xx.xx port 54200:11: Bye Bye [preauth]
初期設定記事の手順どおりパスワード認証を無効化してあれば、「Failed password」は検出されません。 検出される場合は、初期設定記事のように鍵認証を設定したうえでパスワード認証を無効化しておきましょう。
fail2banで自動ブロックする
fail2banは、ログを監視して失敗を繰り返す接続元IPをファイアウォールで自動的に締め出すツールです。
導入と設定
sudo apt update
sudo apt install -y fail2ban設定はjail.confを直接編集せず、jail.localに書きます。
sudo tee /etc/fail2ban/jail.local <<'EOF'
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
EOF上記の設定は「10分間に5回失敗したIPを1時間ブロックする」という意味です。再起動して有効化します。
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban動作を確認する
sudo fail2ban-client status sshd実際に動作した場合の出力です。Filterの失敗検知とActionsのブロック状況が読み取れます。
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 4
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
`- Banned IP list:
また、誤ってbanされたIPは手動で解除できます。
sudo fail2ban-client set sshd unbanip 対象のIPアドレス自宅の固定IPなど「絶対にbanされたくない接続元」がある場合は、jail.localの[sshd]にignoreip = 自宅のIPアドレスを1行足してください。
よくある質問
fail2banはゲームのポートも守ってくれますか
守れません。fail2banが見ているのは「ログに認証失敗が記録されるサービス」(SSHなど)です。 UDPで動くゲームプロトコル自体への攻撃対策は、VPS事業者側のDDoS対策などレイヤーが異なります。
自分がbanされてしまいませんか
鍵認証でログインできていれば失敗を繰り返すことは起きにくいですが、心配ならignoreipに自分の接続元を登録してください。誤banはunbanipで解除できます。
攻撃は本当にそんなに来るのですか
サーバーを公開した時点からくる可能性があります。実際に公開・運用しているサーバーでも多数の侵入試行が確認できていました。
SSHのポート番号は変えたほうがいいですか
初期設定記事のFAQでも記載している通り、優先度は高くありません。鍵認証+fail2banができていれば、ポート変更までする必要はありません。
まとめ
- 公開VPSには実際に大量の侵入試行が来る
- fail2banは「apt install→jail.local→restart」で導入完了
- ゲームプロトコル自体の防御は別レイヤー。fail2banの守備範囲を正しく理解して使う
まずは自分のauth.logを見て攻撃の実態を確認し、fail2banを入れてください。