= Appunti sparsi su Apache e Apache 2 =
== Configurazione minimale di Apache 2 su Devuan Jessie e Debian 8 ==
Di default Apache 2 si avvia senza supporto https e senza named virtual.
Io preferisco usare sempre dei named virtual, quindi imposto un default che non porti a nulla (una directory con un index.html senza niente) e poi tanti named virtual quanti ne servono.
Attenzione: se imposti un named virtual che ha lo stesso nome del FQDN del server (che so, mail.example.com) questo named virtual non funzionera`. I named virtual devono SEMPRE avere un nome diverso dal FQDN del server.
=== Configurazione minimale di Apache 2 per servire http e https: ===
Se vogliamo anche https, occorre abilitare il modulo con il comando {{{a2enmod ssl}}} e creare i certificati. Se non abilitiamo il modulo ssl le configurazioni di ssl verranno ignorate.
* Creare un file {{{sites-available/default.conf}}} con dentro le configurazioni per il sito di default:
{{{
ServerAdmin postmaster@example.com
DocumentRoot /var/www/default
SSLEngine on
SSLCertificateFile /etc/letsencrypt/example.cert
SSLCertificateKeyFile /etc/letsencrypt/example.key
ServerAdmin postmaster@example.com
DocumentRoot /var/www/default
}}}
* Abilitare questa configurazione e disabilitare il default "originale" che e` il file {{{000-default.conf}}}, creando i link dentro a {{{sites-enabled}}} o usando i comandi {{{a2ensite}}} e {{{a2dissite}}}
* Creare la directory {{{/var/www/default}}} (o quella che vogliamo usare) e magari metterci dentro un index.html con qualche avviso che dice che questo non e` il server che state cercando.
* Ricaricare Apache per vedere il risultato
=== A questo punto possiamo creare un named virtual che non sia il default, se ci serve ===
* Creare un file {{{sites-available/default.conf}}} con dentro le configurazioni per nostro named virtual, poniamo che sia "webmail.example.com":
{{{
ServerAdmin postmaster@example.com
ServerName webmail.example.com
ErrorLog ${APACHE_LOG_DIR}/webmail-error.log
CustomLog ${APACHE_LOG_DIR}/webmail-access.log combined
DocumentRoot /var/www/webmail
SSLEngine on
SSLCertificateFile /etc/letsencrypt/webmail-example.cert
SSLCertificateKeyFile /etc/letsencrypt/webmail-example.key
ServerAdmin postmaster@example.com
ServerName webmail.example.com
ErrorLog ${APACHE_LOG_DIR}/webmail-error.log
CustomLog ${APACHE_LOG_DIR}/webmail-access.log combined
DocumentRoot /var/www/webmail
}}}
* Abilitare questa configurazione creando il link dentro a {{{sites-enabled}}} o usando il comandio {{{a2ensite}}}
* Creare la directory {{{/var/www/webmail}}} e metterci dentro cio` che serve.
* Ricaricare Apache per vedere il risultato
=== Redirect da un sito a un altro ===
Per, per esempio, forzare un redirect da un sito http all'equivalente https, posso usare il comando "redirect" o il comando "redirectmatch" dentro alla configurazione. Posso usarlo anche per fare altri redirect non necessariamente fra http e https. Notare che devo indicare l' url di partenza (/) e quello di arrivo. Per evitare problemi con il rinnovo dei certificati di Let's Encrypt e` opportuno usare un redirect che NON ridiriga le richieste dei files sotto {{{/.well-known/acme-challenge/}}}.
Esempio:
{{{
ServerName www.pippo.com
ServerAdmin email@pippo.com
RedirectMatch 301 ^(?!/\.well-known/acme-challenge/).* https://www.pippo.com$0
DocumentRoot /var/www/dovevuoitu
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/pippo.crt
SSLCertificateKeyFile /etc/apache2/ssl/pippo.key
Eccetera eccetera
}}}
== Hardening dell' SSL ==
Questa e` la configurazione suggerita per Apache 2.4 o superiore per disabiltare i protocolli meno sicuri:
{{{
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
}}}
== Gestione del charset ==
Se le pagine del sito contengono caratteri non-standard che non sono codificati correttamente in HTML (tipo le lettere accentate), e queste nel browser vengono male, occorre definire il charset standard. Per farlo, editare {{{/etc/apache2/conf.d/charset}}} e modificarlo in modo che contenga {{{AddDefaultCharset ISO-8859-1}}}.
== Creazione di un certificato SSL self-signed per Apache2 ==
{{{
openssl req -new -x509 -days 3650 -nodes -out server.crt -keyout server.key
chmod 400 server.key
}}}
I due files server.crt e server.key vanno definiti nella config di apache.
== Statistiche di accesso e uso ==
* Usando mod_status, un client web testuale (links, per esempio) ed eseguendo il comando "apachectl status" si vede una statistica più o meno in realtime dei processi di Apache e di cosa sta facendo.
* Il comando "apachectl fullstatus" mostra i singoli processi con gli url che stanno servendo, il tempo impiegato, ecc. Ottimo per capire cosa è che si impalla e tiene occupato Apache per sempre.
== Configurazione di apache 1.3 con mod_ssl ==
Dopo aver installato apache 1.3 e mod_ssl, per avere il supporto per http e https occorre come minimo una configurazione con due virtualhosts, cosi`:
{{{
Listen 80
Listen 443
NameVirtualHost *:80
NameVirtualHost *:443
# Configurazione SSL
SSLEngine on
SSLCertificateFile /etc/apache/ssl/server.crt
SSLCertificateKeyFile /etc/apache/ssl/server.key
}}}
Questa ovviamente e` superminimale, ma funziona se si ha di fatto un solo host (niente virtuali davvero) che vuole fare sia http che https.