
01. Overview — 制作概要
制作背景
AWS上に構築した個人ポートフォリオサイトを公開・運用するにあたり、Webサイトを構築するだけでなく、セキュリティを考慮した運用環境を整備したいと考えました。
特にWordPressは管理画面を通じてサイトの更新や設定変更を行うため、管理画面へのアクセス状況を把握し、不審なアクセスを早期に検知できる仕組みが重要だと考えました。
そこで、既存のAWS環境を活用し、アクセス制御・ログ記録・異常検知・メール通知を一連の処理として実装しました。
制作目的
- WordPress管理画面へのアクセスを制御する
- 管理画面へのアクセスやログイン操作を記録する
- Apacheのアクセスログから不審なアクセスを検知する
- 異常検知時にGmailへ通知する
- systemd timerを利用して監視処理を自動化する
02. System Architecture — システム構成
本システムは、AWS EC2上で稼働するWordPress環境に、独自のセキュリティ監視機能を追加した構成です。
Amazon Linux上でApache・PHP・WordPressを稼働させ、WordPressのアクセス制御機能とApacheのアクセスログ監視処理を組み合わせています。
監視処理はPHPで実装し、systemdのserviceとtimerによって定期的に実行する構成としました。
異常なアクセスを検知した場合は、SMTPを利用してGmailへ通知します。

03. Features — 実装した機能
01. WordPress管理画面へのアクセス制御
WordPress管理画面へのアクセスに対して、接続元IPアドレスによるアクセス制御を実装しました。
許可されたIPアドレスからは管理画面にアクセスできる一方、許可していないIPアドレスからのアクセスはHTTP 403で拒否する仕組みとしています。
これにより、管理画面へのアクセスを制限するとともに、許可外IPからのアクセスを監視できるようにしました。
02. 管理画面へのアクセス記録
WordPress管理画面へのアクセス情報を記録する機能を実装しました。
アクセス元IPアドレス、アクセス元の分類、アクセス日時などを取得し、管理画面へのアクセス状況を確認できるようにしています。
また、ログイン成功・失敗などのイベントを記録する処理も組み込みました。
03. Apacheアクセスログの監視
Apacheのアクセスログを読み取り、WordPress管理画面へのアクセスを検知するPHPスクリプトを開発しました。
アクセス先のパスやHTTPステータスコードなどを確認し、監視対象となるアクセスを検知する構成としています。
04. Gmailへの自動通知
監視処理で検知したイベントを、SMTP経由でGmailへ通知する機能を実装しました。
通知には、イベントの種類に応じてINFOとWARNINGの区分を設けています。
INFO通知
許可されたIPアドレスからWordPress管理画面へのアクセスが発生した際に通知します。
実際に受信したメールでは、以下の情報を確認できました。
- Event:ADMIN_ACCESS
- IP Type:OWNER
- Source IP:アクセス元IPアドレス
- Time:アクセス日時(UTC)
WARNING通知
外部IPアドレスからWordPress管理画面へのアクセスを検知した際に通知します。
実際に受信したメールでは、以下の情報を確認できました。
- External access detected
- Source IP:外部アクセス元IPアドレス
- Path:/wordpress/wp-admin/
- HTTP Status:403
- Detected At:検知日時(UTC)
これにより、サーバーにログインしてログを確認しなくても、管理画面へのアクセス状況をGmailから把握できるようになりました。
05. systemdによる監視処理の自動化
監視処理を継続的に実行するため、systemdのserviceとtimerを設定しました。
これにより、PHPの監視スクリプトを定期実行できる構成としています。
また、監視処理をserviceとして管理することで、Linuxの標準的な管理コマンドを使用して実行状態を確認できるようにしました。

