So optimieren Sie Ihre Tomcat-Installation unter Ubuntu 14.04

Einführung

Tomcat ist eine beliebte Implementierung der Java Servlet- und JavaServer Pages-Technologien. Es wird von der Apache Software Foundation unter der beliebten Open Source-Lizenz Apache veröffentlicht. Seine leistungsstarken Funktionen, die günstige Lizenz und die großartige Community machen es zu einem der besten und beliebtesten Java-Servlets.

Tomcat erfordert nach der Installation fast immer eine zusätzliche Feinabstimmung. In diesem Artikel erfahren Sie, wie Sie Ihre Tomcat-Installation so optimieren, dass sie sicher und effizient ausgeführt wird.

In diesem Artikel wird das Ausführen von Tomcat unter Ubuntu 14.04 fortgesetzt. Es wird davon ausgegangen, dass Sie zuvor https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu gelesen haben -14-04-via-apt-get [So installieren Sie Apache Tomcat 7 unter Ubuntu 14.04 über Apt-Get].

Voraussetzungen

Dieses Handbuch wurde unter Ubuntu 14.04 getestet. Die beschriebene Installation und Konfiguration ist unter anderen Betriebssystemen oder Betriebssystemversionen ähnlich, die Befehle und der Speicherort der Konfigurationsdateien können jedoch variieren.

Für dieses Tutorial benötigen Sie:

Alle Befehle in diesem Lernprogramm sollten als Benutzer ohne Rootberechtigung ausgeführt werden. Wenn für den Befehl root-Zugriff erforderlich ist, wird vor + sudo + angezeigt.

Bereitstellen von Anforderungen auf dem Standard-HTTP-Port

Wie Sie wahrscheinlich bereits bemerkt haben, überwacht Tomcat standardmäßig den TCP-Port 8080. Dieser Standardport kommt hauptsächlich deshalb, weil Tomcat unter dem nicht privilegierten Benutzer "+ tomcat7 " läuft. Unter Linux dürfen nur privilegierte Benutzer wie " root +" Ports unter 1024 überwachen, sofern nichts anderes konfiguriert ist. Daher können Sie den Tomcat-Listener-Port nicht einfach auf 80 (HTTP) ändern.

Die erste Aufgabe bei der Optimierung Ihrer Tomcat-Installation besteht darin, das oben genannte Problem zu lösen und sicherzustellen, dass Ihre Tomcat-Webanwendungen auf dem Standard-HTTP-Port verfügbar sind.

Der einfachste (aber nicht unbedingt der beste) Weg, dies zu beheben, besteht darin, eine Firewall (iptables) zu erstellen, die vom TCP-Port 80 zum TCP-Port 8080 weiterleitet. Dies kann mit dem Befehl + iptables + erfolgen:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Um diese iptables-Regel dauerhaft festzulegen, lesen Sie den Artikel https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall- using-iptables-on-ubuntu-14-04[How To Set Einrichten einer Firewall mit IPTables unter Ubuntu 14.04] im Abschnitt * Speichern der Iptables-Konfiguration *.

Um diese iptables-Regel zu entfernen, können Sie einfach das + -A + -Flag zum Hinzufügen von Regeln durch das + -D + -Flag zum Entfernen von Regeln im obigen Befehl ersetzen:

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Eine solche einfache Verkehrsweiterleitung ist aus Sicherheits- oder Leistungssicht nicht optimal. Stattdessen empfiehlt es sich, einen Webserver wie Nginx vor Tomcat hinzuzufügen. Der Grund dafür ist, dass Tomcat nur ein Java-Servlet mit den Grundfunktionen eines Webservers ist, während Nginx ein typischer, leistungsstarker und voll funktionsfähiger Webserver ist. Hier sind einige wichtige Vorteile der Verwendung von Nginx als Front-End-Server:

  • Nginx ist sicherer als Tomcat und kann es effizient vor verschiedenen Angriffen schützen. Bei dringenden Sicherheitsupdates ist es viel einfacher, schneller und sicherer, den Frontend-Nginx-Webserver zu aktualisieren, als sich um Ausfallzeiten und Kompatibilitätsprobleme im Zusammenhang mit Tomcat-Upgrades zu sorgen.

  • Nginx bedient den HTTP- und HTTPS-Verkehr effizienter und bietet eine bessere Unterstützung für statischen Inhalt, Caching und SSL.

  • Nginx kann problemlos so konfiguriert werden, dass es jeden Port überwacht, einschließlich 80 und 443.

