Apache Tomcat-härdnings- och säkerhetsguide

En praktisk guide för att härda och säkra Apache Tomcat Server med de bästa metoderna.

Tomcat är en av de mest populära Servlet- och JSP Container-servrarna. Den används av några av följande webbplatser med hög trafik:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

Nedanstående diagram visar Tomcats marknadsposition i Java-applikationsservern.

Källa: Plumbr

Tekniskt sett kan du använda Tomcat som en front-end-server för att betjäna webbplatsförfrågningar direkt. Men i en produktionsmiljö kanske du vill använda vissa webbservrar som Apache, Nginx som front-end för att dirigera förfrågningarna till Tomcat.

Att använda en webbserver för att hantera förfrågningarna ger prestanda- och säkerhetsfördelar. Om du använder Apache HTTP som en front-end webbserver, måste du överväga att säkra det också.

Att ha en standard Tomcat-konfiguration kan avslöja känslig information, vilket hjälper hackare att förbereda sig för en attack mot programmet.

Följande är testade i Tomcat 7.x, UNIX-miljö.

Publik

Detta är designat för administratörer av mellanprogram, applikationssupport, systemanalytiker eller någon som arbetar eller är angelägen om att lära sig Tomcat-härdning och säkerhet.

Goda kunskaper i Tomcat & UNIX-kommandon är ett krav.

Anteckningar

Vi behöver något verktyg för att undersöka HTTP-rubriker för verifiering. Det finns två sätt du kan göra detta.

Om du testar en applikation som är riktad mot Internet, kan du använda följande HTTP Header-verktyg för att verifiera implementeringen.

Och för en intranätapplikation kan du använda Google Chrome, Firefox utvecklarverktyg.

Som en bästa praxis måste du ta en säkerhetskopia av alla filer du håller på att ändra.

Vi kommer att kalla Tomcat-installationsmappen som $tomcat genom dessa riktlinjer.

Låt oss gå igenom härdnings- och säkra procedurerna.

Ta bort serverbanner

Att ta bort serverbanner från HTTP Header är en av de första sakerna att göra som härdning.

Att ha en serverbanner avslöjar produkten och versionen du använder och leder till sårbarhet för informationsläckage.

Som standard kommer en sida som serveras av Tomcat att visas så här.

Låt oss dölja produkt- och versionsinformation från serverhuvudet.

  • Gå till mappen $tomcat/conf
  • Ändra server.xml genom att använda vi
  • Lägg till följande till anslutningsporten
Server =” “

Ex: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Spara filen och starta om Tomcat. Nu, när du öppnar ett program, bör du se ett tomt värde för serverhuvudet.

Startar Tomcat med en säkerhetshanterare

Security Manager skyddar dig från en opålitlig applet som körs i din webbläsare.

Att köra Tomcat med en säkerhetshanterare är bättre än att köra utan en. Tomcat har utmärkt dokumentation om Tomcat Security Manager.

Det som är bra med detta är att du inte behöver ändra någon konfigurationsfil. Det är precis så du kör startup.sh-filen.

Allt du behöver göra är att starta tomcat med –säkerhetsargument.

[[email protected] bin]# ./startup.sh -security
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.
[[email protected] bin]#

Aktivera SSL/TLS

Att servera webbförfrågningar över HTTPS är viktigt för att skydda data mellan klient och Tomcat. För att göra din webbapplikation tillgänglig via HTTPS måste du implementera SSL-certifikat.

Förutsatt att du redan har nyckellager redo med certifikatet, kan du lägga till nedanstående rad i server.xml-filen under Connector-portsektionen.

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

Ändra Keystore-filnamnet och lösenordet med ditt.

Om du behöver hjälp med nyckellagrings- och CSR-processen, se den här guiden.

Framtvinga HTTPS

Detta är endast tillämpligt när du har SSL aktiverat. Om inte kommer det att bryta applikationen.

När du väl har aktiverat SSL skulle det vara bra att tvinga omdirigera alla HTTP-förfrågningar till HTTPS för säker kommunikation mellan användare till Tomcat-applikationsservern.

  • Gå till mappen $tomcat/conf
  • Ändra web.xml genom att använda vi
  • Lägg till följande före syntax