04. Development Process — 構築の流れ
STEP 01. セキュリティ要件の整理
最初に、WordPressを安全に運用するために必要な機能を整理しました。
管理画面へのアクセス制御、アクセスログの記録、不審なアクセスの検知、メール通知、自動実行の5つを主要な要件としました。
STEP 02. WordPress管理画面のアクセス制御
WordPressの処理にアクセス制御機能を追加しました。
接続元IPアドレスを確認し、許可されたIPアドレス以外からの管理画面へのアクセスを拒否する処理を実装しました。
STEP 03. アクセス・ログイン記録の実装
WordPress管理画面へのアクセスやログインイベントを記録する機能を追加しました。
アクセス元IPアドレスや日時などの情報を取得することで、アクセス状況を後から確認できるようにしました。
STEP 04. Apacheログ監視スクリプトの開発
Apacheのアクセスログを監視するPHPスクリプトを作成しました。
ログに記録されたアクセス先やHTTPステータスコードをもとに、管理画面へのアクセスを検知する仕組みを実装しました。
STEP 05. SMTPによるGmail通知の実装
検知したイベントをメールで受け取れるように、SMTPによる通知処理を追加しました。
通常の管理画面アクセスと外部アクセスを区別し、INFO・WARNINGの通知を送信できるようにしました。
STEP 06. systemd timerによる定期実行
監視処理を自動化するため、systemd serviceとtimerを設定しました。
手動実行に依存せず、定期的にApacheのアクセスログを監視できる構成としました。
STEP 07. 監視スクリプトの改修(v2)
初期実装後、監視処理の継続性を考慮して改修を実施しました。
Apacheのログローテーションへの対応などを追加し、監視処理を改善しました。
改修時には既存スクリプトのバックアップを取得し、更新前の状態に戻せるようにしたうえで切り替えを行いました。

05. Testing & Results — 動作確認と実装結果
今回のシステムでは、実際に管理画面へのアクセスを発生させ、Gmailへ通知が届くことを確認しました。
Test 01. 通常の管理画面アクセス
許可されたIPアドレスからWordPress管理画面にアクセスし、アクセスイベントが記録・通知されることを確認しました。
検証結果:INFO通知の受信に成功

受信したメールには、イベント名「ADMIN_ACCESS」、IP種別「OWNER」、アクセス元IPアドレス、アクセス日時が記録されていました。
これにより、通常の管理画面アクセスを検知し、メールで通知できることを確認しました。
Test 02. 外部IPからの管理画面アクセス
許可していない外部IPアドレスからWordPress管理画面へのアクセスを発生させ、アクセス制御と通知処理を確認しました。
検証結果:WARNING通知の受信に成功

受信したメールには、外部アクセスの検知メッセージ、アクセス元IPアドレス、アクセス先パス、HTTPステータスコード403、検知日時が記録されていました。
これにより、許可外IPからのアクセスが拒否されたことを示すログ情報を取得し、Gmailへ通知できることを確認しました。
Test 03. 監視処理の自動実行
systemd timerによって監視スクリプトを定期実行できる構成を実装しました。
serviceとtimerを分離することで、監視処理の実行とスケジュール管理を行えるようにしています。
実装結果
今回の構築により、WordPress管理画面へのアクセス制御から、ログ監視、イベント検知、メール通知までを連携させることができました。
特に、通常アクセスと外部アクセスの両方について、実際にGmailへ通知が届くことを確認できた点が成果です。
06. Challenges & Improvements — 課題と改善
継続的なログ監視への対応
Apacheのアクセスログは、ログローテーションによってファイルが切り替わる場合があります。
そのため、監視処理がログファイルの更新や切り替えによって影響を受けないように、監視スクリプトの改修を行いました。
運用を考慮したスクリプト更新
監視スクリプトの更新時には、既存ファイルをバックアップしてから改修版に切り替える手順を採用しました。
これにより、更新作業による影響を抑えながら、監視機能の改善を進められるようにしました。
07. What I Learned — 制作を通して学んだこと
今回の制作を通して、AWS上にWebサイトを構築するだけでなく、安全に運用するための仕組みを設計・実装する経験ができました。
特に、WordPressによるアクセス制御、Apacheのログ監視、PHPによる検知処理、SMTPによる通知、systemdによる定期実行など、複数の技術を連携させて一つの監視システムを構築した点が大きな学びとなりました。
また、実際のアクセスイベントを発生させて通知内容を確認することで、実装した機能が想定どおりに動作するかを検証する重要性を学びました。
今後は、監視対象の拡張や通知条件の最適化、ログの可視化などに取り組み、AWSサービスを複数組み合わせ、より実用的なセキュリティ監視システムへ発展させていきたいと考えています。