Inicio arrow Artículos arrow Linux arrow Sistema de correo con Postfix, Cyrus y MySQL (XI - Filtrado)
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Sistema de correo con Postfix, Cyrus y MySQL (XI - Filtrado) Imprimir E-Mail
domingo, 30 de abril de 2006

Tres son las herramientas fundamentales que habremos de configurar para obtener un filtrado de los correos de nuestro servidor. Sieve, lenguaje con el cual compondremos filtros en la entrega final del correo, SpamAssassin, programa con el que filtraremos el correo no deseado y ClamAV, potente antivirus que evitará la entrega de correo infectado. Al final de este extenso capítulo, probaremos el filtrado con el envío de mensajes infectados y con cabeceras que simularán spam.


El uso de Sieve

Aunque la forma más sencilla de utilizar Sieve es mediante algún tipo de interfaz que nos facilite la tarea y componga el script por nosotros (de hecho, en el siguiente capítulo atenderemos, entre otras cosas, a la instalación y la configuración de una interfaz que nos permita una generación de estos filtros mucho más amena.), no está de más acercarnos, aunque sea de manera somera, al uso de este lenguaje para la composición de filtros.
Es necesario para la activación de un script de Sieve que un comando sea ejecutado sobre el mismo servidor mediante la herramienta sieveshell. La herramienta puede ser usada por cualquier usuario que pretenda filtrar o redirigir la entrega de correo, siendo imprescindible que el script haya sido escrito y guardado en un archivo simple de texto. Como ejemplo de uso, vamos a atender a la activación de un script de ejemplo llamado prueba.sieve:

$ sieveshell -user info -authname usuario001 localhost
connecting to localhost
Please enter your password:
> put prueba.sieve
> activate prueba.sieve
> ls
prueba.sieve <− active script
> quit

El uso de la consola de sieveshell es muy sencillo, no llegando a la decena el número de comandos a nuestra disposición. Para tener una idea más clara de cuáles y para qué sirven estos comandos, ejecutaremos man sieveshell en la consola del sistema.

A continuación, adjuntaremos un ejemplo del uso del lenguaje utilizado por Sieve en los scripts de filtrado. Dicho ejemplo atiende a la cabecera de los mensajes para filtrar según el remitente o el asunto del mensaje:

#Script de Sieve
require ["fileinto","reject","vacation",
"imapflags","relational",
"comparator-i;ascii-numeric","regex","notify"];
if
 header :contains "Subject" "[SPAM]"
  {
  fileinto "INBOX.Spam";
  stop;
  }
if
 header :contains "From" "proveedores.net"
  {
  fileinto "INBOX.Proveedores";
  }
elseif
 header :contains "From" "proveedor01"
  {
  fileinto "INBOX.Proveedor01";
  }
#Fin del script


SpamAssassin

Tanto SpamAssassin como ClamAV serán utilizados desde Postfix y a través de Amavisd-new, que hará de interfaz entre los programas y el servidor.

En un sistema con una distribución de Fedora Core, la simple instalación del paquete RPM correspondiente a SpamAssassin dejará este programa completamente instalado y configurado para su uso. Sin embargo, hay que aclarar un punto que puede ser modificado a gusto del usuario y que optimizará el funcionamiento del programa: No es necesaria la ejecución del servidor spamd sobre nuestro sistema, por lo que evitaremos la misma mediante el siguiente comando: 

#chkconfig --del spamassassin

La principal ventaja de spamd es su eficiencia, ya que las comunicaciones se establecen a través del puerto 783 y evitan el tener que cargar un ejecutable cada vez que se hagan las comprobaciones referentes al spam. El principal inconveniente es relativo a la seguridad: aunque bajo, el riesgo de tener corriendo un servidor en un puerto siempre está sujeto a posibles vulnerabilidades por errores en el código. En nuestro caso, cargaremos SpamAssassin a través de Amavisd-new, que llamará al programa mediante el módulo de Perl Mail::SpamAssassin. Con esto conseguiremos que el motor con las reglas siempre quede cargado en memoria, obteniendo una eficiencia similar a la de la ejecución de spamd. No obstante, como hemos dicho anteriormente, esto no es más que una recomendación, quedando a gusto del usuario su aplicación.

Para tener un elevado número de aciertos con el filtrado de spam, utilizaremos los llamados filtros bayesianos. Este tipo de filtrado requiere un entrenamiento para que sea eficaz en un alto porcentaje de los casos. Para ello, habremos de proporcionar a SpamAssassin un elevado número de mensajes, tanto de spam como de ham (no-spam), y esto lo conseguiremos mediante el uso de la herramienta sa-learn (ejecutaremos man sa-learn para documentarnos adecuadamente a cerca de este programa). Básicamente, ejecutaremos sa-learn --spam <directorio> para la recolección de mensajes que sabemos a ciencia cierta son spam. Con sa-learn --ham <directorio> haremos todo lo contrario: instruiremos al programa en la recolección de correo que no es spam. Es necesario leerse las páginas del manual para ejecutar otras opciones, como la lectura de directorios por lotes. Como SpamAssassin será llamado por Amavisd-new, la ejecución de sa-learn preferiblemente tendrá que ser a través del usuario amavis.


ClamAV

Al igual que nos ocurría con SpamAssassin, la configuración por defecto de ClamAV es más que suficiente para el filtrado de virus sobre el servidor. En un sistema con Fedora Core y para nuestros propósitos, tendremos que asegurarnos de que el demonio clamd.amavisd se ejecuta correctamente al inicio del sistema. Ejecutaremos los comandos siguientes para conseguir nuestros propósitos:

#chkconfig clamd.amavisd on
#service clamd.amavisd start

De esta forma evitaremos el siguiente error registrado en /var/log/maillog :

ClamAV-clamd av-scanner FAILED:
Too many retries to talk to /var/spool/amavisd/clamd.sock
(Can't connect to UNIX socket /var/spool/amavisd/clamd.sock

El demonio freshclam-sleep, incluido con el paquete clamav-update será el encargado de actualizar el antivirus mediante cron. La configuración por defecto puede verse en /etc/cron.d/clamav-update. Si necesitamos realizar modificaciones a la configuración de freshclam, lo haremos desde el fichero /etc/freshclam.conf, aunque no es recomendable.


Amavisd-new

El fichero de configuración de Amavisd-new se encuentra en la ruta /etc/amavisd/amavisd.conf y tiene alrededor de quinientas líneas. Para nuestros propósitos solamente será necesario cambiar una decena de ellas. La idea para el procesamiento de los correos es la siguiente: Un correo se marca como spam o como contenedor no deseado (virus, archivos exe, etc.) y se deja llegar a su destino, lugar donde, a través de un filtro con Sieve, será redirigido hacia un contenedor que alojará todos estos correos. Periódicamente, el usuario revisará el contenedor en busca de falsos positivos y borrará el resto. En caso de encontrarnos con falsos positivos, instruiremos a SpamAssassin mediante la opción forget de sa-learn.

Veamos ahora las líneas del fichero /etc/amavisd/amavisd.conf que hemos cambiado para adaptarlo a los propósitos de este manual:

$mydomain = 'dominio.net';
#El siguiente directorio tiene que pertenecer
#al usuario amavis
$QUARANTINEDIR = "/var/virusmails";
$MAXLEVELS = 14;
$MAXFILES = 1500;
$MIN_EXPANSION_QUOTA =      100*1024;
$MAX_EXPANSION_QUOTA = 300*1024*1024;
$myhostname = 'mail.dominio.net'; #Sólo en caso de necesidad
$notify_method  = 'smtp:[127.0.0.1]:10025';
$forward_method = 'smtp:[127.0.0.1]:10025';
$final_virus_destiny      = D_DISCARD;
$final_banned_destiny     = D_DISCARD;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;
#Descomentar si se quieren enviar avisos al remitente
#$warnbannedsender = 1;
#$warnbadhsender = 1;
#Se activa el reenvio a un directorio de los mensajes
#infectados.
#$virus_quarantine_to = "virus−quarantine\@$mydomain";
#Adjuntamos una cabecera al spam
$sa_spam_subject_tag = '[SPAM] ';
#Rechazamos ficheros adjuntos de los tipos siguientes
$banned_filename_re = new_RE(
qr'\.[^./]*[A-Za-z][^./]*\.(exe|vbs|pif|scr|bat|cmd|
com|cpl|dll)\.?$'i,
qr'[{}]',
qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|
exe|hlp|hta|inf|ins|isp|js|
jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|
scr|sct|shs|shb|vb|
vbe|vbs|wsc|wsf|wsh)$'ix,
qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i,
qr'^\.exe$'i,
qr'^application/x−msdownload$'i,
qr'^application/x−msdos−program$'i,
qr'^message/partial$'i, qr'^message/external−body$'i,
);

