WhatsApp :: tráfico sin cifrar ::

Es este post, toca revisar el servicio WhatsApp; muy usado por los usuarios de smartphones y el funcionamiento es simple: enviar / recibir mensajes mediante la conexión a internet de nuestro móvil, haciendo uso para identificar a los usuarios, del número de teléfono.

En principio no parece peligroso, pero sin ir más lejos, os pongo una captura realizada con el wireshark:

1º) el teléfono se registra vía wifi en la red de whatsApp:

1930 287.781931 173.192.X.X 192.168.2.X SSL Continuation Data

– IP 192.168.2.X es la de mi teléfono registrado por wifi
– IP 173.192.X.X es la ip de uno de los servidores de registro de WhatsApp

Y el detalle del paquete:


0000 cc 05 1b c8 e0 8f 00 1a 6d dc 68 9b 08 00 45 00 …….. m.h…E.
0010 00 49 76 74 40 00 31 06 87 19 ad c0 db 84 c0 a8 .Ivt@.1. ……..
0020 02 34 01 bb b3 8c db 71 6b 07 3a a1 6c 85 80 18 .4…..q k.:.l…
0030 02 02 aa 19 00 00 01 01 08 0a 5b 98 d0 d5 00 49 …….. ..[….I
0040 ab 35 00 13 XX XX XX XX fa fc 0b 33 XX XX XX XX .5….t8 …34616
0050 30 XX XX XX XX XX XX 028XXXX.

Mal vamos …… en el paquete capturado, veo 34616028XXXX, que es mi TELÉFONO en texto plano. Ya no me gusta; mi número visible en texto plano por la red 🙁

Envío un mensaje a mi hermano, que también tienen WhatsApp y le pongo “El domingo”.
Vamos a ver el paquete capturado:

1970 292.247376 192.168.x.x 173.192.x.x TCP [TCP segment of a reassembled PDU]

vuelve a salir la ip de mi teléfono y la del servidor whatsapp, (normal), pero fijarse bien en el detalle del paquete:

0000 00 1a 6d dc 68 9b cc 05 1b c8 e0 8f 08 00 45 00 ..m.h… ……E.
0010 00 74 c3 8f 40 00 40 06 2a d3 c0 a8 02 34 ad c0 .t..@.@. *….4..
0020 db 84 b3 8c 01 bb 3a a1 6c 86 db 71 6b 27 80 18 ……:. l..qk’..
0030 0d 80 4c 20 00 00 01 01 08 0a 00 49 ad 7f 5b 98 ..L …. …I..[.
0040 e1 dd 3f f8 08 5d a0 fa fc 0b 33 XX XX XX XX XX ..?..].. ..346968
0050 XX XX XX XX XX 8a a2 1b 43 fc 0c 31 33 31 39 36 52581… C..13196
0060 36 35 39 30 38 2d 34 f8 02 f8 04 ba bd 4f f8 01 65908-4. …..O..
0070 f8 01 8c f8 02 16 fc 0a 45 6c 20 64 6f 6d 69 6e …….. El domin
0080 67 6f go

Y mi sorpresa es mayúscula; el texto y el teléfono del destinatario, en texto plano……
si ya no lo usaba, ahora creo que menos.

Sé que es difícil que alguien capture datos de una red 3G, pero de una wifi…. no es tan difícil.

No la critico, ya que la veo práctica, funcional y es usada por miles de personas, pero era tan difícil de cifrar los datos sensibles ?

Squid + Active Directory ::parte 4::

Ahora nos toca configurar el squid…. suponemos que tenemos un grupo de usuarios en la empresa que no queremos que accedan al facebook, twitter y alguna red social más:

editamos el fichero /etc/init.d/squid.conf y lo dejamos tal que:


auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl authenticated proxy_auth REQUIRED

########################################
## definimos puertos navegacion
########################################
acl http proto http
acl port_80 port 80

acl bad url_regex "/etc/squid/squid_block.acl" # webs bloqueadas a todos
acl webs_redes_sociales url_regex "/etc/squid/webs_redes_sociales.acl"
acl usuarios_sin_redes_sociales proxy_auth "/etc/squid/usuarios_sin_redesociales.acl"

acl authenticated proxy_auth REQUIRED
http_access deny http port_80 webs_redes_sociales usuarios_sin_redes_sociales
http_access allow authenticated
http_access deny bad
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
access_log /var/log/squid/access.log squid
#

Empezamos definiendo ficheros en /etc/squid

Webs bloqueadas a todos, por ejemplo pornotube…. (sin palabras)


# nano /etc/squid/squid_block.acl

y añadimos


pornotube
youtube
planetacom
sex

Si ponemos algo que contenga estas palabras, sencillamente lo bloqueará 🙂

Ahora creamos el fichero /etc/squid/webs_redes_sociales.acl que contendrá la lista de las webs a bloquear de redes sociales.


nano /etc/squid/webs_redes_sociales.acl

y añadimos


facebook
hotmail
gmail
msn
yahoo
foro
twitter
tuit

Y ahora la lista de usuarios para bloquear…


# nano /etc/squid/usuarios_sin_redesociales.acl

y a capar 🙂


manolito.gafotas
pepito.perez
maria.delao

hacemos un reload y listo 🙂


# /etc/init.d/squid force-reload

Y el resto, con imaginación

Squid + Active Directory ::parte 3::

Ahora, añadimos nuestro servidor linux al active directory:


net ads join -S miserver_ad.midominio.local -U administrador

Nos pedirá el password y si todo ha ido bien, nos responderá:


Using short domain name -- MIDOMINIO
Joined 'tuxServer' to realm 'MIDOMINIO.LOCAL'

Si ha funcionado bien, vamos a modificar el script que inicia el windbind…. hacemos copia y lo dejamos tal que: /init.d/windbin


#!/bin/sh
### BEGIN INIT INFO
# Provides:
winbind
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 016
# Short-Description: start Winbind daemon

### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[ -r /etc/default/winbind ] && . /etc/default/winbind
DAEMON=/usr/sbin/winbindd
# clear conflicting settings from the environment
unset TMPDIR
# See if the daemon is there
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting the Winbind daemon" "winbind"
mkdir -p /var/run/samba/winbindd_privileged || return 1
chgrp proxy /var/run/samba/winbindd_privileged/ || return 1
chmod 0750 /var/run/samba/winbindd_privileged/ || return 1
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
chmod 77 /var/run/samba/winbindd_privileged
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping the Winbind daemon" "winbind"
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
log_end_msg $?
;;
restart|force-reload)
$0 stop && sleep 2 && $0 start
;;
*)
echo "Usage: /etc/init.d/winbind {start|stop|restart|force-reload}"
exit 1
;;
esac

