tomcat配置下如何禁止ip直接访问

先来聊聊为何会有这一么一回事。

在默认的部署下,可以直接通过DNS解析到部署的生产环境下,然后你的域名就能直接访问你的应用了,然后问题来了。你发现你使用域名或是直接IP均能访问到你的应用,这会产生一些安全问题吗?

结果是:会的。

从三个角度来浅析下,其一会引发恶意解析情况,也就是其它人也可以将他的域名解析到你的服务器上,这样以后那也就变成了他的“应用”,会引发很多意想不到的问题;其二若业务逻辑中对域名有相关的安全控制,而通过IP的方式会成为绕过限制的“漏网之鱼”;其三若是需要进行安全评测的应用,相关的安全扫描工具或平台就会报诸如IP地址泄露等,这会增加解释的成本。

好了,说了那么多,怎么在tomcat下处理好该问题是关键。这里拿IP地址是 192.168.1.2 ,相应域名是 www.test.com举例。

打开 %TOMCAT_HOME%/conf/server.xml文件,找到 Engine节点作如下:

<Engine name="Catalina" defaultHost="www.test.com">
<Host name="www.test.com"  appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>
<Host name="192.168.1.2"  appBase="ipapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>
</Engine>
<Engine name="Catalina" defaultHost="www.test.com">
<Host name="www.test.com"  appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>
<Host name="192.168.1.2"  appBase="ipapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>
</Engine>

相关的点是:

1. Engine 节点配置的 defaultHost 表明缺省访问的Host。defaultHost对应的名称必须存在于Engine节点下配置的host节点中。

当一台机器有多个IP,而按照规定只允许通过一个指定的域名访问时很有用。此时,把defaultHost指定为非域名对应的host,这样不通过域名访问时就都定位到指定的非域名HOST了。

2. Host 节点 name 对应IP地址,以及域名。一个Host只有指定一个IP或域名。

3. Host 节点的 appBase ,对应的是存放web应用的目录。这里输入的目录相对于 %TOMCAT_HOME%,如上面的www.test.com对应的目录是 %TOMCAT_HOME%/webapps,而192.168.1.2 对应的目录是 %TOMCAT_HOME%/ipapps。

4.如果想通过IP访问是给用于一个提示,比如:“您好!不允许通过IP直接访问本网站,请通过域名www.test.com访问”
此时可以在%TOMCAT_HOME%/ipapps目录下创建一个名为 ROOT web工程(可以从 webapps目录下拷贝),同时将里面的 index.html文件修改成想要展示给用于的界面。

5.修改localhost为”www.test.com”后,在%TOMCAT_HOME%/conf/Catalina/localhost下test.xml 中配置的虚拟目录会失效。因为配置虚拟目录的元素节点Context 是server.xml下Host 节点下的子节点,Catalina下的文件夹名字是根据host节点的name属性来的。现在Host 的name已经改www.test.com 那么需要在%TOMCAT_HOME%/conf/Catalina 新建一个”www.test.com”的文件夹,然后把localhost下的test.xml 文件拷贝到www.test.com 文件夹下才能是虚拟目录继续有效。

我要评论!

想一个你喜欢的昵称。
给一个你的常用邮箱。
想和萌萌哒的TA们说点啥。
  • 在 Linux 中为了安全起见,小于1024的端口都归root用户所有,其他用户没有使用这些端口的权限。 因此大量的新手或粗心的运维就会遇到伤害了。怎么解决呢?有两种方式,一种是用 root 账户来执行,另一种就是利用 iptables 进行端口转发。 但是若是用 root 账户来启动服务,如 to...
  • httponly和secure两个标识是现代化浏览器对cookie安全保护的一大举措,我们来简单看下其作用。httponly是为了防护xss对cookie的劫持,在通用的攻击场景中,通过植入xss来劫持到管理者或用户的cookie,然后绕过应用的账户管控措施进入到操作页面完成非法的操作。secure...
  • 安装完tomcat8.x后,进入其目录/usr/local/tomcat/bin/,运行startup.sh,出现错误: touch: cannot touch ‘/usr/local/tomcat8/logs/catalina.out’:No such file or directory 其解决办...
  • 异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器端口是相同的。如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentC...
  • <Server port="8005" shutdown="SHUTDOWN"> <!--属性说明 port:指定一个端口,这个端口负责监听关闭Tomcat的请求 shutdown:向以上端口发送的关闭服务器的命令字符串 --> <Listener className=...
微信扫一扫即可带走我!