Webサイトへの直接IPアクセスを制限する


13

Webサイトへの直接IPアクセスを制限したい。.htaccessを含むいくつかの解決策を見つけましたが、どれも機能しません。また、CPanelを介してSSL証明書をインストールするまで正常に機能していたapache virtual hosts configを介して1つのソリューションを見つけました。httpd.confファイルで何が変更されたかまったくわかりませんが、SSL証明書をアンインストールしてもリダイレクト設定が機能しません。

現在の仮想ホストのセットアップは次のとおりです。

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と名前は一般的なものに置き換えられました。SSL証明書をインストールしてから、「リダイレクト403 /」部分が機能しません。私がここで間違っていることについて誰かが光を当てることができれば感謝しています。ありがとう。


= ServerName 192.168.1.1
ADM 14年

それも試してみましたが、効果はありません。
イヴァン14年

VirtualHostsは並べ替えられましたか?403エラーのあるホストは、最初の(デフォルトの)仮想ホストでしたか?
ホーカンLindqvist

いいえ、順序は変わりません。問題はSSL証明書の追加後に始まりました。つまり、最後の証明書が単に追加されただけです。これを完全に削除しても機能しなくなるため、他の何かも間違いなく変更されましたが、何がわかるのか分からないようです。
イヴァン14年

ここで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アクセスをリダイレクト/制限する必要がある設定を除き、すべての仮想ホスト設定のIPを単にドメイン名に置き換えることでした。


これにより、IE6およびIE8を実行しているクライアントで問題が発生します。あなたがそれでいいなら、これは大丈夫です。とにかく彼らは古いブラウザをアップグレードするべきです。
ヴァシリシラキス14年

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

仮想ホストのホスト名はSSL証明書内で暗号化されているため、HTTPSを介したサーバーへの直接IPアクセスを無効にすることはできません。

クライアントはIPアドレスに接続し、証明書をダウンロードし、内容を読んでから、ホスト名が正しいことを確認できます。

他の唯一の方法はSNIを強制することですが、古いバージョンのInternet Explorerで閲覧しているユーザーに問題を引き起こすでしょう。


1
  1. おそらく、証明書はexample.comに発行されており、192.168.1.1には発行されていません。したがって、使用する訪問者にhttps://192.168.1.1はSSLエラーが発生するはずです(URLは証明書のURLと異なるため)。
  2. 「デフォルトSSL」ウェブサイトがありません <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. ホスト名ごとにSSLを使用するには、SNIサポート付きのApacheを使用する必要があります(libSSLおよびApacheバージョンの要件があります)(1つのIPアドレスを持つApacheでの複数のSSL証明書の使用を参照)

0

これがあなたの探しているものだと思う

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


1
いいえ、それは私の問題とは関係ありません。DNSではなく、WebサイトのIPにアクセスするユーザーのWebサイトへのアクセスをブロックしたい。
イヴァン14年

その....まさにないこと
user155813

1
いいえ、これはクライアントのIPアドレスによるサイトアクセスをブロックします。質問は、IPアドレスを使用してサイトへのアクセスをブロックする方法を探しています。
DaveTheMinion

0

別の答えを追加するために、mod_securityには、セットアップする価値がある場合、IPアドレスによるサーバーへのアクセスを禁止するルールがあります。


0

デフォルトの/ 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

複数の.confファイルがあるApcaheセットアップでは、最初にロードされたファイルが優先され、次に2番目の..likewiseが優先されます。したがって、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

これは、Apache設定を編集せずに、Webサイトへの直接IPアクセスを制限するために使用できる最も簡単な方法です!
マックスマーリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.