论坛首页 Java企业应用论坛

tomcat 绑定域名 防止恶意域名绑定

浏览 5340 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-13   最后修改:2011-07-13
原文地址:http://www.zlong.org/tomcat-binding-domain-bound-to-prevent-malicious-domain/

今天公司一台服务器被很多恶意域名绑定了,电信的要我们赶紧处理,否则封IP。
服务器使用的是tomcat,上谷歌搜了很多方法,都是说绑定自己的域名,没说如何不让其他域名绑定。
开始我想了一种方法:修改tomcat/conf/server.xml,找到engine元素,仿照已有的localhost,添加host元素,比如你想禁止www.fff.com,可以这样写:
<!--more-->
<Host name="www.fff.com"  appBase="notexists"
	unpackWARs="true" autoDeploy="true"
	xmlValidation="false" xmlNamespaceAware="false"></Host>

其中的appBase是一个不存在的目录,所以www.fff.com请求时,不会访问你真实的应用。但这样只能禁止www.fff.com,不会禁止fff.com,所以还得加个name为fff.com的host,这样就太麻烦了,并且一些恶意域名是不可预知的,你并不知道会有多少域名绑定到你的IP,所以这种方式行不通。

上面的方式是默认允许,把禁止的列出来,变换下思路,默认禁止,将允许的列出来,这样不就OK了?所以有第二种方式:
<!-- default host is forbiden -->
<Engine name="Catalina" defaultHost="forbiden">
	<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
		resourceName="UserDatabase"/>
		  
	<!-- allow hosts -->
	<Host name="localhost"  appBase="webapps"
			unpackWARs="true" autoDeploy="true"
			xmlValidation="false" xmlNamespaceAware="false"></Host>
	<Host name="www.yourdomain.com"  appBase="webapps"
			unpackWARs="true" autoDeploy="true"
			xmlValidation="false" xmlNamespaceAware="false"></Host>	 	
	<Host name="192.168.1.3"  appBase="webapps"
			unpackWARs="true" autoDeploy="true"
			xmlValidation="false" xmlNamespaceAware="false"></Host>	 
			
	<!-- forbiden host, the appBase is a not exists directory. 
	If the requested domain is not in the above list of hosts where are allowed, then use this host.
-->
	<Host name="forbiden"  appBase="notexists"
			unpackWARs="true" autoDeploy="true"
			xmlValidation="false" xmlNamespaceAware="false"></Host>	
</Engine>

这里将Engine中的defaultHost设置为forbiden,下面有个name为forbiden的host,其appBase是个不存在的目录。再添加允许的host。所以,如果是未知的域名,则会使用forbiden的host,这样就访问不到真实应用目录了。

这只是我的解决方式,如果大家有更好的方法,可以交流以下。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics