限制直接 IP 访问网站

限制直接 IP 访问网站

我想限制对我网站的直接 IP 访问。我找到了几个涉及 .htaccess 的解决方案,但都不起作用。我还找到了一个通过 apache 虚拟主机配置的解决方案,在我通过 CPanel 安装 SSL 证书之前,它一直运行良好。我完全不知道 httpd.conf 文件中更改了什么,但现在即使我卸载了 SSL 证书,重定向设置也不起作用。

这是我当前的虚拟主机设置:

名称虚拟主机 192.168.1.1:80 名称虚拟主机 *

<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 /”部分不起作用。如果有人能解释一下我在这里做错了什么,我将不胜感激。谢谢。

答案1

瞧,修复方法如下:

<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 访问的设置之外。

答案2

答案可能简单得多。

只需将其复制到 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访问时,他才能访问服务器。

答案3

您无法禁用通过 HTTPS 对服务器的直接 IP 访问,因为虚拟主机的主机名是在 SSL 证书内加密的。

客户端必须连接到您的 IP 地址,下载证书,读取内容,然后才能验证主机名是否正确。

唯一的其他方法是执行信噪比,但这会给使用旧版本 Internet Explorer 浏览的用户带来麻烦。

答案4

在ubuntu 20.04下

服务器版本:Apache/2.4.41(Ubuntu)

我刚刚将 000-default-ssl.conf 复制为 disable-ip.ssl.conf,并将内容放在下面

cd /etc/apache2/sites-available
cp 000-default-ssl.conf disable-ip.ssl.conf

disable-ip.ssl.conf vhost 文件的内容

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin root@localhost
                ServerName localhost
                ServerAlias XXX.XXX.XX.XX  # here write ip adresss of your web site
                UseCanonicalName Off
                Redirect 403 /
                ErrorDocument 403 "Sorry, direct IP access not allowed."

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

                SSLEngine on

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                SSLCertificateFile    /etc/letsencrypt/live/domain.com/fullchain.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
                Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
</IfModule>

然后

a2ensite disable-ip.ssl.conf
service apache2 restart

相关内容