Google EL TIPO DE INFORMATICA: febrero 2010

martes, 9 de febrero de 2010

Consultas de DNSBL con OpenDNS y SpamHaus

Este fin de semana tuve un pequeño problema con SpamHaus, de repente el servidor de email de la compañía donde trabajo dejo de bloquear la mayoría de los Spam que constantemente intentan entrar a los buzones de los usuarios. Esto hizo que entraran un montón de emails basura que provocaron una congestión en la cola de mensajes del servidor, esta congestión a su vez provoco un "delay" o retardo en el envio/recepción de mensajes, y también provoco una congestión en las líneas del departamento... porque todo el mundo llamaba preguntando por sus preciados mensajes.

Como muchos de ustedes sabran, SpamHaus es un "DNSBL" o también llamado "Blacklist" (lista negra) las cuales son consultadas generalmente por servidores de emails para consultar la reputación de las direcciones IP de los servidores SMTP que intenten conectarse a ellos para entregar algún email. Si la IP del equipo aparece en esa base de datos, el servidor rechazara la conexión. Con esto se evita una gran parte de los mensajes SPAM que a diario intentan, y muchas veces logran, entrar a nuestros buzones. En esta pagina pueden encontrar mas información de como trabajan los DNSBL. La mayoría de estos DNSBL ofrecen servicios gratuitos pero solo hasta un numero limitado de consultas, por ejemplo, SpamHaus te permite utilizar su base de datos gratis siempre y cuando no recibas mas de 100,000 conexiones SMTP al día y no excedas 300,000 consultas diarias a su listado, lo que para la mayoría nosotros los mortales es mas que suficiente. Las consultas a estas blacklist no las hace el servidor de correo directamente, quien las realiza es el servidor DNS que utilice nuestro servidor, porque realmente es una consulta DNS que se hace a los servidores de SpamHaus o cualquier otro DNSBL. Esto trabaja de esta forma: supongamos que a nuestro servidor de correo se conecta un servidor intentando enviar un correo a nuestro dominio, digamos que la IP de este servidor externo es 115.184.193.167. Nuestro servidor de correo capturara esta IP y le enviara la siguiente consulta a su servidor DNS:
 
167.193.184.115.xbl.spamhaus.org

Como pueden ver, el orden de la dirección IP se invierte. Esta solicitud le indica al DNS que consulte esta IP en la base de datos "xbl" de SpamHaus, y si esta IP se encuentra en la lista le devolvera al DNS una respuesta, generalmente esta respuesta es "127.0.0.4". Este resultado es entonces devuelto al servidor de correo y este tumba la conexión con el servidor externo. Bueno, volviendo a mi problema, al revisar los logs del servidor de correo encontré el siguiente error: "DNS Failure while trying to find address 167.193.184.115.xbl.spamhaus.org", como ven, el error que retorna es un error de DNS. empecé entonces a probar manualmente las consultas al DNSBL, ejecutando en el mismo servidor de correos (el cual corre en Linux) el siguiente comando:

dig 167.193.184.115.xbl.spamhaus.org
 
Este comando no me retornaba ningún resultado y en la sección "status" me presentaba "REJECTED", o sea que estaban rechazando mis consultas. Luego de varios intentos con diferentes bases de datos de SpamHaus (xbl, sbl-xbl, zen) decidí probar hacer la consulta apuntando a otro servidor DNS que no fuera el que tenia configurado el servidor, así que utilice el mismo comando "dig" pero de esta forma:

dig @ip-dns-interno 167.193.184.114.xbl.spamhaus.org
 
El "@" después del comando dig le indica que haga la consulta al servidor especificado después del arroba y esta vez si devolvió el resultado esperado:



El problema estaba prácticamente resuelto, solo tenia que cambiar el DNS que estaba utilizando el servidor y utilizar el interno, pero porque? nisiquiera habia llegado cerca de la mitad del limite de consultas que permite SpamHaus, porque con el otro DNS las consultas no funcionaban? Bueno, el problema era que estaba utilizando los DNS's de OpenDNS, no habia llegado al limite de consultas en SpamHaus y tampoco en OpenDNS, pero como OpenDNS es un servicio DNS publico y muchas otras personas y servidores lo utilizan, aparentemente estos servidores ya habían sobrepasado el limite de consultas permitidas por SpamHause. Bueno, todo este palabrerio es para decirles que si utilizan o piensan utilizar DNSBL en sus servidores de correo, no utilicen DNS's públicos y utilicen en ellos DNS's internos. así se evitaran una situación como las que les narre y también de seguro ganaran unos cuantos milisegundos en la resolución de nombres. Espero les sea de utilidad esta información.
 

