jueves, 2 de abril de 2015

Migrar usuarios de Windows 2003 Server a Ubuntu 12.04 Server

En esta ocasión vamos migrar usuarios de un servidor Windows 2003 que es un controlador de dominio de Active Directory a un servidor Ubuntu 12.04. 

Este procedimiento fue el que emplee para migrar mi servidor RAS en Windows para Ubuntu. 

En el siguiente link publique un articulo acerca de la instalación de un server RAS en Ubuntu 12.04.

http://own-kb.blogspot.com/2015/03/instalar-server-ras-en-ubuntu-1204-con.html

La historia abreviada es que tenía un servidor de acceso remoto en Windows 2003 y necesite migrarlo a Linux, dicho servidor era un controlador de dominio de AD y los usuarios tenían activada la opción “verify caller id” para las llamadas entrantes. Mi tarea consistió en escribir y ejecutar un script en este server que me diera un archivo con todos los usuarios y sus respectivos números telefónicos para el verify caller id, para luego escribir y ejecutar otro script en el server Ubuntu 12.04 para la creación automatizada de estos usuarios; en mi caso se trataba de algo más de 100 usuarios, de modo que la tarea manual era algo “pesada”; siempre quedo pendiente el tema contraseña, creo que siempre quedara pendiente, no creo que algún SO almacene la contraseña de los usuarios en texto claro, de modo que sería algo difícil hacer un script para obtener la contraseña en texto claro para luego crear el usuario en Ubuntu con dicha contraseña; mi estrategia al respecto fue poner una contraseña predeterminada en archivo de creación de usuarios que  luego debería ser cambiada.

Vamos a lo concreto; el script VB (tomando ejemplos de MS TechNet Script Center y modificando a mis necesidades) nos va a crear un archivo de texto separado por comas con la siguiente estructura:

Nombre descriptivo del usuario, usuario, teléfonos de anclaje

A continuación del código del script vbs (copie y pegue este código dentro de un archivo de texto con extensión .vbs)

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2
Const FOR_WRITING = 2

REM Nombre y ruta del archivo separado por comas q se va a llenar
REM El fichero debe de ser creado manualmente antes de ejecutar
REM El script solo va a escribir dentro del fichero

strFileName = "D:\usuarios_ras.csv"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName,FOR_WRITING)

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

REM En la siguiente linea debe modificarse para un dominio AD
objCommand.CommandText = _
    "SELECT AdsPath,Name,sAMAccountName FROM 'LDAP://dc=dominio,dc=cu' WHERE objectCategory='user'" 
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
   
    arregloPhones=Array(0)
    'Wscript.Echo objRecordSet.Fields("AdsPath").Value
    Set objUser = GetObject(objRecordSet.Fields("AdsPath").Value)
    arregloPhones = objUser.GetEx("msNPSavedCallingStationID")
    objTS.Write objRecordSet.Fields("Name").Value + "," + objRecordSet.Fields("sAMAccountName").Value + ","   
    For Each strPhone in arregloPhones
        objTS.Write strPhone + ","
    Next
    objTS.WriteLine
   
    objRecordSet.MoveNext
Loop

objTS.Close

Después de ejecutado el script vamos a abrir el fichero “usuarios_ras.csv” con MS EXCEL y allí hacemos ajustes pertinentes, tales como eliminar usuarios propios del SO Windows 2003, insertar como tercera columna donde pondremos los password por defecto, editamos los nombres descriptivos para que no tengas espacios, eliminamos los acentos, etc, de modo que este fichero nos quede con 4 columnas (o más en caso de que un usuario tuviera más de un teléfono anclado) con la siguiente estructura.

A
B
C
D
Nombre_descriptivo_del_usuario
usuario
Password
Teléf.

Las columnas con los números de teléfono la podremos usar más adelante para configurar el archivo /etc/mgetty/dialing.config para el RAS en Ubuntu.

Continuando con nuestro fichero vamos a guardarlo en MS EXCEL con el formato de archivo separado por comas, quedando algo así:

Nombre_descriptivo_del_usuario, usuario, password, teléfonos_de_anclaje

Vamos a “subir” este archivo y el siguiente script BASH para nuestro server Ubuntu.

Copie y pegue el siguiente código dentro de un archivo de texto y guárdelo con extensión .sh. Este bash fue tomado del siguiente link:


Y luego ajustado a mis necesidades, el original usa : como separador y en mi caso uso coma, además se simplifico de manera que no se hacen las comprobaciones para detectar que es root quien ejecuta entre otras simplificaciones, también modifique para añadir a los usuario dentro del grupo “usuarios_ras” que debe existir previamente antes de ejecutar el bash.

#!/bin/sh

group="usuarios_ras"
users=$(cat usuarios_ras.csv)
for u in $users
do
nombre=`echo $u|cut -d, -f1`
usuario=`echo $u|cut -d, -f2`
contra=`echo $u|cut -d, -f3`
ultimacolumna=`echo $u|cut -d, -f4`
echo "Creando $nombre -> usuario=$nombre pass=$contra"
useradd -m -s /bin/bash -c $nombre --gid $group $usuario
echo "$usuario:$contra"|chpasswd --md5
done

Finalmente ejecutamos nuestro script BASH y si todo esta ok ya tendremos un lote de usuarios creados en nuestro Ubuntu 12.04

# bash crear_usuarios.sh

jueves, 19 de marzo de 2015

Migrando un servidor de correos de MDaemon a Postfix


