Apache Tomcat 是一款轻量级的WEB应用服务器,对于初学者来说,很容易学习和上手。Apache Tomcat 服务成功启动后,会开启两个默认端口,一个是用于http请求的8080端口,这个端口大家应该都非常熟悉了,可以该端口访问到部署在Tomcat服务器上的WEB应用。不过,另外一个默认端口,估计很多大家就可能并没怎么去关注过,这个端口就是8005。
下面我们就以官方最新发布的apache-tomcat-8.5.78版本为例,来看看服务启动后的端口。
# sh startup.sh
Using CATALINA_BASE: /root/apache-tomcat-8.5.78
Using CATALINA_HOME: /root/apache-tomcat-8.5.78
Using CATALINA_TMPDIR: /root/apache-tomcat-8.5.78/temp
Using JRE_HOME: /usr/jdk1.8.0_321
Using CLASSPATH: /root/apache-tomcat-8.5.78/bin/bootstrap.jar:/root/apache-tomcat-8.5.78/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
查看Tomcat服务的端口,可以发现成功启动了两个服务端口:8080、8005。不过,这里大家有没有注意到这两个端口的访问权限其实是不同的。
# netstat -tnlp| grep `ps -ef| grep tomcat| grep -v grep| awk '{print $2}'`
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2431/java
tcp6 0 0 :::8080 :::* LISTEN 2431/java
通过下面的命令执行结果,不知道大家看出来区别没有。8080端口同时开放了本机和外网访问的权限,而8005这个端口,仅提供了本机访问的权限,即localhost。
那为什么会有这个区别呢?
# telnet 192.168.223.200 8005
Trying 192.168.223.200...
telnet: connect to address 192.168.223.200: Connection refused
# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# telnet 192.168.223.200 8080
Trying 192.168.223.200...
Connected to 192.168.223.200.
Escape character is '^]'.
熟悉Tocmat配置的,应该都知道,这个8005端口是用于命令行关闭Tomcat服务的。下面就演示如何通过命令行关闭Tomcat。
首先,通过telnet命令远程连接到8005端口,然后输入默认的SHUTDOWN字符,就可以轻松关闭Tomcat服务。
# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.
# ps -ef| grep tomcat| grep -v grep
#
所以,为什么8005端口只开放了本机访问的权限,原因其实就是为了避免有用户通过互联网(或者是局域网),恶意连接到8005端口,然后发送SHUTDOWN字符串来远程关闭Tomcat服务。因此,一旦8005开放本机以外网络的访问权限,就会导致服务器安全受到严重的威胁。