Table of Contents
Appunti sparsi su Apache e Apache 2
Estrarre il numero di get per ip dal log
Trucchetto per leggere il log ed estrarre il numero di connessioni per ogni indirizzo ip remoto univoco, in ordine di numero di connessioni.
cat il-tuo-log | cut -d' ' -f1 | sort | uniq -c | sort -g | less
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:
<VirtualHost *:80> ServerAdmin postmaster@example.com DocumentRoot /var/www/default <[[/VirtualHost]]> <IfModule mod_ssl.c> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/letsencrypt/example.cert SSLCertificateKeyFile /etc/letsencrypt/example.key ServerAdmin postmaster@example.com DocumentRoot /var/www/default <[[/VirtualHost]]> <[[/IfModule]]>
- Abilitare questa configurazione e disabilitare il default "originale" che e` il file
000-default.conf
, creando i link dentro asites-enabled
o usando i comandia2ensite
ea2dissite
- 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":
<VirtualHost *:80> 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 <[[/VirtualHost]]> <IfModule mod_ssl.c> <VirtualHost *:443> 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 <[[/VirtualHost]]> <[[/IfModule]]>
- Abilitare questa configurazione creando il link dentro a
sites-enabled
o usando il comandioa2ensite
- 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:
<VirtualHost *:80> ServerName www.pippo.com ServerAdmin email@pippo.com RedirectMatch 301 ^(?!/\.well-known/acme-challenge/).* https://www.pippo.com$0 DocumentRoot /var/www/dovevuoitu <[[/VirtualHost]]> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/apache2/ssl/pippo.crt SSLCertificateKeyFile /etc/apache2/ssl/pippo.key Eccetera eccetera <[[/VirtualHost]]>
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 <VirtualHost *:80> <[[/VirtualHost]]> <VirtualHost *:443> # Configurazione SSL SSLEngine on SSLCertificateFile /etc/apache/ssl/server.crt SSLCertificateKeyFile /etc/apache/ssl/server.key <[[/VirtualHost]]>
Questa ovviamente e` superminimale, ma funziona se si ha di fatto un solo host (niente virtuali davvero) che vuole fare sia http che https.