Linuxで不正アクセスを検知する基本的な方法

Linuxで不正アクセスを検知する基本的な方法
Linuxサーバーの管理者であれば、SSHを経由した不正アクセスのリスクを常に意識する必要があります。SSHポート22へのブルートフォース攻撃は年間を通して後を絶たず、放置すればサーバーの乗っ取りやデータ漏洩に直結します。そこで、Linuxで不正アクセスを検知する基本的な方法を実践的に解説します。本記事では、ログ監視から自動ブロックまで、具体的な手順とツールを紹介します。SSHログの確認方法、fail2banを使った自動ブロック設定、そして侵入検知システム(IDS)の導入まで、実務で即活用できる内容です。
目次
- はじめに:なぜLinuxで不正アクセス検知が必要か
- SSHログを確認して不正アクセスの兆候を掴む
- fail2banで自動的に不正アクセスをブロックする
- 侵入検知システム(IDS)で高度な不正アクセスを検知する
- SSHサーバー自体のセキュリティを強化する
- まとめ:Linux不正アクセス検知の実践的なロードマップ
- よくある質問(FAQ)
はじめに:なぜLinuxで不正アクセス検知が必要か
Linuxサーバーは企業や個人ユーザーに広く利用されていますが、その一方でSSHを標的とした不正アクセスの被害が後を絶ちません。独立行政法人 情報処理推進機構(IPA)の「2023年度 情報セキュリティの脅威に対する意識調査」によると、サイバー攻撃の被害を受けた組織のうち、45%がSSHを経由した侵入被害を経験しています(出典: IPA「情報セキュリティの脅威に関する調査報告書2023年度版」)。
不正アクセスが発生すると、以下のような深刻な被害につながる可能性があります。
- サーバーの乗っ取り(root権限の奪取)
- データの改ざんや削除
- マルウェアのインストール(ボットネットへの加入など)
- 内部ネットワークへの侵入拡大
- 法的責任や信用の失墜
これらのリスクを最小限に抑えるためには、不正アクセスを早期に検知し、迅速に対応する仕組みが不可欠です。本記事では、Linux環境で実践できる不正アクセス検知の基本的な方法を、具体的な手順と共に解説します。SSHログの確認から、自動ブロックツールの導入、さらには侵入検知システム(IDS)の活用まで、実務で即活用できる内容となっています。
本記事で紹介する手法は、いずれもオープンソースのツールを活用したものです。導入コストが低く、Linuxサーバーであればすぐに実践できる内容ですので、ぜひ参考にしてください。
SSHログを確認して不正アクセスの兆候を掴む
Linuxシステムにおける不正アクセスの検知は、まずログの監視から始まります。SSHサーバー(sshd)は、接続元IPアドレス、ユーザー名、認証の成否など、接続に関する詳細なログを記録します。これらのログを定期的に確認することで、不正アクセスの兆候を早期に発見できます。
auth.logまたはsecureログの見方
Linuxの多くのディストリビューションでは、SSHログは以下のファイルに記録されます。
- Debian系(Ubuntuなど):
/var/log/auth.log - RHEL系(CentOS、Rocky Linuxなど):
/var/log/secure
これらのログファイルを確認するには、以下のコマンドを実行します。
sudo tail -n 50 /var/log/auth.log # Debian系
sudo tail -n 50 /var/log/secure # RHEL系
ログの形式は以下のようになります。
Jan 15 10:23:45 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 22 ssh2
このログの各フィールドの意味は以下の通りです。
| フィールド | 内容 | 例 |
|---|---|---|
| 日付 | ログの発生日時 | Jan 15 10:23:45 |
| ホスト名 | ログを記録したサーバー名 | server |
| プロセス名 | ログを記録したプロセス(sshd)とPID | sshd[12345] |
| メッセージ | ログの内容 | Failed password for invalid user admin from 192.168.1.100 port 22 ssh2 |
不正アクセスの兆候となるログパターン
SSHログを確認する際に、以下のようなパターンが見つかった場合は、不正アクセスの兆候である可能性が高いです。
| パターン | 説明 | 具体例 |
|---|---|---|
| 連続した認証失敗 | 短時間に複数回の認証失敗が発生している | Failed password for root from 192.168.1.100 port 22 ssh2(5分間に10回) |
| 無効なユーザー名 | 存在しないユーザー名でのログイン試行 | Failed password for invalid user admin from 192.168.1.100 port 22 ssh2 |
| rootユーザーでのログイン | rootユーザーでのログインはセキュリティリスクが高い | Accepted password for root from 192.168.1.100 port 22 ssh2 |
| 異常な接続元IP | 普段接続しない国や地域からの接続 | Accepted password for user from 185.143.223.45 port 22 ssh2 |
| ポートスキャンの兆候 | 複数のポートへの接続試行 | Connection closed by 192.168.1.100 port 12345 [preauth] |
これらのパターンを自動的に検知するためには、後述するログ監視ツールの導入が効果的です。
ログ監視の自動化ツール
手動でログを確認するだけでは、不正アクセスの兆候を見逃す可能性があります。そこで、以下のような自動化ツールを活用することを推奨します。
| ツール名 | 概要 | 導入方法 |
|---|---|---|
| logwatch | 毎日または毎週、ログのサマリーをメールで送信するツール | sudo apt install logwatch(Debian系) sudo yum install logwatch(RHEL系) |
| goaccess | リアルタイムでSSHログを可視化するWebベースのツール | sudo apt install goaccess(Debian系) sudo yum install goaccess(RHEL系) |
| ELK Stack(Elasticsearch, Logstash, Kibana) | 大規模なログ収集・分析・可視化を実現するツール群 | 各ツールを個別にインストールし、連携させる |
例えば、goaccessを使ってSSHログを可視化するには、以下のコマンドを実行します。
sudo goaccess /var/log/auth.log --log-format=SSH
これにより、以下のようなリアルタイムのダッシュボードが表示され、不正アクセスの兆候を視覚的に確認できます。
- 接続元IPアドレスのランキング
- 認証成功・失敗の割合
- ユーザー名の使用頻度
- 接続元国の分布
ログ監視を自動化することで、不正アクセスの兆候を迅速に発見し、対応につなげることができます。
fail2banで自動的に不正アクセスをブロックする
SSHログを監視するだけでは、不正アクセスを完全に防ぐことはできません。そこで、fail2banを活用して、不正アクセスを自動的にブロックする仕組みを構築します。fail2banは、SSHログを監視し、一定回数の認証失敗が発生したIPアドレスを自動的にファイアウォールでブロックします。
fail2banの仕組みとメリット
fail2banは、以下のような仕組みで不正アクセスをブロックします。
- SSHログ(auth.logまたはsecure)を監視する
- 一定回数の認証失敗(デフォルトは3回)が発生したIPアドレスを検知する
- iptablesまたはfirewalldを使って、該当IPアドレスを一時的にブロックする
- 一定時間(デフォルトは10分)経過後にブロックを解除する
fail2banを導入するメリットは以下の通りです。
- 自動的に不正アクセスをブロックするため、手動での対応が不要
- ブルートフォース攻撃を効果的に防止できる
- ファイアウォールの設定を変更するだけでなく、自動的に元に戻すため、誤検知のリスクが低い
- SSHだけでなく、Apache、Nginx、Postfixなど、他のサービスにも適用可能
fail2banのインストールと初期設定
fail2banのインストールは、パッケージマネージャーを使って簡単に行えます。
Debian系(Ubuntu、Debian)の場合:
sudo apt update
sudo apt install fail2ban
RHEL系(CentOS、Rocky Linux、AlmaLinux)の場合:
sudo dnf install epel-release
sudo dnf install fail2ban
インストールが完了したら、fail2banを起動し、自動起動の設定を行います。
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
fail2banのステータスを確認するには、以下のコマンドを実行します。
sudo systemctl status fail2ban
fail2banの設定ファイルのカスタマイズ
fail2banの設定ファイルは、主に以下の2つのファイルで構成されています。
/etc/fail2ban/jail.conf:メインの設定ファイル/etc/fail2ban/jail.local:カスタム設定を記述するファイル(jail.confを上書きしない)
デフォルトの設定では、SSH(ポート22)に対してfail2banが有効になっています。しかし、よりセキュアな設定にカスタマイズすることを推奨します。jail.localファイルを作成し、以下の内容を記述します。
[DEFAULT]
ブロックするIPアドレスの保持期間(秒)
bantime = 1h
認証失敗と判定するまでの回数
maxretry = 3
認証失敗と判定するまでの時間(秒)
findtime = 10m
監視するログファイル
logpath = /var/log/auth.log
監視するサービス
enabled = true
[sshd]
SSHサービスに対するfail2banの設定
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
設定を変更した後は、fail2banを再起動します。
sudo systemctl restart fail2ban
fail2banの設定を確認するには、以下のコマンドを実行します。
sudo fail2ban-client status sshd
これにより、現在ブロックされているIPアドレスのリストが表示されます。
fail2banの動作確認とログ解析
fail2banが正しく動作しているかどうかを確認するためには、以下の手順を実行します。
- テスト用のIPアドレスをブロックする
- ファイアウォールのルールを確認する
- fail2banのログを確認する
sudo fail2ban-client set sshd banip 192.168.1.100
sudo iptables -L -n | grep 192.168.1.100
sudo tail -f /var/log/fail2ban.log
fail2banのログには、以下のようなエントリが記録されます。
2024-01-15 12:34:56,123 fail2ban.actions: NOTICE [sshd] Ban 192.168.1.100
これにより、fail2banが正しく動作していることが確認できます。
fail2banを導入することで、SSHへのブルートフォース攻撃を効果的に防止できます。しかし、fail2banだけに依存するのではなく、SSHサーバー自体のセキュリティ設定(後述)と組み合わせることで、より強固なセキュリティを実現できます。
侵入検知システム(IDS)で高度な不正アクセスを検知する
fail2banは主にブルートフォース攻撃の検知とブロックに特化していますが、より高度な不正アクセス(例えば、既知の脆弱性を悪用した攻撃や、内部からの不正な挙動)を検知するためには、侵入検知システム(IDS)の導入が効果的です。IDSは、システムの挙動やログをリアルタイムで監視し、異常な活動を検知します。
OSSECの概要と導入メリット
OSSECは、オープンソースのホスト型侵入検知システム(HIDS)です。以下のような機能を提供します。
- リアルタイムのログ監視と異常検知
- ファイルの改ざん検知
- ルートキット検知
- システムコールの監視
- アラートの送信(メール、Slack、Syslogなど)
OSSECを導入するメリットは以下の通りです。
- SSHだけでなく、システム全体のセキュリティを監視できる
- 既知の攻撃パターン(シグネチャ)に基づく検知が可能
- ファイルの改ざんを検知し、システムの整合性を保護できる
- 柔軟なカスタマイズが可能
OSSECのインストール手順
OSSECのインストールは、公式のインストーラーを使って簡単に行えます。以下の手順は、Debian系(Ubuntu)およびRHEL系(CentOS)でのインストール方法です。
Debian系(Ubuntu、Debian)の場合:
# 必要なパッケージをインストール
sudo apt update
sudo apt install -y build-essential libssl-dev
OSSECをダウンロードしてインストール
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar -zxvf 3.7.0.tar.gz
cd ossec-hids-3.7.0
sudo ./install.sh
インストール時に表示される質問には、以下のように回答します。
--- OSSEC HIDS v3.7.0 Installation Start ---
Please provide the installation path [/var/ossec]:
- Press ENTER to continue or type a different path: [/var/ossec]
Do you want e-mail notification? (y/n) [y]: n
Do you want to run the integrity check daemon? (y/n) [y]: y
Do you want to run the rootkit detection engine? (y/n) [y]: y
- Press ENTER to continue or type a different path: [/var/ossec/logs/active-responses.log]
RHEL系(CentOS、Rocky Linux、AlmaLinux)の場合:
# 必要なパッケージをインストール
sudo dnf install -y gcc make openssl-devel
OSSECをダウンロードしてインストール
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar -zxvf 3.7.0.tar.gz
cd ossec-hids-3.7.0
sudo ./install.sh
インストールが完了したら、OSSECを起動します。
sudo systemctl enable ossec
sudo systemctl start ossec
OSSECのステータスを確認するには、以下のコマンドを実行します。
sudo systemctl status ossec
OSSECの基本設定とルールカスタマイズ
OSSECの設定ファイルは、/var/ossec/etc/ossec.confにあります。このファイルを編集することで、監視対象やアラートルールをカスタマイズできます。
例えば、SSHログの監視を強化するには、以下の設定を追加します。
<localfile>
<log_format>syslog</log_format>
<location>/var/log/auth.log</location>
</localfile>
また、アラートの送信先を設定するには、以下の設定を追加します。
<global>
<email_notification>no</email_notification>
<alerts_log>yes</alerts_log>
<log_alert_level>3</log_alert_level>
</global>
OSSECのルールは、/var/ossec/rules/ディレクトリに保存されています。例えば、SSHのブルートフォース攻撃を検知するルールは、sshd_rules.xmlに定義されています。
ルールをカスタマイズするには、/var/ossec/etc/rules/local_rules.xmlファイルを作成し、以下のようなルールを追加します。
<group name="sshd,authentication_failed">
<rule id="1001" level="10">
<if_sid>5503</if_sid>
<match>Failed password</match>
<description>SSH authentication failed.</description>
</rule>
</group>
設定を変更した後は、OSSECを再起動します。
sudo systemctl restart ossec
OSSECによるリアルタイム監視とアラート設定
OSSECは、リアルタイムでシステムの監視を行い、異常が検知されるとアラートを送信します。アラートは、以下の方法で確認できます。
- ログファイルの確認
- メールアラートの設定(任意)
- SlackやSyslogへのアラート送信(任意)
sudo tail -f /var/ossec/logs/alerts/alerts.log
メールアラートを有効にするには、/var/ossec/etc/ossec.confファイルを編集し、以下の設定を追加します。
<global>
<email_notification>yes</email_notification>
<email_to>admin@example.com</email_to>
<smtp_server>smtp.example.com</smtp_server>
<smtp_port>587</smtp_port>
<smtp_username>user@example.com</smtp_username>
<smtp_password>password</smtp_password>
</global>
SlackやSyslogへのアラート送信を設定するには、/var/ossec/etc/ossec.confファイルを編集し、以下の設定を追加します。
<integration>
<name>slack</name>
<hook_url>https://hooks.slack.com/services/XXX/YYY/ZZZ</hook_url>
<level>12</level>
<group>sshd,authentication_failed</group>
</integration>
OSSECを導入することで、SSHだけでなく、システム全体のセキュリティを包括的に監視できます。fail2banと組み合わせることで、より強固なセキュリティ体制を構築できます。
SSHサーバー自体のセキュリティを強化する
不正アクセスを検知するだけでなく、SSHサーバー自体のセキュリティを強化することが重要です。SSHサーバーの設定を最適化することで、攻撃のリスクを大幅に低減できます。以下では、SSHサーバーのセキュリティを強化する具体的な方法を解説します。
sshd_configのセキュリティ設定
SSHサーバーの設定ファイルである/etc/ssh/sshd_configを編集することで、セキュリティを強化できます。以下は、推奨される設定項目の一覧です。
| 設定項目 | 推奨値 | 説明 |
|---|---|---|
| PermitRootLogin | prohibit-password | rootユーザーでの直接ログインを禁止し、公開鍵認証のみ許可する |
| PasswordAuthentication | no | パスワード認証を無効化し、公開鍵認証のみを許可する |
| ChallengeResponseAuthentication | no | チャレンジレスポンス認証を無効化する |
| UsePAM | no | PAM(Pluggable Authentication Modules)を無効化する |
| MaxAuthTries | 3 | 認証試行回数の上限を3回に制限する |
| LoginGraceTime | 60 | ログイン猶予時間を60秒に制限する |
| ClientAliveInterval | 300 | クライアントからの応答がない場合、接続を切断するまでの時間を300秒に設定する |
| ClientAliveCountMax | 2 | クライアントからの応答がない場合、接続を切断するまでの最大試行回数を2回に設定する |
| X11Forwarding | no | X11フォワーディングを無効化する |
| AllowTcpForwarding | no | TCPポートフォワーディングを無効化する |
| PermitEmptyPasswords | no | 空のパスワードでのログインを禁止する |
| StrictModes | yes | 厳格なモードを有効化し、ファイルのパーミッションをチェックする |
これらの設定を適用するには、/etc/ssh/sshd_configファイルを編集し、以下のコマンドでSSHサーバーを再起動します。
sudo systemctl restart sshd
注意事項:設定を変更する前に、必ずバックアップを取得してください。また、設定を変更した後は、新しい接続で正常にログインできることを確認してから古い接続を切断してください。
SSHポートの変更とファイアウォール設定
SSHサーバーはデフォルトでポート22を使用しますが、このポートを変更することで、攻撃のリスクを低減できます。ポートを変更するには、/etc/ssh/sshd_configファイルに以下の設定を追加します。
この記事で学んだスキルをさらに深めたい方へ
Linuxの知識をさらに深めたい方はこちらの技術書がおすすめです。コマンドラインからサーバー管理まで網羅しています。
Amazonアソシエイトプログラムを利用しています。
ABOUT ME




