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


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

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


8
2018-05-28 14:46


Источник




Ответы:


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

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

10
2018-05-28 17:14



Ну, это решило мою проблему .. большое спасибо за вас всем :) - Amr Elkhedewy


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

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-адрес), не должен подвергаться воздействию.


7
2018-05-28 15:14



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


Вы не можете блокировать прямой доступ по 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


1
2018-05-28 15:16



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


Это решение не распространяется на все случаи.

Замените любое число или точку в 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 не является надежным.


1
2017-09-08 14:02