Ahora, toca modificar el orden de arranque de los servicios, siendo por orden:
1º) Samba
2º) WindBind
3º) Squid

Lógicamente, para que squid consulte correctamente el AD, tiene que tener arrancados antes que él, el samba y el WindBind..

Editamos el fichero /etc/rc.local y añadimos:


invoke-rc.d samba stop
invoke-rc.d winbind stop
invoke-rc.d squid stop
invoke-rc.d samba start
invoke-rc.d winbind start
invoke-rc.d squid start

Y reiniciamos el servidor….


# reboot

Una vez iniciado el servidor, para comprobar que todo ha ido bien, tecleamos:


# wbinfo -u

nos deberá de mostrar todos los usuarios de active directory…..

Y ahora nos toca configurar squid para que consulte los usuarios…

Squid + Active Directory ::parte 2::

Ahora, en este segundo paso, configuraremos el cliente kerberos en nuesto linux, para ello editaremos el fichero /etc/krb5.conf. Previamente lo copiamos…


# cp /etc/krb5.conf /etc/krb5_old.conf

Partiendo de los siguientes datos:


servidor AD : 192.168.2.1
dominio : midominio.local
Nombre Servidor AD: miservidor


Borramos todo el contenido y lo dejamos tal que:


[libdefaults]
default_realm = MIDOMINIO.LOCAL
clockskew = 300
[realms]
MIDOMINIO.LOCAL = {
kdc = 192.168.2.1
default_domain = midominio.local
admin_server = 192.168.2.1
}
midominio.local = {
kdc = 192.168.2.1
default_domain = midominio.local
admin_server = 192.168.2.1
}
midominio = {
kdc = 192.168.2.1
default_domain = midominio
admin_server = midominio.local
}
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
[domain_realm]
.midominio = midominio
.midominio.local = MIDOMINIO.LOCAL
[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
retain_after_close = false
minimum_uid = 0
try_first_pass = true
}

Una vez editado este fichero, vamos a crear el ticket kerberos, para ello, tecleamos:


kinit administrador

Si todo va bien, nos pedirá el password de administrador; no deberá de mostrar nada. Si no ha ido bien, deberemos repasar los pasos anteriores.

Ahora toca configurar samba, para ello copiaremos y editaremos el fichero /etc/samba/smb.conf


# cp /etc/samba/smb.conf /etc/samba/smb_old.conf

Borramos el contenido y lo dejamos tal que:


[global]
security = ADS
netbios name = superTUXsErver
realm = MIDOMINIO.LOCAL
password server = miservidor_ad.midominio.local
workgroup = MIDOMINIO
log level = 1
syslog = 0
idmap uid = 10000-29999
idmap gid = 10000-29999
winbind separator = +
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
domain master = no
server string = Super TUX Client AD
encrypt passwords = yes

[homes]
comment = Home Directories
valid users = %S
browseable = No
read only = No
inherit acls = Yes
[profiles]
comment = Network Profiles Service
path = %H
read only = No
store dos attributes = Yes
create mask = 0600
directory mask = 0700

Una vez editado, reiniciamos samba:

#/etc/init.d/samba restart

Squid + Active Directory ::parte 1::

Cada vez me pasa más que, en clientes, tienen que convivir linux / windows / mac….. y llega el caso del proxy. He instalado en bastantes ocasiones, desde el Proxy 2.0 hasta el ISA 2006. Es un buen producto; no tengo nada en contra, pero si tenemos herramientas openSource, ¿porqué no usarlas?.

Un gran handicap del ISA Server es que, bien configurado, te muestra en los reports los usuarios, pero nada más lejos… con nuestro squid y rascando un poco de configuración, podemos conseguir el mismo resultado.

Configuración y apuntes varios de aquí
Primero de todo, instalamos el squid en nuestro debian:


# apt-get install squid

Y ahora añadimos los paquetes windBind, ntpdate y samba entre otros… recordando que nuestro equipo linux tiene que ser capaz de sacar la lista de usuarios del AD.


aptitude install samba smbclient winbind krb5-user krb5-config ntpdate

Ahora configuraremos correctamente la hora en el servidor, ya que Kerberos, ante desviaciones > a 15 minutos entre el linux y el servidor AD, no se sincronizará ni tendrá acceso a las cuentas de usuario…

editamos el fichero /etc/ntp.conf y añadimos:


# pool:
server servidor.ntp.active.directory
...
server 3.debian.pool.ntp.org iburst

Reiniciamos el servicio ntp y comprobamos que la fecha/hora del servidor squid y el windows sea la misma.


#/etc/init.d/ntp restart

Y ahora, aseguramos que sea capaz de encontrar por dns los servidores de dominio de windows. Para ello, editamos el fichero /etc/hosts y lo modificamos tal que:


127.0.0.1 localhost
127.0.1.1 mimaquina_linux.dominio.tal mimaquina_linux
X.X.X.X mimaquina_linux.dominio.tal mimaquina_linux
X.X.X.X miservidor_AD.dominio.tal miservidor_AD

Comprobamos mediante #ping miservidor_AD que nos resuelve correctamente la ip y llegamos.

Update Zarafa 7.x

Desde que el pasado mes de julio instalé Zarafa, no he tenido la necesidad de actualizar la versión…. ya sabemos, si algo funciona bien, ¿ para qué actualizarlo ?.

Con la primera versión de la 7, me topé con algunas cosillas en el webaccess que no iban finas…. los contactos/calendarios, se mostraban como lista y no había posibilidad de cambiarlos y luego, que al eliminar los mensajes desde el evolution, por imap4, estos no se borraban.

Tras leer los changelogs de la 7.0.2, veo que el tema de la vista de los calendarios y lo del imap, a priori está solucionado, así que me dispongo a actualizar.

Primero de todo, nos hacemos una copia de seguridad de la base de datos y de los ficheros de configuración.

Después, nos bajamos la útima versión free de zarafa

root@zeus#cd /usr/src
root@zeus:/usr/src# wget -c http://download.zarafa.com/community/final/7.0/7.0.2-29470/zcp-7.0.2-29470-debian-6.0-x86_64-free.tar.gz

Y seguimos…

root@zeus:/usr/src# tar -zxvf zcp-7.0.2-29470-debian-6.0-x86_64-free.tar.gz

paramos los servicios de Zarafa y instalamos

root@zeus:/usr/src# cd zcp-7.0.2-29470-debian-6.0-x86_64-free
root@zeus:/usr/src/zcp-7.0.2-29470-debian-6.0-x86_64-free#/etc/init.d/zarafa-server stop
root@zeus:/usr/src/zcp-7.0.2-29470-debian-6.0-x86_64-free#dpkg -i zarafa* libvmime* libical* php* python*

Y tras unos minutos, nuestro server zarafa ya lo tendremos actualizado.

Cabe destacar que, si tenéis personalizada la entrada del webaccess, tenéis que volver a colocar el html o el jpg modificado otra vez en su sitio.