web-dev-qa-db-ja.com

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

Webサイトへの直接IPアクセスを制限したい。 .htaccessを含むいくつかの解決策を見つけましたが、どれも機能しません。 CPanelを介してSSL証明書をインストールするまで問題なく動作していたApache仮想ホスト構成を介した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 [email protected]
    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 [email protected]
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/Apache/htdocs
    ServerAdmin [email protected]
    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 [email protected]
    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 /」の部分は機能しません。私がここで何をしているのかについて誰かがいくつかの光を当てることができれば私は感謝しています。ありがとう。

13
Ivan

そして出来上がり、修正:

<VirtualHost mysite.com:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    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 [email protected]
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/Apache/htdocs
    ServerAdmin [email protected]
    UserDir disabled
</VirtualHost>

NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    UseCanonicalName Off
</VirtualHost>

解決策は、直接IPアクセスをリダイレクト/制限する必要があるものを除いて、すべての仮想ホスト設定のIPをドメイン名に置き換えるだけでした。

12
Ivan

答えははるかに簡単です。

これを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でアクセスした場合にのみ、サーバーにアクセスできます。

6
stonyau

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

クライアントは、IPアドレスに接続し、証明書をダウンロードし、内容を読み取って、ホスト名が正しいことを確認する必要があります。

他の唯一の方法は [〜#〜] sni [〜#〜] を強制することですが、古いバージョンのInternet Explorerで閲覧しているユーザーに問題が発生します。

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

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

0
figtrap

ファイルをデフォルトの/ 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 [email protected]

    # Force SSL, you can remove this line
    Redirect permanent / https://example.com/

    ServerAdmin [email protected]

    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 [email protected]

        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
Mehdi

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

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

0
user155813

複数の.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>
0