Limpiar greylist blackdomains de plesk

Por defecto Plesk instala un servicio de greylisting con algunas reglas que pueden ser muy restristivas.
Para ver el estado de la lista gris :

~# /usr/local/psa/bin/grey_listing --info-server
Grey listing configuration.

Grey listing checking  enabled
Grey interval          5 minutes
Expire interval        51840 minutes
Penalty interval       2 minutes
Penalty                disabled
Personal grey listing
configuration          allowed

Server-wide black list:

Server-wide white list:

White domains patterns list:
*google.com
*mail.ru
*parallels.com
*rambler.ru
*yahoo.com
*yandex.ru

Black domains patterns list:
*[0-9][0-9]-[0-9][0-9]-[0-9][0-9]*
*[0-9][0-9].[0-9][0-9].[0-9][0-9]*
*[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]*
*[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9[0-9]][0-9]*

SUCCESS: Gathering of server wide information complete.

Para eliminarlas puedes copiar y pegar estas lineas:

/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'dsl|pool|broadband|hsd'
/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'dynamic|static|ppp|dyn-ip|dial-up'
/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'*[0-9][0-9]-[0-9][0-9]-[0-9][0-9]*'
/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'*[0-9][0-9].[0-9][0-9].[0-9][0-9]*'
/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'*[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]*'
/usr/local/psa/bin/grey_listing --update-server -domains-blacklist del:'*[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9[0-9]][0-9]*'

postfix aliases

En una revisión semanal de logs encontramos que los correos enviados a root no estaban redirigiendose a las cuentas de administración que tenemos.
Una de las formas de gestionar estas redirecciones de correo es con el fichero /etc/aliases como este ejemplo:

# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: info@hostingaldescubierto.com

En nuestro caso usamos postfix en el servidor, y parece ser que no estan llegando bien los correos como vemos en /var/log/maillog:

Feb  4 01:49:24 rivendel postfix/qmgr[1342]: 52C0125AD32: from=<>, size=2596, nrcpt=1 (queue active)
Feb  4 01:49:24 rivendel postfix/bounce[21242]: 5517125AD9C: sender non-delivery notification: 52C0125AD32
Feb  4 01:49:56 rivendel postfix/smtp[21241]: 52C0125AD32: to=<root@rivendel.servidorlocal.es>, relay=none, delay=32, delays=0.03/0/32/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=smtp.hostingaldescubierto.com type=A: Host not found, try again)

Por algun motivo no está cargando correctamente los aliases , así que forzamos a que se recargen de la siguiente manera :

postalias /etc/aliases
/etc/init.d/postfix reload

Enviar correo a google usando postfix : no mechanism available

Estamos montando unos sistemas de relays para que nos lleguen correos a nuestra cuenta de email de soporte. El relay lo montamos por que son máquinas que están aisladas o por que estén en un adsl con IP dinámico y no se puede configurar ptr etc… y además están en lista negra.

Podemos seguir este minimanual rápido para configurar una cuenta de correo desde la que enviar nuestras notificaciones :

Estamos usando POSTFIX bajo Debian :

/etc/postfix/main.cf:

relayhost = [topuptime.com]:587
smtp_use_tls = yes
smtp_tls_loglevel = 4
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl-passwords
smtp_sasl_mechanism_filter = !gssapi, !external, static:all
smtp_sender_dependent_authentication = yes
smtp_sasl_security_options = noanonymous

Ahora hay que editar el fichero donde indicaremos el host smtp, usuario y password en /etc/postfix/sasl-passwords

[topuptime]:587 robot:MiPassWordguay

Y finalmente ejecutamos :

touch /etc/postfix/generic
postmap /etc/postfix/generic
postmap /etc/postfix/sasl-passwords
postfix reload

Si vemos en /var/log/mail.log algo como esto :
Sep 7 11:20:33 replicant postfix/smtp[4335]: C0D84CCC7D8: to=, relay=topuptime.com[x.x.x.x]:587, delay=0.42, delays=0.04/0.03/0.35/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server topuptime.com[x.x.x.x]: no mechanism available)

Puede ser debido a que falta por instalar un paquete:

apt-get install libsasl2-modules

ayuda plesk : error al borrar un dominio

Un error que sigue apareciendo aunque pasen versiones y versiones de Plesk ( desde la 7.4 a la 9.2 ) es la perdida de integridad referencial en algunas tablas. Esto provoca que a la hora de ejectuar algunas herramientas y falten datos se generen errores. En ese caso al borrar el dominio ‘delete.me’ nos aparece este mensaje :

0: class.MailManager.php:242
        MailManager::execWithException(string 'smart_exec', string 'mailmng', array, array, string 'lst')
1: class.MailManager.php:274
        MailManager->callMailManager(string 'remove-mailname', array)
2: class.MailManager.php:354
        MailManager->removeMailname(string 'sharoj.com', string 'delete')
3: cmd_mail.php3:1357
        mn_del(string '490')
4: class.DSMail.php:211
        DSMail->delete(boolean false)
5: class.PhDomain.php:358
        PhDomain->reset(integer '0', boolean true, boolean false)
6: class.BsDomain.php:330
        BsDomain->reset(integer '0')
7: class.BsDomain.php:302
      BsDomain->delete(integer '0')
8: class.BsDomain.php:536
        mdeleteDomains(array)
9: removeDomains.php3:42
        require(string '/opt/psa/admin/htdocs/domains/removeDomains.php3')
10: plesk.php:51

Tendremos que buscar manualmente donde está el problema y repararlo , directamente a la base de datos.

Comenzamos a buscar relaciones rotas entre objetos:

# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 152938
Server version: 5.0.32-Debian_7etch10-log Debian etch distribution

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
  

