Apache を利用していることを隠す(私家版パッケージの作成方法 – Debian)

Apache では、ServerTokens や ServerSignature の設定で、HTTP ヘッダ上に出力される、Apache のバージョン、OS 名を出力しないように制御出来ます。しかし、ServerSignature Off にしても、製品名(Apache)については、どうしても出力されてしまいます。
(確認例)


$ telnet 192.168.0.1 80
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 31 Dec 2999 23:59:59 GMT
Server: Apache
Last-Modified: Sun, 31 Dec 2999 23:59:59 GMT
ETag: "2c075-b4a-3cb3397a"
Accept-Ranges: bytes
Content-Length: 2929
Connection: close
Content-Type: text/html

Connection closed by foreign host.

攻撃者に有用な情報を与えない対策としては、これで十分かもしれませんが、世の中には色々な事情があります。この製品名を変更する場合は、ソースからリビルドするしか方法がありません。
ここでは、Apache の製品名を変更した上で、Debian 用のパッケージをビルドする方法を備忘録までに残しておきます。
※私家版のパッケージを利用する上では、バージョン管理が煩雑になったりするなどのデメリットを、あらかじめ理解して作業してください。


今回は、Debian GNU/Linux 5.0.2 (lenny)をインストールした直後の状態での作業になります。(SSH や sudo などの基本的な設定作業は行った状態です)
最初に、パッケージのリビルドに必要なパッケージをインストールします。


$ sudo aptitude install dpkg-dev build-essential debhelper devscripts dpatch libaprutil1-dev libapr1-dev libpcre3-dev libssl-dev sharutils hardening-wrapper sharutils

次に、作業用のディレクトリを切ります。


$ mkdir -p ~/src/apache2/
$ cd ~/src/apache2/

apt-get でソースを取得してきます。自動的に解凍されます。


$ sudo apt-get source apache2
$ cd apache2-2.2.9/

今回の作業の目的である製品名を修正します。


$ sudo vi include/ap_release.h

(変更前)


#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
#define AP_SERVER_BASEPRODUCT "Apache"

(変更後)


#define AP_SERVER_BASEVENDOR "HOGE Software Foundation"
#define AP_SERVER_BASEPROJECT "HOGE HTTP Server"
#define AP_SERVER_BASEPRODUCT "HOGE"

必要に応じて、debchangeコマンドで、バージョン変更とchangelogの変更を記述し、debuildコマンドで、ビルドとパッケージの再構成を行います。


$ sudo debchange -i
$ sudo debuild -b -us -uc

リビルドには時間がかかります(具体的な時間は環境にもよります)。エラーでとまった場合は、パッケージが足りない場合があります。最近は、何が足りないのか、エラーに出力される良い時代なので、それを参考に、apt-get などして、再度リビルドしてみてください。


Finished running lintian.

あとは、sudo dpkg -i apache2-mpm-worker_2.2.9-10+lenny4_i386.deb とかで、インストールすれば OK。先にも述べましたが、上位バージョンが出た場合、今回インストールしたパッケージに上書きされてしまいます。これを抑止するためには、インストールしたパッケージのバージョンに固定するように設定する必要があります。
方法としては、現在入れたパッケージにPinを設定して、そのバージョンに固定するという方法になります。


$ sudo vi /etc/apt/preferences

(設定例)


Package: apache2-mpm-worker
Pin: version 2.2.9-10+lenny4
Pin-Priority: 989

| コメントは受け付けていません。 | tech