Обмежити прямий доступ до веб-сайту IP


13

Я хочу обмежити прямий доступ до IP на свій веб-сайт. Я знайшов кілька рішень, що стосуються .htaccess, але жоден не працює. Я також знайшов одне рішення через конфігурацію віртуальних хостів apache, яка працювала нормально, поки я не встановив сертифікат SSL через CPanel. Я абсолютно не маю уявлення, що було змінено у файлі httpd.conf, але тепер параметр переадресації не працює, навіть якщо я видаляю сертифікат SSL.

Ось моя поточна налаштування віртуальних хостів:

NameVirtualHost 192.168.1.1:80 Ім'яVirtualHost *

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

    ## User rotate # Needed for Cpanel::ApacheConf
    UserDir disabled
    UserDir enabled rotate
    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
</VirtualHost>

<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 192.168.1.1:443
<VirtualHost 192.168.1.1:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off

    UserDir disabled
    UserDir enabled rotate

    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
    SSLEngine on
    #SSL stuff here
</VirtualHost>

IP та імена були замінені загальними. Частина "Перенаправлення 403 /" не працює з моменту встановлення SSL-сертифіката. Я буду вдячний, якщо хтось може пролити трохи світла на те, що я тут роблю неправильно. Спасибі.


я думаю, вам не доведеться використовувати = ServerName 192.168.1.1
— ADM

Спробувавши це, жодного ефекту не має.
— Іван

Чи були упорядковані VirtualHosts? Чи був той, який із помилкою 403 був першим (за замовчуванням) vhost раніше?
— Хокан Ліндквіст

Жодне замовлення не змінилося. Проблема почалася після додавання SSL сертифікату, тобто останній був просто доданий. Тепер, якщо я навіть повністю його видалю, він більше не працюватиме, тому щось інше теж було визначено, але не можу зрозуміти, що.
— Іван

ось рішення через htaccess serverfault.com/a/171260/273980
— jsHate

Відповіді:


12

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

<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 на ім'я домену для всіх налаштувань virtualhost, за винятком того, для якого потрібно перенаправити / обмежити прямий доступ до IP.


Це спричинить проблеми з клієнтами, які працюють під керуванням IE6 та IE8. Якщо з цим все гаразд, то це добре. Вони все одно мають оновити свої старовинні браузери.
— Василь Сіракіс

6

Відповідь могла бути набагато простішою.

Просто скопіюйте це внизу 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, він може отримати доступ до сервера.


2

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

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

Єдиний інший спосіб - застосувати SNI , але ви створите проблеми користувачам, які переглядають старіші версії Internet Explorer.


1
  1. Можливо, ваш сертифікат виданий на сторінку example.com, а не на 192.168.1.1, ні на обидва; Отже, відвідувачі, які використовують, https://192.168.1.1повинні мати помилку SSL (оскільки URL-адреса відрізняється від сертифікату).
  2. У вас немає веб-сайту "SSL за замовчуванням" <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Ви повинні використовувати apache з підтримкою SNI (є деякі вимоги до версії libSSL та Apache), щоб використовувати SSL на ім’я хоста (див. Використання декількох сертифікатів SSL в Apache з однією IP-адресою

0

Я вважаю, що це те, що ти шукаєш

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


1
Ні, це не має нічого спільного з моїм питанням. Я хочу заблокувати доступ до веб-сайту для тих, хто отримує доступ до IP мого веб-сайту замість DNS.
— Іван

це робить саме це ....
— користувач155813

1
Ні, це блокує доступ до сайту за IP-адресою клієнта. Питання шукає спосіб заблокувати доступ до сайту, використовуючи його IP-адресу.
— DaveTheMinion

0

Щоб додати ще одну відповідь, mod_security, якщо вам це варто встановити, має правила заборонити доступ до сервера за ip адресою.


0

Це може бути легко, якщо ви не помістите свої файли в каталог / var / www / html за замовчуванням. Просто створіть інший каталог, скажімо, наприклад, веб:

mkdir /web 
mkdir /web/example

скопіюйте свої файли та змініть команду:

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

У налаштуваннях Apcahe, що має кілька .confфайлів, пріоритет надходить до першого завантаженого файла, а потім до другого. Отже, якщо ви перебуваєте на Ubuntu, файли завантажуються в лексикографічному порядку, тож самим "першим" .confфайлом, який буде завантажений, буде 000-default.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>

-3

Я написав цей простий код у 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 і насолоджуйтесь!


1
Чи могли б ви пояснити переваги цього над іншими відповідями?
— 030

це найпростіший метод, який ви можете використовувати для обмеження прямого доступу ip до вашого веб-сайту, не редагуючи налаштування apache!
— Макс Марлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.