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

У меня есть несколько сайтов размещен на моем сервере. Если вы напрямую введете IP-адрес на сервер, он приведет вас к одному из сайтов, я хотел ограничить это поведение, поэтому я использовал следующее исправление:

<VirtualHost 192.168.1.1:80>
   ServerName 192.168.1.1
   Redirect 403 /
   ErrorDocument 403 "Forbidden"
   DocumentRoot /var/www/html
   ServerAdmin support@siteadmin.com
   UseCanonicalName Off
   #UserDir disabled
</VirtualHost>

И это сработало для ограничения прямого IP-доступа, однако теперь мой другой сайты теперь недоступны и отображают запрещенное сообщение.

Как я могу изменить это так, чтобы прямой IP-доступ по-прежнему был запрещен, но другие мои сайты по-прежнему могли быть доступны, используя их доменные имена?

Вот мой полный файл конфигурации:

<VirtualHost *:80>
    ServerName admin.example.com
    Redirect permanent / https://admin.example.com/
</VirtualHost>

<VirtualHost 192.168.1.1:80>
   ServerName 192.168.1.1
   Redirect 403 /
   ErrorDocument 403 "Forbidden"
   DocumentRoot /var/www/html
   ServerAdmin support@example.com
   UseCanonicalName Off
   #UserDir disabled
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName admin.example.com
        ServerAdmin admin@example.com
        DocumentRoot /var/www/html

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

        Alias /static /home/user/example/static
        <Directory /home/user/example/static>
                Require all granted
        </Directory>

        <Directory /home/user/example/example>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIScriptAlias / /home/user/example/example/wsgi.py
        WSGIDaemonProcess example python-path=/home/user/example python-home=/home/user/example/venv
        WSGIProcessGroup example

SSLCertificateFile /etc/letsencrypt/live/admin.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/admin.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
0
задан 4 April 2021 в 15:39
1 ответ

Один из способов - потребовать, чтобы клиент отправлял заголовок Host :

Require expr %{HTTP_HOST} .

Вероятно, лучший способ - определить виртуальные хосты для всех имен хостов, которые вы хотите поддерживать, но иметь первый виртуальный host, который используется по умолчанию, если ни один из других не подходит, запрещает соединения:

<VirtualHost *>
  Require all denied
</VirtualHost>
<VirtualHost *>
  ServerName example.com
</VirtualHost>
<VirtualHost *>
  ServerName admin.example.com
</Virtualhost>
...
3
ответ дан 24 April 2021 в 01:27

Теги

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