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 /」の部分は機能しません。私がここで何をしているのかについて誰かがいくつかの光を当てることができれば私は感謝しています。ありがとう。
そして出来上がり、修正:
<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をドメイン名に置き換えるだけでした。
答えははるかに簡単です。
これを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でアクセスした場合にのみ、サーバーにアクセスできます。
仮想ホストのホスト名はSSL証明書内で暗号化されているため、HTTPSを介したサーバーへの直接IPアクセスを無効にすることはできません。
クライアントは、IPアドレスに接続し、証明書をダウンロードし、内容を読み取って、ホスト名が正しいことを確認する必要があります。
他の唯一の方法は [〜#〜] sni [〜#〜] を強制することですが、古いバージョンのInternet Explorerで閲覧しているユーザーに問題が発生します。
https://192.168.1.1
を使用する訪問者は、SSLエラーが発生するはずです(URLが証明書のものと異なるため)。<VirtualHost *:443> SSLEngine on </VirtualHost>
別の答えを追加するために、設定する価値がある場合、mod_securityには、IPアドレスによるサーバーへのアクセスを禁止するルールがあります。
ファイルをデフォルトの/ 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
これはあなたが探しているものだと思います
複数の.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>