3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fail2banとufw完全設定ガイド:VPSサーバーを攻撃から守る実践的セキュリティ対策

Posted at

fail2banとufw完全設定ガイド:VPSサーバーを攻撃から守る実践的セキュリティ対策

はじめに

VPSサーバーを立てて数時間後、SSH接続のログを見て驚いた経験ありませんか?

Failed password for root from 192.168.1.xxx port 55324 ssh2
Failed password for admin from 103.207.39.xxx port 42156 ssh2
Failed password for user from 221.181.185.xxx port 33891 ssh2

こんな感じで、世界中からのBrute Force攻撃が延々と続いている...。

実は私も最初にVPSを立てたとき、この光景に震え上がりました。「これ、このまま放置して大丈夫なの?」って不安になったのを覚えています。

でも、適切な対策を取れば、こういった攻撃は簡単にブロックできるんです。今回は、fail2banufwを使った実践的なセキュリティ対策をお話しします。

なぜfail2banとufwの組み合わせが最強なのか?

まず、なぜこの2つのツールを組み合わせるのかを説明しますね。

役割分担が明確

  • ufw(Uncomplicated Firewall):基本的なファイアウォール設定を簡単に行うツール。「このポートは開ける」「このIPアドレスからは全拒否」といった静的なルールを設定
  • fail2ban:ログを監視して怪しいアクセスを自動的にブロックする動的防御ツール。「短時間に何回もSSHログインに失敗したIPアドレスを一時的にブロック」といった賢い対応が可能

fail2ban + ufwの役割分担

  • ufw:基本的な防御壁(静的)
  • fail2ban:賢い番人(動的)

この組み合わせによって、基本防御 + 攻撃パターンに応じた臨機応変な対応が可能になります。

実際の攻撃ログから学ぶ

設定方法の前に、実際にどんな攻撃が来ているのかお見せしますね。これは私のサーバーの実際のログです:

Dec 15 03:42:15 server sshd[12345]: Failed password for root from 103.207.39.170 port 55324 ssh2
Dec 15 03:42:17 server sshd[12346]: Failed password for admin from 103.207.39.170 port 55325 ssh2
Dec 15 03:42:19 server sshd[12347]: Failed password for user from 103.207.39.170 port 55326 ssh2
Dec 15 03:42:21 server sshd[12348]: Failed password for test from 103.207.39.170 port 55327 ssh2

よくある攻撃パターン

  • 辞書攻撃:admin, user, test, rootなど一般的なユーザー名で総当たり
  • IPローテーション:複数のIPアドレスから順番に攻撃
  • 時間分散:検知を避けるため時間を空けて攻撃

⚠️ 放置は危険
「パスワード認証無効にしてるから大丈夫」と思っても、これらの攻撃はサーバーリソースを消費します。また、新しい脆弱性が発見された時のリスクも考慮すべきです。

ステップ1:ufw基本設定(まずは基本の防御壁を作る)

1-1. ufwインストールと有効化

# Ubuntuの場合(通常プリインストール済み)
sudo apt update
sudo apt install ufw

# CentOS/AlmaLinuxの場合
sudo dnf install ufw

1-2. 基本ポリシーの設定

# デフォルトで全て拒否(超重要!)
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH接続用ポートを開放(自分が使用中のポートに変更)
sudo ufw allow 22/tcp

# HTTPとHTTPS(Webサーバー運用時)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

⚠️ SSH締め出し事故を防ぐ重要なポイント

UFWを有効にする前に、必ずSSHポートを許可してください。特にSSHポートを標準の22番から変更している場合は、そのポート番号を指定する必要があります。

# 例:SSHポートを2222番に変更している場合
sudo ufw allow 2222/tcp

1-3. UFW有効化とステータス確認

# UFW有効化
sudo ufw enable

# 設定確認
sudo ufw status verbose

正常に設定されていれば、こんな表示になります:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere

ステップ2:fail2ban詳細設定(賢い番人を配置)

2-1. fail2banインストール

# Ubuntu/Debian
sudo apt install fail2ban

# CentOS/AlmaLinux
sudo dnf install epel-release
sudo dnf install fail2ban

2-2. 基本設定ファイルの作成

