P12. Servidor web + SSL + AWStats
Contingut
- 1 Enunciat
- 2 Procediment
- 2.1 Servidor web Apache
- 2.2 Protegir amb un certificat SSL autosignat
- 2.2.1 Crearem una clau privada al servidor lligada al nom de domini del web
- 2.2.2 Crearem un Certificate Signing Request per a obtenir el certificat a partir de la clau privada generada al punt anterior
- 2.2.3 Crear el certificat a partir del CSR i la clau privada
- 2.2.4 Instal·lar el mòdul SSL per a l'Apache
- 2.2.5 Aplicar el certificat al servidor Apache
- 2.2.6 Reiniciar servidor Apache per aplicar els canvis
- 2.2.7 Forçar accés per SSL
- 2.3 AWStats pic 26
Enunciat
A partir d'una instal·lació CentOS 7 mínima, instal·la un servidor web Apache, habilita servir web des dels home dels usuaris del sistema i activa la vista d'estadístiques mitjançant AWstats.
Procediment
Partiré d'una màquina virtual amb IP igual a 192.168.56.250 i utilitzaré SSH des del host amfitrió per a enviar les comandes.
Servidor web Apache
Instal·lació del servidor web
Primer de tot instal·larem el paquet httpd amb les següents comandes:
yum install httpd -y
Una vegada instal·lat, podem engegar el servei amb
systemctl start httpd
i habilitar la càrrega automàtica a l'arrencada amb
systemctl enable httpd
Llavors, haurem de permetre el port 80 i el 443 a través del Firewall per tal de poder accedir a la màquina des de qualsevol màquina de la xarxa; també desactivarem el selinux.
firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload
setenforce 0 #Solució temporal
Una vegada fet això, si naveguem a http://192.168.56.250 veurem la pàgina per defecte de l'Apache:
Habilitar els directoris web d'usuari (userdir)
Editarem el fitxer /etc/httpd/conf.d/userdir.conf
de la manera següent:
- línia 17:
#UserDir disabled
- línia 24:
UserDir public_html
- línia 32:
AllowOverride All
- línia 33:
Options None
De manera que el resultat final sigui:
# # UserDir: The name of the directory that is appended onto a user's home # directory if a ~user request is received. # # The path to the end user account 'public_html' directory must be # accessible to the webserver userid. This usually means that ~userid # must have permissions of 711, ~userid/public_html must have permissions # of 755, and documents contained therein must be world-readable. # Otherwise, the client will only receive a "403 Forbidden" message. # <IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disabled # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # UserDir public_html </IfModule> # # Control access to UserDir directories. The following is an example # for a site where these directories are restricted to read-only. # <Directory "/home/*/public_html"> AllowOverride All Options None Require method GET POST OPTIONS </Directory>
Com que hem modificat arxius de configuració de l'Apache, reiniciarem per a carregar els canvis:
systemctl restart httpd
Modificarem l'esquelet de creació del directori home dels usuaris
El directori /etc/skel
és la plantilla per a crear els homes dels usuaris; de manera que si dins de skel afegeixo un directori amb un arxiu a dins, aquest s'anirà replicant per a cada nou usuari que creem.
Creo un directori public_html
mkdir /etc/skel/public_html
Creo un arxiu index.html:
vi /etc/skel/public_html/index.html
Amb el contingut:
<h1>PÀGINA PER DEFECTE D'USUARI</h1>
Modificarem l'UMASK per defecte del home dels usuaris
UMASK 022
Si posem l'UMASK com a 022, els directoris d'usuari nous es crearan amb permisos tipus 755, de manera que Apache pugui accedir als homes per a llegir els userdirs.
Prova de funcionament USERDIR
Crearem un usuari nou
useradd guillem
Veiem que el seu home existeix, i que dins hi ha el public_html que hem afegit al skel.
Protegir amb un certificat SSL autosignat
El procediment per a crear aquest certificat és més o menys llarg però es pot documentar de manera simple. Els passos a seguir són els següents:
Crearem una clau privada al servidor lligada al nom de domini del web
- És important que el nom de domini que escrivim coincideixi amb el nom de domini sota el qual tenim la web penjada; però com que aquesta pràctica la fem en local, no és crucial ja que no sortirà a Internet). Podem introduir una paraula de pas per a aquesta clau privada, que ens permetrà una capa de seguretat per a autenticar-nos a nosaltres mateixos com a propietaris d'aquesta clau; però tampoc és obligatòria.
[root@m08p01 public_html]# openssl genrsa -des3 -out practicam09.local.key 2048 Generating RSA private key, 2048 bit long modulus .......................................................................................+++ ...........+++ e is 65537 (0x10001) Enter pass phrase for practicam09.local.key: Verifying - Enter pass phrase for practicam09.local.key:
Crearem un Certificate Signing Request per a obtenir el certificat a partir de la clau privada generada al punt anterior
openssl req -new -key practicam08.local.key -out practicam08.local.csr [root@m08p01 public_html]# openssl genrsa -des3 -out practicam08.local.key 2048 Generating RSA private key, 2048 bit long modulus .......................................................................................+++ ...........+++ e is 65537 (0x10001) Enter pass phrase for practicam08.local.key: Verifying - Enter pass phrase for practicam08.local.key: [root@m08p01 public_html]# openssl req -new -key practicam08.local.key -out practicam09.local.csr Enter pass phrase for practicam09.local.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
He deixat els apartats en blanc per agilitat en el procés.
- El que ens demana primer és la paraula de pas de la clau privada per a poder-ne saber el contingut. Llavors ens va demanant diverses dades que s'inclouran en el certificat que podrem extreure a partir d'aquest CSR com ara el codi de país, l'estat, ciutat, nom d'organització, secció, nom comú (que hauria de coincidir amb el nom de domini que volem protegir), i una adreça de correu de contacte. Aquestes dades seran públiques per a tothom que pugui accedir al nostre certificat, per exemple, qualsevol client que accedís a la nostra web xifrada amb el certificat que extreiem amb aquest CSR de manera que podem evitar dades que no volguem publicar (adreça de correu personal, potser).
Crear el certificat a partir del CSR i la clau privada
openssl x509 -req -days 365 -in practicam08.local.csr -signkey practicam08.local.key -out practicam08.local.crt [root@m08p01 public_html]# openssl x509 -req -days 365 -in practicam08.local.csr -signkey practicam08.local.key -out practicam08.local.crt Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd Getting Private key Enter pass phrase for practicam08.local.key:
- En aquest pas hem de definir un temps de caducitat del certificat (expiració). En aquest cas, aquest certificat deixarà de ser vàlid d'aquí un any.
- Una vegada generat el certificat, mourem els 2 arxius necessaris (Private Key i certificat) al directori per defecte on l'Apache els pot llegir
/etc/pki/tls/
i els col·locarem al subdirectori on correspongui:certs
o béprivate
per al certificat i la clau privada, respectivament.
mv practicam08.local.crt /etc/pki/tls/certs mv practicam08.local.key /etc/pki/tls/private
Instal·lar el mòdul SSL per a l'Apache
- Apache és un software molt modular que permet un funcionament bàsic amb la instal·lació de sèrie però es pot extendre amb mòduls addicionals. Per tal de poder oferir suport per a HTTPS amb el mòdul SSL corresponent que instal·larem
install mod_ssl
Amb la instal·lació d'aquest mòdul se'ns crearà un arxiu de configuració nou al directori de configuració de l'Apache que és el que s'encarrega de les directives per al default site que se servirà per HTTPS.
Aplicar el certificat al servidor Apache
- L'últim pas és dir a Apache que pel port 443 (defecte per a HTTP+SSL →HTTPS) xifri les comunicacions mitjançant aquest certificat que hem creat. Per no complicar-nos massa, modificaré l'arxiu de configuració per defecte que defineix les directives del meu web server pel que fa a HTTPS:
/etc/httpd/conf.d/ssl.conf
Buscarem la secció corresponent al certificat i editarem per tal de definir-hi la ruta al certificat creat.
(...) # Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. SSLCertificateFile /etc/pki/tls/certs/practicam08.local.crt (...)
Llavors buscarem la secció de la clau privada i definirem la ruta a la lau privada:
(...) # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /etc/pki/tls/private/practicam08.local.key (...)
Reiniciar servidor Apache per aplicar els canvis
- Farem un
systemctl restart httpd
de manera que Apache recarregui la nova configuració amb el certificat triat. Em demana la contrasenya de la clau privada.
systemctl restart httpd Enter SSL pass phrase for fe80::955f:5554:3436:ba19:443 (RSA) : ****
Forçar accés per SSL
Modificarem l'arxiu /var/www/html/.htaccess
i hi posarem el següent codi:
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
També modificarem l'arxiu de configuració principal per permetre modificacions amb arxius .htaccess:
(...) <Directory /> AllowOverride all Require all granted </Directory> (...)
Reiniciarem el servei i veurem que si naveguem a http://192.168.56.250/, ens redireccionarà a HTTPS i veurem l'advertència del certificat autosignat. El mateix passarà per a qualsevol userdir que hi accedim: http://192.168.56.250/~guillem
AWStats pic 26
Instal·lació
Primer de tot haurem d'instal·lar el repositori EPEL:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
I instal·larem el paquet amb:
yum --enablerepo=epel install awstats
utilitzant el repositori afegit abans.
Configuració
Modificarem l'arxiu de configuració de l'AWStats i modificarem la secció Directory de manera que quedi així, per a poder accedir a les estadístiques des de qualsevol màquina de la xarxa. Per defecte limita l'accés des de localhost.
<Directory "/usr/share/awstats/wwwroot"> Options None AllowOverride None <IfModule mod_authz_core.c> # Apache 2.4 Require all granted </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order allow,deny Allow from all </IfModule> </Directory>
El següent pas és configurar l'arxiu de l'AWStats per tal que ens mostri les estadístiques de l'Apache que s'executa en aquell servidor
nano /etc/awstats/awstats.localhost.localdomain.conf
La configuració per defecte hauria de funcionar en el nostre cas. Podem revisar el paràmetre LogFile i fer-lo coincidir amb la ruta on el nostre Apache guarda els logs i comprovar que el SiteDomain correspongui també amb el nom de la màquina que volem monitoritzar. En el nostre cas, com que és una màquina local que no surt a Internet, queda com a localhost.localdomain.
Reiniciarem el servidor web per carregar la nova configuració
systemctl restart httpd
Carregarem les estadístiques inicials a partir de les dades existents fins al moment amb la comanda:
/usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=localhost.localdomain -update
De manera que es faci un populate inicial de les dades recollides.
[root@m08p01 awstats]# /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=localhost.localdomain -update Create/Update database for config "/etc/awstats/awstats.localhost.localdomain.conf" by AWStats version 7.7 (build 20180105) From data in log file "/var/log/httpd/access_log"... Phase 1 : First bypass old records, searching new record... Direct access after last parsed record (after line 26) Jumped lines in file: 26 Found 26 already parsed records. Parsed lines in file: 0 Found 0 dropped records, Found 0 comments, Found 0 blank records, Found 0 corrupted records, Found 0 old records, Found 0 new qualified records.
Resultat
Podem navegar a la URL http://192.168.56.250/awstats/awstats.pl?config=localhost.localdomain
i veurem les estadístiques del nostre servidor: