Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

domingo, 24 de enero de 2016

Cómo crear un servidor de impresión con CUPS

Hola a todos; hoy quiero explicaros cómo crear un servidor en el que poder centralizar varias impresoras que funcionen por red. Este servidor estaría funcionando en Linux, pero a diferencia de lo que os suelo tener acostumbrados en este blog; en esta ocasión tendrá una muy pequeña parte dependiente de la línea de comandos, lo cual hace que este servicio sea muy fácil de usar; si bien esa facilidad de uso hace que tengamos que tomar ciertas medidas de seguridad con el fin de evitar que gente indeseada haga uso del servicio. La utilidad en cuestión que convertirá nuestro equipo en un servidor de impresión se denomina CUPS; Common Unix Printing System. Utilidad que si bien no está instalada por defecto en ningún sistema operativo, sí que está incluida en la mayoría de los repositorios, evitando que tengamos que acceder a URLs de terceros.

IMPRESORA


La instalación de CUPS es extremadamente sencilla; simplemente hay que instalarlos desde los repositorios mediante el comando:

En Debian:
apt-get install cups
En Red Hat:
yum install cups

Con el software instalado, todavía no estaríamos preparados para usar la herramienta, ya que por defecto tiene todos los accesos cerrados, con el fin de que nosotros preparemos una configuración (en caso de ser posible restrictiva) que permita a unos pocos administrar el servidor de impresión. Todo esto se especifica en un único fichero denominado cupsd.conf, alojado en la carpeta /etc/cups/. Este fichero almacena toda la configuración del servicio cups; incluyendo por supuesto la ip y puerto de escucha y los orígenes desde los cuales puede ser accedido servidor de impresión; parámetros que por defecto están diseñados para que no entre absolutamente nadie más allá del propio servidor. Un ejemplo de parte del contenido que nos encontraríamos sería el siguiente:

  1. Listen localhost:631
  2. Listen /var/run/cups/cups.sock
  3. <Location />
  4.   Order allow,deny
  5. </Location>
  6. <Location /admin>
  7.   Order allow,deny
  8. </Location>..
  9. <Location /admin/conf>
  10.   AuthType Default
  11.   Require user @SYSTEM
  12.   Order allow,deny
  13. </Location>

Aunque esto únicamente es parte de la configuración reúne en esencia todo aquello que nosotros deseamos editar para ser capaces de gestionar correctamente nuestro servidor. Si os fijáis bien en el contenido, veréis que únicamente "escucha" en localhost, pero no solo eso, sino que además nadie es capaz de gestionar la utilidad, pues aunque en cada sección aparece una línea llamada Order, no hay ninguna que especifique allow o deny alguno. Lo única conclusión que podemos sacar de esta configuración es que las configuraciones allow tendrán prioridad sobre las de deny, con lo que podemos poner una línea de deny all y luego otra de allow all, que la línea de allow tendría prioridad.

Teniendo esto claro, habría que saber con exactitud los siguientes datos:

  • En qué ip/puerto queremos que "escuche" el servidor.
  • Desde qué ip/ips queremos que puedan conectarse al servidor.
La ip de escucha vendría a ser la ip del equipo en el que hemos instalado el software, mientras que el puerto es recomendable mantener el establecido por defecto; es decir 631.

Los orígenes desde los que queremos acceder al sofware son un poco más complicados de especificar, pues cada red y rango de ips es un mundo, pero si estuviesemos en un entorno pequeño con un rango de ips desde 192.168.1.0 a 192.168.1.255, una configuración muy básica sería que únicamente los miembros de dicha red pudiesen acceder a dicho software. Recalco que eso sería una configuración muy básica y que este tema es recomendable mirarlo con lupa, y que a poder ser en vez de establecer un rango de ips, nos limitásemos a especificar una única ip, para que solamente un equipo que tengamos controlado sea capaz de acceder.

Siguiendo estas recomendaciones, el fichero de configuración podría quedar de una forma parecida a la siguiente:


  1. Listen localhost:631
  2. Listen 192.168.1.4:631
  3. Listen /var/run/cups/cups.sock
  4. <Location />
  5.   Order allow,deny
  6.   allow 192.168.1.0/255.255.255.0
  7. </Location>
  8. <Location /admin>
  9.   Order allow,deny
  10.   allow 192.168.1.0/255.255.255.0
  11. </Location>
  12. <Location /admin/conf>
  13.   AuthType Default
  14.   Require user @SYSTEM
  15.   Order allow,deny
  16.   allow 192.168.1.0/255.255.255.0
  17. </Location>

Tras realizar el cambio sería obligatorio reiniciar cups para aplicar los cambios; algo tan sencillo como escribir en la terminal:

