Я недавно установил виртуальный сервер на linode (debian 7) и хотел бы заблокировать доступ к установке virtualmin через любой домен, кроме указанного.
В настоящее время я могу получить доступ к virtualmin через URL-адрес члена linode (например, example1234.members.linode.com:10000), но я также могу получить к нему доступ через домены, размещенные на сервере.
Как я могу заблокировать эти домены?
Отказ от ответственности:
Это решение протестировано в этом 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. Другими словами, Virtualmin работает поверх Webmin. Сам Webmin использовать miniserv.pl в качестве веб-сервера. Итак, если вы хотите узнать, как ограничить на основе заголовка Host, вам следует откопать его в miniserv.pl
Итак, у нас есть плохие новости и хорошие новости. Плохая новость в том, что этот веб-сервер имеет только базовую функцию по сравнению с другими сложными веб-серверами, такими как nginx или apache. Хорошая новость в том, что он был написан на Perl - языке сценариев - и содержался в одном файле. /usr/share/webmin/miniserv.pl
. Этот веб-сервер имеет файл конфигурации в /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");
}
}
Хорошо, эти строки говорят нам:
Допустим, запрос пришел на miniserv.pl с все эти условия были выполнены
musthost
был определен в miniserv.conf
musthost
то запрос должен быть отклонен с ошибкой 400 Неверное имя хоста HTTP. Да, это именно то, что вам нужно.
Итак, если вы хотите ограничить домен для доступа к интерфейсу virtualmin, вы должны установить параметр musthost в miniserv.conf
с разрешенным доменом.
Ноты:
Некоторая проблема:
Этот веб-сервер работает в режиме SSL. Попробуйте URL https: //your.allowed.domain: 10000 / вместо.
Обновить:
Вторую проблему можно предотвратить, исправив файл miniserv.pl
с патчем из ОП. Патч будет доступен через запрос на включение github (кредит ОП !!!). Будущий webmin также имеет эту функцию, поскольку webmin уже принять запрос на перенос :)