mysql> select id, name from domains where name = "delete.me";
+------+------------+
| id   | name       |
+------+------------+
| 1241 | delete.me  | 
+------+------------+
1 row in set (0.00 sec)

Ya tenemos el ID del dominio, nos centramos en las cuentas de correo ya que el error se genera al borrar cuentas de correo. Vamos a ver que tablas hay en esta version de Plesk ( 9.2.3 )

mysql> show tables like '%mail%' ;
+------------------------+
| Tables_in_psa (%mail%) |
+------------------------+
| Webmails               | 
| badmailfrom            | 
| mail                   | 
| mail_aliases           | 
| mail_redir             | 
| mail_resp              | 
| mass_mail              | 
| mass_mail_clients      | 
| mass_mail_domains      | 
+------------------------+
9 rows in set (0.00 sec)

La tabla que nos interesa es mail vamos a ver que esctructura tiene y vamos sacando datos:

mysql> desc mail ;
+---------------+------------------------------------------+------+-----+---------+----------------+
| Field         | Type                                     | Null | Key | Default | Extra          |
+---------------+------------------------------------------+------+-----+---------+----------------+
| id            | int(10) unsigned                         | NO   | PRI | NULL    | auto_increment | 
| mail_name     | varchar(245)                             | NO   |     |         |                | 
| perm_id       | int(10) unsigned                         | NO   | MUL |         |                | 
| postbox       | enum('false','true')                     | NO   |     | false   |                | 
| account_id    | int(10) unsigned                         | NO   | MUL |         |                | 
| redirect      | enum('false','true')                     | NO   |     | false   |                | 
| redir_addr    | varchar(255)                             | YES  |     | NULL    |                | 
| mail_group    | enum('false','true')                     | NO   |     | false   |                | 
| autoresponder | enum('false','true')                     | NO   |     | false   |                | 
| spamfilter    | enum('false','true')                     | NO   |     | true    |                | 
| virusfilter   | enum('none','incoming','outgoing','any') | NO   |     | none    |                | 
| mbox_quota    | bigint(20)                               | NO   |     | -1      |                | 
| dom_id        | int(10) unsigned                         | NO   | MUL |         |                | 
+---------------+------------------------------------------+------+-----+---------+----------------+
13 rows in set (0.01 sec)

mysql> select * from mail where dom_id = 1241; 
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| id  | mail_name | perm_id | postbox | account_id | redirect | redir_addr | mail_group | autoresponder | spamfilter | virusfilter | mbox_quota | dom_id |
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| 490 | delete.me |    2202 | true    |       2204 | false    |            | false      | false         | false      | incoming    |         -1 |   1241 | 
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
1 row in set (0.00 sec)

Vemos que tiene al menos una cuenta de correo para el usuario 2204, vamos a buscar este usuario en la tabla accounts, ya que el id es accounts_id

mysql> show tables like '%acco%'
    -> ;
+------------------------+
| Tables_in_psa (%acco%) |
+------------------------+
| accounts               | 
+------------------------+
1 row in set (0.00 sec)

mysql> select * from accounts where id = 2204 ;
Empty set (0.01 sec)

Pues no está, aquí tenemos el problema, no existe la información del usuario pero sí el buzón.
lo más comodo es borar la entrada en la base de datos de la cuenta de correo. Dado que vamos a borrar el dominio nos es indiferente conservarlo.

mysql> delete from mail where id =490 limit 1 ;
Query OK, 1 row affected (0.03 sec)

De otra forma , habíamos dado de alta una fila en accounts con el id 2204 .

qmail: (relayed to non-DSN-aware mailer)

Alguna vez, algún cliente se nos ha notificado este problema al enviar correo. ( Realmente hemos sustituido los nombres de host por los nuestros 😀 )

The original message was received at Fri, 12 Jun 2009 18:56:15 +0200 from
www.hostingaldescubierto.com [93.174.6.8]

   ----- The following addresses had successful delivery notifications -----
  (relayed to non-DSN-aware mailer)

   ----- Transcript of session follows ----- ...
relayed; expect no further notifications

En este caso el servidor remoto no es capaz de gestionar el envío de una notificación de correo recibido ( Delivery Status Notification (DSN) que es una función del MTA ).

Existen dos tipos de notificacion de la entrega: positivas y negativas. Las negativas de entrega son las que han estado disponibles desde hace mucho tiempo intentando la entrega pero sin éxito. Del tipo: Sorry, your message could not be delivered to:… y quizá alguna explicación adicional ( depende del MTA ).

La entrega de notificaciones de estado positivo no definido como una norma, puede ocasionar algunoas problemas por lo que es recomendable conocer lo siguiente:

  • En el caso de que el MTA del destinatario no soporta Return-Receipt-To:;. Si se emite un mensaje de correo electrónico a un MTA que no admite DSN le responderá al remitente (con un mensaje MIME, tal como se define en el RFC 1892):
    ----- The following addresses have delivery notifications -----
    RECIPIENT  (relayed to non-DSN-aware mailer)
    
       ----- Transcript of session follows -----
    RECIPIENT relayed; expect no further notifications
    
  • Debe usarse un sólo receptor de la notificación (o muy pocos), pero no una lista de correo. Hay una propuesta para el RFC de incluir una cabecera Notice-Requested-Upon-Delivery-To: ( que ya implementa qmail )
  • Existe otro problema a la entrega, que es qué hacer con los mensajes encolados. Pero dado que el DSN es enviado con un remitente nulo (<>), si no se puede entregar se acaba eliminando.

Con lo que observamos que realmente no hay problema en el envío sino en la gestión de la notificación del correo recibido. El servidor al que enviamos no soporta esta característica y nos informa de ello.

Es un pequeño extracto extraido de:
http://www.sendmail.org/~ca/email/dsn.html