Web sitesine doğrudan IP erişimini kısıtlama


13

Web siteme doğrudan IP erişimini kısıtlamak istiyorum. .Htaccess içeren birkaç çözüm buldum ancak hiçbiri işe yaramadı. Ayrıca CPanel üzerinden bir SSL sertifikası yükleyene kadar iyi çalışan apache sanal ana bilgisayar yapılandırması yoluyla bir çözüm buldum. Httpd.conf dosyasında ne değiştirildiğine dair hiçbir fikrim yok ama SSL sertifikasını kaldırsam bile yönlendirme ayarı çalışmıyor.

Şu anki sanal ana bilgisayar ayarlarım:

NameVirtualHost 192.168.1.1:80 NameVirtualHost *

<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 ve isimler jenerik olanlarla değiştirildi. "Yeniden yönlendirme 403 /" bölümü SSL sertifikasını yükledikten sonra çalışmıyor. Birisi burada yanlış yaptığım şeye ışık tutabilirse minnettar olurum. Teşekkürler.


Sanırım kullanmak zorunda değilsiniz = ServerName 192.168.1.1
ADM

Bunu da denedim, hiçbir etkisi yok.
Ivan

VirtualHost'lar yeniden sıralandı mı? 403 hatası olan kişi daha önce ilk (varsayılan) hayalet miydi?
Håkan Lindqvist

Hayır, sipariş değişmedi. SSL sertifikası eklendikten sonra sorun başladı, yani sonuncusu kolayca eklendi. Şimdi tamamen kaldırsam bile artık çalışmaz, bu yüzden başka bir şey kesinlikle değiştirildi, ancak ne olduğunu anlayamıyor gibi görünüyor.
Ivan

Yanıtlar:


12

Ve işte, düzeltme:

<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>

Çözüm, doğrudan IP erişimini yeniden yönlendirmesi / kısıtlaması gerekenler dışında IP'yi tüm sanal ana bilgisayar ayarları için etki alanı adıyla değiştirmektir.


Bu, IE6 ve IE8 çalıştıran istemcilerde sorunlara neden olur. Eğer bu konuda iyiysen, o zaman bu iyi. Zaten eski tarayıcılarını yükseltmeliler.
Vasili Syrakis

6

Cevap çok daha basit olabilir.

Bunu httpd.conf dosyasının altına kopyalayın (genellikle / etc / httpd / conf adresinde bulunur)

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

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

Ardından yalnızca ziyaretçiler www.example.com tarafından eriştiğinde, sunucuya erişebilir.


2

Sanal ana makinenizin ana bilgisayar adı SSL sertifikası içinde şifrelenmiş olduğundan, sunucunuza doğrudan IP erişimini HTTPS üzerinden devre dışı bırakamazsınız.

İstemciler IP adresinize bağlanmalı, sertifikayı indirmeli, içeriği okumalı ve ardından ana bilgisayar adının doğru olduğunu doğrulayabilmelidir.

Diğer tek yol SNI'yi zorlamaktır , ancak Internet Explorer'ın eski sürümlerine göz atan kullanıcılar için sorunlara neden olursunuz.


1
  1. Muhtemelen sertifikanız 192.168.1.1'e veya her ikisine de example.com'a verilmez; Bu nedenle, kullanan ziyaretçilerin https://192.168.1.1bir SSL hatası olmalıdır (çünkü URL sertifikanın sertifikasından farklıdır).
  2. 'Varsayılan SSL' web siteniz yok <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Ana bilgisayar adı başına SSL kullanmak için SNI destekli apache (bazı libSSL ve Apache sürüm Gereksinimleri vardır) kullanmalısınız (bkz . Tek IP Adresi ile Apache'de Birden Çok SSL Sertifikası Kullanma


0

Başka bir cevap eklemek için, mod_security, ayarlamanıza değerse, sunucuya ip adresiyle erişimi yasaklamak için kurallar vardır.


0

Dosyalarınızı varsayılan / var / www / html dizinine koymazsanız bu kolay olabilir. Sadece başka bir dizin oluşturun, örneğin / web diyelim:

mkdir /web 
mkdir /web/example

dosyalarınızı kopyalayın ve chownu değiştirin:

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

Ardından, aşağıdaki yapılandırmaya sahip bir sanal ana bilgisayar oluşturun:

<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>

Sanal ana makinenizi etkinleştirmeyi unutmayın, örnek:

sudo a2ensite example.com.conf

0

Birden fazla .confdosya içeren bir Apcahe kurulumunda öncelik, önce yüklenen ilk dosyaya, ardından ikinci dosyaya gider. Eğer Ubuntu üzerindeyseniz, dosyalar sözlük sırasına göre yüklenir, böylece yüklenecek olan ilk " .confdosya " dizinin altında bulunan 000-default.conf( dolayısıyla adında 000 ) olacaktır /etc/apache2/sites-available/.

Bu nedenle, başka bir kuralın uygulanmasını önlemek için, kuralımızı ilk dosyanın en üstüne almamız gerekir.

ve aşağıdaki kuralı bu dosyaya başlatabilirsiniz.

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

Ubuntu 16.4 x64 Apache sürümünde denenmiş ve test edilmiştir > 2.4

Apache'nin daha düşük bir sürümünü çalıştırıyorsanız Require all denied, yukarıdaki koddan değiştirmeyi deneyin ...

<Location />
    Order deny,allow
    Deny from all
</Location>

-3

Ben doğrudan ip erişimi kısıtlamak için PHP basit kod yazdı!

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

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

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

sadece php dosyasına yapıştırın ve tadını çıkarın!


1
Bunun diğer cevaplara göre avantajlarını açıklayabilir misiniz?
030

apache ayarlarını düzenlemeden, web sitenize doğrudan ip erişimini kısıtlamak için kullanabileceğiniz en basit yöntem budur!
Max Marley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.