Praktični vodič za jačanje i obezbeđivanje Apache Tomcat servera uz primenu najboljih praksi.
Tomcat je jedan od najrasprostranjenijih servera za Servlet i JSP kontejnere. Koristi ga veliki broj sajtova sa značajnim prometom, uključujući:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Walmart.com
- Reuters.com
- Meetup.com
- Webs.com
Prikaz tržišne pozicije Tomcat-a u domenu Java aplikacionih servera možete videti na grafikonu ispod.
Izvor: Plumbr
Sa tehničke strane, Tomcat se može koristiti kao front-end server za direktno opsluživanje zahteva ka sajtu. Međutim, u produkcionom okruženju, preporučljivo je koristiti web servere kao što su Apache ili Nginx kao front-end, koji će usmeravati zahteve ka Tomcat-u.
Korišćenje web servera za obradu zahteva donosi prednosti u performansama i bezbednosti. Ukoliko koristite Apache HTTP kao front-end web server, potrebno je i njega adekvatno obezbediti.
Podrazumevana konfiguracija Tomcat-a može otkriti osetljive informacije, što omogućava potencijalnim napadačima da se pripreme za napad na vašu aplikaciju.
Sledeći saveti su testirani na Tomcat 7.x, u UNIX okruženju.
Ciljna Grupa
Ovaj vodič je namenjen administratorima srednjeg softvera, osobama zaduženim za podršku aplikacijama, sistemskim analitičarima ili svima koji rade ili žele da steknu znanje o jačanju i bezbednosti Tomcat-a.
Obavezno je dobro poznavanje Tomcat-a i UNIX komandi.
Napomene
Potreban vam je alat za analizu HTTP zaglavlja radi verifikacije. To možete postići na dva načina.
Ukoliko testirate aplikaciju koja je dostupna preko interneta, možete koristiti specijalizovane alate za HTTP zaglavlja kako biste proverili implementaciju.
Za testiranje intranet aplikacija, možete koristiti Google Chrome ili Firefox alate za razvojne programere.
Kao najbolju praksu, obavezno napravite rezervnu kopiju svih datoteka koje planirate da menjate.
U ovom vodiču, fasciklu instalacije Tomcat-a ćemo označavati kao $tomcat.
Hajde da prođemo kroz korake jačanja i obezbeđivanja Tomcat-a.
Uklanjanje Server Banera
Uklanjanje server banera iz HTTP zaglavlja je jedan od prvih koraka koje treba preduzeti prilikom jačanja bezbednosti.
Prikazivanje banera servera otkriva proizvod i njegovu verziju koju koristite, što potencijalno može dovesti do ranjivosti u vidu curenja informacija.
Podrazumevano, stranica koju opslužuje Tomcat će se prikazati na sledeći način.
Sakrijmo informacije o proizvodu i verziji iz zaglavlja servera.
- Idite u fasciklu $tomcat/conf
- Izmenite server.xml koristeći vi
- Dodajte sledeće u konfiguraciju konektora porta:
Server =” “
Na primer: –
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Sačuvajte datoteku i ponovo pokrenite Tomcat. Nakon toga, kada pristupite aplikaciji, u zaglavlju servera bi trebalo da vidite praznu vrednost.
Pokretanje Tomcat-a sa Security Managerom
Security Manager vas štiti od nepouzdanih apleta koji se izvršavaju u vašem pregledaču.
Pokretanje Tomcat-a sa Security Managerom je mnogo sigurnije nego bez njega. Tomcat pruža odličnu dokumentaciju o Tomcat Security Manageru.
Dobra stvar kod ovoga je što ne morate da menjate konfiguracione datoteke. Radi se samo o načinu na koji izvršavate startup.sh datoteku.
Sve što treba da uradite je da pokrenete Tomcat sa –security argumentom.
[[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]#
Omogućavanje SSL/TLS
Opsluživanje web zahteva putem HTTPS-a je od suštinske važnosti za zaštitu podataka između klijenta i Tomcat-a. Da bi vaša web aplikacija bila dostupna putem HTTPS-a, neophodno je da implementirate SSL sertifikat.
Pod pretpostavkom da već imate spreman keystore sa sertifikatom, možete dodati sledeću liniju u server.xml datoteci, unutar sekcije konfiguracije porta:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Promenite ime datoteke i lozinku za Keystore sa vašim podacima.
Ako vam je potrebna pomoć u vezi sa kreiranjem keystorea i CSR procesom, pogledajte ovaj vodič.
Primena HTTPS
Ovo se primenjuje samo kada ste već omogućili SSL. U suprotnom, može doći do greške u radu aplikacije.
Kada omogućite SSL, preporučljivo je da preusmerite sve HTTP zahteve na HTTPS radi obezbeđene komunikacije između korisnika i Tomcat servera.
- Idite u fasciklu $tomcat/conf
- Izmenite web.xml koristeći vi
- Dodajte sledeće pre sintakse
<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>
- Sačuvajte datoteku i ponovo pokrenite Tomcat
Dodavanje Secure & HttpOnly zastavice u Cookie
Moguće je ukrasti ili manipulisati sesijama web aplikacije i kolačićima bez sigurnosne zastavice. To je oznaka koja se ubacuje u zaglavlje odgovora.
Ovo se radi dodavanjem sledeće linije u sekciju konfiguracije sesije web.xml datoteke:
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Snimak ekrana konfiguracije:
Sačuvajte datoteku i ponovo pokrenite Tomcat da biste proverili HTTP zaglavlje odgovora.
Pokretanje Tomcat-a sa neprivilegovanog naloga
Preporučljivo je koristiti zasebnog, neprivilegovanog korisnika za Tomcat. Ideja je da se zaštite drugi servisi u slučaju da dođe do kompromitacije nekog naloga.
- Kreirajte UNIX korisnika, na primer, tomcat
useradd tomcat
- Zaustavite Tomcat ako je pokrenut
- Promenite vlasništvo $tomcat foldera na korisnika tomcat
chown -R tomcat:tomcat tomcat/
Pokrenite Tomcat i proverite da li radi sa korisnikom tomcat.
Uklanjanje podrazumevanih/neželjenih aplikacija
Tomcat podrazumevano dolazi sa određenim web aplikacijama, koje možda nisu potrebne u produkcionom okruženju.
Možete ih obrisati kako biste održavali čist sistem i izbegli potencijalne bezbednosne rizike koji mogu proizaći iz podrazumevanih Tomcat aplikacija.
- ROOT – podrazumevana stranica dobrodošlice
- docs – Tomcat dokumentacija
- examples – JSP i servleti za demonstraciju
- manager, host-manager – Tomcat administracija
Ove aplikacije se nalaze u folderu $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]#
Promena SHUTDOWN porta i komande
Podrazumevano, Tomcat je konfigurisan da se isključi na portu 8005.
Da li ste znali da možete isključiti Tomcat instancu tako što ćete pokrenuti telnet na IP adresu:port i poslati komandu 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 #
Opasno!
Kao što vidite, podrazumevana konfiguracija može dovesti do visokog bezbednosnog rizika.
Preporučuje se da promenite port za isključivanje Tomcat-a, kao i podrazumevanu komandu, u nešto nepredvidivo.
- Izmenite sledeće u server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005 – promenite na neki drugi neiskorišćeni port
SHUTDOWN – promenite u nešto kompleksno
Primer:
<Server port="8867" shutdown="NOTGONNAGUESS">
Zamena podrazumevane 404, 403, 500 stranice
Podrazumevana stranica greške „server nije pronađen“ (404), „zabranjen pristup“ (403), otkriva detalje o verziji.
Pogledajmo podrazumevanu 404 stranicu.
Da biste ublažili potencijalne bezbednosne rizike, prvo možete kreirati opštu stranicu sa greškom i konfigurisati web.xml da preusmerava na tu stranicu.
- Idite na $tomcat/webapps/$application
- Kreirajte datoteku error.jsp pomoću vi editora
<html> <head> <title>Error Page</title> </head> <body> That's an error! </body> </html>
- Idite u fasciklu $tomcat/conf
- Dodajte sledeće u web.xml datoteku. Obavezno dodajte sintaksu pre
<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>
- Ponovo pokrenite Tomcat server da biste testirali promene
Mnogo bolje!
Ovo možete uraditi i za java.lang.Exception. Ovo će pomoći da se ne izlažu informacije o verziji Tomcat-a u slučaju da postoji bilo kakav java lang izuzetak.
Samo dodajte sledeće u web.xml i ponovo pokrenite Tomcat server.
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Nadam se da vam je ovaj vodič pružio ideju kako da obezbedite Tomcat server. Ako želite da saznate više o Tomcat administraciji, pogledajte ovaj online kurs.
Takođe, naučite kako da konfigurišete WAS da ne traži lozinku prilikom isključivanja.