來架個網站吧-23.網站環境建置-建立AP

2024-02-28 來架個網站吧 linux 2023 iThome 鐵人賽 tomcat

來架個網站吧-23.網站環境建置-建立AP

tags: 來架個網站吧 tomcat

我是目錄


Grails 在生產環境中,最佳的拍檔就是 tomcat 啦~簡單,可以快速部屬的 Servlet容器。

然而tomcat受歡迎的背後,卻也背負不少的CVE認證,所以這邊我會先說明一下如何建立安全?的tomcat 服務。以下是濃縮版本,當然也歡迎在留言區補充~

建立安全的tomcat?

在可怕的網路世界?能隱藏訊息就隱藏,能多做一點預防措施就多做一點吧。以下是我後來在部屬tomcat服務會做的一些事項:

  • 移除 tomcat 版本號
  • 禁止自動部屬
  • 關閉遠端關閉服務port
  • 刪除 webapps 內所有服務

移除 tomcat 版本號

刪除版本號最主要目的是為了防止對外洩漏tomcat 版本資訊,比較簡單的作法是直接在 conf/server.xml 指定 server name,如下:

<Connector server="application server" />

但是這樣的作法在 404 頁面 時仍然會出現 tomcat 版本資訊。為了解決這個狀況,目前現行可靠的作法是把 catalina.jar 打開之後,修改 ServerInfo.properties 裡面的資訊。

一行指令版本

export tomcatHome="/opt/apache-tomcat" &&\
export tomcatVersion="7.0.109" &&\
export javaHome="/usr/local/jvm/jdk17_latest" &&\
mkdir -p ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
cp ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
cp ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar.bk &&\
unzip -q ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar -d ${tomcatHome}/catalina_jar-${tomcatVersion}/ &&\
sed -i '/^server.number=.*/c server.number=0' ${tomcatHome}/catalina_jar-${tomcatVersion}/org/apache/catalina/util/ServerInfo.properties &&\
sed -i '/^server.info=.*/c server.info=Apache Tomcat' ${tomcatHome}/catalina_jar-${tomcatVersion}/org/apache/catalina/util/ServerInfo.properties &&\
cd ${tomcatHome}/catalina_jar-${tomcatVersion} &&\
${javaHome}/bin/jar uvf ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar org/apache/catalina/util/ServerInfo.properties &&\
rm -f ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar &&\
cp ${tomcatHome}/catalina_jar-${tomcatVersion}/catalina.jar ${tomcatHome}/apache-tomcat-${tomcatVersion}/lib/catalina.jar

還原

sudo su tomcat -c "rm /home/tomcat/apache-tomcat-${tomcatVersion}/lib/catalina.jar"
sudo su tomcat -c "cp /home/tomcat/catalina_jar/catalina.jar.bk /home/tomcat/apache-tomcat-${tomcatVersion}/lib/catalina.jar"

錯誤時隱藏 tomcat 版本號

  • conf/server.xml
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />

禁止自動部屬

在這方面我有遇過正式環境中,出現不明的服務。後來發現在 webapps 目錄中,出現隱藏檔案目錄,如 webapps/.test。後來是直接把 unpackWARsautoDeployreloadable 全部關掉。

unpackWARs="false" autoDeploy="false" reloadable="false"
  • conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="-1" shutdown="SHUTDOWN">
<!--部份省略-->
  <Engine name="Catalina" defaultHost="localhost">
<!--部份省略-->

      <Host name="localhost"  appBase="/wezoomtek/webapps/w1"
            unpackWARs="false" autoDeploy="false" reloadable="false"
        >
<!--部份省略-->
    </Engine>

  </Service>

</Server>

關閉遠端關閉服務port

在生產環境中最怕服務突然無預警關閉,更何況還預留 port 好心給別人呢!所以記得關閉!

  • conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="-1" shutdown="SHUTDOWN">
  <!--部份省略-->
</Server>

刪除 webapps 內所有服務

最後,如果 tomcat 是從官方網站下載的,記得把原有在 webapps 裡的服務通通都刪除,我相信絕大多時候都不會用到。

覆載平衡搭配 nginx

  • conf/server.xml
<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies=".*" remoteIpHeader="x-forwarded-for" proxiesHeader="x-forwarded-by"  protocolHeader="x-forwarded-proto" httpsServerPort="443" />