Obviamente, el fichero final dependerá de las necesidades de cada administrador, siendo lo anterior un mero ejemplo que adapta unas necesidades concretas. En principio, los cambios más importantes a realizar son los siguientes:

    • final_spam_destiny, final_virus_destiny, final_banned_destiny, final_bad_header_destiny : Mediante D_DISCARD o D_PASS permitiremos que un correo detectado se descarte o siga su curso, respectivamente, y sea enviado al directorio de cuarentena especificado. Los mensajes descartados se guardarán con las etiquetas spam, virus, banned o badh más un código de control.
    • warnbannedsender, warnbadhsender : Se activa el envío de un mensaje de aviso al remitente si éste ha sido baneado o las cabeceras de su mensaje están mal formadas.
    • virus_quarantine_to, banned_quarantine_to, bad_header_quarantine_to, spam_quarantine_to : Se activa la cuarentena de los tipos detectados y se mandan al directorio especificado.
    • sa_spam_subject_tag : Se añade un texto a la cabecera para su posterior filtrado mediante Sieve.
    • banned_filename_re : Se rechazan los correos que contengan ficheros adjuntos con las extensiones mostradas.

Cuando hagamos algún cambio al fichero de Amavisd-new, habremos de reiniciar el servicio con /etc/init.d/amavisd restart y será bastante recomendable observar su carga en el fichero /var/log/maillog, donde veremos los módulos cargados y los posibles errores.


Modificaciones en Postfix

En primer lugar, añadiremos las líneas siguientes al fichero /etc/postfix/master.cf:

# Amavisd-New filtrado
smtp-amavis   unix  -  -  n - 2 smtp
 -o smtp_data_done_timeout=1200
 -o disable_dns_lookup=yes
127.0.0.1:10025 inet  n  - n - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o mynetworks=127.0.0.0/8
 -o strict_rfc821_envelopes=yes
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000

Y al fichero /etc/postfix/main.cf le añadiremos la siguiente línea:

#Amavisd-New
content_filter = smtp-amavis:[localhost]:10024

Con estas modificaciones haremos que Postfix redirija el tráfico hacia el puerto de loopback de Amavisd-new, que procesará el mensaje y lo redigirá hacia el puerto 10025, donde hemos habilitado smtpd. Una vez hechas las modificaciones, reiniciaremos Postfix con /etc/init.d/postfix restart.


Filtrado de correo sobre Postfix (anti-UCE)

Vamos a habilitar una serie de mecanismos sobre el servidor Postfix que nos permitirán filtrar usos abusivos o malintencionados del mismo. Intentaremos denegar el uso del servidor a todo aquello que creamos que no ha sido solicitado.
Para llevar a cabo nuestros propósitos, habremos de añadir varias líneas al fichero /etc/postfix/main.cf:

smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions =
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_sender_domain,
  reject_unknown_recipient_domain,
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
  check_helo_access hash:/etc/postfix/helo_checks,
  check_sender_access hash:/etc/postfix/sender_checks,
  check_client_access hash:/etc/postfix/client_checks,
  check_client_access pcre:/etc/postfix/client_checks.pcre,
  #reject_rbl_client relays.ordb.org,
  permit
smtpd_data_restrictions =
  reject_unauth_pipelining,
  permit

Tal y como hicimos anteriormente con SpamAssassin, las restricciones aquí mencionadas deberán ser ajustadas a las necesidades de cada servidor de correo. Expliquemos con algo de detalle qué se pretende con las líneas adjuntadas, teniendo en cuenta que el orden de las instrucciones es siempre relevante:

  • La primera y segunda sentencias aseguran que el proceso de HELO/EHLO y el envoltorio del mensaje son correctos. Se deshabilita la verificación de las direcciones de correo.
  • Seguidamente se deshabilitará la concatenación de comandos (reject_unauth_pipelining) para evitar ataques de diccionario por parte de spammers.
  • Con permit_mynetworks se acepta cualquier cosa que haya pasado las restricciones de más arriba, sin importar el destino.
  • Permitimos a continuación a los clientes autenticados mediante SASL, rechazando a los que no se hayan autenticado.
  • Con check_recipient_access comprobaremos ciertas direcciones de destinatarios antes de aplicar las listas negras locales.
  • Comprobaremos entonces las listas negras locales, las listas blancas locales y las listas negras y blancas combinadas (comnprobación de HELO/EHLO, remitente (origen en el envoltorio) y cliente (servidor que envía)).
  • Con reject_rbl_client se especifican servidores de listas negras que añadiremos a nuestro gusto (como el especificado ordb.org).

