Habilitando https en zabbix

por | 5 julio, 2019

nueva petición en el trabajo (la cual me alegro hasta que supe que fue cliente final quien lo pidió y considerando que cliente final es un banco pues…)

Todo fácil pensé un poco de búsqueda, modificar el virtual host (alguna vez lo hice pero la memoria ya afecta) y ya esta. Nada mas apartado de la realidad

Para empezar zabbix no estaba configurado como vhost (desconozco si por defecto es así o fue algo que hizo la persona anterior cosa que dudo) pero tenemos una configuración muy repartida por todos lados y el tratar de descubrir todos los hoyos fue algo tedioso

Zabbix por defecto deja una configuración en /etc/apache2/conf-available/zabbix.conf donde se declara el alias (/zabbix) que se usara y sobre todo el directorio donde se encuentran los archivos del frontend que en mi caso es /usr/share/zabbix con eso ya podemos hacer el vhost como corresponde, entonces lo primero sera deshabilitar esta config

a2disconf zabbix

en mi caso para crear el archivo vhost volqué todo el contenido de zabbix.conf al nuevo archivo <url>.conf

cat /etc/apache2/conf-available/zabbix.conf > /etc/apache2/sites-available/<url>.conf

ya editando el archivo vhost agregamos las etiquetas correspondientes, eliminamos el alias y mantenemos todo lo demás

<VirtualHost *:80>
        ServerName <url>
        ServerAdmin webmaster@localhost
        DocumentRoot /usr/share/zabbix
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 10M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        # php_value date.timezone Europe/Riga
    </IfModule>
    <IfModule mod_php7.c>
        php_value max_execution_time 500
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 10M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        # php_value date.timezone Europe/Riga
    </IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf">                                                                                                                                                     [10/1379]
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/zabbix/app">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>

<Directory "/usr/share/zabbix/include">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>
<Directory "/usr/share/zabbix/local">
    Order deny,allow
    Deny from all
    <files *.php>
        Order deny,allow
        Deny from all
    </files>
</Directory>
</VirtualHost>


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

y finalmente se agrega el nuevo sitio

a2ensite <url>.conf

Con lo anterior y en estricto rigor ya tenemos el sitio configurado con su vhost correspondiente y podemos reiniciar el servicio apache2

systemctl restart apache2

Con los pasos anteriores «normalizamos» la configuración del frontend ahora toca la otra parte, el https

En mi caso decidí mantener el archivo creado anteriormente y crear un nuevo vhost de nombre ssl-<url>.conf, asi en caso de cualquier problema puedo habilitar el sitio original con http sin mayores problemas (obviamente en la empresa pensaron todo cuidadosamente y me tienen trabajando directamente sobre productivo)

y aqui viene la segunda «traba», al solicitar el certificado me indican que se compro uno con wildcard (o sea que, si por ejemplo compré el certificado para *.unashellrandom.cl puedo ocupar mas subdominios sin problemas como por ejemplo mail.unashellrandom.cl dns.unashellrandom.cl etc) y me entregan un archivo .pfx y un .txt que no tenia idea para que servían y que hacen

Archivo .pfx

Este archivo fue el resultado de exportar el certificado desde un IIS y en el se encuentra la clave publica y privada para ser usada en nuestro subdominio y para separarlas usamos los siguientes comandos:

Para Extraer la llave privada
openssl pkcs12 -in *.pfx -out resulto.txt -nodes
dentro del archivo resultante se encuentran ambas llaves por lo que tenemos que crear 2 archivos, el primero contendrá la llave privada y el segundo el certificado, para el primero copiamos todas las lineas desde
-----BEGIN PRIVATE KEY-----
hasta
-----END PRIVATE KEY-----
y para el certificado todas las lineas siguientes
ojo que este método dejara nuestra llave privada sin contraseña

esos archivos los movemos a las rutas /etc/ssl/private y /etc/ssl/certs respectivamente, cambiar los permisos a los mismos que los archivos que ya estén en ese directorio y procedemos a crear el vhost para https

