禁止浏览器访问服务器IP地址

4
我有一台服务器,可以通过域名(使用SSL安全)或服务器IP地址在浏览器中访问。
我想禁用使用服务器IP地址访问:
http://123.45.678.901/https://123.45.678.901/ 如何实现这个目标?
4个回答

1

我在这里找到了完整的解决方案,需要通过 htaccess 文件和 2 条规则:

规则 1:将所有请求重定向到安全的 HTTPS 访问(包括 IP 请求 http://123.45.678.901

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://domain.com/$1 [L,R=301,QSA]

规则 2:如果域名或子域名不完全是 domain.com,则重定向到裸域名(必须捕获例如 https://123.45.678.901/any-page
使用 将所有通配符子域名重定向到根域名

RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteRule (.*) https://domain.com/$1 [L,R=302,QSA]

所有测试结果在此处:

http://123.45.678.901/ > now redirect to https://domain.com/  
https://123.45.678.901/ > now redirect to https://domain.com/  
http://123.45.678.901/any-page > 404 > https://domain.com/index.php?p=any-page  
https://123.45.678.901/any-page > 404 > https://domain.com/index.php?p=any-page  

非常感谢,.htaccess 对我很有帮助,但是同样的事情也可以在虚拟主机级别上实现。根据 Apache 文档,应该避免使用 .htaccess:“如果您可以访问主要的 httpd 配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会减慢 Apache http 服务器的速度。您可以在 Directory 部分中包含的任何指令都将在其中更好地配置,它将具有相同的效果和更好的性能。” - blessed

0
你尝试通过阻止IP访问网站来实现什么目的?这实际上是一样的。我们只是为了人类的利益使用漂亮的域名或主机名。无论您输入域名还是IP,都是完全相同的,因为某人可以简单地ping您的主机名并获取IP地址。
如果您想强制执行SSL,请为主机执行此操作,以便所有访问尝试都需要SSL。您可以使用apache mod_rewrite来实现此操作:https://www.sslshopper.com/apache-redirect-http-to-https.html 除非我没有正确理解问题,否则您所要求的可能不可能实现。这就像说我希望有人只使用我的地址而不是我的邮政编码向我的房子发送邮件,而邮政编码实际上给您提供了地址。
无论如何,希望这有所帮助。

我来这里是因为和migswd有完全相同的问题。对我来说,这是一个安全问题。许多人没有意识到他们的IP可能会指向phpmyadmin或其他不应该向世界展示的工具。我的IP当前指向VPN管理工具。是的,它会要求凭据,但我甚至不想透露我有一些需要登录保护的内容。对我来说,明智之举是确保使用IP浏览会重写为公共站点或一般的“禁止访问”消息。 - Jette

0

如果您想让用户通过域名访问您的网站(服务器),而禁用相应IP地址的访问以禁用通过IP地址访问phpmyadmin,则无法实现您想要的目标,也不是一个好的方法。

粗略地说,域名是IP地址的人类可读和易记形式,当我们在浏览器中输入域名(例如http://google.com)时,DNS(域名服务)服务器将域名转换为相应的IP地址,并且浏览器尝试连接由DNS给出的IP地址。最终,通过域名和IP地址进行内部连接的方式是相同的。

为了防止其他用户和攻击者访问phpmyadmin,配置访问控制是正确的方法。请尝试:

  1. 为mysql用户使用安全密码
  2. 根据mysql用户的目的限制其权限。(对于所有目的和应用程序都使用root用户并不是一个好方法。)

如果您正确配置了上述几点,即使攻击者知道phpmyadmin的URL,他们也无法访问您的数据库。


-1
为确保只有在使用服务器IP浏览时才发生重定向,我采取了以下措施(Ubuntu 20.04-如果您使用其他操作系统,则可能不同的命令和路径):
/ etc / apache / conf-available /文件夹中创建一个noip.conf文件,并添加以下内容:
<If "%{HTTP_HOST} =~ /12\.34\.56\.78/">
  RewriteEngine on
  RewriteRule ^ http://my.domain.com [L,R=301]
</If>

启用配置并重新启动Apache:

a2enconf noip
apachectl restart

如果有人使用https输入ip地址,上述代码将无法工作。他们会收到“您的连接不是私密连接”的消息。然后,如果他们单击“前往12.34.56.78”,将会获取到第一个匹配的启用了SSL的虚拟主机。请确保这个主机正是您想要的。

您还应检查服务器上是否有其他应用程序在监听备选端口,因为有人可能会输入12.34.56.78:999。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接