Praktyczny przewodnik po wzmacnianiu i zabezpieczaniu serwera Apache Tomcat z najlepszymi praktykami.
Tomcat to jeden z najpopularniejszych serwerów Servlet i JSP Container. Jest używany przez niektóre z następujących witryn o dużym natężeniu ruchu:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
Poniższy wykres przedstawia pozycję rynkową Tomcata na serwerze aplikacji Java.
Źródło: Plumbr
Technicznie rzecz biorąc, Tomcata można używać jako serwera frontonu do bezpośredniej obsługi żądań witryn. Jednak w środowisku produkcyjnym możesz chcieć użyć niektórych serwerów internetowych, takich jak Apache, Nginx, jako front-end do kierowania żądań do Tomcata.
Korzystanie z serwera WWW do obsługi żądań zapewnia korzyści w zakresie wydajności i bezpieczeństwa. Jeśli używasz Apache HTTP jako frontowego serwera WWW, musisz również rozważyć jego zabezpieczenie.
Posiadanie domyślnej konfiguracji Tomcata może ujawnić poufne informacje, co pomaga hakerowi przygotować się do ataku na aplikację.
Poniższe są testowane na Tomcat 7.x, środowisku UNIX.
Publiczność
Jest to przeznaczone dla administratora oprogramowania pośredniego, wsparcia aplikacji, analityka systemu lub każdego, kto pracuje lub chce nauczyć się hartowania i zabezpieczeń Tomcat.
Dobra znajomość komend Tomcat i UNIX jest obowiązkowa.
Uwagi
Potrzebujemy narzędzia do sprawdzania nagłówków HTTP w celu weryfikacji. Możesz to zrobić na dwa sposoby.
Jeśli testujesz aplikację dostępną w Internecie, możesz użyć następujących narzędzi HTTP Header, aby zweryfikować implementację.
A w przypadku aplikacji intranetowych możesz użyć narzędzi programistycznych Google Chrome, Firefox.
Najlepszym rozwiązaniem jest wykonanie kopii zapasowej każdego pliku, który zamierzasz zmodyfikować.
W niniejszych wytycznych będziemy nazywać folder instalacyjny Tomcat jako $tomcat.
Przejdźmy przez procedury utwardzania i zabezpieczania.
Usuń baner serwera
Usunięcie banera serwera z nagłówka HTTP jest jedną z pierwszych rzeczy, które należy wykonać jako wzmocnienie.
Posiadanie banera serwera ujawnia produkt i wersję, z której korzystasz, i prowadzi do podatności na wyciek informacji.
Domyślnie strona obsługiwana przez Tomcat będzie wyświetlana w ten sposób.
Ukryjmy szczegóły produktu i wersji w nagłówku Serwer.
- Przejdź do folderu $tomcat/conf
- Zmodyfikuj plik server.xml za pomocą vi
- Dodaj następujące do portu złącza
Server =” “
Były: –
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Zapisz plik i uruchom ponownie Tomcata. Teraz, gdy uzyskujesz dostęp do aplikacji, powinieneś zobaczyć pustą wartość w nagłówku serwera.
Uruchamianie Tomcata z menedżerem ds. bezpieczeństwa
Security Manager chroni Cię przed niezaufanym apletem działającym w Twojej przeglądarce.
Uruchamianie Tomcata z menedżerem bezpieczeństwa jest lepsze niż uruchamianie bez niego. Tomcat ma doskonałą dokumentację na Menedżer bezpieczeństwa Tomcat.
Dobrą rzeczą jest to, że nie musisz zmieniać żadnego pliku konfiguracyjnego. To po prostu sposób, w jaki uruchamiasz plik startup.sh.
Wszystko, co musisz zrobić, to uruchomić tomcat z argumentem –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]#
Włącz SSL/TLS
Obsługa żądań internetowych przez HTTPS jest niezbędna do ochrony danych między klientem a Tomcat. Aby Twoja aplikacja internetowa była dostępna przez HTTPS, musisz zaimplementować certyfikat SSL.
Zakładając, że masz już gotowy magazyn kluczy z certyfikatem, możesz dodać poniższy wiersz w pliku server.xml w sekcji Port łącznika.
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Zmień nazwę pliku Keystore i hasło na swoje.
Jeśli potrzebujesz pomocy w procesie przechowywania kluczy i CSR, zapoznaj się z tym przewodnikiem.
Wymuszaj HTTPS
Ma to zastosowanie tylko wtedy, gdy masz włączony protokół SSL. Jeśli nie, zepsuje to aplikację.
Po włączeniu SSL dobrze byłoby wymusić przekierowanie wszystkich żądań HTTP do HTTPS, aby zapewnić bezpieczną komunikację między użytkownikiem a serwerem aplikacji Tomcat.
- Przejdź do folderu $tomcat/conf
- Zmodyfikuj plik web.xml za pomocą vi
- Dodaj następujące przed składnią
<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>
- Zapisz plik i uruchom ponownie Tomcat
Dodaj flagę Secure & HttpOnly do pliku cookie
Możliwe jest kradzież lub manipulowanie sesją aplikacji internetowej i plikami cookie bez posiadania bezpiecznego pliku cookie. Jest to flaga, która jest wstrzykiwana do nagłówka odpowiedzi.
Odbywa się to poprzez dodanie poniżej wiersza w sekcji session-config pliku web.xml
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Zrzut ekranu konfiguracji:
Zapisz plik i uruchom ponownie Tomcat, aby sprawdzić nagłówek odpowiedzi HTTP.
Uruchom Tomcata z nieuprzywilejowanego konta
Dobrze jest użyć osobnego nieuprzywilejowanego użytkownika dla Tomcata. Chodzi o to, aby chronić inne działające usługi w przypadku naruszenia któregokolwiek z kont.
- Utwórz użytkownika UNIX, powiedzmy tomcat
useradd tomcat
- Zatrzymaj Tomcata, jeśli działa
- Zmień własność $tomcat na użytkownika tomcat
chown -R tomcat:tomcat tomcat/
Uruchom Tomcat i upewnij się, że działa z użytkownikiem tomcat
Usuń domyślne/niechciane aplikacje
Domyślnie Tomcat jest dostarczany z następującymi aplikacjami internetowymi, które mogą być lub nie być wymagane w środowisku produkcyjnym.
Możesz je usunąć, aby utrzymać je w czystości i uniknąć wszelkich znanych zagrożeń bezpieczeństwa dzięki domyślnej aplikacji Tomcat.
- ROOT – Domyślna strona powitalna
- Dokumenty – dokumentacja Tomcat
- Przykłady – JSP i serwlety do demonstracji
- Manager, host-manager – administracja Tomcat
Są one dostępne w folderze $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]#
Zmień port SHUTDOWN i polecenie
Domyślnie tomcat jest skonfigurowany do wyłączania na porcie 8005.
Czy wiesz, że możesz zamknąć instancję tomcat, wykonując telnet na adres IP: port i wydając polecenie 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 #
Niebezpieczny!
Widzisz, posiadanie domyślnej konfiguracji prowadzi do wysokiego ryzyka bezpieczeństwa.
Zaleca się zmianę portu zamykania tomcat i domyślnego polecenia na coś nieprzewidywalnego.
- Zmodyfikuj następujące elementy w pliku server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005 – Zmień na inny nieużywany port
WYŁĄCZENIE – Zmień na coś skomplikowanego
Były-
<Server port="8867" shutdown="NOTGONNAGUESS">
Zastąp domyślną stronę 404, 403, 500
Posiadanie domyślnej strony dla nieznalezionego, zabronionego, błędu serwera ujawnia szczegóły wersji.
Spójrzmy na domyślną stronę 404.
Aby to złagodzić, możesz najpierw utworzyć stronę błędu ogólnego i skonfigurować web.xml tak, aby przekierowywał do strony błędu ogólnego.
- Przejdź do $tomcat/webapps/$application
- Utwórz plik error.jsp za pomocą edytora vi
<html> <head> <title>Error Page</title> </head> <body> That's an error! </body> </html>
- Przejdź do folderu $tomcat/conf
- Dodaj następujące elementy w pliku web.xml. Upewnij się, że dodałeś przed składnią
<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>
- Uruchom ponownie serwer tomcat, aby go przetestować
Dużo lepiej!
Możesz to zrobić również dla java.lang.Exception. Pomoże to w nieujawnianiu informacji o wersji tomcat w przypadku wyjątku java lang.
Wystarczy dodać następujące w web.xml i zrestartować serwer tomcat.
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Mam nadzieję, że powyższy poradnik da ci pomysł na zabezpieczenie Tomcata. Jeśli chcesz dowiedzieć się więcej o administracji Tomcata, sprawdź to kurs online.
Dowiedz się również, jak skonfigurować WAS, aby przestał pytać o hasło podczas zamykania tutaj.