Я обнаружил (просматривая записи кеша mod_pagespeed), что совершенно случайный домен, о котором я никогда раньше не слышал, разрешается на мой веб-сайт.
Если я захожу в этот домен, мой сайт загружается. DNS для этого домена указывает на IP моего сервера.
Прямо сейчас в моей конфигурации vhost у меня *: 80, и я предполагаю, что я ошибаюсь.
Я немедленно изменил это на example.com:80, где example.com - мой домен. Предполагая, что это будет означать, что сервер будет отвечать и выполнять запросы только для моего доменного имени, а не любой запрос на порт 80.
Моя оригинальная конфигурация vhost;
<VirtualHost *:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
Моя новая проверенная конфигурация;
Listen 80
ServerName example.com
<VirtualHost example.com:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
Когда я попытался перезапустить apache с новой конфигурацией, я получил следующую ошибку:
* Restarting web server apache2 [Fri Mar 28 08:55:47.821904 2014] [core:error] [pid 5555] (EAI 2)Name or service not known: AH00549: Failed to resolve server name for 152.155.254.241 (check DNS) -- or specify an explicit ServerName
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Примечание. IP-адрес, начинающийся со 152 в указанной выше ошибке, был немного отредактирован, но исходный IP-адрес в любом случае не был IP-адресом моего сервера.
Кто-нибудь может дать совет по этому поводу? Является ли домен (на самом деле есть пара), который невинно разрешает мой веб-сайт, всего лишь предыдущим пользователем выделенного сервера, чей DNS просто все еще указывает на него? Как я могу решить проблему с конфигурацией виртуального хоста apache, и любые другие советы приветствуются.
Спасибо.
Вероятно, нет ничего плохого в том, чтобы эти другие домены указывали на ваш хост, за исключением, конечно, увеличения нагрузки на ваш сервер. Если вы хотите заблокировать их, настройте для них новые виртуальные хосты:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
# example.com configuration
</VirtualHost>
<VirtualHost *:80>
ServerName baddomain.com
Deny from all
</VirtualHost>
Вместо того Deny from all
вы могли бы использовать Redirect permanent /error.html
чтобы показать им собственное сообщение об ошибке.
Вы можете повторить второй VirtualHost для каждого домена, который хотите заблокировать, или, если их много, поместите его первым, чтобы сделать его VirtualHost по умолчанию, и сделать исключения для вашего домена (ов):
NameVirtualHost *:80
<VirtualHost *:80>
# default VirtualHost
Deny from all
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
# example.com config
</VirtualHost>
Что касается ваших сообщений об ошибках, похоже, что Apache не смог разрешить имя хоста example.com при запуске или не смог найти ваш ServerName
директива. Не знаю почему. Вторая ошибка говорит о том, что порт 80 уже используется на вашем хосте. Вы завершили работу всех предыдущих экземпляров Apache?
Что касается того, «откуда, черт возьми, это другое имя для моего веб-сайта?», Любой может поместить любую запись A, которая ему нравится, на любое имя под доменом, который они контролируют. Вы можете немного исследовать, используя whois
чтобы узнать, кто зарегистрировал домен второго уровня, содержащий неправильное DNS-имя.
Apache по умолчанию служит для первого определяемого вами домена.
Если вы хотите обслуживать myowndomain.com с желаемым контентом, а все другие домены - с некоторым поведением (возможно, с перенаправлением на соответствующую страницу в предпочтительном домене), сначала определите «общий» домен, обрабатывайте трафик соответствующим образом (я рекомендую перенаправлять на ваш real domain), а затем определите свой реальный домен и т. д. с последующими VirtualHosts.
Лучше всего, если вы действительно хотите, чтобы случайные домены не указывались на ваш веб-сайт, вероятно, как ответил Эндрю Шульман и прокомментировал BeowulfNode42:
Обслуживать vhost по умолчанию. У вас есть несколько вариантов, но для ясности я не рекомендую обслуживать простую страницу с ошибкой, поскольку это может затруднить устранение неполадок позже.
Так, оставьте конфигурацию вашего виртуального хоста как была, но создайте новый виртуальный хост для реального веб-сайта, поменяйте местами каталоги и продолжайте.
Учитывая то, что вы сказали о недавнем захвате сервера, я бы подумал о том, чтобы убедиться (если домен явно не принадлежит вам), что это не какой-то забытый остаток, который нужно исключить из автопродления, или что это не так. часть какого-то проекта, который еще не завершен или был заброшен.
Вы всегда должны сначала ставить VirtualHost по умолчанию, как во втором решении @Andrew Schulman.
Таким образом, вы можете хранить все запросы, не относящиеся к вашему сайту, в разных файлах журналов, используя CustomLog и ErrorLog в конфигурации - вы не хотите, чтобы это отображалось в ваших журналах, если вы используете AWStats или другую программу для создания своей статистики.
Также многие (большинство?) Атак будут приходить на ваш IP-адрес, а не на ваше имя хоста. Опять же, это сохранит ваши настоящие журналы сайта в чистоте и отклонит их прямо с отказом от всех.