viernes, 8 de marzo de 2013

Montando nuestro propio servidor (VII)

... de como terminar nuestro servidor haciendo muchas cosillas.....

Buenas a todos. Hoy vamos a terminar el montaje de nuestro dichoso servidor. Al final, dejamos un equipo montado con un montón de software que puede sernos útil, o simplemente nos hemos divertido un montón, y de paso aprendimos algunas cosillas.... Es posible que se queden cosas en el tintero, y/o que algunas otras no hayan cumplido las expectativas que buscábamos..... pero insisto.... ¿y lo bien que lo hemos pasado?


En primer lugar, vamos a simplificar el uso de nuestro proxy, para no tener que configurar el navegador en los dispositivos de nuestra red, ya sean computadores, tablets o smartphones.

Para ello, modificaremos el archivo /etc/squid/squid.conf, y añadiremos el parametro TRANSPARENT en la linea:

http_port 8080 transparent

Como siempre, reiniciamos: /etc/init.d/squid restart

Venga, pensar un poco.... ¿Cómo hacer que las solicitudes que lleguen a nuestro server por el puerto 80, pasen por el puerto 8080 que escucha SQUID?
Exacto, creando una regla en nuestro firewall, el que configuramos cuando creamos el gateway (Parte V)... Para ello, modificamos el archivo /etc/network/Firewall/fwall.sh. Añadimos las siguientes variables:

SERVER="172.16.0.1"
SQUIDPORT="8080"


Y la regla:

iptables -t nat -A PREROUTING -i $NIC_INTERNA -p tcp --dport 80 -j DNAT --to $SERVER:$SQUIDPORT


Reiniciamos el firewall, ejecutándolo: /etc/network/Firewall/fwall.sh

Verificamos que funcione, configurando los exploradores para que no utilicen proxy, y damos por zanjado el tema del proxy.

¿Que hacemos ahora? ¿Qué tal un servidor de correo? Todos tenemos, si no una, varias cuentas de correo: Hotmail, Gmail, etc.... Pero... ¿cuánto daría Frannoe por una cuenta como frannoe@cosillas.com?
El problema de los dominios de primer nivel (.com, .es, .net, .org, etc) es que cuestan dinero. Pero, ¿le daría igual a Frannoe tener como correo frannoe@cosillas.ftp21.net? Si le da igual (y yo creo que si), podríamos aprovecharnos del dominio que teníamos creado en www.dnsdynamic.org. Pero antes de continuar, vamos a ver por encima como funciona eso del correo electronico.

Vamos a imaginarnos que somos un correo electŕonico escrito por Frannoe, con destinatario bill.gates@microsoft.com (ignoro si existe dicha cuenta, pero no nos vamos a andar con minucias ahora). 
El contenido es lo de menos, pero para los quisquillosos, diré que es una carta de agradecimiento por su nuevo S.O. W8 y su UEFI, que va a conseguir que Linux crezca exponencialmente como S.O. de escritorio, ea, queda dicho...
En cuanto Frannoe le da a envío, el agente de transferencia de correo (MTA, ó Mail Transfer Agent), hace una petición a los servidores DNS, para que le digan dónde está el registro MX para el nombre de dominio de destino (lo que va detrás de la @, en este caso microsoft.com, que identifica a los servidores de correo).
Los servidores DNS, que son muy educados, devuelven una serie de nombres de servidores de correo, junto con un número de preferencia. Lo vemos en el ejemplo, tecleando dig -t MX microsoft.com


Una vez que el MTA sabe a quién dirigirse, intenta establecer una comunicación con dicho servidor, utilizando el protocolo SMTP (Simple Mail Transfer Protocol, Protocolo Simple de Transferencia de Correo). Este protocolo utiliza caracteres ASCII para comunicarse, con lo que la comunicación, en modo texto, se ve fácilmente con cualquier terminal o el mismo Putty (de ahí la importancia de los envíos encriptados o de la utilización de certificados). Intentará comunicarse con el servidor que tenga una prioridad más baja, y si no ha encontrado ningún registro MX al que dirigirse, lo intentará hacer con un registro tipo A del mismo dominio de destino (los registros tipo A los creamos en el post anterior, al montar nuestro servidor DNS). Aunque es preferible que lo haga a través de su propio registro MX, no nos vamos a complicar más la vida y que trabajen los DNS.

Bien, ya sabemos a quién tenemos que dirigirnos. Salimos lanzados para allá, y se establece una comunicación utilizando el protocolo SMTP, en donde se establece un intercambio de información. Vamos a utilizar Putty para charlar un poco con el servidor de correo de Microsoft, hasta que nos expulse o nos indique que hemos sido añadidos a su blocklist:


Nos conectamos con PUTTY a su servidor de correo (mail.messaging.microsoft.com en el puerto 25) y nos identificamos, tecleando HELO cosillas.ftp21.com. Como es muy educado, nos dará la bienvenida:


Ahora, le decimos quienes somos, tecleando MAIL FROM: root@cosillas.ftp21.com. De momento, nos llevamos bien y sigue siendo educado:


Y ahora se van a acabar las buenas relaciones. En este momento, tenemos que identificar el destinatario del correo. En cuanto detecte un correo no existente lo tomará como un intento de hacer Relay, y nos expulsará. Tecleamos: RCPT TO: root@microsoft.com y vemos lo que ocurre:


Ups, pues nos ha mandado a paseo y nos ha baneado, el muy c.... De no haber sido así, la conversación habría seguido estos cauces:

S: 220 Servidor ESMTP
C: HELO miequipo.midominio.com
S: 250 Hello, please to meet you
C: MAIL FROM: <yo@midominio.com>
S: 250 Ok
C: RCPT TO: <destinatario@sudominio.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: Subject: Campo de asunto
C: From: yo@midominio.com
C: To: destinatario@sudominio.com
C:
C: Hola,
C: Esto es una prueba.
C: Hasta luego.
C:
C: .
S: 250 Ok: queued as 12345
C: quit
S: 221 Bye

Y ya está, mensaje entregado. Vale, pero.... y en dirección contraria es igual? Pues sí, exactamente igual. Entonces, ¿así se monta un servidor de correo propio?. Bueno, hay que aclarar que tendriamos un servidor que envía y recibe correos, pero creo que todos sois igual de cómodos que yo, y lo que queréis es utilizar algún gestor de correo, por ejemplo webmail, para enviar y recibir, ¿me equivoco? Y, para rizar el rizo, queréis acceder a vuestro correo personal desde el trabajo. ¿A que sí?

Pues agárrense que viene curvas..... Esto no va a ser fácil. Para empezar, deciros que no sólo se utiliza SMTP como protocolo en los correos electrónicos. Tambien son utilizados el protocolo POP3 y el IMAP. A grandes rasgos, el protocolo POP3 es utilizado por los gestores de correo para descargar los mensajes del servidor al HD de nuestras máquinas, liberando así el espacio en los buzones del servidor. El protocolo IMAP por el contrario es utilizado en la mayoría de correos Web (Hotmail, Gmail, etc). Así, deberemos implementar también dichos protocolos (al menos el IMAP) si queremos ver dichos correos de nuestro servidor. La cosa se complica por momentos.....

Habra que añadir una serie de reglas IPTABLES para conseguir que nuestro servidor de correo sea accesible desde el exterior. Así, tendremos que dar acceso al puerto 53 para las consultas DNS, al 25 para SMTP y al 143 para IMAP. Asímismo, para asegurar nuestras comunicaciones, tendremos que abrir al exterior los puertos 465 para SMTP over SSL. Veamos:

iptables -A INPUT -i $NIC_EXTERNA -p TCP –dport 53 -m state –state NEW -j ACCEPT
iptables -A INPUT -i $NIC_EXTERNA -p TCP –dport 25 -m state –state NEW -j ACCEPT
iptables -A INPUT -i $NIC_EXTERNA -p TCP –dport 143 -m state –state NEW -j ACCEPT
iptables -A INPUT -i $NIC_EXTERNA -p TCP –dport 465 -m state –state NEW -j ACCEPT



Reiniciamos el firewall, ejecutándolo: /etc/network/Firewall/fwall.sh. Suponiendo que todo está configurado correctamente, vamos a seguir. A por el software. Me he decidido por utilizar como MTA Postfix, y para acceder al mismo, Dovecot, que nos facilitará el protocolo IMAP.

Estos dos programas permiten gestionar los usuarios de diversas formas, bien como usuarios del sistema, bien como registros de una BBDD. En este último caso, lo mejor sería utilizar MySql para crear una BBDD de usuarios. Esto se torna bastante dificil, ya que el proceso es bastante engorroso y complicado. Para eso, hubiera comenzado esta serie montando un servidor LAMP (Linux, Apache, MySql, PHP) y no ha sido esa mi intención. Quizá en un futuro, en una galaxia muy muy lejana.....

Nuestro servidor no es un servidor de producción, es un pequeño home-server, en el que, como mucho, tendremos dos-tres usuarios. Para eso, añadiremos los usuarios al sistema, y nos evitaremos complicaciones. Apache y MySql serán necesario para nuestro servidor de correo web, pero los dejaremos configurados de manera predeterminada.

Iremos paso a paso. En primer lugar, instalaremos Apache. Para ello:

apt-get install apache2


Una vez instalado, verificamos su funcionamiento en nuestro explorador: http://172.16.0.1 y veremos algo así:


Fácil, ¿verdad?. Pues seguimos instalando. Ahora le toca el turno al MTA. Tecleamos: apt-get install postfix y en las pantallas siguientes, vamos introduciendo datos:



Elegimos la opción Sitio de Internet


Y el dominio que tenemos creado: cosillas.ftp21.net. Y una vez finalizada la instalación, editaremos el archivo /etc/postfix/main.cf, añadiendo al final del archivo la línea: inet_protocols = ipv4


Reiniciamos postfix: /etc/init.d/postfix restart, y vamos a instalar el programa mail, para poder enviar correos desde la linea de comando: apt-get install bsd-mailx

Y ahora, a probar, a ver qué pasa... Vamos a ver todos los envío/recepciones desde consola, viendo los log del correo, para ver si efectivamente funciona. En primer lugar, desde un explorador, visitamos la página http://mxtoolbox.com/diagnostic.aspx. Introduciremos nuestro dominio (cosillas.ftp21.net) y esperamos la respuesta.


Vemos que, salvo la resolución inversa del SMTP, todo está configurado aecuadamente. Este no es un fallo crítico, es debido al tipo de dominio creado en un servicio gratuíto, así que podemos continuar sin problemas. Si vemos el log, vemos la comunicación entre mxtoolbox y nuestro servidor:

tail /var/log/mail.info


Esta prueba es muy importante. Antes os hablé del término Relay, al hacer la prueba con el servidor de Microsoft. El término Relay hace referencia al reenvío de correos desde un servidor hacia destinatarios que no son del mismo servidor sin autentificarse. Esto es utilizado por Spammers de todo el globo para inundar de Spam nuestras cuentas, saturando, e incluso llegando a colapsar aquellos servidores desprotegidos. Como veremos más adelante, el término Relay no significa automáticamente algo malo,   de hecho utilizaremos nosotros mismos el Relay, pero autentificándonos previamente.

Bueno, pues ahora voy a mandar un correo desde la cuenta frannoe@cosillas.ftp21.net a mi cuenta xxxx@gmail.com, a ver qué pasa. Tecleamos:

mail xxxx@gmail.com
Subject: PRUEBA DE ENVIO
Primera prueba de envío
<CTRL-D>
cc: <INTRO>


y volvemos a ver el log:


Bien, esto pita.... Me voy a mi gestor de correo, y observo que el correo me aparece en la carpeta de SPAM. Mmmmmm. Esto hay que arreglarlo..... De momento, respondo al mismo. Al poco tiempo, vemos en el log como entra mi respuesta:

OK. Voy a enviar otro correo a una cuenta distinta, eso de que me haya metido el correo en la carpeta de SPAM no me mola nada.... 


Aparentemente funciona. Vamos a ver el log:


Una m.... muy grande pa mi..... ¿Pobre reputación?..... ¿A qué es debido esto?

Bueno, en líneas generales, los servidores de correo detectan como SPAM los correos enviados desde direcciones IP dinámicas, así como los enviados desde direcciones IP que han sido añadidas a alguna Black List, o dominios creados en servicios gratuitos. Gmail, acepta dichos correos y te los mueve a la carpeta de SPAM, pero otros servidores rechazan directamente el correo. Así, aunque mi dirección IP es fija, el dominio creado es gratuito, y mis jueguecitos con el servidor SMTP de Microsoft han añadido mi IP a una Black List (no es algo que me preocupe, ya la daré de baja de dicha lista cuando me haga falta).
Pero, de momento, nuestro servidor de correo es un poco inútil. ¿Que hacemos para poder enviar correos a todo el mundo? Pues en vez de enviar nosotros mismos los correos, vamos a utilizar el servidor SMTP de Gmail para hacerlo. Eso se llama Relay Host, y ahora entendéis lo que os expliqué antes.

Para ello, basta con tener una cuenta de correo electronico en algún servidor de correo. En el caso que nos ocupa, voy a utilizar el servidor de Gmail (smtp.gmail.com). Los pasos son sencillos. La conexión con el servidor para que le enviemos nuestro usuario y contraseña de la cuenta de correo, debe estar cifrada con TLS (Transport Layer Security). Para ello, sólo tendremos que añadir la Autoridad Certificadora en la que confía Gmail.

Editamos el archivo /etc/postfix/main.cf, y añadimos:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_tls_CAfile= /etc/postfix/cacert.pem
smtp_sasl_auth_enable = yes
smtp_sasl_passwords_maps = hash:/etc/postfix/sasl/passw
smtp_sasl_security_options = noanonymous



No reiniciamos todavía Postfix, hay que hacer más cosas. Ahora crearemos el fichero /etc/postfix/sasl/passw con el siguiente contenido:

[smtp.gmail.com]:587    cuenta@gmail.com:contraseña




y lo protegemos: chmod 600 /etc/postfix/sasl/passw.

Este fichero hay que convertirlo en un fichero indexado tipo hash tecleando postmap /etc/postfix/sasl/passw, que creará el fichero passw.db


Ahora añadimos la autoridad certificadora al fichero de certificados de postfix. Para ello, primero nos aseguramos de tener instalado el paquete ca-certificates: apt-get install ca-certificates.

Y añadimos el certificado: cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem. Reiniciamos Postfix de la manera habitual: /etc/init.d/postfix restart, y probamos a enviar de nuevo a mi cuenta de vodafone y vemos los resultados:


Bien, esto es otra cosa. Vamos a verlo en mi gestor de correo:


Huy, ¿el remitente es mi cuenta de Gmail en vez de root@cosillas.ftp21.net? Eso no es lo que quiero.... Vamos a arreglarlo. Para ello, tenemos que entrar con el navegador a la página de Gmail.
Allí, en Configurar->Cuentas e importación->Enviar mensaje como, añadimos la dirección de correo de nuestro servidor (en este caso, voy a utilizar la cuenta: frannoe@cosillas.ftp21.net). Gmail nos enviará un correo con un código de verificación. Una vez verificada, gmail no cambiará el remitente a nuestro correo. Vemos los pasos:





 Abrimos el correo en nuestro servidor, iniciando sesion con el usuario Frannoe. Nos avisará de que tenemos correo, y se abre simplemente con la orden mail, así que lo abrimos para recuperar el código de verificación:


 Introducimos el código en la página de Gmail:


Y vemos que ha añadido como destinatario la cuenta de nuestro servidor:



Así que hacemos otra prueba:


Y comprobamos:


¡¡¡ HECHO !!!

Bueno, pues lo creais o no, esto ya está hecho. Tenemos nuestro propio servidor de correo. Ahora, falta por instalar el correo web, para poder consultar nuestro correo desde el trabajo. De esto se va a encargar la aplicación Dovecot. Para ello, teclemos: apt-get install dovecot-imapd .

Los puertos que utilizan IMAP son 143 y 993 (cifrado). Como somos muy perspicaces, y no nos fiamos de nuestra sombra, utilizaremos comunicaciones cifradas. Para ello, tendremos que abrir dicho puerto, añadiendo nueva regla a nuestro firewall:

iptables -A INPUT -i $NIC_EXTERNA -p TCP –dport 993 -m state –state NEW -j ACCEPT
y modificaremos el archivo /etc/dovecot/dovecot.conf. Buscamos la linea protocols = imap imaps pop3 pop3s, dejándola así:


y reiniciamos: /etc/init.d/dovecot restart

Y ahora instalamos el cliente web: apt-get install squirrelmail

Una vez instalado, modificamos el archivo /etc/apache2/apache2.conf, e incluimos la linea:  Alias /webmail/ /usr/share/squirrelmail/  


, y reiniciamos apache: /etc/init.d/apache2 restart


Creamos la estructura de carpetas para los correos en el usuario:

mkdir /home/frannoe/Maildir

y se lo asignamos al usuario frannoe:

chown frannoe /home/frannoe/Maildir/

Modificamos el archivo /etc/postfix/main.cf, añadiendo la linea: home_mailbox = Maildir/. Reiniciamos postfix con /etc/init.d/postfix restart

Y a través de nuestro explorador, accedemos a la dirección: http://172.16.0.1/webmail/






¡¡Anda!! Correo de Frannoe.... Pero del auténtico....

Bueno, pues hasta aquí he llegado. Gracias a Frannoe por la ayuda que me ha prestado en este post. No os imagináis la de correos que le he mandado para probar el envío y recepción de los correos.... Lo que me dice en ese correo es .... ¿No sabéis que el e-mail es personal e intransferible? Es delito publicar correos sin autorización del remitente... jajajaja

Hasta pronto, hay algunas ideas rondando por mi cabeza.....

No hay comentarios:

Publicar un comentario