Capítulo 5. Protocolos de soporte y de usuario

Tabla de contenidos

1. Servicio DNS
1.1. Resolución de nombres
1.2. Servidor recursivo unbound
1.3. Servidor autoritario con NSD
1.4. named
1.4.1. Vistas para resolver nombres interna y externamente
1.5. Referencias y lecturas recomendadas
2. Servidor ssh
2.1. Referencias y lecturas recomendadas
3. Protocolo DHCP
3.1. Configuración de un cliente DHCP
3.2. Configuración de un servidor DHCP
3.3. Referencias y lecturas recomendadas
4. Servidor ntp
4.1. Referencias y lecturas recomendadas
5. Servidor de correo electrónico
5.1. Protocolo SMTP
5.2. MTA OpenSMTPD
5.2.1. Depuración de OpenSMTP
5.2.2. Referencias
5.3. MTA sendmail
5.3.1. Relevo de Correo
5.3.2. SMTP-AUTH y TLS
5.3.3. Cambiar puerto SMTP
5.3.4. Dominios virtuales
5.4. Protocolos para revisar correo
5.4.1. Implementación Dovecot de IMAPS y POP3S
5.4.2. Implementación Courier de POP3S e IMAPS
5.5. Combatiendo correo no solicitado con SpamAssassin
5.5.1. Configuración de spamd
5.5.2. Configuración de procmail por usuario
5.5.3. Pruebas
5.5.4. Referencias y lecturas recomendadas
5.6. Correo desde el web (webmail)
5.6.1. Roundcubemail
5.7. Listas de correo
5.7.1. Instalación de Mailman (sin chroot)
6. Servidor ftp
6.1. Servicio FTP en una DMZ
6.2. Referencias y lecturas recomendadas
7. Servidor Web
7.1. OpenBSD httpd
7.1.1. Configuración mínima
7.1.2. Servidor con cifrado
7.1.3. Dominios virtuales
7.1.4. Sitio con PHP
7.1.5. Otros detalles de uso
7.2. Certificados SSL gratuitos con Let's Encrypt
7.3. Nginx
7.3.1. Uso de PHP con nginx
7.4. Apache
7.4.1. Directorios para usuarios
7.4.2. Dominios virtuales
7.4.3. SSL
7.4.4. PHP
7.4.5. Server Side Include

1. Servicio DNS

1.1. Resolución de nombres

Para resolver nombres OpenBSD emplea rutinas propias de resolución incluidas en la librería de C, se configuran en /etc/resolv.conf. Este archivo puede incluir, dominio (domain), lista de servidores (nameserver), orden de fuentes donde buscar (lookup), lista de dominios en los cuales buscar (search), retornar direcciones IP en orden (sortlist), opciones (options). Un ejemplo del archivo /etc/resolv.conf es:

	search miong.org
	nameserver 192.168.16.1
	lookup file bind

lookup permite especificar un orden para hacer resolución de acuerdo a uno o más de los siguientes argumentos separados por espacio:

  • bind que indica usar servidor de nombres (named)

  • file que indica buscar en /etc/hosts

  • yp que indica emplear el sistema YP si ypbind está corriendo.

1.2. Servidor recursivo unbound

Un servidor recursivo recibe consultas de dominios y las reenvia a otros servidores –comenzando por los servidores raiz– o si tiene respuesta a las consultas en su repositorio temporal fresco (cache) lo usa para responder. Es útil para responder consultas de una red local rapidamente, y en tal caso debe responder consultas que se hagan desde la red interna pero no desde Internet --como posiblemente ocurre con la vista recursiva del archivo /var/named/etc/named.conf si tiene uno.

A continuación explicamos como configurar unbound (que hace parte del sistema base desde OpenBSD y adJ 5.7) como servidor recursivo.

En /etc/rc.conf.local agregue

	unbound_flags="-c /var/unbound/etc/unbound.conf"

Y a la varialbe pkg_scripts agreguele unbound Configurelo en /var/unbound/etc/unbound.conf, cambiando al menos:

  1. Si su cortafuegos tiene en la red interna la IP 192.168.100.100 responda sólo a esa interfaz:

    interface: 192.168.100.100
    

  2. Permita consultas desde la red interna, añadiendo:

    access-control: 192.168.100.0/24 allow
    

  3. Las zonas autoritarias que nsd esté sirviendo también debe responderlas de manera autoritaria con unbound pero dirigiendo a la red interna, por ejemplo respecto al ejemplo de la sección anterior, suponiendo que en la red Interna el servidor que responde correo es 192.168.100.101:

    	local-zone: "miescuela.edu.co." static
    	local-data: "correo.miescuela.edu.co. IN A 192.168.100.101"
    	local-data: "ns1.miescuela.edu.co. IN A 192.168.100.100"
    	local-zone: "100.168.192.in-addr.arpa." static
    	local-data-ptr: "192.168.100.101 correo.miescuela.edu.co."
    	local-data-ptr: "192.168.100.100 ns1.miescuela.edu.co."
    

Inicie el servicio con

	sudo sh  /etc/rc.d/unbound start

Revise posibles errores en las bitacoras /var/log/messages y /var/log/servicio

Pruebe que responde con:

dig @192.168.100.100 correo.miescuela.edu.co

que debería dar la IP privada.

Si prefiere examinar con más detalle puede iniciarlo para depurar con:

	unbound -c /var/unbound/etc/unbound.conf -vvvv -d

1.3. Servidor autoritario con NSD

Desde adJ y OpenBSD 5.7 hace parte del sistema base junto con unbound (que vinieron a replazar named). Usa una configuración basada en la de named por lo que es sencilla la migración.

Agregue a /etc/rc.conf.local la línea:

	nsd_flags="-c /var/nsd/etc/nsd.conf"

e incluya nsd en la variable pkg_scripts

El archivo de configuración principal ubíquelo en /var/nsd/etc/nsd.conf, por cada zona maestra que maneje de manera autoritaria (es decir cada zona master en la vista view "authoritative de /var/named/etc/named.conf) incluya líneas de la forma:

	zone:
		name: "miescuela.edu.co"
		zonefile: "miescuela.edu.co"

Para que responda hacía Internet en un cortafuegos con IP pública (digamos 200.201.202.203) en el mismo archivo asegurese de dejar:

	ip-address: 200.201.202.203

En el directorio /var/nsd/zones debe dejar un archivo de zona por cada zona que configure. Afortunadamente NSD reconoce la misma sintaxis de archivos de zona que bind, así que basta que copie los de las zonas autoritarías (que tipicamente se ubican en /var/named/master/).

Un ejemplo de un archivo de zona /var/nsd/zones/miescuela.edu.co es:

	$ORIGIN miescuela.edu.co.
	$TTL 6h
	
	@ IN SOA ns1.miescuela.edu.co. root.localhost. (
		2 ; Serial
		1d ; Refresco secundario
		6h ; Reintento secundario
		2d ; Expiracion secndaria
		1d ) ; Cache 
	
		     NS	ns1
		     A	200.201.202.203
	       MX 5  correo.miescuela.edu.co.
	correo A  200.201.202.203
	ns1	   A  200.201.202.203
	*	     A  200.201.202.203

Si tiene zonas secundarias (esclavas) puede crear el directorio /var/nsd/zones/secundaria/, copiar allí las zonas de /var/named/slave/ y en el archivo de configuración de NSD agregar secciones del siguiente estilo:

	zone:
	        name: "miotrozona.org"
	        zonefile: "secundaria/miotrazona.org"
	        allow-notify: 193.98.157.148 NOKEY
	        request-xfr: 193.98.157.148 NOKEY             

Inicie el servicio con

	doas sh  /etc/rc.d/nsd start

(o reinicielo con restart en lugar de start).

Revise posibles errores en las bitacoras /var/log/messages y /var/log/servicio

Pruebe que responde desde Internet con:

	dig @200.201.202.203 correo.miescuela.edu.co

que debería dar la IP pública.

1.4. named

OpenBSD aún incluye como paquete el servidor BIND 9, bajo el nombre named, que por defecto corre con chroot en el directorio /var/named y que puede hacer las labores de unbound y nsd.

Puede configurarse y probarse antes de iniciarlo en cada arranque. Para configurarlo por primera vez pueden seguirse primero los pasos de /etc/rc. El archivo de configuración es /var/named/etc/named.conf. Se sugiere que se agregue información de zonas de las cuales es maestro en en archivos del directorio /var/named/master. Pueden configurarse archivos como dice en [AA_Linux] por ejemplo los datos un servidor DNS primario del dominio miong.org pueden quedar en el archivo /var/named/master/miong.org:

	$TTL 1D
	@ IN  SOA  @  root.localhost. (
		03091025 ; Serial
		1D   ; Refresco secundario
		6H   ; Reintento secundario
		2D   ; Expiración secundaria
		1D ) ; Cache de registro de recursos
	
		NS  @
	
		A       65.8.9.234
	
		MX      5      correo.miong.org.
	
	correo	IN      A       201.2.3.74
	ns1     IN      A       201.2.3.74
	www     IN      A       201.2.3.74

Note que se declara el mismo dominio como servidor de nombre autoritario, se relaciona con la IP (65.8.9.234), el nombre correo.miong.org identificara la misma máquina y es el nombre que se usará para intercambiar correos; el nombre www.miong.org será un alias para el mismo servidor. Note que todo nombre que no termine con punto (.), será completado por bind con el dominio (i.e www será completado a www.miong.org, si se olvida el punto después de correo.miong.org, bind lo completará a correo.miong.org.miong.org). Recuerde aumentar el número serial cada vez que haga algún cambio, para que la información pueda ser actualizada en los servidores secundarios. Puede probar cada archivo de zonas que haga con:

	named-checkzone miong.org /var/named/master/miong.org

Agregue una referencia al archivo de zonas maestro en /var/named/etc/named.conf, en la sección para zonas maestras algo de la forma:

	zone "miong.org" {
	  type master;
	  file "master/miong.org";
	}

Si desea que un servidor sea secundario de algún servidor primario, agregue en /var/named/etc/named.conf en la sección para zonas esclavas algo como:

	zone "miong.org" {
	  type slave;
	  file "slave/miong.org";
	  masters { 65.8.9.234; };
	}

Cuando named lea de nuevo sus archivos de configuración traerá la información del servidor primario y la dejará en el archivo /var/named/slave/miong.org.

El servidor se inicia con

	doas sh /etc/rc.d/named start

Los errores que se produzcan antes de hacer chroot son enviados a /var/log/servicio. Para probar el funcionamiento antes de modificar /etc/resolv.conf puede usar:

	dig @localhost miong.org

Si requiere volver a leer los archivos de configuración (por ejemplo después de cambiar los archivos de zonas) puede enviar la señal SIGHUP al proceso con:

	pkill -HUP named

o con

	rndc reload

Una vez compruebe que su servidor DNS está operando correctamente puede indicar que se inicie en cada arranque agregando a /etc/rc.conf.local:

	named_flags="" 

y en el mismo archivo en la definición de pkg_scripts agregando named.

1.4.1. Vistas para resolver nombres interna y externamente

Si cuenta con una LAN conectada a Internet por medio de un cortafuegos con OpenBSD que maneja el DNS de su organización y si además cuenta con una DMZ tal que las peticiones a algunos puertos del cortafuegos son redirigidas a uno o más servidores, seguramente tendrá inconvenientes al resolver nombres de su dominio en la LAN, pues el nombre de su organización (digamos miong.org) será resulto a la dirección externa, la cual conectará al cortafuegos por el puerto pedido y tratará de redirigir la conexión al servidor en la DMZ (i.e se reflejará). Por este motivo desde su LAN en general no resolverá nombres de su dominio.

Una solución (ver /var/named/etc/named-dual.conf) es configurar bind para que tenga dos vistas, una para computadores fuera de la LAN y otra para computadores dentro de la LAN. Un posible archivo de configuración (basado en los distribuidos con OpenBSD) es:

	acl clients {
		localnets;
		::1;
	};
	options {
		version "";     
		listen-on    { any; };
		listen-on-v6 { any; };
		allow-recursion { clients; };
	};
	logging {
		category lame-servers { null; };
	};
	
	view "internal" {  // Para la red interna
	    match-clients { clients; };
	    match-recursive-only yes;
	    recursion yes;
	
	    zone "." {
	    	type hint;
	    	file "standard/root.hint";
	    };
	    zone "localhost" {
	    	type master;
		file "standard/localhost";
		allow-transfer { localhost; };
	    }
	    zone "127.in-addr.arpa" {
	    	type master;
	    	file "standard/loopback";
	    	allow-transfer { localhost; };
	    };
	    zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
	    	type master;
	    	file "standard/loopback6.arpa";
	    	allow-transfer { localhost; };
	    };
	    zone "com" {
	    	type delegation-only;
	    };
	    zone "net" {
	    	type delegation-only;
	    };
	
	    zone "miong.org" {
	        type master;
	        file "refleja/miong.org.org";
	    };
	};
	view "external" { // Para Internet
	    recursion no;
	    additional-from-auth no;
	    additional-from-cache no;
	    zone "miong.org" {
	        type master;
		file "master/miong.org";
	    };
	    zone "168.74.245.200.IN-ADDR.ARPA" { // Para resolución inversa
	        type master;
		file "master/db.168.74.245.200";
	    };
	};

El archivo master/miong.org sería el típico para resolver externamente, mientras que en refleja/miong.org tendría los mismo nombres del anterior pero con las direcciones de la red local. master/db.167.74.245.200 tendría datos para resolución de nombres inversa desde fuera de la organización, por ejemplo:

	$TTL 1D
	@ IN  SOA  @  root.localhost. (
	  49   ; Serial de Zona
	  1D   ; Refesco secundario
	  6H   ; Retintento secundario
	  2D   ; Expiración secundaria
	  1D ) ; Cache de registros de recurso
	
	@       IN      NS      cortafuegos.miong.org.
		IN      PTR     www.miong.org.
		IN      PTR     correo.miong.org
		IN      PTR     ns1.miong.org

1.5. Referencias y lecturas recomendadas