В Apache, как отключить доступ к веб-сайту, когда кто-то использует только IP-адрес в веб-браузере?

8

Я использую веб-сервер apache в CentOS, и мне нужно отключить возможность доступа людей к веб-сайту с помощью IP-адреса сервера в веб-браузере. Я хочу, чтобы, когда кто-то пытается перейти по IP-адресу, он получал запрещенное сообщение об ошибке.

Какие конфигурации были бы необходимы для этого?

Амр Эльхедевы
источник

Ответы:

10

Просто установите виртуальный хост по умолчанию. Есть закомментированный пример httpd.confили сделайте что-нибудь тривиальное, как:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Майкл Хэмптон
источник
Ну, это решило мою проблему .. большое спасибо вам всем :)
Amr Elkhedewy
7

Этого можно добиться с помощью mod_rewrite (либо в .htaccessфайле, либо в контексте сервера по умолчанию, либо в отдельном VirtualHost, где ServerNameIP-адрес хоста):

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

Это говорит о том, что если заголовок HTTP_HOST совпадает с IP-адресом 1.2.3.4, то любой запрос должен быть удовлетворен с помощью 403 Forbidden. На любой запрос, имеющий другой заголовок HTTP_HOST (например, запрос с фактическим доменным именем, а не IP-адресом), это не должно повлиять.

Дженни Д
источник
Это не сработало в httpd.conf
Amr Elkhedewy
он работал через файл .htaccess, мне нужно сделать это из конфигураций Apache.
Amr Elkhedewy
2
Вы перезапустили apache после редактирования httpd.conf? В противном случае apache не будет знать о новой конфигурации. Это отличается от .htaccess, который также анализируется без перезапуска apache.
etagenklo
Конечно, но ничего не изменилось
Amr Elkhedewy
1

Вы не можете заблокировать прямой доступ по IP. Вы должны разрешить соединение, но затем решить, что с ним делать. Это может быть возвращение 403, 404 или перенаправление их на нужную страницу. Вы можете сделать это с помощью mod_rewrite.

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

Это будет соответствовать заголовку HTTP HOST, переданному веб-клиентом. Все остальные запросы пройдут.

Тем не менее, вы можете нормализовать свои URL-адреса для целей SEO.

При таком подходе вы переписываете все, что не соответствует желаемому результату.

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

Ссылка: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Ссылка: http://en.wikipedia.org/wiki/URL_normalization

jeffatrackaid
источник
Это не сработало в httpd.conf
Amr Elkhedewy
он работал через файл .htaccess, мне нужно сделать это из конфигураций Apache.
Amr Elkhedewy
Он будет работать в httpd.conf, но обязательно включите механизм перезаписи и поместите его в директивы вашего виртуального хоста. В противном случае он будет применяться только к вашему серверу по умолчанию. См .: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

Это решение не охватывает все случаи.

Замените любое число или точку в URL-адресе IP его% ##, например, 1 на% 31 ... 8 на% 38, и вы получите IP, а не URL-адрес домена.

Предположим, это плохой IP, используемый для облегчения объяснения: 123.45.6.789

Вы должны использовать 2 варианта для всех цифр и точек: точка - это% 2E, а 0..9 - это% 30 ..% 39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

Уродливо, его можно уменьшить с помощью {1,3} и ограничить допустимым IP-адресом, но, как и для вашего IP-адреса, делать это не нужно.

Не забудьте порты типа ": 80". HTTP_HOST содержит его, а SERVER_NAME не является надежным.

шицз-Нк
источник