Ограничьте прямой доступ IP к веб-сайту

Сильно зависит от приложения.

Большинство приложений J2EE работает на фермах кластера сервера, где основное обновление приложений может быть сделано с прокручивающимся обновлением. Т.е. выньте один сервер из фермы подсистемы балансировки нагрузки, ожидайте ее работы, чтобы закончить, обновить развертывание EAR, протестировать его, отложить его в lb ферме, вынуть следующее и повторное. Можно потребовать, чтобы отключение электричества сделало обновления схемы базы данных, только удостоверилось непротиворечивость данных. Обновления программного обеспечения базы данных могут обычно делаться без главного отключения электричества, Oracle является одним хорошим примером.

13
задан 22 June 2014 в 21:35
10 ответов

И вуаля, исправление:

<VirtualHost mysite.com:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

NameVirtualHost mysite.com:80
<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UserDir disabled
</VirtualHost>

NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

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

12
ответ дан 2 December 2019 в 21:24

Вы не можете отключить прямой IP-доступ к вашему серверу через HTTPS, потому что имя хоста для вашего виртуального хоста зашифровано внутри сертификата SSL.

Клиенты должны подключаться к вашему IP-адресу, загрузить сертификат , прочтите содержимое, и тогда они смогут проверить правильность имени хоста.

Единственный другой способ - принудительно применить SNI , но это вызовет проблемы для пользователей, которые просматривают старые версии Интернета. Исследователь.

2
ответ дан 2 December 2019 в 21:24

Я думаю, это то, что вы ищете

http://www.htaccess-guide.com/deny-visitors-by-ip-address/

0
ответ дан 2 December 2019 в 21:24
  1. Возможно, ваш сертификат выдан на example.com, а не на 192.168.1.1, и не на оба; Итак, у посетителей, использующих https://192.168.1.1 должна быть ошибка SSL (так как URL отличается от URL сертификата).
  2. У вас нет "стандартного SSL-сайта" SSLEngine на
  3. Для использования SSL-per-hostname (см. Использование нескольких SSL-сертификатов в Apache с одним IP-адресом
1
ответ дан 2 December 2019 в 21:24

Ответ может быть много намного проще.

Просто скопируйте это в нижнюю часть httpd.conf (обычно находится в / etc / httpd / conf)

<VirtualHost *:80>
ServerName localhost
Redirect 403 /
UseCanonicalName Off
UserDir disabled
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

Затем, только когда посетители заходят на www.example.com, он может получить доступ к серверу.

6
ответ дан 2 December 2019 в 21:24

Для добавления еще одного ответа, mod_security, если вам необходимо настроить, имеет правила, запрещающие доступ к серверу по ip-адресу

.
0
ответ дан 2 December 2019 в 21:24

Я написал этот простой код на PHP для ограничения прямого доступа по IP!

$servername =  $_SERVER['SERVER_NAME'];
if($servername == 'your-domain.com'){

}elseif($servername == 'your-domain-with-www.com'){

}else{
    die("Direct ip access not allowed!");
}

просто вставьте его в свой php файл и наслаждайтесь!

-2
ответ дан 2 December 2019 в 21:24

Это может быть просто, если вы не поместите свои файлы в стандартную директорию /var/www/html. Просто создайте другой каталог, скажем /web, например:

mkdir /web 
mkdir /web/example

скопируйте файлы и измените chown :

sudo chown -R www-data:www-data /web

Затем создайте виртуальный хост со следующей конфигурацией :

<Directory /web/example>
  Require all granted
</Directory>

<VirtualHost *:80>

    DocumentRoot /web/example
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com

    # Force SSL, you can remove this line
    Redirect permanent / https://example.com/

    ServerAdmin webmaster@example.com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# If you use SSL
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        DocumentRoot /web/example
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # adapt this to your paths
        SSLEngine on
        SSLCertificateFile /etc/ssl/example/example_com.crt
        SSLCertificateKeyFile /etc/ssl/example/example.key
        SSLCertificateChainFile /etc/ssl/example/example_com.ca-bundle

    </VirtualHost>
</IfModule>

Не забудьте включить ваш виртуальный хост, например:

sudo a2ensite example.com.conf
0
ответ дан 2 December 2019 в 21:24

В установке Apcahe, имеющей несколько файлов .conf, приоритет отдается первому загруженному файлу, а затем второму...аналогично. Таким образом, если вы находитесь на Ubuntu, файлы загружаются в лексикографическом порядке, поэтому самый "первый" файл .conf, который будет загружен, будет иметь значение по умолчанию 000. conf (, следовательно, 000 в его имени), находящийся в каталоге /etc/apache2/sites-available/.

Таким образом, чтобы предотвратить применение любого другого правила, нам нужно перенести наше правило вверх этого первого файла.

и вы можете просто подготовить следующее правило к этому файлу.

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/html
    #This part here, is crucial.
    <Location />
        Require all denied
    </Location>
</VirtualHost>

Попробовали и протестировали на Ubuntu 16.4 x64 Apache версии > 2.4

Если вы используете более низкую версию Apache, попробуйте заменить Require all denied из приведённого выше кода на . ...

<Location />
    Order deny,allow
    Deny from all
</Location>
0
ответ дан 2 December 2019 в 21:24

Под ubuntu 20.04

Версия сервера: Apache/2.4.41 (Ubuntu)

я просто скопировал мой 000-default-ssl.conf как disabled-ip.ssl.conf и поместите ниже содержание

cd /etc/apache2/sites-available
cp 000-default-ssl.conf disable-ip.ssl.conf

содержимое файла vhost disable-ip.ssl.conf

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin root@localhost
                ServerName localhost
                ServerAlias XXX.XXX.XX.XX  # here write ip adresss of your web site
                UseCanonicalName Off
                Redirect 403 /
                ErrorDocument 403 "Sorry, direct IP access not allowed."

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                SSLCertificateFile    /etc/letsencrypt/live/domain.com/fullchain.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
                Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
</IfModule>

,затем

a2ensite disable-ip.ssl.conf
service apache2 restart
1
ответ дан 12 May 2021 в 10:50

Теги

Похожие вопросы