Apache Tomcat-härdnings- och säkerhetsguide

By rik

En Praktisk Handbok för Att Skydda och Säkerställa Apache Tomcat Server

Tomcat är en framstående server för Servlet- och JSP-behållare. Den används av många webbplatser med hög trafik, inklusive:

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

Nedan visas Tomcats position på marknaden för Java-applikationsservrar.

Källa: Plumbr

Tekniskt sett kan Tomcat fungera som en front-end-server och hantera webbplatsförfrågningar direkt. I en produktionsmiljö är det dock rekommenderat att använda webbservrar som Apache eller Nginx som front-end för att dirigera förfrågningar till Tomcat.

Att använda en webbserver för att hantera förfrågningar ger prestandaförbättringar och ökad säkerhet. Om du använder Apache HTTP som front-end-webbserver är det viktigt att du också skyddar den.

En standardkonfiguration av Tomcat kan läcka känslig information, vilket underlättar för hackare att förbereda attacker mot applikationen.

Följande åtgärder är testade i Tomcat 7.x, i en UNIX-miljö.

Målgrupp

Denna guide riktar sig till administratörer av mellanprogram, applikationssupport, systemanalytiker eller alla som är intresserade av att lära sig mer om hur man skyddar och härdar Tomcat.

Goda kunskaper i Tomcat och UNIX-kommandon är en förutsättning.

Viktigt att Notera

Vi behöver ett verktyg för att inspektera HTTP-huvuden för verifiering. Det finns två sätt att göra detta:

Om du testar en internetriktad applikation kan du använda ett HTTP Header-verktyg för att verifiera implementeringen.

För en intranätapplikation kan du använda utvecklarverktygen i Google Chrome eller Firefox.

Som en försiktighetsåtgärd bör du alltid skapa säkerhetskopior av alla filer du planerar att ändra.

Vi kommer att referera till Tomcat installationsmapp som $tomcat i denna guide.

Låt oss nu gå igenom procedurerna för att härda och säkra Tomcat.

Ta Bort Serverbanner

Att ta bort serverbannern från HTTP-huvudet är en av de första säkerhetsåtgärderna du bör vidta.

Att ha en serverbanner exponerar vilken produkt och version du använder, vilket kan leda till informationsläckage och göra systemet sårbart.

Som standard ser en sida som serveras av Tomcat ut så här:

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

  • Navigera till mappen $tomcat/conf
  • Redigera filen server.xml med vi
  • Lägg till följande i anslutningsporten:
Server =" "

Exempel:

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • Spara filen och starta om Tomcat. När du nu öppnar en applikation bör serverhuvudet ha ett tomt värde.

Starta Tomcat med en Säkerhetshanterare

Säkerhetshanteraren skyddar dig från opålitliga applets som körs i din webbläsare.

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

Detta är fördelaktigt eftersom du inte behöver ändra någon konfigurationsfil. Du behöver bara använda –security argumentet när du startar startup.sh filen.

[[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 hantera webbförfrågningar via HTTPS är avgörande för att skydda dataöverföring mellan klienten 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 en nyckellagringsfil med certifikatet, kan du lägga till följande rad i filen server.xml i anslutningsportsektionen.

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

Ändra filnamnet för nyckellagringen och lösenordet med dina värden.

Om du behöver hjälp med nyckellagring- och CSR-processen, se denna guide.

Framtvinga HTTPS

Detta är endast aktuellt om du har aktiverat SSL. Annars kommer det att leda till problem med applikationen.

När du har aktiverat SSL är det bra att tvinga omdirigering av alla HTTP-förfrågningar till HTTPS för att säkerställa säker kommunikation mellan användare och Tomcat-applikationsservern.

  • Navigera till mappen $tomcat/conf
  • Redigera web.xml med vi
  • Lägg till följande kod innan -syntaxen:
<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

Lägg till Säker och HttpOnly-flagga till Cookies

Det är möjligt att stjäla eller manipulera sessioner och cookies för webbapplikationer om cookies inte är säkra. Det är en flagga som injiceras i svarshuvudet.

Detta görs genom att lägga till nedanstående rader i session-config-delen av filen web.xml:

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

Konfigurationsbild:

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

Kör Tomcat från ett Icke-Privilegierat Konto

Det är en god idé att använda en separat icke-privilegierad användare för Tomcat. Detta görs för att skydda andra tjänster i händelse av att ett konto blir komprometterat.

  • Skapa en UNIX-användare, låt oss säga tomcat:
useradd tomcat
  • Stoppa Tomcat om den körs.
  • Ändra ägarskapet för $tomcat till användaren tomcat:
chown -R tomcat:tomcat tomcat/

Starta Tomcat och se till att den körs med användaren tomcat.

Ta Bort Standard/Oönskade Applikationer

Som standard levereras Tomcat med följande webbapplikationer, som troligtvis inte behövs i en produktionsmiljö.

Du kan ta bort dem för att hålla miljön ren och undvika alla kända säkerhetsrisker som medföljer standardapplikationerna i Tomcat:

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

De finns i mappen $tomcat/webapps:

[[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 konfigurerad för att stängas av på port 8005.

Visste du att du kan stänga av Tomcat-instansen genom att telnet:a till IP:-porten och utfärda kommandot SHUTDOWN?

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 #

Detta är farligt!

Som du förstår kan en standardkonfiguration leda till höga säkerhetsrisker.

Det rekommenderas att ändra Tomcat’s avstängningsport och standardkommando till något oförutsägbart.

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

8005 – Ändra till en oanvänd port.

SHUTDOWN – Ändra till något komplicerat.

Exempel:

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

Ersätt Standardsidan 404, 403, 500

Att använda en standardsida för felmeddelanden (sidan hittades inte, förbjuden, serverfel) kan avslöja versionsdetaljer.

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

För att lösa detta kan du skapa en allmän felsida och konfigurera web.xml för att omdirigera till den.

  • Navigera till $tomcat/webapps/$application
  • Skapa en error.jsp-fil med en textredigerare
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • Navigera till mappen $tomcat/conf
  • Lägg till följande i filen web.xml. Se till att du lägger till det före syntaxen:
<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 detta.

Mycket bättre!

Du kan även göra detta för java.lang.Exception. Detta hindrar exponering av Tomcats versionsinformation om ett java-undantag inträffar.

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 ovanstående guide har gett dig en bra förståelse för hur du kan säkra Tomcat. Om du vill lära dig mer om Tomcat-administration, kolla in den här onlinekursen.

Lär dig också hur du konfigurerar WAS för att sluta fråga efter lösenord under avstängning här.