Обмежити прямий доступ до веб-сайту 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.