# Tomcat für den Produktiveinsatz



## schlingel (23. Jan 2012)

Hallo Leute,

ich arbeite zur Zeit an einem Projekt das ich mit dem Play-Framework entwickle. Sobald das fertig gestellt ist, würde ich gerne die Anwendung in einem Tomcat deployen.

Im Moment sieht es so aus, als wäre ich im Endeffekt dafür verantwortlich den Server einzurichten. Es wird ein Linux-Server.

Mit Tomcat komme ich mittlerweile sehr gut zurecht und habe diesen auch schon für sehr große Anwendungen konfiguriert. (Im Verbund mit JBoss als Appserver für mehr als 13.000 Usern täglich)

Doch seit dem letzten iX Heft bin ich allerdings verunsichert wie ich den Server absichern soll.

Zur Zeit sieht mein Plan folgende Punkte vor:
- Alle Services deaktivieren die ich nach außen hin nicht brauche. (Im Endeffekt werden also die SSH-Ports, Webports (HTTP, HTTPS) übrig bleiben)
- Möglicherweise mit iptables hier noch generell verhindern, das Anfragen durchkommen.
- Tomcat Standard-User/Gruppen ändern

Im iX-Heft wird auch davon gesprochen, einen Apache Webserver davor zu schalten. Welche Vorteile bringt das? Wo finde ich Literatur zur Konfiguration? 

Gibt es sonst noch Punkte die ich bedenken muss?


----------



## Noctarius (23. Jan 2012)

Generell würde ich immer einen Apache vorschalten und wenn du viele statische Inhalte ausliefern musst, diese auch vom Apache verteilen lassen. Der Tomcat ist nicht für statischen Inhalt optimiert.
Ansonsten kannst du den Tomcat wunderbar produktiv nutzen (7er Version habe ich aber noch keine Erfahrung, 6.xx sind absolut stabil).

So Sachen wie "Ports abschalten" sollte man sowieso machen.


----------



## maki (23. Jan 2012)

Wichtig ist imho das bestimmte Dienste (Manager, Admin, etc. pp.) eben höchstens von "intern" genutzt werden können.



> Im iX-Heft wird auch davon gesprochen, einen Apache Webserver davor zu schalten. Welche Vorteile bringt das? Wo finde ich Literatur zur Konfiguration?


mod_jk wird u.a. hier beschrieben: The Apache Tomcat Connector - Webserver HowTo - Apache HTTP Server HowTo

Vorteil: Man kann auf das Wissen von Admin aufbauen die Apache HTTP kennen, und natürlich alle Funktionen/Erweiterungen vom Apache HTTP Server nutzen, und falls bereits ein Apache HTTP vorhanden ist, kann es ein Vorteil sein die Java WebApp da transparent einzubinden.

Nebenbei, den Apache HTTP aus Performancegründen vor den Tomcat zu schalten (zB. um statische Inhalte auszuliefern) ist ein Tipp, der noch aus Tomcat 3.x Zeiten stammt und heute nicht immer unbedingt richtig ist, zumindest meine ich mich an Benchmarks zu erinnern die das gegenteilige Ergebnis zu Tage brachten.


----------



## schlingel (23. Jan 2012)

> Ansonsten kannst du den Tomcat wunderbar produktiv nutzen (7er Version habe ich aber noch keine Erfahrung, 6.xx sind absolut stabil).


In meiner alten Firma wurde letzten Sommer auf Version 7 des Tomcats umgestiegen. Da gab es außer ein paar Probleme bei der Migration weil sich Default-Verhalten geändert hat überhaupt keine Schwierigkeiten.


----------



## Guest2 (23. Jan 2012)

Moin,

dazu ist der Tomcat FAQ Eintag vielleicht auch lesenswert: Why should I integrate Apache with Tomcat? (or not) 

Viele Grüße,
Fancy


----------



## turtle (23. Jan 2012)

Wie maki schon sagte