fail2banの設定は/etc/fail2ban/jail.localファイルで行います:

sudo nano /etc/fail2ban/jail.local

実際に私が使用している設定

[DEFAULT]
# 基本設定
bantime = 3600          # 1時間ブロック
findtime = 600          # 10分間の監視時間
maxretry = 5            # 5回失敗でブロック

# 通知設定(メール通知したい場合)
destemail = your-email@example.com
sendername = Fail2Ban
mta = sendmail

# ホワイトリスト(自分のIPアドレスを追加)
ignoreip = 127.0.0.1/8 192.168.1.0/24 YOUR_HOME_IP

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log    # Ubuntuの場合
# logpath = /var/log/secure     # CentOSの場合
maxretry = 3                   # SSHは厳しめに3回で
bantime = 7200                 # 2時間ブロック

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 5

2-3. サービス開始と確認

# fail2ban開始・有効化
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# ステータス確認
sudo systemctl status fail2ban

# jail(監視対象)の確認
sudo fail2ban-client status

成功していれば、以下のような表示になります:

Status
|- Number of jail:	2
`- Jail list:	nginx-http-auth, sshd

よくあるトラブルとその解決法

トラブル1:「自分もブロックされちゃった!」

症状:設定後に自分のIPアドレスがブロックされてSSH接続できない

解決法

# 緊急時:自分のIPアドレスをアンブロック
sudo fail2ban-client set sshd unbanip YOUR_IP_ADDRESS

# 恒久対策:ignoreipに自分のIPを追加
sudo nano /etc/fail2ban/jail.local
# ignoreip = 127.0.0.1/8 192.168.1.0/24 YOUR_HOME_IP を追記

トラブル2:「fail2banが起動しない」

よくある原因と解決法

# ログファイルのパスが間違っている場合
sudo fail2ban-client status sshd
# → ログパスを確認して修正

# 設定ファイルの文法エラー
sudo fail2ban-client -t
# → エラー箇所を修正

トラブル3:「ブロックしすぎて正常なアクセスまで拒否」

調整のコツ

# 段階的にパラメータを調整
maxretry = 5    # 最初は緩めに設定
bantime = 1800  # 30分から始める
findtime = 300  # 5分間の監視

# 様子を見て徐々に厳しくする

運用開始後の確認とメンテナンス

設定が完了したら、以下のコマンドで動作を確認しましょう:

# 現在ブロックされているIPアドレス一覧
sudo fail2ban-client status sshd

# リアルタイムでログ監視
sudo tail -f /var/log/fail2ban.log

# ufwのログ確認
sudo tail -f /var/log/ufw.log

成功の確認方法

設定後数時間〜1日で、以下のような変化が見られるはずです:

  • SSH攻撃ログの大幅減少
  • fail2ban.logにブロック通知が記録される
  • サーバーの負荷が軽減される

セキュリティ強化のための追加対策

SSHポート番号変更

# /etc/ssh/sshd_config を編集
sudo nano /etc/ssh/sshd_config

# Port 22 を Port 2222 などに変更
Port 2222

# SSH再起動
sudo systemctl restart sshd

# ufwルールも忘れずに更新
sudo ufw delete allow 22/tcp
sudo ufw allow 2222/tcp

パスワード認証の無効化

# /etc/ssh/sshd_config を編集
PasswordAuthentication no
PubkeyAuthentication yes

# SSH再起動
sudo systemctl restart sshd

まとめ

今回設定したfail2ban + ufwの組み合わせで、基本的なBrute Force攻撃はほぼ完全にブロックできます。

今回のポイント振り返り

  • ✅ ufwで基本的なファイアウォール設定
  • ✅ fail2banで動的な攻撃対策
  • ✅ 自分のIPアドレスをホワイトリストに追加
  • ✅ 段階的な調整で最適化

設定は最初だけ大変ですが、一度やっておけば後は安心です。VPSサーバーを立てたら、真っ先にこの設定を行うことをオススメします!

参考リンク


実際の運用経験に基づいた設定なので、ぜひ参考にしてみてください。セキュリティ対策は継続的な改善が重要です。何か質問があれば、コメント欄でお気軽にどうぞ!

3
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?