Praktický návod, jak posílit a zabezpečit server Apache Tomcat pomocí osvědčených metod.
Tomcat představuje jeden z nejoblíbenějších serverů pro Servlet a JSP kontejnery. Je využíván řadou významných webových stránek s vysokou návštěvností, například:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Walmart.com
- Reuters.com
- Meetup.com
- Webs.com
Níže uvedený graf demonstruje tržní podíl Tomcatu v oblasti Java aplikačních serverů.
Zdroj: Plumbr
Tomcat lze technicky využít jako front-end server pro přímé zpracování webových požadavků. Nicméně, v produkčním prostředí je často výhodnější implementovat specializované webové servery, jako jsou Apache nebo Nginx, jako front-end pro směrování požadavků na Tomcat.
Použití webového serveru pro zpracování požadavků přináší výhody z hlediska výkonu i bezpečnosti. Pokud je jako front-end webový server použit Apache HTTP, je nutné věnovat pozornost i jeho zabezpečení.
Výchozí nastavení Tomcatu může nechtěně odhalit citlivé informace, což útočníkům usnadňuje přípravu na útok proti aplikaci.
Následující postupy byly testovány na Tomcat 7.x v prostředí UNIX.
Cílová skupina
Tento návod je určen správcům middleware, pracovníkům aplikační podpory, systémovým analytikům nebo komukoli, kdo pracuje s Tomcatem nebo se chce naučit, jak ho posílit a zabezpečit.
Základní znalost příkazů Tomcatu a prostředí UNIX je nezbytná.
Důležité poznámky
Pro ověření HTTP hlaviček je potřeba použít vhodný nástroj. Lze to provést dvěma způsoby.
Pro testování aplikací orientovaných na internet lze použít specializované nástroje pro analýzu HTTP hlaviček, které jsou online dostupné.
V případě intranetových aplikací lze použít vývojářské nástroje prohlížečů Google Chrome nebo Firefox.
Před jakýmikoli změnami v konfiguračních souborech je dobré provést jejich zálohu.
V tomto návodu bude instalační složka Tomcatu označována jako $tomcat
.
Pojďme se nyní podívat na konkrétní postupy posílení a zabezpečení serveru.
Odstranění server banneru
Jedním z prvních kroků pro zabezpečení je odstranění server banneru z HTTP hlavičky.
Server banner totiž odhaluje informace o použitém produktu a jeho verzi, což může vést k potenciálním bezpečnostním rizikům.
Ve výchozím stavu se stránka obsluhovaná Tomcatem prezentuje s explicitními informacemi.
Nyní skryjeme detaily o produktu a verzi z hlavičky serveru.
- Přejděte do adresáře
$tomcat/conf
. - Otevřete soubor
server.xml
pro editaci pomocí editoruvi
. - Do konfigurace portu konektoru přidejte následující řádek.
Server =" "
Příklad:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Uložte soubor a restartujte Tomcat. Po restartu by hlavička serveru měla být prázdná.
Spuštění Tomcatu s využitím Správce zabezpečení
Správce zabezpečení chrání aplikaci před nedůvěryhodnými applety spuštěnými v prohlížeči.
Spouštění Tomcatu s aktivním správcem zabezpečení je mnohem bezpečnější než jeho spouštění bez něj. Podrobnosti najdete v dokumentaci k Správci zabezpečení Tomcat.
V tomto případě není potřeba měnit žádný z konfiguračních souborů, jde pouze o jiný způsob spouštění skriptu startup.sh
.
Jednoduše spusťte Tomcat s parametrem -security
.
[[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]#
Aktivace SSL/TLS
Zabezpečení webové komunikace mezi klientem a Tomcatem pomocí HTTPS je naprosto zásadní. Pro zpřístupnění webové aplikace přes HTTPS je nutné implementovat SSL certifikát.
Za předpokladu, že je úložiště klíčů s certifikátem již připravené, lze do souboru server.xml
v sekci portu konektoru přidat následující řádek:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Nezapomeňte změnit název souboru úložiště klíčů a heslo podle vašich potřeb.
Pokud potřebujete pomoci s procesem vytvoření úložiště klíčů a CSR, nahlédněte do dostupných online příruček.
Vynucení HTTPS
Tato funkcionalita funguje pouze v případě, že je SSL aktivní. V opačném případě by se aplikace mohla chovat nečekaně.
Po aktivaci SSL je doporučeno vynutit přesměrování všech požadavků HTTP na HTTPS. To zajišťuje bezpečnou komunikaci mezi uživatelem a Tomcatem.
- Přejděte do adresáře
$tomcat/conf
. - Otevřete soubor
web.xml
pro editaci pomocí editoruvi
. - Před závěrečnou syntaxí
</web-app>
vložte následující kód.
<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>
- Uložte soubor a restartujte Tomcat.
Přidání příznaků Secure & HttpOnly k souborům cookie
Bezpečné soubory cookie mají ochranu proti odcizení a manipulaci. Jedná se o příznaky vkládané do hlavičky odpovědi.
Toho lze dosáhnout přidáním následujících řádků v sekci session-config
souboru web.xml
:
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Snímek konfigurace:
Uložte soubor a restartujte Tomcat, a následně ověřte HTTP hlavičky odpovědi.
Spouštění Tomcatu z neprivilegovaného účtu
Doporučuje se spouštět Tomcat pod samostatným, neprivilegovaným uživatelským účtem. Cílem je izolovat Tomcat od ostatních služeb v případě, že by byl jeden z účtů kompromitován.
- Vytvořte nového uživatele UNIX, například
tomcat
.
useradd tomcat
- Pokud je Tomcat spuštěn, zastavte ho.
- Změňte vlastníka adresáře
$tomcat
na uživateletomcat
.
chown -R tomcat:tomcat tomcat/
Spusťte Tomcat a ověřte, že běží pod účtem tomcat
.
Odstranění výchozích/nežádoucích aplikací
Tomcat ve výchozí konfiguraci obsahuje několik webových aplikací, které v produkčním prostředí nemusí být potřeba.
Jejich odstraněním snížíte riziko známých bezpečnostních problémů spojených s výchozími aplikacemi:
ROOT
– Výchozí uvítací stránka.docs
– Dokumentace Tomcat.examples
– JSP a servlety pro demonstraci.manager
,host-manager
– správa Tomcatu.
Tyto aplikace se nacházejí v adresáři $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]#
Změna portu a příkazu pro VYPNUTÍ
Tomcat je ve výchozím nastavení nastaven tak, aby se vypínal na portu 8005.
Věděli jste, že můžete vypnout Tomcat pomocí telnetu na IP:port a zadáním příkazu 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 #
Nebezpečné!
Výchozí nastavení představuje velké bezpečnostní riziko.
Doporučuje se změnit port pro vypnutí a výchozí příkaz na něco méně předvídatelného.
- Upravte následující řádek v souboru
server.xml
:
<Server port="8005" shutdown="SHUTDOWN">
8005
– Změňte na jiný nepoužívaný port.
SHUTDOWN
– Změňte na něco složitějšího.
Příklad:
<Server port="8867" shutdown="NOTGONNAGUESS">
Nahrazení výchozích stránek 404, 403 a 500
Výchozí chybové stránky pro nenalezeno, zakázáno a chyby serveru odhalují detaily o verzi.
Podívejme se na výchozí stránku 404:
Pro zmírnění problému vytvořte nejdříve obecnou chybovou stránku a následně nakonfigurujte web.xml
tak, aby se na ni přesměrovávalo.
- Přejděte do
$tomcat/webapps/$application
. - Vytvořte soubor
error.jsp
pomocí editoruvi
.
<html> <head> <title>Error Page</title> </head> <body> That's an error! </body> </html>
- Přejděte do adresáře
$tomcat/conf
. - Vložte následující do souboru
web.xml
, před závěrečnou syntaxí</web-app>
.
<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>
- Restartujte server Tomcat a otestujte.
Mnohem lepší!
Stejný postup lze aplikovat i pro java.lang.Exception
. Tím se zajistí, že se v případě jakékoli Java výjimky nebudou odhalovat informace o verzi Tomcatu.
Stačí do web.xml
přidat následující a restartovat server Tomcat:
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Doufám, že výše uvedený návod vám pomůže lépe zabezpečit Tomcat. Pokud se chcete dozvědět více o správě Tomcatu, doporučujeme tento online kurz.
Dozvíte se zde například i to, jak nakonfigurovat WAS, aby při vypínání nevyžadoval heslo.