Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
インターネットに公開しているサーバーは、管理者が思っている以上に多くの攻撃やスキャンの対象になります。特にログインを試みるブルートフォース攻撃は日常的に発生しており、いつパスワードが突破されてもおかしくない状況です。こうした脅威にいち早く気付き、自動的に防御するには、ログの監視と分析が不可欠です。
今回は、サーバーのセキュリティを強化するための重要な3つのツール、fail2ban、logwatch、auditdについて、具体的な導入・活用方法から、それぞれの得意分野と限界までを詳しく解説します。これらのツールを使いこなすことで、より安全で信頼性の高いサーバー環境を構築できるようになります。
fail2ban は、認証ログを監視し、不正なログイン試行を検知すると、そのIPアドレスからのアクセスを一時的にブロックするツールです。これにより、悪意のあるユーザーがパスワードを総当たりで試すのを自動的に防ぐことができます。
得意分野:パスワード総当たり(ブルートフォース)など、繰り返し型の攻撃に非常に強い。
限界:パスワードが漏洩した場合や、単一の試行で成功した攻撃には無力です。このため、パスワードの強化や、可能であれば公開鍵認証、多要素認証の導入も合わせて検討することが重要です。
パッケージマネージャーで簡単にインストールできます。
# Debian/Ubuntu
sudo apt update
sudo apt install fail2ban
# RHEL系(AlmaLinux/Rocky/CentOS Stream)
# EPELリポジトリを有効化してからインストールします
sudo dnf install epel-release
sudo dnf install fail2ban
インストール後、サービスを有効化し起動することで、再起動後も自動でfail2banが動作するようになります。
sudo systemctl enable --now fail2ban
設定は /etc/fail2ban/jail.local
ファイルで行います。
/etc/fail2ban/jail.local
の設定例
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
bantime
: ブロックする時間。1h
は1時間。findtime
: 試行回数をカウントする時間枠。10m
は10分。maxretry
: findtime
の間に許可される最大試行回数。[sshd]
: SSHのルールを有効化します。この設定は、「10分間に5回以上SSHのログインに失敗したIPアドレスを1時間ブロックする」という動作になります。
設定変更後はサービスを再起動して反映させます。
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
このコマンドを実行すると、現在ブロックされているIPアドレスのリストや、これまでにブロックした件数を確認できます。運用中に「なぜか接続できない」といったトラブルの際にも役立ちます。
logwatch は、システムのログファイルを解析し、重要な情報を集計してメールで定期的に報告するツールです。これにより、システム管理者は毎日大量に生成されるログをすべてチェックする必要がなくなり、重要なイベントだけを効率的に把握できます。
得意分野:日々のログの「異常」をざっくりと把握するのに向いています。
限界:即時性はないため、緊急性の高いアラートには向きません。リアルタイムな監視が必要な場合は、他のIDSツールとの併用が効果的です。
# Debian/Ubuntu
sudo apt update
sudo apt install logwatch
# RHEL系(AlmaLinux/Rocky/CentOS Stream)
sudo dnf install logwatch
logwatch
は通常、メール送信のためにシステムにMTA(PostfixやSendmailなど)がインストールされていることを前提とします。また、環境によってはログのキャッシュディレクトリ /var/cache/logwatch
が必要になる場合があります。
sudo mkdir -p /var/cache/logwatch
設定は /etc/logwatch/conf/logwatch.conf
ファイルで行います。
/etc/logwatch/conf/logwatch.conf
の設定例
Output = mail
MailTo = your_email@example.com
MailFrom = logwatch@your_server.com
Range = yesterday
Detail = High
Output
: レポートの出力先。mail
、stdout
、file
など。MailTo
: レポートの送信先メールアドレス。Range
: 集計するログの範囲。yesterday
が一般的です。Detail
: レポートの詳細レベル。Low
、Med
、High
。設定変更後、以下のコマンドで手動実行して動作確認を行うのがおすすめです。
sudo logwatch --range today --detail High --output mail --mailto you@example.com
auditd は、カーネルレベルでシステムコールやファイルアクセスなどのアクティビティを詳細に記録するツールです。セキュリティインシデントの調査や、コンプライアンス要件を満たすために利用されます。
得意分野:誰が、いつ、何を、どうしたかといった操作の詳細な記録や、証跡管理に非常に優れています。
限界:ログ量が膨大になりやすいため、適切なルール設定とディスク容量管理が不可欠です。必要な監査だけに絞るルール設定と、ログの定期削除を心がけましょう。
# Debian/Ubuntu
sudo apt update
sudo apt install auditd
# RHEL系(AlmaLinux/Rocky/CentOS Stream)
sudo dnf install auditd
ルールファイルは /etc/audit/rules.d/
ディレクトリに記述します。ルールファイルは任意の名前(例:10-local.rules
)で作成でき、数値の若い順に読み込まれます。
/etc/audit/rules.d/99-local.rules
の設定例
# /etc/passwd の属性/書き込み変更を監視(ausearch -k passwd_changes で検索)
-w /etc/passwd -p wa -k passwd_changes
# 成功/失敗を問わず、O_CREAT を伴うファイル生成試行を捕捉する例
# 64bit
-a always,exit -F arch=b64 -S open -F a1&0100 -k file_creation
-a always,exit -F arch=b64 -S openat,open_by_handle_at -F a2&0100 -k file_creation
# 32bit
-a always,exit -F arch=b32 -S open -F a1&0100 -k file_creation
-a always,exit -F arch=b32 -S openat,open_by_handle_at -F a2&0100 -k file_creation
-w
(watch): 指定したファイルやディレクトリへのアクセスを監視します。-p
(permissions): 監視するパーミッション。w
(write)とa
(attribute)の変更。-k
(key): ログ検索時に使う識別子。arch
: アーキテクチャをb64(64bit)またはb32(32bit)で指定します。S
: 監視するシステムコール。-F a1&0100
: open(2)
の第2引数(flags)にO_CREAT
(0100
)が含まれるかをビットマスクで判定します。-F a2&0100
: openat(2)
やopen_by_handle_at(2)
の第3引数(flags)にO_CREAT
が含まれるかを判定します。【重要】 auditd のルールは、監査対象やシステムコールを絞ることがディスク負荷・運用負荷を抑えるコツです。/etc/audit/auditd.conf
で max_log_file
と max_log_file_action
の設定を行い、ログが肥大化しすぎた際に自動でローテーションや削除が行われるようにしておきましょう。
ルールの変更を反映させるには、augenrules --load
コマンドを実行します。これはサービス再起動時に呼ばれるスクリプトを単体で実行するものであり、設定ミスによるサービス停止を防ぐことができます。
sudo augenrules --load
du -sh /var/log/audit
定期的にこのコマンドでログディレクトリのサイズを確認しましょう。
ログの確認には ausearch
コマンドが便利です。-k
オプションで識別子(key)を指定できます。
# passwdファイルへの書き込みを探す
sudo ausearch -k passwd_changes
これらのツールで防御・監視・記録の三段構えが整います。
これらのツールを適切に組み合わせることで、攻撃の防御から日々の監視、そして事後調査までの一連の流れを確立し、サーバー運用をより安全に行えるようになります。
今回は、Linuxサーバーのセキュリティを強化するための重要な3つのツールについて解説しました。単にツールを導入するだけでなく、それぞれの得意分野と限界を理解し、運用しやすいように設定を工夫することが重要です。
これらのツールはあくまで防御・監視・記録の「道具」です。定期的な見直しや、複数管理者での運用ルール(例:アラート発生時の通知フロー・対応担当の明確化)を決めておくと、さらに安心です。この記事が、皆さんのサーバーセキュリティ対策の一助となれば幸いです。ご覧いただきありがとうございました。
次回は「カーネル再構築とカスタムモジュールの導入」について解説します。特殊なデバイス対応やパフォーマンス改善のための手順を詳しく見ていきましょう。