El fichero /etc/postfix/recipient_checks.pcre contendrá parámetros para revisar la sintaxis de las direcciones a revisar. Es necesario tener activado el soporte PCRE (Perl Compatible Regular Expressions) en Postfix para su correcto funcionemiento (por defecto en los sistemas con Fedora Core):

# Soporte PCRE requerido en Postfix
/^\@/ 550 Invalid address format.
/[!%\@].*\@/ 550 This server disallows weird address syntax.
/^postmaster\@/ OK
/^hostmaster\@/ OK
/^abuse\@/ OK

El contenido de /etc/postfix/helo_checks, cuyo cometido es comprobar que el comando HELO/EHLO no utilice ni nuestro dominio ni localhost al conectarse, será el siguiente:

#Comprobaciones de HELO/EHLO
liberaliatempus.com         REJECT You are not in dominio.com :C
webmail.liberaliatempus.com REJECT You are not mail.dominio.com
localhost                   REJECT You are not me :C

Este y todos los ficheros de tipo hash, serán compilados, una vez escritos, con el comando postmap <fichero> , que creará la base de datos Berkeley DB correspondiente.

En /etc/postfix/sender_checks se incluyen los remitentes a rechazar. Veamos un ejemplo:

# A compilar con postmap ...
spammers.com 554 Spam not tolerated here
Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla OK
morespammers.com REJECT

El fichero /etc/postfix/client_checks contiene clientes no deseados. Un ejemplo válido sería el siguiente:

# A compilar con postmap ...
spammers.com 554 Spam not tolerated here
10 554 Go away!
myfriendsdomain.com OK
172.16 OK

Lo mismo para /etc/postfix/client_checks.pcre :

# Soporte PCRE requerido en Postfix
/10\.9\.8\.7/ OK
/10\.9\.([89]|10)\.\d+/ 554 Go away. We don't want any!

Como hemos hecho hasta ahora, reiniciaremos Postfix para aplicar cualquier cambio con /etc/init.d/postfix restart.


Comprobaciones finales

Para comprobar el correcto funcionamiento de nuestros filtros de contenido, mandaremos dos mensajes de correo: uno con spam y otro con el virus de muestra EICAR.

Para empezar, mandaremos, preferiblemente desde una cuenta ajena a nuestro dominio, un mensaje que contendrá lo siguiente en el cuerpo del mismo (el asunto es de libre elección y el destinatario, una cuenta del dominio):

This is the GTUBE, the
        Generic
        Test for
        Unsolicited
        Bulk
        Email

If your spam filter supports it, the GTUBE provides a test by which you
can verify that the filter is installed correctly and is detecting incoming
spam. You can send yourself a test mail containing the following string of
characters (in upper case and with no white spaces and line breaks):

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

You should send this test mail from an account outside of your network.

El correo, si hemos dejado en la configuración de Amavisd-new la línea $final_spam_destiny = D_PASS, se recibirá con el siguiente contenido en su cabecera (variando según los servidores y el gestor de correo utilizado):

Return-Path: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
Received: from murder ([unix socket])
     by pegasus.domain.net (Cyrus v2.3.1-Invoca-RPM-2.3.1-2.6.fc5)
with LMTPA;
     Sun, 26 Jun 2005 15:05:10 +0200
X-Sieve: CMU Sieve 2.3
Received: from localhost (pegasus.domain.net [127.0.0.1])
    by mail.domain.net (Postfix) with ESMTP id 5656C469F7B
    for < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >; Sun, 26 Jun 2005 15:05:10 +0200 (CEST)
X-Quarantine-ID: <dfa8PpZIr6jP>
X-Virus-Scanned: amavisd-new at domain.net
X-Spam-Flag: YES
X-Spam-Score: 1005.278
X-Spam-Level: *************************************************************
X-Spam-Status: Yes, score=1005.278 tagged_above=2 required=6.31
    tests=[AWL=4.941, BAYES_50=0.001, DNS_FROM_RFC_ABUSE=0.2, GTUBE=1000,
    HTML_50_60=0.134, HTML_MESSAGE=0.001]