<security-constraint> 
<web-resource-collection> 
<web-resource-name>Protected Context</web-resource-name> 
<url-pattern>/*</url-pattern>
</web-resource-collection> 
<user-data-constraint> 
<transport-guarantee>CONFIDENTIAL</transport-guarantee> 
</user-data-constraint> 
</security-constraint>
  • Spara filen och starta om Tomcat

Det är möjligt att stjäla eller manipulera webbapplikationssessioner och cookies utan att ha en säker cookie. Det är en flagga som injiceras i svarshuvudet.

Detta görs genom att lägga till under raden i session-config-delen av web.xml-filen

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

Skärmdump för konfiguration:

Spara filen och starta om Tomcat för att undersöka HTTP-svarshuvudet.

Kör Tomcat från icke-privilegierat konto

Det är bra att använda en separat icke-privilegierad användare för Tomcat. Tanken här är att skydda andra tjänster som körs i händelse av att något konto äventyras.

  • Skapa en UNIX-användare, låt oss säga tomcat
useradd tomcat
  • Stoppa Tomcat om du kör
  • Ändra $tomcat-ägarskap till användartomcat
chown -R tomcat:tomcat tomcat/

Starta Tomcat och se till att den körs med Tomcat-användare

Ta bort standard/oönskade program

Som standard levereras Tomcat med följande webbapplikationer, som eventuellt krävs i en produktionsmiljö.

Du kan ta bort dem för att hålla det rent och undvika alla kända säkerhetsrisker med Tomcats standardapplikation.

  • ROOT – Standard välkomstsida
  • Dokument – ​​Tomcat-dokumentation
  • Exempel – JSP och servlets för demonstration
  • Manager, host-manager – Tomcat administration

De är tillgängliga under $tomcat/webapps-mappen

[[email protected] webapps]# ls -lt
drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs
drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager
drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT
[[email protected] webapps]#

Ändra SHUTDOWN-port och kommando

Som standard är tomcat konfigurerat för att stängas av på 8005-porten.

Vet du att du kan stänga av tomcat-instansen genom att göra en telnet till IP:-port och utfärda SHUTDOWN-kommandot?

Chandans # telnet localhost 8005
Trying ::1... telnet:
connect to address ::1:
Connection refused Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN Connection closed by foreign host.
Chandans #

Farlig!

Du förstår, att ha standardkonfiguration leder till hög säkerhetsrisk.

Det rekommenderas att ändra avstängningsporten för Tomcat och standardkommandot till något oförutsägbart.

  • Ändra följande i server.xml
<Server port="8005" shutdown="SHUTDOWN">

8005 – Byt till någon annan oanvänd port

SHUTDOWN – Byt till något komplicerat

Ex-

<Server port="8867" shutdown="NOTGONNAGUESS">

Ersätt standardsidan 404, 403, 500

Att ha en standardsida för inte hittat, förbjudet, serverfel avslöjar versionsdetaljer.

Låt oss titta på standardsidan för 404.

För att mildra kan du först skapa en allmän felsida och konfigurera web.xml för att omdirigera till en allmän felsida.

  • Gå till $tomcat/webapps/$application
  • Skapa en error.jsp-fil med vi-editor
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Gå till mappen $tomcat/conf
  • Lägg till följande i web.xml-filen. Se till att du lägger till före syntax
<error-page> 
<error-code>404</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>403</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>500</error-code> 
<location>/error.jsp</location>
</error-page>
  • Starta om tomcat-servern för att testa den

Mycket bättre!

Du kan också göra detta för java.lang.Exception. Detta kommer att hjälpa till att inte exponera tomcat-versionsinformation om något java-lang-undantag.

Lägg bara till följande i web.xml och starta om tomcat-servern.

<error-page> 
<exception-type>java.lang.Exception</exception-type> 
<location>/error.jsp</location>
</error-page>

Jag hoppas att guiden ovan ger dig en idé om hur du säkrar Tomcat. Om du vill lära dig mer om Tomcat-administration, kolla in det här onlinekurs.
Lär dig också hur du konfigurerar WAS för att sluta fråga efter lösenord under avstängning här.