viernes, 1 de mayo de 2020

CentOS8 | Ubuntu 20.04: Servidor de Correos (mail server)


Usando Sendmail+Dovecot+SquirrelMail y configuracion de Firewall (ufw y firewallD)

Situación Presentada
Siguiendo el post anterior , un amigo me consultó "Cómo puedo tener correo electrónico sin pagar el relajo de plata que cuesta" .
Entonces yo le dije que con Linux se puede hacer eso y mucho más, pero para lo que él necesita le ayudé con un mail server básico.


Y qué hacemos entonces?

Esta entrada se enfocará en la instalación y configuración de un servidor de correos, con sus componentes: MTA, MDA y MUA (el ultimo para acceso web) .
Es altamente recomendable tener un servidor DNS corriendo en la red, ver  post anterior  si no se tiene, pero se puede hacer uno rapido con DNSMasq (no cubierto aqui)
forwarder, ACL y reglas de Firewall que son necesarias para lograrlo.
No se usará DHCP.

Se usará un entorno virtualizado (usar VirtualBox o VMWare player) para hacer la configuración y pruebas.



Componentes del articulo

1. Pre-requisitos para instalación
  1.1 Requisitos CenTOS 8
  1.2 Requisitos Ubuntu 20.04
2. Red y Firewall
  2.1 Configurar Red (CentOS 8 y Ubuntu 20.04)
  2.2 Configurar Firewall
      2.2.1 Ubuntu 20.04
      2.2.2 CentOS 8
3.  Breve explicación de servicios de correo.
4. Instalación de paquetes.
  4.1 Ubuntu 20.04
    4.1.1 Sendmail y Dovecot
    4.1.2 Apache web server
    4.1.3 Squirrelmail
  4.2 CentOS 8
    4.2.1 Sendmail y Dovecot
    4.2.2 Apache web server
    4.2.3 Squirrelmail  
5. Configuración Dovecot y Sendmail.
  5.1 Ubuntu 20.04 y CentOS 8
6. Configuración Squirrelmail y Apache .
  6.1 Ubuntu 20.04 y CentOS 8
7. Pruebas de servicio de correo.
  7.1 Preparación de ambiente
  7.2 Prueba desde Thunderbird
  7.3 Prueba desde Windows Mail
  7.4 Prueba desde Webmail 



1. Pre-requisitos para instalación


•Un PC con CentOS 8 o Ubuntu 20.04, usados en este tutorial.
•Una NIC conectada a la red sin firewall de por medio.
•Una conexión de red a internet (cableada preferiblemente)
•Un servidor DNS corriendo (usar DNSMasq o DNS configurado en post anterior )
•Conocimientos basicos de protocolos de correo electronico.
•Conocimiento basico de shell de Linux

  1.1 Pre-requisitos CenTOS 8

•Actualizar repositorios e instlara el repositorio EPEL tambien.

   sudo yum install epel-release
   sudo yum update

* Nota: Si aparece un error indicando que no puede sincronizar, ejecutar lo siguiente:

   sudo dnf update -y --releasever=8

  1.2 Pre-Requisitos Ubuntu 20.04


Actualizar repositorios:

   sudo apt update

2. Red y Firewall 

. 2.1 Configurar Red (CentOS 8 y Ubuntu 20.04)
   Para configurar la red, ver los pasos detallados en el siguiente post:
    
   https://plecaetece.blogspot.com/2020/04/centos-ubuntu-2004-configuracion-de-red.html

    *NOTA: Colocar sus valores de IP correctos, y el DNS que tengan disponible, en mi ambiente, tomando en cuenta el post DNS mencionado arriba mis detalles de red van así:

             IP:   192.168.116.4
     Subred:   255.255.255.0 (ó /24) 
  Gateway:   192.168.116.2
        DNS:   192.168.116.5 
Hostname:   mail.plecaetc.local 

2.2 Configurar Firewall 

La configuracion que se usará para el servidor mail, será la siguiente.

Permitir Inbound:


tcp/110 -  POP
tcp/143 - IMAP
tcp/993 - IMAP SSL
tcp/25   - SMTP
tcp/587 - SMTP SSL

tcp/80   - HTTP (interfaz de correo web)
tcp/443   - HTTPS (interfaz de correo web)

2.2.1 Ubuntu

En Ubuntu El firewall esta deshabilitado por default. 
Para habilitarlo, y configurarlo a lo minimo, ejecutaremos los siguientes comandos:

Crear las reglas generales con el principio de Denegacion Implicita para prevenir accesos no autorizados.
sudo ufw default allow outgoing
sudo ufw default deny incoming

Agregar excepcion para conectarnos por SSH, desde nuestra red:
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 22 comment 'aceptar trafico SSH a NUESTRA red'

Agregar excepcion para el servicio web que habrá (HTTP/HTPS), desde nuestra red:
sudo ufw allow 80/tcp comment 'aceptar trafico web HTTP de TODOS'
sudo ufw allow 443/tcp comment 'aceptar trafico web HTTPS de TODOS'

Agregar excepcion para POP, desde nuestra red:
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 110 comment 'aceptar trafico POP a NUESTRA red'
Agregar excepcion para IMAP , desde nuestra red:
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 143 comment 'aceptar trafico IMAP a NUESTRA red'
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 993 comment 'aceptar trafico IMAP SSL a NUESTRA red'
Agregar excepcion para SMTP, desde nuestra red:
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 25 comment 'aceptar trafico SMTP a NUESTRA red'
sudo ufw allow proto tcp from 192.168.116.0/24 to any port 587 comment 'aceptar trafico SMTP SSL a NUESTRA red'

Se habilita el firewall 
sudo ufw enable
Se revisa el estado 
sudo ufw status








--

2.2.2 CentOS

Se ejecutará lo mismo que en el inciso anterior para Ubuntu, pero con la sintaxis del firewall para CentOS:

Agregar nuestra red actual a la zona:


sudo firewall-cmd --zone=public --permanent --add-source=192.168.116.0/24
Agregar reglas con excepciones:
sudo firewall-cmd --zone=public --permanent --add-port=22/tcp
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=110/tcp
sudo firewall-cmd --zone=public --permanent --add-port=143/tcpsudo firewall-cmd --zone=public --permanent --add-port=25/tcp
sudo firewall-cmd --reload

Se confirman los cambios:
sudo firewall-cmd --zone=public --list-all
















3. Breve explicación de los servicios de correo.

Los servidores de correo tienen varios componentes o agentes corriendo adentro para poder llevar a cabo las operaciones de envio, almacenamiento, ruteo y presentación de los mismos.

Los componentes son los siguientes:

Mail Transfer Agent (MTA). 
Aceptar correos de otros MTA (otros servidores) y usuarios de correo. Es el que utiliza el protocolo SMTP 
Algunos ejemplos son sendmail, Postfix, y el MTA de Microsoft Exchange.

Mail Delivery Agent(MDA).
Acepta correos de entrada de un MTA y se encarga de entregarlo al usuario correcto. Es el que utiliza protocolo IMAP o POP
Ejemplos: Courier, Exchange MDA, Dovecot.

LDA – Local Delivery Agent.
Es basicamente lo mismo que el MDA, pero lo hace localmente. 

procmail es el comunmente utilizado en sistemas de Linux.

Mail User Agent (MUA)
Se utiliza por los usuarios para crear, descargar y leer correos, subirlos a un MTA. Conocidos tambien como clientes de correo
Ejemplos: Outlook, WindowsLive Mail, Mozilla Thunderbird, Squirrelmail.

Interfaz web Squirrelmail.



Esquema de interconexión de componentes


imagen cortesía https://es.ccm.net



4. Instalación de paquetes.

4.1 Ubuntu 20.04

4.1.1 Sendmail y Dovecot

sudo apt install dovecot-core dovecot-pop3d dovecot-imapd sendmail sendmail-cf

**Nota: habrá algo de log post instalación, pero no haremos nada más, luego se configura.

4.1.2 Apache web server

sudo apt-get install apache2 php libapache2-mod-php php-cli php-common 

4.1.3 Squirrelmail

Colocarse en un folder neutral para descargarlo
cd /tmp

Descargar la versión más nueva de squirrelmail y el unzip.
wget http://downloads.sourceforge.net/project/squirrelmail/stable/1.4.22/squirrelmail-webmail-1.4.22.zip

sudo apt install unzip -y

Instalar Squirrel Mail en webserver (que viene siendo descomprimir el website, y moverlo a donde estan los sitios web de nuestro servidor web)

sudo unzip squirrelmail-webmail-1.4.22.zip 

sudo mv squirrelmail-webmail-1.4.22/ /var/www/html/webmail
sudo chown -R www-data:www-data /var/www/html/webmail


NO INICIAR NINGUN SERVICIO AÚN

4.2 CentOS 8

4.2.1 Sendmail y Dovecot

sudo yum install sendmail-cf sendmail dovecot 

**Nota: habrá algo de log post instalación, pero no haremos nada más, luego se configura.

4.2.2 Apache web server

sudo yum install httpd php php-cli php-common

4.2.3 Squirrelmail  

cd /tmp

wget http://downloads.sourceforge.net/project/squirrelmail/stable/1.4.22/squirrelmail-webmail-1.4.22.zip

sudo unzip squirrelmail-webmail-1.4.22.zip 
sudo mv squirrelmail-webmail-1.4.22/ /var/www/html/webmail
sudo chown -R apache:apache /var/www/html/webmail

NO INICIAR NINGUN SERVICIO AÚN


Listo, ya se han descargado e instalado todos lo spaquetes necesarios en ambas distros.

5. Configuración Dovecot y Sendmail.

5.1 Ubuntu 20.04 y CentOS 8

La configuración es virtualmente la misma, con algunas variantes que serán puestas en rojo.

Los protocolos imap y pop3 se definen en el archivo de configuracion, lo abrimos con (vim o nano):

sudo nano /etc/dovecot/dovecot.conf

---- diferencias en configuracion

Ubuntu
En la entrada siguiente, es donde se ubica el archivo donde especifican los protcolos:






Ese archivo mencionado contiene la siguiente información
protocols = $protocols imap
protocols = $protocols pop3

CentOS 
En la entrada siguiente, es donde se especifican los protcolos:






----

En el siguiente file está la configuración de los mailboxes (tambien ya están configurados, no es necesario editarlo.) 

sudo nano /etc/dovecot/conf.d/10-mail.conf

mail_location = mbox:~/mail:INBOX=/var/mail/%u

En el siguiente file está la configuración autenticación:

sudo nano /etc/dovecot/conf.d/10-auth.conf


disable_plaintext_auth = yes


Crear la carpeta y archivo de INBOX con el que trabajará Dovecot:

sudo mkdir /etc/skel/mail/.imap/
sudo touch /etc/skel/mail/.imap/INBOX

Abrir archivo de configuración para Sendmail:

sudo vim /etc/mail/sendmail.mc

En la linea siguiente, remover la parte "Addr=127.0.0.1"

---- diferencias en configuracion

Ubuntu

DAEMON_OPTIONS(`Family=inet,Name=MTA-v4,Port=smtp,Addr=127.0.0.1')dnl

Y quedará así:


CentOS

DAEMON_OPTIONS(`Port=smtp,Name=MTA,Addr=127.0.0.1')dnl

Y quedará así:





---- 

Efectuar los cambios.

sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

6. Configuración Squirrelmail y Apache .

6.1 Ubuntu 20.04 y CentOS 8

Agregar a los siguientes archivos, el nombre de nuestro dominio, en mi caso es 
plecaetc.local  , recordar que los correos iran por ejemplo (jfilomeno@plecaetc.local)


sudo vim /etc/mail/local-host-names

plecaetc.local
mail.plecaetc.local





Agregar al final del archivo "/etc/mail/access" ....
sudo vim /etc/mail/access

... la siguiente linea :

Connect:plecaetc.local                      RELAY







Copiar el siguiente archivo de configuracion para SquirrelMail

cd /var/www/html/webmail/config
sudo cp config_default.php config.php

Editarlo a nuestra conveniencia (en azul los valores que se han editaro)

sudo vim config.php

$org_name = "PlecaEtc";
$domain = 'plecaetc.local'; 
$data_dir = '/var/www/html/webmail/data/';
$attachment_dir = '/var/www/html/webmail/attach/';

Crear el directorio para los adjuntos, y darle los permisos. 
mkdir /var/www/html/webmail/attach/

chown www-data:www-data /var/www/html/webmail/attach/
*Nota:Para CentOS en vez de www-data  es apache.

Se agrega la interfaz web de correo electronico, al Web Servercorriendo.Esto se hace creando un nuevo archivo de configuración y colocando los siguientes valores:



    DocumentRoot "/var/www/html/webmail"
    ServerName mail.plecaetc.local


        Options Indexes FollowSymlinks
        RewriteEngine On
        AllowOverride All
        DirectoryIndex index.php
        Order allow,deny
        Allow from 192.168.116.0/24


**Nota: en el archivo se define que escuche en la IP 116.4 , por HTTP (tcp 80), y que solo responda cuando sea llamado desde "mail.plecaetc.local" en el navegador.


---- cambios en configuracion
Ubuntu

Agregar la información anterior del sitio web, con el siguiente comando(vim o nano):
nano /etc/apache2/sites-available/webmail.conf

Habilitar los nuevos cambios (y un módulo que necesitaremos - mod_rewrite ) y reiniciar el servicio

sudo a2enmod rewrite
sudo a2ensite webmail.conf
sudo systemctl restart apache2

CentOS

Agregar la información anterior del sitio web, con el siguiente comando(vim o nano):

vim /etc/httpd/conf/httpd.conf

Reiniciar los servicios solamente, ya que no son necesarios los extra pasos de Ubuntu.
sudo systemctl restart httpd

---- 

7. Pruebas de servicio de correo.

7.1 Preparación de ambiente
Se levantan y habilitan todos los servicios configurados:

sudo systemctl enable sendmail
sudo systemctl start sendmail

sudo systemctl enable dovecot
sudo systemctl start dovecot

sudo systemctl enable httpd
sudo systemctl start httpd

Creamos un usuario de pruebas y se llenan todos los valores que solicite el shell:

sudo adduser jfilomeno























7.2 Prueba desde Thunderbird


Se agrega la cuenta y se acepta la excepción del certificado SSL (por el IMAP 4) y se prueba la funcionalidad.









7.3 Prueba desde Windows Mail
Se agrega la cuenta con los mismos parametros del inciso anterior y se prueba la funcionalidad




7.4 Prueba desde Webmail 
Para el webmail, se puede acceder desde cualquier PC que esté en la red local, configurada correctamente (DNS apuntando al que está configurado correctamente).







No hay comentarios:

Publicar un comentario