Received: from mail.domain.net ([127.0.0.1])
    by localhost (pegasus.domain.net [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id dfa8PpZIr6jP for < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >;
    Sun, 26 Jun 2005 15:05:07 +0200 (CEST)
Received: from smtp109.plus.mail.re2.yahoo.com (smtp109.plus.mail.re2.yahoo.com
[206.190.53.34])
    by mail.domain.net (Postfix) with SMTP id 8D0BD478F59
    for < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >; Sun, 26 Jun 2005 15:05:06 +0200 (CEST)
Received: (qmail 92799 invoked from network); 26 Jun 2005 13:05:04 -0000
From: "Probe" < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
To: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
Subject: [SPAM] Prueba de spam ...
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869

Observemos las líneas marcadas en azul, donde se puede comprobar cómo se ha modificado el asunto del mensaje, se le ha dado un valor de 1005.278 al análisis (contra un valor requerido de 6.31 para ser considerado spam), tiene un nivel de spam bastante largo (****) y se ha adjuntado la cabecera X-Spam-Flag: YES para orientar al gestor de correo sobre su naturaleza.

Continuaremos con el envío de un archivo adjunto que contendrá la cadena de comprobación EICAR, una simulación de virus que probará la correcta configuración de ClamAV. Para el correcto funcionamiento de esta prueba, crearemos un archivo de texto plano con esta única línea en su interior:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Que guardaremos con el nombre probe_av.txt y adjuntaremos en un correo nuevo que se enviará a una cuenta de nuestro dominio. Como hemos configurado Amavisd-new con $final_virus_destiny = D_DISCARD, el mensaje nunca llegará a su destino. En vez de eso, quedará guardado en la ruta del parámetro $QUARANTINEDIR, que, en nuestro caso, será /var/virusmails, con el nombre virus-<cadenaID>. Atendamos al fichero /var/log/maillog para observar qué ha pasado cuando Amavisd-new ha terminado de procesar un mensaje con un virus en su interior:

Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) local delivery: <> -> <virus-quarantine>, mbx=/var/virusmails/virus-ijhiU5Tsb3nO
Apr 30 18:28:15 pegasus postfix/qmgr[2070]: 9A958469FB3: from=< Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >, size=3227, nrcpt=1 (queue active)
Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) SEND via SMTP: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla > -> < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >, 250 2.6.0 Ok, id=12544-05, from MTA([127.0.0.1]:10025): 250 Ok: queued as 9A958469FB3
Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) Blocked INFECTED (Eicar-Test-Signature), [88.9.246.122] < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla > -> < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >, quarantine: virus-ijhiU5Tsb3nO, Message-ID: <001001c66c73$470b9ca0$6400a8c0@home001>, mail_id: ijhiU5Tsb3nO, Hits: -, 2351 ms
Apr 30 18:28:15 pegasus postfix/smtpd[14141]: disconnect from pegasus.domain.net[127.0.0.1]
Apr 30 18:28:15 pegasus postfix/smtp[14137]: 63BCA469FA9: to=< Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >, orig_to=< Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >, relay=localhost[127.0.0.1], delay=3, status=sent (250 2.7.1 Ok, discarded, id=12544-05 - VIRUS: Eicar-Test-Signature)
Apr 30 18:28:15 pegasus postfix/qmgr[2070]: 63BCA469FA9: removed

Y observemos alguna de las cabeceras de ese mismo mensaje guardado en /var/virusmails:

Return-Path: <>
Delivered-To: virus-quarantine
X-Envelope-From: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
X-Envelope-To: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
X-Quarantine-ID: <ijhiU5Tsb3nO>
X-Amavis-Alert: INFECTED, message contains virus: Eicar-Test-Signature

Como la prueba del funcionamiento de Sieve es bastante personal y depende de los contenedores creados para cada usuario, dejaremos que cada administrador haga las pruebas pertinentes o esperaremos al siguiente capítulo, donde configuraremos Squirrelmail y, entre otras cosas, el front-end avelsieve.

 

Comentario[s]
Excelente trabajo.-
Escrito por dehylus el 2006-05-02 19:13:44
Es buenisimo todo el tutorial que hasta ahora han completado. En este momento estoy implementado esta ultima parte para comprobar su funcionamiento, les contare como me va. Felicitaciones nuevamente y sigan asi...

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >