Apache Web Server Modules

リバースプロキシを通したアクセスや、シングルサインオンなどでリダイレクトとかやっているときにHTTPのヘッダ情報などの内部変数を知りたいときがありますが(デバッグ情報表示 /dinfo)、それを自前モジュールで表示できるようにしてみました。表示するだけでは物足りないので、Coolkieを使った簡単な認証もしてみました(/dauth)。(セキュリティ的にはNG)
Webページ、Webアプリを一切作成せず、Cのコードだけを用いて実装し、Apacheモジュールの動きの確認をしました。

ちなみにApacheの話題はなんと8年ぶりです。

Apache mod_security2

環境) Apache 2.4.41 / Ubuntu 20.04

インストール)

sudo apt install apache2 apache2-dev

モジュールスケルトンプログラムの作成・インストール

$ apxs -g -n dinfo
Creating [DIR] dinfo
Creating [FILE] dinfo/Makefile
Creating [FILE] dinfo/modules.mk
Creating [FILE] dinfo/mod_dinfo.c
Creating [FILE] dinfo/.deps
$ cd dinfo
$ make
$ sudo make install

$ ls /usr/lib/apache2/modules/mod_dinfo*
/usr/lib/apache2/modules/mod_dinfo.so

モジュール定義ファイルの作成・有効化

$ cat /etc/apache2/mods-available/dinfo.load
LoadModule dinfo_module /usr/lib/apache2/modules/mod_dinfo.so
$ cat /etc/apache2/mods-available/dinfo.conf

SetHandler dinfo

$ sudo a2enmod dinfo
$ sudo service apache2 restart

上記同様にmod_dauthについても行います。

$ cat /etc/apache2/mods-available/dauth.load
LoadModule dauth_module /usr/lib/apache2/modules/mod_dauth.so
$ cat /etc/apache2/mods-available/dauth.conf

SetHandler dauth

モジュールのコードを修正するたびに、make installとapache2 restartをします。

mod_dinfo.c

mod_dauth.c

(curlで表示させるときのために<br>とともに改行コードを追加しておく)

passはパスワードを想定していますが、まずは間違ったパスワードでアクセスします。

そして/dinfoにアクセスするとFobiddenになります。

次に正しいパスワードでアクセスします。

デバッグ情報が表示されます。

既存ページのアクセス時にこのような情報を表示したい場合は、dinfo_handler関数の最後の”return OK”を”return DECLINED”に変更します。これにより次のモジュールの処理にうつることができます。
下記のようにページを作成しておくと、続いて表示されます。

$ cat /var/www/html/dinfo/page.html
<h3>Web Page</h3>

モジュールの理解を深めるためのメモでした。

参考)
「手軽に出来るApacheモジュール開発」
https://blog.asial.co.jp/715
「apacheのモジュールを作ってみる」
https://qiita.com/saoyagi2/items/7fd374851a36fa671b17