> Wichtig ist imho das bestimmte Dienste (Manager, Admin, etc. pp.) eben höchstens von "intern" genutzt werden können.



Ich füge hinzu, Du solltest überlegen, ob Du Manager, Admin, etc.pp überhaupt im Produktivsystem brauchst?

Weiterhin sollte der Tomcat natürlich *MIT einem Security-Manager* laufen!

Ansonsten läuft Tomcat 7 bei mir sehr stabil.


----------



## TheDarkRose (23. Jan 2012)

Apache vorschalten hat unter anderem auch den Sinn, da der Tomcat nur als root gestartet Port 80 in Anspruch nehmen kann, was ein ziemliches Risiko wäre. Darum läuft der Tomcat mit einem unprivilegierten User auf port 8080 und der Apache auf Port 80 und mit mod_jk wird darauf zugegriffen.


----------



## schlingel (23. Jan 2012)

So, um die bis jetzt getätigten Aussagen zusammen zu fassen:

Apache httpd bringt nicht unbedingt Performancevorteile - nur wenn die Zahl der statischen Files sehr groß ist.
Apache httpd macht das ganze etwas flexibler durch die ganzen mod_* Plugins.
Um auf Port 80 zu laufen müsste Tomcat bzw. die JVM mit Root-Rechten gestartet werden = böse
Bei dynamischen Inhalten und wenigen statischen kann ich auch ohne Performance-Einbrüche den Tomcat laufen lasse.

Das heißt wenn ich per iptables von Port 80 auf Port 8080 umleite, kann ich auch ohne extra Sicherheitsloch durch Root-Rechte meinen Tomcat laufen lassen. Im Moment finde ich diese Option attraktiver da ich mir so einen Service spare den ich gar nicht brauche.


----------



## mvitz (23. Jan 2012)

Wobei nunmal auch der Apache HTTPD unter Root laufen (bzw. den Port binden) muss auf Port 80 zu lauschen.

Einen "Non"-Root Lösung für Tomcat gibt es hier: How to run Tomcat on Port 80


----------



## Noctarius (23. Jan 2012)

mvitz hat gesagt.:


> Wobei nunmal auch der Apache HTTPD unter Root laufen (bzw. den Port binden) muss auf Port 80 zu lauschen.



Der Apache nutzt danach aber setuid um sich selber in den User www-data (oder ähnliches) zu schubsen und damit die Root-Rechte abzulegen.


----------



## mvitz (25. Jan 2012)

Ok, wusste ich noch nicht. Danke.


----------



## AliceSteiner (26. Jan 2012)

Man braucht keine Root Rechte einen Apache zu starten. Wenn die Rechte (Beispiel Logfiles) geändert werden, kann den Apache auch User xy starten. Letztendlich läuft der Apache unter dem User, der in den Konfig angegeben wurde.

Was auch noch Sinn machen würde, wäre den Apache als Reverse Proxy einzusetzen.

Gruß
Alice


----------



## AliceSteiner (26. Jan 2012)

Muss das noch genauer sagen:
Man braucht keine Rootrechte wenn der Apache auf einem Port höher 1024 laufen soll.
Bin quasi hit Port 3000 verheiratet und nights anderes mehr gewohnt. 

Gruß
Alice


----------



## schlingel (26. Jan 2012)

> Man braucht keine Rootrechte wenn der Apache auf einem Port höher 1024 laufen soll.


Mag sein, aber ich habe eingangs erwähnt, dass ich Port 80 (und wahrscheinlich auch Port 443) verwenden werde. Ich werde das ganze einfach mit portforwarding lösen und mal testen wie das ganze läuft.


----------



## TheDarkRose (26. Jan 2012)

Um es klarzustellen. Man muss den Apachen nur mit Rootrechte starten wenn er ein Listen <1024 hat. Nach dem Start switcht der Apache selbständig zu den in der Config angegeben User und Gruppe und läuft nicht unter Rootrechten. Diese Fähigkeit besitzt z.B. Tomcat nicht.


----------

