最近、linode(debian 7)に仮想サーバーをセットアップしましたが、指定されたドメイン以外のドメインを介したvirtualminインストールへのアクセスをブロックしたいと思います。
現在、linodeメンバーのURL(example1234.members.linode.com:10000など)を介してvirtualminにアクセスできますが、サーバーでホストされているドメインを介してアクセスすることもできます。
これらのドメインをブロックするにはどうすればよいですか?
免責事項:
このソリューションは、このWebminおよびVirtualminバージョンでテストされています
# dpkg -l
ii webmin 1.710 all web-based administration interface for Unix systems
ii virtualmin-base 1.0-35 all Meta-package that runs a postinstall script to configure all of the services managed by Virtualmin.
Virtualminはモジュールです Webminと呼ばれるWebベースの管理の。言い換えれば、 VirtualminはWebminの上で実行されています 。 Webmin自体 webserverとしてminiserv.plを使用 。したがって、ホストヘッダーに基づいて制限する方法を知りたい場合は、miniserv.plに掘り下げる必要があります。
ですから、悪いニュースと良いニュースがあります。悪いニュースは、このWebサーバーには、nginxやApacheなどの他の複雑なWebサーバーと比較して基本的な機能しかないことです。幸いなことに、Perl(スクリプト言語)で書かれており、1つのファイル/usr/share/webmin/miniserv.pl
に含まれています。このWebサーバーの構成ファイルは/etc/webmin/miniserv.conf
にあります。残念ながら、miniserv.confのパラメーターに関するドキュメントはかなり限られていました(または、検索に間違ったキーワードを使用している可能性があります:))。
そこで、miniserv.pl
のソースコードを調べることにしました。関心のある行は、このスニペットからのものです。
if (defined($header{'Host'})) {
if ($header{'Host'} =~ /^\[(.+)\]:([0-9]+)$/) {
($Host, $port) = ($1, $2);
}
elsif ($header{'Host'} =~ /^([^:]+):([0-9]+)$/) {
($Host, $port) = ($1, $2);
}
else {
$Host = $header{'Host'};
}
if ($config{'musthost'} && $Host ne $config{'musthost'}) {
# Disallowed hostname used
&http_error(400, "Invalid HTTP hostname");
}
}
OK、これらの行は私たちに教えてくれます:
リクエストがこれらの条件がすべて満たされた状態でminiserv.plに届いたとします
musthost
はminiserv.conf
で定義されましたmusthost
と等しくありませんその場合、リクエストはエラー400無効なHTTPホスト名で拒否されます。 はい、それらの機能はまさにあなたが望んでいたものでした。
したがって、ドメインをvirtualminインターフェースへのアクセスに制限する場合は、許可されたドメインを使用してminiserv.conf
にパラメーターmusthostを設定する必要があります。
注:
いくつかの問題:
このWebサーバーはSSLモードで実行されています。代わりに、URL https://your.allowed.domain:10000 / を試してください。
更新:
2番目の問題は、ファイルminiserv.pl
にOPからのパッチを適用することで防ぐことができます。パッチは github pull request (credit to OP !!!)で利用可能になります。将来のwebminにもこの機能があります。webminはすでに プルリクエストを受け入れる :)