domingo, 7 de febrero de 2010

Manejando los Servicios de Windows desde la consola con Sc

Vamos a hacer una pequeña pausa en la instalación de nuestro “Proxy Linux con Autenticación en Active Directory” del que hemos estado hablando en los últimos 3 post, y vamos a ver una utilidad de Windows que nos permite manejar los servicios de este. Y cuando digo "manejar" no me refiero a solo iniciarlos o detenerlos como hacemos con el comando "net start" y "net stop", sino también a listar todos los servicios, modificar su forma de inicio e incluso modificar la acción a tomar en caso de que el servicio presente algún error y hasta la descripción del servicio, en fin, todo lo que podemos hacer con los servicios desde la consola grafica (services.msc), pero desde una ventana de comandos.

SC es un comando utilizado para comunicarnos con el administrador de servicios, lo que nos permite manejar los estados de los servicios rápidamente. También tiene la ventaja de poder integrarlo en scripts. SC contiene también una serie de subcomandos, los cuales se utilizan dependiendo del tipo de acción que se realizaran en el servicio. Para ver el listado ejecutamos “sc /?”, al lado de los subcomandos veremos una descripción de lo que hace el comando.



Ejemplos de SC
Vamos a ver ejemplos de algunas de las funciones que podemos hacer con “Sc”. Vamos a empezar con el uso más simple, iniciar o detener un servicio. Para este ejemplo utilizaremos el servicio “Spooler”, para detenerlo utilizando “Sc”, ejecutamos:

C:\> sc stop spooler
Y si queremos iniciarlo:

C:\> sc stop spooler
También con “Sc” podemos conseguir el listado de los servicios de nuestro sistema y sus estados actuales, para lo utilizamos:

C:\> sc query
Esto nos devolverá el siguiente resultado:

Como pueden ver, en este listado nos aparece el nombre del servicio (Service_Name) y, digamos, el nombre completo del servicio o “Dsiplay_Name”. Para trabajar con SC, usaremos el nombre del servicio o “Service_Name”. Podemos también conseguir el estado de un servicio en particular usando, por ejemplo, “sc query spooler” en caso del servicio Spooler. También podemos exportar esta lista de servicios a un archivo .txt usando: “sq query > lista.txt”. Otro uso de “Sc” es cambiar la forma de inicio del servicio, o sea, si queremos hacer que el servicio inicie al bootear el equipo, hacemos:
 
C:\ sc config spooler start= auto
 
Bueno, creo que con esto ya tienen una idea de lo que pueden hacer con “Sc”, esto es solo lo básico que podemos hacer. Espero que esto les haya sido de utilidad, en el próximo post volveremos al tema de prepara el Web Proxy con Squid, asi que hasta el próximo!

martes, 2 de febrero de 2010

Instalacion de Samba en Centos y Conexion con Active Directory (Parte 2)

Hola nuevamente!

Como recordaran, en el post anterior instalamos Samba y otros paquetes y librerias necesarios para hacer que nuestro Centos participe en un dominio Active Directory, pero no hicimos ninguna configuracion en ninguno de los paquetes porque.... bueno, porque generalmente escribo de noche y me estaba cayendo del sueno. En esta ocasion haremos las configuraciones necesarias y dejaremos nuestro equipo siento parte del dominio Windows. El escenario que utilizaremos sera el siguiente:

Un dominio Active Directory llamado "TEST-LAB.COM"
Un controlador de dominio y DNS Server llamado "DC-SRV01", con la IP 10.0.1.70
Un equipo Linux (Centos) que sera parte del dominio, y utilizara la IP 10.0.1.71

La version de Windows que usare en este ejemplo es Windows Server 2003, pero se puede hacer tambien sin problemas con Windows 2000 Server. Bueno, habiendo dicho esto, podemos empezar con las configuraciones en nuestro equipo. Lo primero que debemos comprobar, y creo que no hace falta mencionarlo, es que nuestro equipo Centos tenga conectividad con el controlador de dominio, esto lo comprabamos haciendo un simple "ping" hacia el servidor. Una vez comprobamos que estamos conectados, indicamos al equipo Centos que utilice al controlador del dominio como DNS Server, para esto modificamos el archivo "/etc/resolv.conf" e incluimos la IP del servidor de dominio (10.0.1.70).

Contenido del archivo resolv.conf

Como ven, tambien incluimos el nombre del dominio local al lado de "search". Tambien modificaremos en archivo "/etc/hosts" e incluiremos el nombre del controlador del dominio y su direccion IP, esto en caso de que la resolucion de nombres por DNS falle en algun momento. Luego de modificado el archivo "hosts" debe verse de esta manera:

Contenido archivo resolv.conf

Ahora pasaremos a modificar el archivo "/etc/nsswitch.conf", en este agregaremos o editaremos (si ya estan presentes) las siguientes lineas de manera que queden de esta forma:

passwd: files winbind
shadow: files winbind
group: files winbind
protocols: files winbind
rcp: files winbind
netgroup: files winbind
hosts: files winbind dns

Lo siguiente es configurar Kerberos, para esto modificamos el archivo "/etc/krb5.conf". Si no vamos a utilizar otro Servidor Kerberos a parte de nuestro controlador de dominio, podemos elimiar todas las lineas de este archivo y dejar solo las lineas que nos interesan. El archivo luego de modificado debe quedar de esta forma:

Contenido archivo krb5.conf

Como pueden ver, en la seccion "default_realm" se especifica el nombre del domino al cual queremos pertenecer (en letras mayusculas). Mas abajo se especifica el nombre completo del controlador de dominio (FQDN) en letras minusculas. Ahora pasamos a configurar Samba. Como hicimos la configuracion de Samba compilando los fuentes, es muy posible que la carpeta "/etc/samba/" (que fue la carpeta que especificamos para guardar la configuracion) este vacia. Nos moveremos a esta carpeta y crearemos un archivo llamado "smb.conf", en este incluiremos las siguientes lineas:

[global]
security = ads
password server = 10.0.1.70
encrypt passwords = true
workgroup = test-lab
realm = TEST-LAB.COM
netbios name = Centos-Box
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind separator = +

Lo mas importante a tener en cuenta en estas lineas es que en la linea "password server" especificamos la direccion IP de nuestro controlador de dominio, en la linea "realm" insertamos el nombre del dominio tal y como lo especificamos en el archivo de configuracion de Kerberos. Y en la linea "netbios name" especificaremos el nombre con el cual queremos que nuestro equipo sea insertado al domino, este nombre no tiene que coincidir necesariamente con el nombre de nuestro equipo Centos. Ahora, lo que haremos sera iniciar Samba y Winbind, ya que como no los hemos configurado para iniciar durante la carga del sistema, deben estar desactivados. Para activarlos ejecutamos los siguientes comandos:

[localhost@root ~]# smbd start
[localhost@root ~]# nmbd start
[localhost@root ~] winbindd start


Podemos confirmar que Samba ya esta en ejecucion ejecutando el comando "netstat -nat", la salida de este comando debe mostrarnos que los puertos 445 y 139 estan en estado "LISTENNING", tambien lo comprobamos ejecutando "ps -aux", en este listado deben aparecer los servicios smbd y nmbd. Lo que sigue ahora es solicitar un "Ticket" al servidor Kerveros, que es nuestro controlador de dominio, para ejecutamos el comando "kinit" y le proporcionamos credenciales validas en el dominio, o sea, un usuario y un password, en este caso usuaremos el usuario "Administrator". Antes de solicitar el ticket, debemos asegurarnos que ambos equipos, el controlador del dominio y el equipo Centos tengan la misma hora, o por lo menos que la diferencia de hora no sobrepase los 5 minutos. Para sincronizar nuestra hora con la del controlador del dominio podemos utilizar el comando "net time":

[localhost@root ~]# net time set -I 10.0.1.70

Una vez hemos sincronizado los relojes podemos solicitar el ticket, para esto utilizamos el siguiente comando e inctroducimos el password cuando nos lo pida:

[localhost@root ~]# kinit Adminsitrator@TEST-LAB.COM

Si todo sale bien, a este punto ya tenemos nuestro ticket kerberos, podemos confirmar que ya lo tenemos con el comando "klist":

kinit

Por ultimo, vamos a ejecutar el comando "net join" para agregar nuestra maquina Centos al dominio, lo haremos utilizando nuevamente las credenciales del usuario "Administrator", al presionar "enter" se nos pedira el password de este usuario.

[localhost@root ~]# net join ads -S dc-srv01.test-lab.com -U administrator
Enter administrator's password:
Using short domain name -- TEST-LAB
Joined 'CENTOS-BOX' to realm 'test-lab.com'

Si recibimos ese mensaje, ya hemos insertado nuestro equipo al dominio Active Directory exitosamente!. Al ser parte del dominio podemos tener acceso a la lista de usuarios y grupos del dominio, podemos utilizar el comando "wb-info" para probar la conexion y para obtener la lista de usuarios y grupos, como se muestra en el siguiente grafico:

Comando wb-info

Espero que esta informacion les haya sido de provecho, en un proximo post usaremos esta membresia a Active Directory para permitir acceso a Internet a los usuarios miembros de un determinado grupo de usuarios utilizando el Web Proxy Squid.