Wenn Sie von den oben genannten Vorteilen überzeugt sind, stellen Sie zunächst sicher, dass Sie die vorherige iptables-Regel entfernt haben, und installieren Sie dann Nginx mit dem folgenden Befehl:

sudo apt-get install nginx

Bearbeiten Sie anschließend die Standard-Serverblockkonfiguration von Nginx ("+ / etc / nginx / sites-enabled / default +") mit Ihrem bevorzugten Editor wie folgt:

sudo nano /etc/nginx/sites-enabled/default

Suchen Sie nach dem Teil "+ location / +", der angibt, wie alle Anforderungen bedient werden sollen, und stellen Sie sicher, dass er wie folgt aussieht:

/ etc / nginx / sites-enabled / default

location / {
   proxy_pass http://127.0.0.1:8080/;
}

Die obige Anweisung "+ proxy_pass +" bedeutet, dass alle Anforderungen an die lokale IP-Adresse 127.0.0.1 auf dem TCP-Port 8080 weitergeleitet werden sollen, an der Tomcat lauscht. Schließen Sie die Datei und starten Sie Nginx mit dem folgenden Befehl neu:

sudo service nginx restart

Versuchen Sie anschließend, über den Standard-HTTP-Port Ihres Browsers auf Tomcat zuzugreifen, indem Sie eine Verbindung zu der IP-Adresse Ihres Droplets herstellen. Die URL sollte wie folgt aussehen: + http: // +. Wenn alles funktioniert, sollte die Standardseite von Tomcat geöffnet werden. Wenn nicht, stellen Sie sicher, dass Sie die iptables-Regel entfernt haben und Tomcat gemäß den Voraussetzungen dieses Artikels ordnungsgemäß installiert wurde.

Tomcat sichern

Das Sichern von Tomcat ist wahrscheinlich die wichtigste Aufgabe, die häufig vernachlässigt wird. Glücklicherweise können Sie in wenigen Schritten ein ziemlich sicheres Tomcat-Setup haben. Um diesem Teil des Artikels zu folgen, sollte Nginx vor Tomcat wie zuvor beschrieben installiert und konfiguriert sein.

Administrative Webanwendungen entfernen

Der übliche Kompromiss zwischen Funktionalität und Sicherheit gilt auch für Tomcat. Um die Sicherheit zu erhöhen, können Sie die Standardanwendungen für Web-Manager und Host-Manager entfernen. Dies ist unpraktisch, da Sie die gesamte Verwaltung, einschließlich der Bereitstellung von Webanwendungen, über die Befehlszeile ausführen müssen.

Das Entfernen der Webadministrationstools von Tomcat ist gut für die Sicherheit, da Sie sich keine Sorgen machen müssen, dass jemand sie missbrauchen könnte. Diese gute Sicherheitspraxis wird häufig für Produktionsstandorte angewendet.

Die administrativen Webanwendungen sind in Ubuntus Paket "+ tomcat7-admin +" enthalten. Führen Sie den folgenden Befehl aus, um sie zu entfernen:

sudo apt-get remove tomcat7-admin

Einschränken des Zugriffs auf administrative Webanwendungen

Wenn Sie die administrativen Webanwendungen, wie im vorherigen Teil empfohlen, nicht entfernt haben, können wir den Zugriff auf sie zumindest einschränken. Ihre URLs sollten "+ http: /// manager / " und " http: /// host-manager / +" sein. Wenn unter diesen URLs ein Fehler 404 nicht gefunden angezeigt wird, bedeutet dies, dass sie bereits entfernt wurden und Sie nichts weiter tun müssen. Sie können jedoch die folgenden Anweisungen lesen, um zu erfahren, wie Sie mit anderen vertraulichen Ressourcen umgehen, die Sie möglicherweise schützen möchten.

Zu diesem Zeitpunkt akzeptiert Nginx Verbindungen über Port 80, sodass Sie von überall aus auf alle Webanwendungen unter + http: // + zugreifen können. In ähnlicher Weise lauscht Tomcat global auf Port 8080, d. H. + http: //: 8080 +, wo Sie die gleichen Anwendungen finden können. Um die Sicherheit zu verbessern, beschränken wir die über Nginx auf Port 80 verfügbaren Ressourcen. Wir werden Tomcat und seinen exponierten Port 8080 auch nur lokal für den Server und Nginx verfügbar machen.

Öffnen Sie die Standard-Serverblock-Konfigurationsdatei "+ / etc / nginx / sites-enabled / default +":

sudo nano /etc/nginx/sites-enabled/default

Fügen Sie nach der Anweisung "+ Servername ", jedoch oberhalb des Standard-Root-Verzeichnisses (" Verzeichnis / ") Folgendes hinzu und ersetzen Sie "+" durch die IP-Adresse Ihres lokalen Computers:

/ etc / nginx / sites-enabled / default

...
location /manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/manager/;
}
...

Sie sollten die gleiche Einschränkung für die Host-Manager-Anwendung anwenden, indem Sie einen weiteren Konfigurationsblock hinzufügen, in dem "+ Manager " durch " Host-Manager " ersetzt wird (ersetzen Sie "+" erneut durch Ihre lokale IP-Adresse):

/ etc / nginx / sites-enabled / default

...
location /host-manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/host-manager/;
}
...

Nach dem Neustart von Nginx ist der Zugriff auf die Webkontexte "+ manager" und "+ host-manager" nur auf Ihre lokale IP-Adresse beschränkt:

sudo service nginx restart

Sie können es testen, indem Sie in Ihrem Browser "+ http: /// manager / " und " http: /// host-manager / +" öffnen. Die Anwendungen sollten verfügbar sein. Wenn Sie jedoch versuchen, über einen öffentlichen Proxy oder einen anderen Computer auf dieselben URLs zuzugreifen, sollte der Fehler 403 Verboten angezeigt werden.

Als zusätzliche Maßnahme können Sie auch die Dokumentation und Beispiele von Tomcat mit dem folgenden Befehl entfernen:

sudo apt-get remove tomcat7-docs tomcat7-examples

Bitte beachten Sie, dass Tomcat weiterhin auf externe Verbindungen auf dem TCP-Port 8080 wartet. Somit können Nginx und seine Sicherheitsmaßnahmen leicht umgangen werden. Um dieses Problem zu beheben, konfigurieren Sie Tomcat so, dass nur die lokale Schnittstelle 127.0.0.1 überwacht wird. Öffnen Sie dazu die Datei "+ / etc / tomcat7 / server.xml" mit Ihrem bevorzugten Editor:

sudo nano /etc/tomcat7/server.xml

Fügen Sie "+ address =" 127.0.0.1 "" im Konfigurationsteil " Connector +" wie folgt hinzu:

/etc/tomcat7/server.xml

...
<Connector  port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   URIEncoding="UTF-8"
   redirectPort="8443" />
...

Starten Sie danach Tomcat neu, damit die neue Einstellung wirksam wird:

sudo service tomcat7 restart

Wenn Sie die obigen Schritte ausführen, wird sichergestellt, dass Sie über eine gute Grundsicherheitsstufe für Tomcat verfügen.

Feineinstellung der JVM-Einstellungen

Selbstverständlich gelten die universellen JVM-Feinabstimmungsprinzipien (Java Virtual Machine) auch für Tomcat. Während das JVM-Tuning eine Wissenschaft für sich ist, gibt es einige grundlegende, bewährte Methoden, die jeder leicht anwenden kann:

  • Die maximale Größe des Heapspeichers ("+ Xmx ") gibt an, wie viel Speicher Tomcat maximal verwenden kann. Es sollte ein Wert festgelegt werden, der genügend freien Speicher für die Ausführung des Droplets selbst und aller anderen Dienste, die Sie möglicherweise auf dem Droplet haben, freigibt. Wenn Ihr Droplet beispielsweise über 2 GB RAM verfügt, ist es möglicherweise sicher, xmx 1 GB RAM zuzuweisen. Beachten Sie jedoch, dass der von Tomcat tatsächlich verwendete Speicher etwas größer ist als die Größe von " Xmx +".

  • Die minimale Heap-Größe "+ Xms +" ist die beim Start zugewiesene Speichermenge. Sie sollte in den meisten Fällen gleich dem xmx-Wert sein. Auf diese Weise vermeiden Sie, dass der kostspielige Speicherzuweisungsprozess ausgeführt wird, da die Größe des zugewiesenen Speichers die ganze Zeit konstant bleibt.

  • Der Speicher, in dem Klassen dauerhaft gespeichert sind, "+ MaxPermSize ", sollte es Tomcat ermöglichen, die Klassen Ihrer Anwendungen zu laden und für die Instanziierung dieser Klassen freien Speicherplatz vom Wert " Xmx " zu lassen. Wenn Sie sich nicht sicher sind, wie viel Speicher Ihre Anwendungsklassen benötigen, können Sie " MaxPermSize " zunächst auf die Hälfte der Größe von " Xmx +" einstellen - in unserem Beispiel auf 512 MB.

Unter Ubuntu 14.04 können Sie die JVM-Optionen von Tomcat anpassen, indem Sie die Datei "+ / etc / default / tomcat7 +" bearbeiten. Um die obigen Tipps anzuwenden, öffnen Sie diese Datei mit Ihrem bevorzugten Editor:

sudo nano /etc/default/tomcat7

Wenn Sie die Installationsanweisungen von Tomcat unter den Voraussetzungen befolgt haben, sollten Sie die folgende Zeile finden:

/ etc / default / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
...

Vorausgesetzt, Ihr Droplet verfügt über 2 GB RAM und Sie möchten Tomcat ungefähr 1 GB zuweisen, sollte diese Zeile folgendermaßen geändert werden:

/ etc / default / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true  -Xmx -XX:MaxPermSize= -XX:+UseConcMarkSweepGC"
...

Damit diese Einstellung wirksam wird, müssen Sie Tomcat neu starten:

sudo service tomcat7 restart

Die obige JVM-Konfiguration ist ein guter Anfang, aber Sie sollten das Tomcat-Protokoll (+ / var / log / tomcat7 / catalina.out +) auf Probleme überwachen, insbesondere nach einem Neustart von Tomcat oder Bereitstellungen. Verwenden Sie zum Überwachen des Protokolls den Befehl + tail + wie folgt:

sudo tail -f /var/log/tomcat7/catalina.out

Wenn Sie + tail + noch nicht kennen, müssen Sie die Tastenkombination + Ctrl-C + auf Ihrer Tastatur drücken, um das Protokoll nicht mehr zu verfolgen.

Suchen Sie nach Fehlern wie + OutOfMemoryError +. Ein solcher Fehler weist darauf hin, dass Sie die JVM-Einstellungen anpassen und insbesondere die Größe "+ Xmx +" erhöhen müssen.

Fazit

Das ist es! Jetzt haben Sie Tomcat in nur wenigen einfachen Schritten gesichert und optimiert. Diese grundlegenden Optimierungen werden nicht nur für die Produktion empfohlen, sondern auch für Test- und Entwicklungsumgebungen, die dem Internet ausgesetzt sind.