En artículo estará dedicado a compartir mi experiencia en la migración de un servidor de correos de MDaemon corriendo sobre Windows 2003 Server a Postfix sobre Ubuntu 12.04 Server.  Obviaremos el proceso de instalación de Postfix, en un artículo anterior mostré mi experiencia en la instalación de Postfix apoyándome en iRedmail (http://own-kb.blogspot.com/2015/02/instalar-un-servidor-de-correos.html)

El escenario es el siguiente: tenemos instalados y probados ambos servidores; el servidor MDaemon (Windows 2003 Server) con ip 192.168.14.1 es el que está actualmente en producción encargándose del SMTP, POP3 e IMAP y el servidor Postfix (Ubuntu 12.04 Server) con ip 192.168.14.2 está instalado y listo para asumir el rol de SMTP, POP e IMAP en nuestra red. 


Tenemos 3 objetivos fundamentales: 
  1. Migrar todas las cuentas de correo del server MDaemon al server Postfix.
  2. Hacer que el proceso sea transparente para los usuarios. 
  3. Poner en producción el server Postfix y degradar el server MDaemon.
 
El proceso en general consistirá en:

  1.  Crear las cuentas de correo en el server Postfix (no encontré otra opción que hacerlo manualmente).
  2. Copiar los correos existentes en los buzones de los usuarios del server MDaemon al server Postfix (utilizaremos el paquete imapcopy de Ubuntu para automatizar este punto)
  3. Poner la dirección ip que tenía el server MDaemon al server Postfix y hacer los ajustes de DNS para que nuestros usuarios “no sepan” que otro servidor gestiona su correo.

Creando las cuentas de correo en el server Postfix


Como comente anteriormente, tuve que crear cerca de 100 buzones de correos manualmente; Postfix quedo configurado para buzones virtuales, los cuales son creados dentro de una base de datos PostgreSQL, aun cuando los correos se almacenan en el sistema de archivos del server Ubuntu.

Para esto nos vamos al server MDaemon y exportamos todas las cuentas a través de la opción Accounts\Exporting\Export accounts to a comma delimited file…, esto nos genera un archivo de valores separados por coma (Accounts.csv). Este archivo lo vamos a abrir con MS Excel 2010; el mismo contiene el buzón, la dirección electrónica y la contraseña del buzón, entre otras cosas. 

Como el server Postfix se instaló siguiendo la guía antes mencionada vamos a crear las cuentas usando el iRedAdmin y con nuestro aliado Ctrl + C y Ctrl + V (copiar y pegar) desplegando la ventana del navegador con iRedadmin y del Excel con el listado de cuentas y contraseñas vamos copiando y pegando y creando nuestros buzones.

Es posible que si las contraseñas de los buzones en MDaemon no cumplen con los requisitos de complejidad y tendremos que decir a iRedadmin que nos permita contraseñas no complejas; para eso editemos el fichero /usr/share/apache2/iRedAdmin-0.4.1/settings.py y ajustamos los valores de min_passwd_length y max_passwd_length convenientemente.

Después de creados los buzones en Postfix continuaremos trabajando con el archivo Accounts en Excel ya guardado en formato xls.

A
B
C
D
E
Copy
“buzon1”
“password1”
“buzon1”
“password1”
Copy
“buzon2”
“password2”
“buzon2”
“password2”
Copy
“buzon3”
“password3”
“buzon3”
“password3”
….
….
….
…..
Copy
“buzon-n”
“password-n”
“buzon-n”
“password-n”
 
Las comillas dobles deben de ser parte del valor de la celda, yo me las ingenie con “columnas puentes”, concantenando los valores con una columna con comillas dobles y pegando valores en otras columnas.

Luego de tener la hoja del libro de esta manera vamos a  “Guardar como…”  “Texto con formato (delimitado por espacios) (*.prn)”. 

El archivo resultante lo vamos a usar en el siguiente paso; este archivo lo podemos abrir con un editor de texto como el Wordpad (en Windows) que debe contener las 5 columnas separadas por espacios con la pablabra Copy como primera columna y subsiguientemente el buzon y su contraseña en las restantes 4 columnas, las filas contendrán el resto de los buzones, las comillas dobles deben estar incluidas.

Copiando los correos de los buzones MDaemon a los buzones ya creados en Postfix. 

Para este paso vamos a utilizar en nuestro server Ubuntu el paquete imapcopy que instalaremos con aptitude.
 
# aptitude install imapcopy

impcopy es un paquete que permite copiar masivamente correos de un server IMAP a otro, según la documentación el mismo no permite el acceso a IMAPS. Podemos degradar la seguridad de nuestro server Postfix para este propósito y luego volver a restituir, en este link se explica cómo hacer esto para un server instalado con iRedmail (http://www.iredmail.org/docs/allow.insecure.pop3.imap.smtp.connections.html)

Volvemos a trabajar con el archivo .prn, lo abrimos y al principio le escribimos lo siguiente:

SourceServer 192.168.14.1

SourcePort 143



DestServer 192.168.14.2

DestPort 143



DebugSrc
DebugDst

copyfolder INBOX

DenyFlags "\Recent"


Debajo de lo anterior deben quedarnos las 5 columnas que teníamos previamente. Guardamos el archivo con el nombre imapcopy.cfg en nuestra carpeta /home/miuser/ en nuestro server Postfix.


De esta manera ya tenemos listo el archivo de configuración de imapcopy, el que nos va a permitir la copia masiva de correos de MDaemon a Postfix.


El archivo /usr/share/doc/imapcoy/examples/imapcopy.cfg contiene un ejemplo para la configuración de imapcopy. Como ya tenemos el nuestro nos vamos a nuestra carpeta home y ejecutamos:

/home/miuser# imapcopy –l


Esto ejecutara imapcopy con el archivo de configuración que tenemos en esta carpeta, el parámetro –l nos hara un log del proceso.

Previamente podemos detener el servicio SMTP y POP en MDaemon para que no ingresen nuevos correos hasta tanto terminemos el proceso, en mi caso el proceso demoro alrededor de 2 hora y media, algunos buzones almacenaban decenas de correos aun sin descargar.



Poniendo en producción el server Postfix

Ya la mayor parte del trabajo está hecho, ahora tomando las debidas precauciones ponemos la ip del server MDaemon al server Postfix y viceversa (si asi se desea), lo demás es hacer ajustes de DNS para que los usuarios no noten que le cambiamos el servidor y que ahora sus correos se almacenan y procesan sobre software libre, sin dejar de reconocer que MDaemon es un gran servidor de correos.