/etc/init.d/cups restart

No contentos con esto, hay secciones en las que es necesario que un usuario se loguee pues son secciones delicadas relacionadas con configuraciones y/o administraciones. Lamentablemente por defecto ningún usuario puede acceder por defecto a las susodichas, pues para ello tienen que ser miembros del grupo lpadmin. Afortunadamente esto se puede solventar fácilmente haciendo que un usuario existente pertenezca también a dicho grupo (aparte de los que ya pertenecía antes). Esto se logra mediante el comando usermod; comando que tendrá la estructura

usermod -aG lpadmin usuario

Es decir que si deseasemos que el usuario ivan perteneciese al grupo lpadmin tendríamos que escribir:

usermod -aG lpadmin ivan

Si bien este proceso puede parecer un poco tedioso, esto tiene que hacerse una única vez, con lo que en el futuro no sería necesario repetir todo lo realizado hasta ahora. Para poder disfrutar de este servidor tendríamos que escribir la dirección ip del servidor junto con su puerto en el navegador; en este caso sería: 192.168.1.4:631

Gracias a la configuración realizada, podremos gestionar la herramienta sin impedimentos, con lo que pasaríamos a lo más importante: El hecho de añadir una impresora. Para ello habría que dirigirse a la sección Administración  y dentro de ésta habría que clickar el botón Añadir impresora.

Añadir_impresora

Una vez clickado el botón, debido a la delicada naturaleza de esta operación, pasareis a usar automáticamente el protocolo HTTPS, es decir HTTP con SSL; esto es debido a que se quiere dificultar evitar que puedan obtener información sobre dicha tarea mediante ataques de Man in The Middle. Aún así dicho cambio no debería suponeros molestia alguna, ya que ya está todo preparado para que no sea necesario siquiera crear los certificados SSL (son creados automáticamente durante la instalación). El cambio te redirigirá a la misma sección de antes en la que habría que clickar de nuevo el botón Añadir Impresora, momento en el cual nos preguntará por unas credenciales; dichas credenciales tendrían que ser las mismas que las del usuario al que hemos introducido en el grupo lpadmin; por ejemplo en mi caso tendría que poner las credenciales del usuario ivan.

login

Con las credenciales introducidas, pasaríamos a seleccionar la impresora que deseamos agregar. En caso de estar conectada por ethernet/WiFi o conectada físicamente, aparecerá automáticamente en la pantalla; en caso de estar conectadas en cambio por IPP, http o Samba, habría que mirar el manual de la impresora pues cada una tiene su firmware, sus opciones, etc... En este caso en concreto la impresora que voy a añadir está por WiFi con lo que es detectada automáticamente sin problema alguno, con lo que simplemente habría que seleccionarla y listo.



Con dicha selección sería necesario seleccionar el driver que el servidor usará para trabajar con dicha impresroa; no es lo mismo detectar la impresora que ser capaz de usarla a la perfección; aquí lo suyo suele ser buscar el más parecido a nuestro modelo; en caso de no encontrar compatibilidad alguna sería necesario buscar el PostScript PPD del fabricante de la impresora en cuestión; no es algo que suceda demasiado a menudo pero se puede dar el caso...

driver


Por último, con todo lo anterior establecido, habría que simplemente especificar el nombre y la descripción que le daremos a la impresora que vamos a añadir. Este paso es el menos importante de todos pues simplemente se trata de poner un nombre y una descripción lo suficientemente informativa como para distinguir esa impresora en el futuro.

Nombre_impresora

Con la descripción puesta, tendríamos una impresora completamente operativa, con lo que ahora simplemente tendríamos que usarla. El uso de esta impresora se puede hacer tanto desde Windows como desde Linux; es decir que aquí no hay distinción alguna y no por pertenecer a un sistema operativo diferente a Linux nos quedaríamos acceso al servidor de impresión (con todo lo que ello ofrece). Por ejemplo, desde Windows podemos agregar una nueva impresora y seleccionar una impresora compartida... La ruta de cualquier impresora añadida en este servidor sería:

https://ip_servidor:puerto/printers/nombre_impresora

Un ejemplo de esta estructura aplicada a la agregación de una impresora desde Windows sería:


Ahora podríamos hacer uso de esta impresora sin problema alguno; obviamente se le puede sacar mucho más partido a CUPS del que le hemos dado ahora, pero estas serían las bases que uno tendría que seguir para poder disfrutar de las funcionalidades más básicas; a partir de aquí uno tendría que "jugar" y ver cómo poder adaptar esta utilidad a sus necesidades.

Espero que os haya resultado útil.

Saludos.

1 comentario :