weblog of key_amb

主にIT関連の技術メモ

LighttpdにおけるRemote IPによるアクセス制御

Apacheでは mod_access モジュールの "Allow from" や "Deny from" ディレクトリで、サーバにアクセスできるクライアントのIPアドレスを制御することができる。

Lighttpdでは url.access-deny と $HTTP["remoteip"] を組み合わせてこれを実現する。
例えば、192.168.0.1以外からはアクセスを禁止するには、以下のように記述する。

# 192.168.0.1以外からはアクセスを禁止
$HTTP["remoteip"] != "192.168.0.1" {
  url.access-deny = ( "" )
}

Apacheではこれは次のように書ける。

Order Deny,Allow
Deny from all
Allow from 192.168.0.1

アクセス許可したいIPが複数あるとき

url.access-deny = () と記述すると、url.access-deny を未定義の状態、即ち全て許可の状態にすることができる。
これを利用して次のように書くと、比較的スマートである。

url.access-deny = ( "" )
$HTTP["remoteip"] == "192.168.0.1" {
  url.access-deny = ()
}
$HTTP["remoteip"] == "172.16.0.1" {
  url.access-deny = ()
}
:

複数のドメインで同じ設定を使う場合には、この記述を外部ファイルに切り出して include ディレクティブを用いるとよい。

参考までに、同じ設定はApacheでは次のように書ける。

Order Deny,Allow
Deny from all
Allow from 192.168.0.1
Allow from 172.16.0.1
: