Debian + Apache + Tomcat + Iptables

Debian + Apache + Tomcat + Iptables

Autore: Giovanni Uccio  
Laureato in Informatica presso l'Università degli Studi di Napoli Federico II, è un IT System Administrator, un forte sostenitore della filosofia open-source, dal 2001 un utente Gnu/Linux Debian e tempi addietro ha joinato lo Staff di "Debianizzati.org".




Introduzione

In questo articolo illustrerò come configurare su un sistema Debian 5.0 l’accesso ad un applicazione web sviluppata in java con l’utilizzo di apache tomcat servlet container, apache web server ed istruendo il firewall (netfilter) tramite iptables.


Informazioni sul sistema

OS: Gnu/Linux Debian 5.0 x86_64
Kernel:  2.6.26-2-amd64
Apache: 2.2.9
Mod JK Version: 1.2.28


Modulo interessato

Per far gestire tocmat all’interno del contesto apache web server abbiamo bisogno di un del modulo JK , che installeremo con il seguente comando:

apt-get install libapache2-mod-jk


Installazione

procediamo ala creazione del file workers.properties in /etc/apache2/workers.properties:

nano /etc/apache2/workers.properties

all’interno inseriremo le seguenti righe:

workers.tomcat_home=/usr/local/tomcat6
workers.java_home=/usr/local/java
ps=/
worker.list=worker1

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

ed eseguiamo:

chmod 400 workers.properties

configuriamo adesso il file /etc/apache2/apache2.conf , in modo da poter utilizzare il file precedentemente creato, e aggiungiamo alla fine del file queste righe:

#Worker properties file
JkWorkersFile /etc/apache2/workers.properties

#Logging
JkLogFile /var/log/apache2/mod_jk.log

#Set the jk log level [debug/error/info]
JkLogLevel info

editare il file /etc/apache2/site-avaible/default aggiungendo queste righe al VirtualHost inetressato:

