CUPS y apache2 como servidor proxy …

… enrevesado de configurar y no muy seguro de por qué lo hace finalmente.

Pues sí, después de una buena temporada me he decidido a configurar un servidor virtual para el panel web de control de impresoras del programa cups.

Los pasos que he seguido han sido los siguientes:

  1. Crear un dominio específico: printers.empresa.net
  2. Configurar CUPS para que acepte conexiones seguras y no seguras.
  3. Crear un servidor virtual en Apache para dicho servidor que ejerce como servidor de proximidad inverso (reverse proxy).
  4. Disfrutar de lo logrado.

Configurar el servidor CUPS

La configuración básica es la siguiente (un extracto, no está completa):

ServerAlias printers.empresa.net
LogLevel debug
MaxLogSize 10m
# Allow remote access
Port 631
SSLPort 632
Listen /var/run/cups/cups.sock
Browsing On
BrowseAddress @LOCAL
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
BrowseWebIF     Yes
ServerCertificate /etc/letsencrypt/live/empresa.net/fullchain.pem
ServerKey /etc/letsencrypt/live/empresa.net/privkey.pem
SLListen 127.0.0.1:632

Configurar el servidor Apache

Con lo anterior consigo que escuche en los puertos 631 y 632 (para conexiones cifradas) sobre el interfaz local. Ahora paso a configurar el servidor web para que haga de frontal.

<VirtualHost *:80>
    ServerName          printers.empresa.net
    ServerAlias         printers

    # Comunicación con el servidor CUPS
    ProxyPass           / http://127.0.0.1:631/
    ProxyPassReverse    / http://127.0.0.1:631/
</VirtualHost>

<VirtualHost *:443>
    ServerName          printers.empresa.net
    ServerAlias         printers

    LogLevel    warn
    ErrorLog    /var/log/apache2/printers.empresa.net/error.log
    CustomLog   /var/log/apache2/printers.empresa.net/access.log combined 

    Include "/etc/apache2/ssl.conf"

    # Comunicación con el servidor CUPS
    SSLProxyEngine        on
    SSLProxyVerify        none
    SSLProxyCheckPeerCN   off
    SSLProxyCheckPeerName off

    ProxyPass           / https://127.0.0.1:632/ retry=1 acquire=3000 timeout=600 Keepalive=On
    ProxyPassReverse    / https://127.0.0.1:632/ 
</VirtualHost>

En el archivo /etc/apache2/ssl.conf , compartido por otros servidores virtuales, activo el motor de cifrado e indico dónde están los certificados para crear las conexiones seguras. El servidor printers.empresa.net debe estar dentro de ellos para que todo funcione.

Enlaces y referencias