Instalar servidor anti-spam, parte 1

Ahora toca explicar cómo instalar un servidor anti-spam.

Hasta ahora, en la mayoría de clientes, usaba el trendmicro…. y ahora, con la crisis y demás histórias, la gente no quiere pagar licencias. Es un buen producto, pero me niego a ponerlo pirata; si quieres algo, págalo y sobretodo si es para la empresa.

Yo, en casa, al tener licencias de trendmicro, tenía el IMSS y no iba mal, pero hice el salto al openSource…. poco a poco he ido eliminando todas las máquinas windows y las primeras en eliminar fue la del anti-spam.

Usaremos una solución basada en:

– Debian (rock solid xD)
– Postfix (para la entrega de correos)
– Clamav (antivirus)
– SpamAssassin (antispam) + blacklist
– GreyList
– SPF
– MailScanner (para interactual con el postfix / spamassassin)
– MySQL (para guardar el registro de correos y mailscanner)

El greyList es una buena opción…. recibes un correo y, si es la primera vez que desde esa ip lo recibes, nuestro servidor devuelve un mensaje 4.5.x Greylisted, Try later. Si el servidor que envía es RFC compliant (ojo los exchanges), al cabo de unos 300 segundos lo volverá a intentar y, en este caso, aceptaremos el correo.

Con este primer filtro, evitamos el 70 % de spam, ya que la mayoría virus / troyanos envían a saco y no tienen en cuenta volver a intentarlo.

El segundo paso es el SPF (Sender security Framework). Suponemos que recibimos un email de manolito.com. Nosotros, al recibir el correo miramos si el dominio tiene creado el registro SPF, que no es otra cosa que, la lista de ip’s autorizadas (o dns names) a enviar correo en nombre de manolito.com.

Por ejemplo, el cliente manolito.com tiene el servidor con la ip pública 1.1.1.1, entones, su registro SPF deberá de ser:

manolito.com text = “v=spf1 mx ip4:1.1.1.1 -all”

Con esto explicamos:

v=spf1 : versión spf
mx : Que los registros mx del dominio, están autorizados a enviar correo
ip4 : Esta ip está autorizada
-all : Cualquier otro correo del dominio que no venga del mx o la ip, no es nuestro.

Cada vez, más empresas, clientes y proveedores, están habilitando esta opción, así que nosotros la haremos seguir…. así nos evitamos phising y demás porquerías

Eliminar usuarios "huérfanos" en sql server 2008

Estos días, he tenido que migrar un aplicativo en un cliente y ello conlleva la migración del sql server 2000 a sql server 2008.

no cabe decir que, me he tenido que buscar la vida “bastante” para migrar el sql….. el proveedor me dá el CD de instalación y un “búscate la vida” para hacerlo….. y la expresión: ” si tienes problemas con el SQL, te enviamos un técnico”.

en fin, tenía que hacerlo sí o sí.

1º) Instalé el sql server en otro servidor
2º) Hice copia de seguridad de las BBDD de SQL 2000
3º) Recuperé las copias

Ahora llega el problema… tenía que crear los usuarios en el SQL server 2008 y problema…. los usuarios ya existían, por lo tanto, no los puedo volver a crear.

Primer problema…. cómo eliminar los usuarios huérfanos….. en sql server 2000 lo tenía bastante por la mano, pero en 2008 no… así que “googleando” bastante, encontré la solución aquí.

El proceso es sencillo….. abrimos el analizador de consultas y sobre las BBDD ejecutamos:

select u.name from master..syslogins l right join
sysusers u on l.sid = u.sid
where l.sid is null and issqlrole <> 1 and isapprole <> 1
and (u.name <> ‘INFORMATION_SCHEMA’ and u.name <> ‘guest’
and u.name <> ‘system_function_schema’)

Y ahora, para eliminar a los usuarios…. en la misma pantalla y por BBDD, ejecutamos:

exec sp_revokedbaccess ‘usuario_a_borrar’

Y con esto, ya tenemos solucionado el problema

Saber qué servidor DHCP te ha dado ip en una red local con Debian / Ubuntu

Esto es más bien un apunte…. en windows, de las pocas cosas que ya me gustan es que, al hacer un ipconfig /all te dá toda la info de un tirón, pero en linux, no es lo mismo.

En alguna ocasión, he estado en algún cliente con problemas de red… servidores dhcp duplicados, un router de telefónica dando ip’s ….. y nada más conectar el portátil a la red y tener IP me gusta saber este tipo de información, para ir descartando problemas.

Estuve buscando hace días la info para saber cuál es el servidor dhcp de la red sin necesidad de lanzar el wireshark y encontré esto:

Nos vamos a la carpeta /var/lib/dhcp y allí encontraremos una serie de ficheros…. editamos con el nano el que tenga la fecha de modificación más nueva:

root@persefone:/var/lib/dhcp# ls -l
total 28
-rw-r–r– 1 root root 4920 ene 13 00:39 dhclient-0d77ab89-33d7-42c5-8779-d4d8f252fc25-eth0.lease
-rw-r–r– 1 root root 980 ene 12 09:27 dhclient-70c7e97f-cf63-45f7-b485-ed1e72515ff4-eth1.lease
-rw-r–r– 1 root root 990 ene 11 15:52 dhclient-796f7cb2-a301-4efe-91fb-7af9d0076b79-eth1.lease
-rw-r–r– 1 root root 740 ene 10 16:55 dhclient-a83a41a9-7e4f-4568-8e33-9c1060465cfa-eth1.lease
-rw-r–r– 1 root root 2080 ene 12 23:38 dhclient-b74de912-6b58-4e75-8e55-918f92db675a-eth1.lease
-rw-r–r– 1 root root 384 ene 12 17:54 dhclient-f9744661-fd4a-483a-91d9-ee28f39cfd09-eth1.lease
root@persefone:/var/lib/dhcp#

editamos el más nuevo y vermos algo tal que:

lease {
interface “eth0”;
fixed-address 192.168.9.65;
option subnet-mask 255.255.255.0;
option routers 192.168.9.254;
option dhcp-lease-time 600;
option dhcp-message-type 5;
option domain-name-servers 192.168.9.4,192.168.9.1;
option dhcp-server-identifier 192.168.9.7;
option domain-name “craem.net”;
renew 4 2012/01/12 23:47:33;
rebind 4 2012/01/12 23:52:25;
expire 4 2012/01/12 23:53:40;
}

Con toda la info…. para depurar 🙂

Script SSH en linux con expect para copiar grabaciones de Cisco CCM

Esta semana he tenido que realizar un script para copiar las grabaciones de un callmanager de cisco por ssh y volcarlas en un servidor, por SSH.

Los requisitos:

1º) conectarme por SSH al CCM
2º) Ejecutar unas instrucciones y esperar respuesta del CCM
3º) Eliminar las grabaciones, una vez pasadas al servidor

Nos ponemos manos a la obra…..


#cd /usr/local/bin
#nano copia.sh

Tenemos el fichero en blanco y pegamos …


#!/usr/bin/expect

set timeout -1
spawn ssh usuario@ip_del_ccm
expect "password:"
send "passwordn"
expect "admin:"
send "file get activelog /uccx/recordings/ n"
expect "Would you like to proceed "
send "yn"
expect "SFTP server IP: "
send "192.168.XXX.XXX n"
expect "SFTP server port "
send "22n"
expect "User ID: "
send "usuarioSSHn"
expect "Password:"
send "passwordSSHn"
expect "Download directory:"
send "/n"
expect "admin:"
send "utils uccx recordings purge 1000 [exec date +%m/%e/20%y] 23:59:59n"
expect "press"
send "Y"
expect "admin:"
send "quitn"
expect eof

Vamos por partes y lo explicamos…..

Primero, en nuestro debian, instalamos el paquete expect


#apt-get install expect

Y Ahora explicamos las líneas:


#!/usr/bin/expect
set timeout -1

Ponemos el timeout a -1 para que espere de manera indefinida…. cuando copiemos las grabaciones, se puede pasar más de 20 minutos copiando… y como no sabemos cuánto tiempo, pues que espere…

spawn ssh usuario@ip_del_ccm
–> nos conectamos por ssh
expect “password:”
–> esperamos a que nos pida el servidor el password
send “passwordn”
–> enviamos el password
expect “admin:”
–> ahora el callmanager espera a que pongamos la instrucción
send “file get activelog /uccx/recordings/ n”
–> activamos el envío de las grabaciones
expect “Would you like to proceed “
–> nos pide confirmación
send “yn”
–> pues eso, que Yes
expect “SFTP server IP: “
–> Esperamos a que nos pida el servidor SSH
send “192.168.XXX.XXX n”
–> Le enviamos la IP
expect “SFTP server port “
–> Nos pide el puerto
send “22n”
–> El 22
expect “User ID: “
–> nos pide el usuario
send “usuarioSSHn”
–> ahí que te va
expect “Password:”
–> el password
send “passwordSSHn”
–> lo enviamos
expect “Download directory:”
–> Directorio destino
send “/n”
–> es la raíz del Servidor (/)
expect “admin:”
–> esperamos que acabe…. bastante rato; al final nos pide otro comando
send “utils uccx recordings purge 1000 [exec date +%m/%e/20%y] 23:59:59n”
–> Ahora borramos los del día actual (hago la copia cada día)
expect “press”
–> Pide que pulsemos “Y”
send “Y”
–> lo pulsamos ;-P
expect “admin:”
–> Ha acabado de borrar
send “quitn”
–> tarea finalizada 🙂
expect eof

Enjoy the script

Sustituir router fibra movistar futura por router cisco

Si tenéis la suerte de tener fibra de movistar en vuestras oficinas / casa / lo que sea, estáis de suerte…. 50 Mb de bajada y 5 de subida… pero si habéis intentado cambiar el router por otro, para poder gestionar vosotros mismos el enlace, os habréis dado cuenta de que no es sencillo.

El otro día tuve que hacerlo en un cliente y tras revisar el router zyxel que hay detrás de la ONT (terminación fibra), hay que tener el cuenta las siguientes consideraciones:

1º) Tienes que usar la vlan 6 y encapsulado dot1q en la parte pública
2º) Necesitamos pppoe para obtener la IP

Con estas consideraciones, la configuración del router cisco, queda de la siguiente manera, suponiendo como siempre, que el fastethernet 0/0 es el interfaz público y el fastethernet 0/1 el privado:

interface FastEthernet0/0
no ip address
no ip route-cache cef
no ip route-cache
duplex auto
speed auto
!
interface FastEthernet0/0.6
encapsulation dot1Q 6
ip nat outside
ip virtual-reassembly
no ip route-cache
pppoe enable group global
pppoe-client dial-pool-number 1

interface Dialer1
bandwidth 6192
ip address negotiated
ip mtu 1492
ip nat outside
ip virtual-reassembly
encapsulation ppp
ip tcp adjust-mss 1452
dialer pool 1
dialer-group 1
no cdp enable
ppp authentication chap pap callin
ppp chap hostname adslppp@telefonicanetpa
ppp chap password 0 adslppp
ppp pap sent-username adslppp@telefonicanetpa password 0 adslppp
max-reserved-bandwidth 100

ip route 0.0.0.0 0.0.0.0 Dialer1

Enjoy your connexion 🙂

Clonando MAC Address en router cisco

Hay algunos proveedores que te “asignan” la ip fija a la mac address del dispositivo que haya detrás de su terminación / modem o lo que sea.

Normalmente, ese dispositivo suele ser suyo, con lo que tienes que cambiar la mac address y clonarla con el suyo, para poder disfrutar de esa ip fija.

Para hacerlo en un router cisco y suponiendo que el interfaz público sea el fastethernet 0/0, el ejemplo es este:

interface FastEthernet0/0
mac-address aabb.ccdd.eeff
bandwidth 6096
ip address dhcp client-id FastEthernet0/0
ip nat outside
ip virtual-reassembly
speed 100
full-duplex
crypto map mymap
max-reserved-bandwidth 100
service-policy output LLQ_QOS

Los parámetros importantes:

mac-address aabb.ccdd.eeff
Clonamos la mac address del router del proveedor

ip address dhcp client-id FastEthernet0/0
Hemos de obtener la ip por dhcp usando como client-ID mac address la de la fastethernet 0/0, en nuestro caso el interface outside.

Así de sencillo