JkMount /Application1 worker1
JkMount /Application1/* worker1

JkMount /Application2  worker1
JkMount /Application2/* worker1

andiamo ora a disabilitare la porta 8080 sul quale tomcat usualmente si mette in ascolto visto che abbiamo affidato le nostra applicazioni all’ apache web server, commentiamo il seguente blocco all’interno del file conf/server.xml, racchiudendolo nel commento <!- – (blocco) – ->

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

ripassiamo di nuovo alla configurazione di apache e disabilitiamo il browsing delle directory editando /etc/apache2/site-avaible/default all’interno del blocco <Directory /var/www/> :

alla voce "allow from all" cambiarla con "deny from all"

un altra cosa interessante che ci potrebbe venire in mente di fare è quella di abilitare il modulo SSL in apache in modo sa abiltiare al le connessioni sicure su protocollo https. e quindi abiltiamo il modulo:

a2enmod ssl

abilitiamo il default-ssl site in questo modo:

a2ensite default-ssl
/etc/init.d/apache2 reload


Configurazione netfilter tramite iptables

Andremo ora ad istruire iptables in modo da permettere solo il traffico per le connessioni
che verranno stabilite sulla porta 80 per il protocolo http.

Salviamo la nostra vecchia configurazione che è sempre cosa buona e giusta:

iptables-save > /etc/iptables_rules_old

creiamo un file chiamamo iptables_rules:

nano /etc/iptables_rules

all’interno ci isneriamo il seguente contenuto:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT

salviamo il file ed usciamo, andiamo adesso ad utilizzare questo file per istruire il nostro firewall:

iptables-restore < /etc/iptables_rules


Test

Per testare che tutto sia andato a buon fine, aprire un internet browser e digitare nella barra degli indirizzi:

http://ip_server/Application1

oppure

https://ip_server/Application1

Abbiamo terminato la nostra configurazione per un server web funzionante, come sempre questo è uno dei modi , una delle configurazioni che si possono avere in questo ampio contesto.
Non sono stato li a spiegare ogni minimo passaggio cosa che a mio avviso stimola la curiosità cosa che risulta essere sempre positiva.

  1. electelect05-03-2011

    Ciao,

    prima di tutto complimenti per la guida :)

    Ho un problema però, non mi riparte più apache:

    /etc/init.d/apache2 reload

    JkMount takes 1-2 arguments, A mount point from a context to a Tomcat workerfailed!

    Credo perchè ho copiato male

    JkMount /Application1 worker1
    JkMount /Application1 /* worker1

    JkMount /Application2 worker1
    JkMount /Application2/* worker1

    All’interno di /etc/apache2/site-avaible/default
    L’ho messo tra l’unico VirtualHost che ho, in questo modo

    JkMount /Application1 worker1
    JkMount /Application1 /* worker1

    JkMount /Application2 worker1
    JkMount /Application2/* worker1

    ..dove sbaglio?

  2. Giovanni UccioGiovanni Uccio05-03-2011

    ciao, grazie del commento, sicuramente una cosa che non va è lo spazio che si nota nella direttiva:

    JkMount /Application1 /* worker

    come ben puoi notare tra “Application1″ e “/*” c’è uno spazio che devi eliminare…

    prova e facci sapere.

    Saluti,
    Giovanni Uccio

  3. electelect05-03-2011

    Grazie Giovanni, adesso abbiam bisogno di un server funzionante quindi rimando a dopo il tentativo, nel frattempo però volevo chiedere cosa conviene utilizzare tra mod_jk, mod_proxy e nginx (le ho trovate guardando in giro)..

  4. Giovanni UccioGiovanni Uccio05-04-2011

    Il modulo Jk è per default/definizione un tomcat connector: http://tomcat.apache.org/connectors-doc/

    Il modulo proxy è invece un forward/reverse proxy che tramite configurazione
    può essere utilizzato per sopperire all’uso del modulo jk: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

    Invece per quanto rguardo il tuo riferimento, praticamente è un server http con funzione di reverse proxy, quindi praticamente
    lo potresti comparare direttamente con apache web server, anche in questo caso il primo ha moduli e addons.

    Non per essere “pesante” ma la scelta come sempre ricade sulle necessità di implementazione dell’utente finale.

    Giovanni Uccio

  5. electelect06-14-2011

    Salve Giovanni, ho fatto attenzione a copiare correttamente il contenuto all’interno del file ma quando riavvio apache ho questo errore:

    /etc/apache2# /etc/init.d/apache2 restart
    Restarting web server: apache2Syntax error on line 288 of /etc/apache2/apache2.conf:
    JkWorkersFile only allowed once
    failed!

    la linea è quella dove c’è scritto:

    JkWorkersFile /etc/apache2/workers.properties

    Credo ci sia un duplicato, ma non riesco a trovarlo..

    Ps: siccome ho messo la mia app in /ROOT ho scritto di conseguenza:

    JkMount /ROOT worker1
    JkMount /ROOT/* worker1

  6. Giovanni UccioGiovanni Uccio06-14-2011

    Salve,
    vorrei precisare che le web applications in tomcat vanno sotto ../webapps, e poi si effettua il JkMount:

    esempio ho un webapp chiamata DEVEL sotto ../webapps

    JkMount /DEVEL worker1
    JkMount /DEVEL/* worker1

    per la problematica esposta sul JkworkersFiles gentilmente postati (da qualche parte) tutti i fiel di configurazione, i percorsi dove sono salvati sul proprio server, in modo da avere una panoramica percisa delle configurazioni, visto che a norma quella da me proposta ancora adesso continua a funzionare.

    Grazie,
    Giovanni Uccio

  7. electelect06-14-2011

    http://ubuntuone.com/p/zAH/

    Ho scritto un file all’interno per spiegare il tutto, se qualcosa non è chiaro mi faccia sapere, grazie ancora

  8. Giovanni UccioGiovanni Uccio06-15-2011

    Attenzione lei sta utilizando un file workers.properties che non è quello dell’articolo, inoltre sta provando ed effettuare load balancing (e vedo solo un nodo di tomcat e non si capisce bene la situazionee e ci sono anche degli errori nei log),non entrando nel merito della questione… manca la configurazione di apache2.conf nel file che ha pubblicato (sarebbe meglio postare le conf su strumenti come pastebin.com). Seguendo tutte le istruzioni dell’articolo sono sicuro che tutto funzionerà corretamente, la situazione per effettuare load balacing è un attimino diversa.

    grazie,
    Giovanni Uccio

  9. electelect07-21-2011

    Ok, ho risolto :)

    Praticamente sul server girava Plesk ed usava dei file di configurazione diversi da quelli standard sia per Apache che Tomcat..

    Ora vorrei chiedere solo una cosa, che differenza c’è se nel Virtualhost interessato metto la mia app nella “DocumentRoot” o la monto col worker?

    Es: JkMount /Application1 worker1
    JkMount /Application1/* worker1

    ?

  10. Federico LagniFederico Lagni07-24-2011

    Ottimo, siamo contenti tu abbia risolto! Ora ri-aspettiamo il grande Giovanni per la risposta tecnica… :-)

  11. Maurizio BrunelliMaurizio Brunelli01-07-2012

    Perdonatemi se vado fuori argomento, ma non troppo, perchè è da giorni che cerco di configurare il server per poter usare owncloud:
    http://owncloud.org/install/
    Ho seguito le istruzioni per l’installazione, ma ogni volta che provo a connettermi mi da “internal server error”. Ho seguito anche questa discussione:http://www.pclinuxos.com/forum/index.php/topic,99186.0/wap2.html, ma senza risultati.
    Sto provando su Debian/Sid, e credo di aver installato tutto il necessario.

Lascia un Commento

Si deve essere il log in per inviare un commento.