Tomcat简介:
Tomcat 服务器是一个免费的开放源代码的Java Web 应用服务器,作为一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
以下列举一些可以加强安全的点:
1、关闭服务器端口:在conf/server.xml配置文件中定义了可以直接关闭 Tomcat 实例的管理端口。
<Server port="8005" shutdown="SHUTDOWN">
我们通过telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例!SHUTDOWN的命令过于简单容易被猜出来,所以需要修改为复杂的字符串,<Server port="8005" shutdown="9SDfjsd29jf24sdff0LSDdfJKS9DKkjsd">
2、普通用户登录:为了进一步安全,不建议使用 root 来启动 Tomcat。尽量在可以执行的前提下用最低用户权限,比如使用专用用户 tomcat 用户来启动 Tomcat。在conf/tomcat-users.xml文件中设置用户密码与角色。如webgoat项目的配置:
<role rolename="webgoat_basic"/>
<role rolename="webgoat_admin"/>
<role rolename="webgoat_user"/>
<user password="webgoat" roles="webgoat_admin" username="webgoat"/>
<user password="basic" roles="webgoat_user,webgoat_basic" username="basic"/>
3、关闭war包自动部署:在conf/server.xml文件中默认开启war包热部署:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
为了防止被植入木马恶意程序,修改:unpackWARs="false" autoDeploy="false"
4、禁用Tomcat后台管理:容易通过访问http://localhost:8080/manager使用admin登录Tomcat管理后台,执行部署项目等造成严重安全问题。
可以删除/webapps目录下Tomcat自带的所有项目。
删除或修改webapps/host-manager/manager.xml文件。
5、增加防火墙:限制访问Tomcat的控制与连接器端口。在linux环境下可以用命令netstat -a查看网络服务器socket以及其他连接。执行以下命令:
插入规则:iptables -A INPUT -p tcp -m tcp --dport 8005 -j DROP
保存规则:service iptables save
重载规则:service iptables restart
6、隐藏版本信息:在实际中为了避免被针对性版本的漏洞进行攻击,可以手动修改lib/catalina.jar文件的:
①、在linux下:jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org
②、在Windows下:可以用jad反编译打开去修改。
通过修改 org/apache/catalina/util/ServerInfo.properties 文件中:
server.info=Apache Tomcat/7.0.53
server.number=7.0.53.0
server.built=Mar 25 2014 06:20:16
除了修改版本信息的方式也可以通过修改conf/web.xml文件:将 DefaultServlet 的 showServerInfo 设为 false,这样不会导致在启用目录列表后,Tomcat 版本号就会包含在发送给客户端的响应中。
7、脚本权限回收:在Tomcat启动后,应该将/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限,如进入该目录后:
所属用户只读:chmod u=r-- shutdown.sh
所属组只读:chmod g=r-- shutdown.sh
其他用户只读:chmod o=r-- shutdown.sh
8、文件列表访问控制:在/conf/web.xml文件中的default部分的listings的配置必须为false(默认),表示不列出文件列表。之所以这样设置,不是因为允许目录列表是不安全之举,而是因为要对包含数千个文件的目录生产目录列表,会大量消耗计算资源,会容易导致 DOS 攻击。
9、清除没有用的连接器:在conf/server.xml中默认配置了一个HTTP和AJP连接器,在生产环境中应该去除多余的连接器。Connector标签如
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
10、APJ连接端口的保护:修改默认的ajp 8009端口为不易冲突(大于1024),要求端口配置在8000~8999之间,通过iptables规则限制ajp端口访问的权限仅为线上机器,目的在于防止线下测试流量被apache的mod_jk转发至线上tomcat服务器
标准配置:<Connector port="8349" protocol="AJP/1.3"/>
11、访问日志格式规范:开启tomcat默认访问日志中Referer和User-Agent记录,在conf/server.xml文件中的标准配置:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
12、maxThreads 连接数限制:限制Tomcat所能接受最大连接数。一般设置不要超过8000以上,还需要注意Java 还需要注意 jvm 的参数配置。如果不注意就会因为jvm参数过小而崩溃。在conf/server.xml文件<connector>内的设置属性。
13、多虚拟主机:不要使用 Tomcat 的虚拟主机,推荐每个站点使用一个实例。即,可以启动多个 Tomcat,而不是启动一个 Tomcat 里面包含多个虚拟主机。因为 Tomcat是多线程,共享内存,任何一个虚拟主机中的应用崩溃,都会影响到所有应用程序。虽然采用多实例的方式会产生过多的开销,但至少保障了应用程序的隔离和安全。