<VirtualHost *:80>
        ServerName noc1.sixbell.com
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</virtualhost>
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerName noc1.sixbell.com
                ServerAdmin webmaster@localhost
                DocumentRoot /usr/share/zabbix
                ErrorLog /var/log/apache2/ssl/error.log
                CustomLog /var/log/apache2/ssl/access.log combined
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certs/public-cert.pem
                SSLCertificateKeyFile /etc/ssl/private/noc.sixbell.com.key
                <Directory "/usr/share/zabbix">
                    Options FollowSymLinks
                    AllowOverride None
                    Order allow,deny
                    Allow from all

                    <IfModule mod_php5.c>
                        php_value max_execution_time 300
                        php_value memory_limit 128M
                        php_value post_max_size 16M
                        php_value upload_max_filesize 10M
                        php_value max_input_time 300
                        php_value always_populate_raw_post_data -1
                        # php_value date.timezone Europe/Riga
                    </IfModule>

                    <IfModule mod_php7.c>
                        php_value max_execution_time 500
                        php_value memory_limit 128M
                        php_value post_max_size 16M
                        php_value upload_max_filesize 10M
                        php_value max_input_time 300
                        php_value always_populate_raw_post_data -1
                        # php_value date.timezone Europe/Riga
                    </IfModule>
                </Directory>
                <Directory "/usr/share/zabbix/conf">
                   Order deny,allow
                    Deny from all
                    <files *.php>
                        Order deny,allow
                        Deny from all
                    </files>
                </Directory>
                <Directory "/usr/share/zabbix/app">
                    Order deny,allow
                    Deny from all
                    <files *.php>
                        Order deny,allow
                        Deny from all
                    </files>
                </Directory>

                <Directory "/usr/share/zabbix/include">
                    Order deny,allow
                    Deny from all
                    <files *.php>
                        Order deny,allow
                        Deny from all
                    </files>
                </Directory>
                <Directory "/usr/share/zabbix/local">
                    Order deny,allow
                    Deny from all
                    <files *.php>
                        Order deny,allow
                        Deny from all
                    </files>
                </Directory>
                </VirtualHost>

</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

El archivo TXT en realidad es un archivo opcional que proporciona la firma de quien firmo el certificado que estamos usando, si se quiere agregar a la configuración de apache se debe agregar la siguiente linea

SSLCertificateChainFile <ruta al archivo>

Es recomendable que se incluya este archivo ya que de lo contrario en el navegador puede salir un error como este

error certificado intermedio en firefox

Básicamente es lo mismo que el vhost sin ssl pero agregamos unas pequeñas cosas (marcadas en rojo) y procedemos a habilitar tanto la pagina como las configuraciones necesarias

Verificamos tambien en el archivo /etc/apache2/ports.conf que este escuchando en el puerto 80 y el 443, deberia quedar algo asi (creo que viene por defecto)

more /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Finalmente habilitamos ssl, (en mi caso) deshabilito la pagina sin ssl y habilito la pagina con ssl

a2enmod ssl
a2dissite <url>.conf
a2ensite ssl-<url>.conf
systemctl restart apache2

Este es mi caso particular, tenia el sitio habilitado sin https por lo que deshabilite con a2dissite <url>.conf

Y eso es todo 😛 lo faltante fue pedir que habiliten el puerto en el fw y #chao

fuentes:
https://knowledge.digicert.com/solution/SO15668.html
https://www.digicert.com/csr-ssl-installation/ubuntu-server-with-apache2-openssl.htm
https://knowledge.digicert.com/solution/SO6252.html
https://stackoverflow.com/questions/9193907/installing-ssl-certificate-causes-the-server-to-fail-when-restarting
https://www.ssl247.com/kb/ssl-certificates/troubleshooting/apache/errors-asn1-encoding-routine-apache
https://stackoverflow.com/questions/41409606/zabbix-conf-redirect-to-another-port
https://www.digicert.com/es/apoyo-tecnico/apache-exportar-ssl.htm
https://www.digicert.com/es/instalar-certificado-ssl-apache.htm
https://beeznest.com/blog/2008/04/25/how-to-configure-https-on-apache-2/
https://www.geocerts.com/support/install-ssl-certificate-apache-web-server

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *