martes, 10 de febrero de 2015

Instalar un servidor de correos multipop con Postfix. Configuraciones en el lado cliente (MS Outlook y MDaemon 13)



Instalación del servidor

 

En esta ocasión voy a compartir mi experiencia en la instalación de un servidor de correos multipop con Postfix en Ubuntu 12.04 Server. 

El escenario es el siguiente:

Queremos tener un servidor Ubuntu 12.04 Server para un servicio de correo para un dominio y uno o varios subdominios, de modo que todo el correo de cada subdominio ira a parar a un buzón de correo hasta que el servidor de cada subdominio recoja su correo y lo distribuya a sus diferentes buzones.  En este escenario haremos las siguientes acotaciones:
  • El servidor de correos no tiene conexión directa a internet, entregará y recibirá todo el correo para el dominio y los subdominios hacia y desde un Relay.
  • El servidor de correos gestionará cuentas pop y multipop
  • En los subdominios estará instalado MDaemon 13 como servidor de correo que conectara a nuestro server Postfix para descargar el correo de su respectivo subdominio.
Voy a obviar la descripción del proceso de instalación de Ubuntu 12.04 Server,  solo decir que para nuestro objetivo necesitamos una instalación “limpia” sin agregados porque es un requerimiento de iRedMail (http://www.iredmail.org/).

 iRedMail es una muy buena solución que nos ayuda a instalar y configurar un servidor de correos con Postfix+Dovecot+otros agregados, los usuarios o buzones de correo los almacena en una base de datos MySQL, PostgreSQL ó LDAP, cosa esta que es configurable desde el mismo proceso de instalación, yo preferí PostgreSQL.

 iRedmail configura nuestro servidor de correos con un nivel de seguridad bastante aceptable, al menos desde mi modesto punto de vista, también permite la creación de multiples dominios, pero ojo, NO resuelve el caso que nos ocupa en este artículo, al menos utilizando el complemento de administración por defecto que el incluye. 

El proceso de instalación de iRedMail tampoco vamos a describirlo aquí, en este link (http://www.iredmail.org/docs/install.iredmail.on.debian.ubuntu.html) hay una buena guía de instalación. Debo decir que iRedmail supone que nuestro server tiene conexión directa a internet por tanto debemos hacer algunas precisiones dado que nuestro escenario no la tiene. 

Tomare como ejemplo la versión iRedMail-0.9.0, la cual previamente se ha descargado en una carpeta local de nuestro server Ubuntu, durante el proceso de instalación iRedMail tratará de descargar de internet varios paquetes que les son necesarios; lo que haremos es descargar manualmente estos paquetes. Para el caso de la versión antes mencionada debemos descargar los siguientes paquetes:
  1. http://www.iredmail.org/yum/misc/iRedAdmin-0.4.1.tar.bz2
  2. http://www.iredmail.org/yum/misc/iRedAPD-1.4.4.tar.bz2 
  3. http://www.iredmail.org/yum/misc/roundcubemail-1.0.4.tar.gz

Después de descomprimir el iRedMail-0.9.0 vamos a la carpeta /iRedMail-0.9.0/pkgs/ y vamos a eliminar los ficheros MD5.misc y MD5.openbsd, esto ficheros son usados por iRedMail para comprobar el MD5 de los paquetes descargados, los vamos a eliminar para que no compruebe nada. Luego vamos a crear dentro de pkgs una carpeta llamada misc de modo que la ruta quedaría asi  /iRedMail-0.9.0/pkgs/misc y aquí copiaremos los 3 paquetes previamente descargados.


Ahora podemos comenzar la instalación según la guía, iRedMail intentara descargar de internet, cuando vea que no puede usará los paquetes que le copiamos; en este punto ud debe armarse de paciencia porque puede demorar; al final del proceso de instalación intentará actualizar el Clamav, en este momento podemos oprimir Ctrl+C que ya iRedMail ha terminado de instalar nuestro server de correos Postfix. Dentro de la carpeta de iRedMail se crea un archivo iRedMail.tips que contiene todas las configuraciones establecidas por el.

Entonces,  vamos al pollo del arroz con pollo de este artículo; modificaremos la configuración que iRedMail hizo para Postfix para que podamos hospedar subdominios de correos tipo multipop.

Comenzaremos suponiendo que nuestro servidor se llama “mail” y nuestro dominio “principal” se llama “universo.cu” y vamos a hospedar correo multipop para los subdominios “tierra.universo.cu”, “martes.universo.cu” y “mercurio.universo.cu”. 

  1. Usando la herramienta de administración web de iRedMail en https://mail.universo.cu/iredadmin vamos a crear los buzones “tierra”, “martes” y “mercurio” que almacenaran los correos de los respectivos subdominios.
  2. En el archivo de configuración de Postfix en /etc/postfix/main.cf vamos a editar los siguientes valores:
  • relayhost = ip_del_servidor_Relay (al que le entregaremos todo el correo saliente de .universo.cu)
  • mynetworks= 127.0.0.0/8,  ip_subred_tierra/xx, ip_subred_martes/xx, ip_subred_mercurio/xx (ips desde donde conectaran los servidores de correo de los subdominios tierra, martes y mercurio).
  • virtual_alias_domains = tierra.universo.cu, martes.universo.cu, mercurio.universo.cu (los dominios listados aquí NO pueden haber sido creados con iredadmin).
  • virtual_mailbox_domains = iRedmail configura esta variable, nosotros antepondremos nuestros valores a dicha configuración de la siguiente manera; virtual_mailbox_domains = tierra.universo.cu, martes.universo.cu, mercurio.universo.cu, proxy:pgsql:/etc/postfix…….. 
  • virtual_alias_maps: antes de configurar esta variable debemos crear un archivo de texto a dos columnas donde le diremos a postfix el usuario pop (creado previamente) que recogerá el correo multipop para su respectivo dominio, le llamaremos “dominios” y debe tener esto: 
@tierra.universo.cu          tierra@universo.cu 
@martes.universo.cu        martes@universo.cu
@mercurio.universo.cu      mercurio@universo.cu
Despues de guardado en /etc/postfix/dominios, debemos compilarlo con el comando postmap de la  siguiente manera en la consola ubuntu
 # postmap dominios
y obtendremos un fichero resultante dominios.db, cada vez que modifiquemos este archivo debemos volver a compilarlo.
Ahora podemos editar la variable de la misma manera que la anterior; vamos a anteponer nuestra configuración a la realizada por iRedMail

virtual_alias_maps = hash:/etc/postfix/dominios, proxy:pgsql:/etc/postfix…


Salvamos nuestro archivo main.cf y reiniciamos el servicio Postfix y ya tenemos nuestro servidor de correos dando servicio a dominios multipop.


Adicionalmente a estas configuraciones hice otros ajustes para corregir la configuración inicial que hizo iRedMail pero que nada tienen que ver con el funcionamiento del multipop, estos son: 

  1. Editar el fichero /etc/dovecot/dovecot.conf y comentar la línea 34 que contiene lo siguiente: ssl_protocols = !SSLv2 !SSLv3 (Esto me dio error, aun no sé porque).
  2. En el main.cf en la sección smtpd_helo_restrictions, eliminé la directiva reject_non_fqdn_helo_hostname y en smtpd_recipient_restrictions eliminé la directiva reject_unknown_recipient_domain.
 

Configuración para el cliente MS Outlook para un buzón pop

 

Como debemos imaginar el servidor recién instalado también puede almacenar/procesar buzones pop comunes y corrientes, pero como comente anteriormente iRedMail configura a Postfix con varias características de seguridad de modo de la configuración del cliente de correo, en nuestro caso MS Outlook difiere ligeramente de la tradicional; la ilustrare con imágenes para el caso de un buzon materia1@universo.cu



 
 
 

Configuración de MDaemon 13.x para un buzón multipop en un sudominio (tierra.universo.cu)

 







Espero que este articulo sea de ayuda a alguien; yo necesite varios días para implementar este escenario.

viernes, 5 de diciembre de 2014

Como cambiar la carpeta por defecto para el servicio vsftpd en Ubuntu



El vsftpd es uno de los paquetes más populares en el entorno Linux para instalar y configurar servidores FTP, su principal adjetivo es que es muy sencillo de instalar y configurar con un buen compromiso de seguridad, pero en ocasiones debemos combinar correctamente los valores configurados en sus directivas para lograr el objetivo deseado.

En este pequeño artículo me limitare solamente a mostrar una forma para cambiar la carpeta por defecto (donde se almacenan los archivos) para el servicio FTP para el caso que queramos instalar un servidor FTP con acceso anónimo.

Cuando instalamos en Ubuntu el paquete vsftpd, por defecto se crea la carpeta /srv/ftp que sera utilizada como repositorio para el servidor FTP, adicionalmente en /etc/svftpd.conf tenemos la configuración del servicio. Este servicio crea un usuario ftp a través del cual se hace el acceso anonimo al servidor FTP.

Para cambiar la ruta por defecto del repositorio del servidor FTP tenemos que hacer 3 cosas 


  • Cambiar la carpeta HOME del usuario ftp
            Esta será la nueva carpeta donde se almacenaran los archivos a compartir a través del servidor FTP.

Para cambiar la carpeta HOME de un usuario Linux utilizaremos el comando usermod de la siguiente manera:

usermod  –d  /ruta/carpeta/ usuario

De modo que si queremos mover el almacén FTP a una carpeta (previamente creada) llamada ftp dentro de /var haríamos esto:

usermod  –d  /var/ftp/  ftp 


  • Dar derechos al usuario ftp sobre su nueva carpeta. Damos derecho recursivamente a un usuario sobre una carpeta con el comando chown de la siguiente forma:

           chown  –R usuario carpeta

          De modo que para dar derechos al usuario ftp sobre la carpeta /var/ftp ejecutaríamos el comando de           esta manera:

          chown  –R  ftp  /var/ftp

  •   Permitir que los usuarios locales del sistema inicien sesión en el FTP.
      El usuario ftp creado durante la instalación del servicio es por supuesto un usuario local, debemos                con esta opción permitirle que use su carpeta home.

      Para ello vamos a editar el archivo /etc/vsftpd.conf y configuramos la directiva local_enable=YES

.Solo nos queda reiniciar el servicio

 service vsftpd restart

lunes, 7 de octubre de 2013

Como hacer frente a los virus del dia cero...

<  Como sabemos los antivirus trabajan de manera reactiva, esto es que, primero aparece el virus y luego, cuando el antivirus tiene conocimiento de el, el fabricante analiza el nuevo virus previo reporte de los usuarios y otros canales de retroalimentación, luego es liberada la actualización para hacer frente a dicha amenaza.

    Entre el momento en que aparece el virus y la respectiva actualización para el antivirus puede transcurrir un buen tiempo, en el cual el virus puede hacer bastante daño. A estos virus aun si clasificar les llamo “virus del día cero” en analogía a las vulnerabilidades del día cero.

    Lo cierto es que la mayoría de los antivirus tienen un módulo para la protección proactiva, pero en esencia lo que este componente hace es “vigilar” actividades sospechosas de los procesos cargados en memoria, como pueden ser acceso directo al disco duro, proceso que trate de “inyectarse” en otro proceso, proceso que trate de enviar correo sin el consentimiento del usuario o abrir una URL de internet. Sin embargo muchos virus ejecutan acciones en el sistema que a vista del antivirus pueden ser “legitimas”.

Para hacer frente a estos “virus del día cero” comparto este script a modo de plantilla para ser ajustado a cada caso en concreto. La lógica que sigue el script es la misma que seguiría el antivirus para desinfectar el sistema infectado. Para ello vamos a ver como actúa de forma general la mayoría de los virus en un sistema infectado.
  1. Garantizar la propagación (en la actualidad a través de memorias flash).
  2. Garantizar sobrevivir al próximo reinicio del sistema (escribir en la llaves correspondientes del registro de Windows).
  3. Cumplir con su verdadero objetivo como virus
Por tanto la lógica de desinfección seria:

  1. Identificar el proceso maligno y su programa de origen  
  2. Eliminar el proceso de la memoria del sistema infectado. 
  3. Borrar el o los archivos del virus del disco duro. 
  4. Eliminar los valores de las llaves del registro de Windows que garantizan la       carga del virus en el inicio del sistema y evitar el mensaje de Windows de la falta de un archivo o componente.   
 Para estas tareas de identificación y neutralización manual de programas malignos existen un conjunto de herramientas, pongo en consideración varias de ellas.

  • EL administrador de tareas de Windows 7 es útil en la fase de identificación; debe configurarse para que muestre el nombre y ruta de la imagen para saber la ubicación del ejecutable de origen en el menú ver\Seleccionar columnas). En este punto debe hacerse una inspección visual buscando nombres de programas, rutas y descripciones sospechosas. 
 

  • “autorun.exe” de la suite de Sysinternals, http://www.sysinternals.com/; esta utilidad muestra todos los programas, driver, servicios y dll que se cargan en el arranque del sistema y sirve para ubicar la llave del registro desde donde se indica la carga del posible programa maligno.
  • “Process Explorer” también parte de la suite de Sysinternals; es útil para identificar procesos dudosos.


  • AVZ Antiviral Toolkit, le llaman el arma secreta de Kaspersky, http://z-oleg.com/, es un antivirus algo rudimentario con actualización de su base de datos y todo pero su mayor fortaleza es que incluye un conjunto de herramientas y opciones para la identificación y neutralización de programas malignos. La página principal está en idioma Ruso asi que dejo aquí el link de descarga de la más reciente versión con su base de datos actualizada, http://z-oleg.com/avz4.zip y un par de instantáneas de esta magnifica herramienta.





Por supuesto la utilidad del script esta en automatizar la tarea de limpieza en varias PC e incluso a través de la LAN.

Copie el código del siguiente script en un nuevo archivo de texto con la extensión vbs

' Variables y constantes, sustituir el valor en cada caso concreto

'Nombre de la pc a limpiar, para un pc de la red NombrePC="\\PC1" o ip, para la pc actual poner un punto "."
NombrePC="PC1"  

'Nombre del proceso maligno
NProceso="Algo.exe"

'Nombre y ruta del proceso a matar
NRProceso="C:\Windows\Algo.exe"

 strComputer = NombrePC

' 1ro - Eliminar el proceso maligno

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set cProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" + NProceso + "'")
For Each objProcess in cProcess
    objProcess.Terminate()
Next

'2do - Eliminar el archivo; 1ero comprobar si existe y luego borrarlo

 Set objFSO = CreateObject("Scripting.FileSystemObject")
 If objFSO.FileExists(NRProceso) Then
    objFSO.DeleteFile NRProceso,True          
 Else
    Wscript.Echo "No se encontro el archivo " + NRProceso
 End If


'3ro - Limpiar el registro


' ejemplo para el nondo HKEY_LOCAL_MACHINE pero puede ser otro como HKEY_current_User
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_USER = &H80000001

 
Set objRegistry=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

'Ruta a la llave del registro  
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run"

'Valor a eliminar
strValueName = "Updates"

objRegistry.DeleteValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName
 

' Fin del script vbs
    
Este script me ha sido muy útil, espero que lo sea para otros.

3 comentarios finales:

  1. La tarea de identificación y neutralización manual de programas maligno además de los comentarios de esta entrada es cuestión de usuarios avanzados y administradores de sistemas.
  2. Las herramientas y el sitio de web de Sysinternal fueron adquiridas por MS desde el 2006 (http://technet.microsoft.com/es-ES/sysinternals/)
  3. Las herramientas aquí mostradas son freeware y portables.