GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Mejore la protección contra el abuso de spam en dovecot al restringir el acceso a las cuentas de correo por dirección IP (por ejemplo, con ISPConfig 3)

Lo que haremos

Este tutorial le mostrará cómo agregar restricciones de ip a cuentas de correo únicas al usar dovecot con MySQL .

Esto es especialmente útil si necesita acceder a una cuenta de correo desde una única IP o desde unas pocas IP, o si desea bloquear direcciones IP específicas para que no accedan a la cuenta de correo (por ejemplo, debido al abuso de spam).

Requisitos

- una instalación de palomar en funcionamiento con usuarios virtuales a través de MySQL (preferiblemente administrado por ISPConfig 3)
Si no usa ISPConfig 3, es posible que deba modificar la tabla de la base de datos y/o los nombres de las columnas en las consultas.

Cambios en su sistema

Primero necesitamos crear una nueva tabla de base de datos en su servidor de correo . En este howto lo agregaremos a la base de datos ISPConfig dbispconfig .

Abra la consola MySQL:
mysql -u root -D dbispconfig -p

Cuando inicie sesión, cree la nueva tabla de restricción de IP con esta consulta:

CREATE TABLE mail_user_ip_restriction (
    restriction_id INT(11) UNSIGNED NOT NULL auto_increment,
    mailuser_id INT(11) UNSIGNED NOT NULL DEFAULT '0',
    ip VARCHAR(50) NOT NULL DEFAULT '',
    mode ENUM('w','b') NOT NULL DEFAULT 'w',
    service VARCHAR(10) NOT NULL DEFAULT '',
    PRIMARY KEY (`restriction_id`),
    KEY `ident` (`mailuser_id`, `mode`, `service`, `ip`)
) ENGINE=MyISAM;

Ahora tienes que modificar la configuración de dovecot sql. En las instalaciones de ISPConfig 3 (por ejemplo, Debian/Ubuntu) debe residir en /etc/dovecot/dovecot-sql.conf

Cambia estas líneas:

password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'

user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'

(si no está utilizando la última versión de ISPConfig 3, las líneas en su configuración pueden diferir ligeramente)

a:

password_query = SELECT m.password FROM mail_user as m LEFT JOIN mail_user_ip_restriction as r ON (r.mailuser_id = m.mailuser_id AND r.mode = 'w' AND r.service IN ('', '%Ls')) LEFT JOIN mail_user_ip_restriction as rb ON (rb.mailuser_id = m.mailuser_id AND rb.ip = '%r' AND rb.mode = 'b' AND rb.service IN ('', '%Ls')) WHERE (m.login = '%u' OR m.email = '%u') AND m.disable%Ls = 'n' AND (r.ip IS NULL OR r.ip = '%r') AND rb.ip IS NULL

user_query = SELECT m.email as user, m.maildir as home, CONCAT('maildir:', m.maildir, '/Maildir') as mail, m.uid, m.gid, CONCAT('*:storage=', m.quota, 'B') AS quota_rule, CONCAT(m.maildir, '/.sieve') as sieve FROM mail_user as m LEFT JOIN mail_user_ip_restriction as r ON (r.mailuser_id = m.mailuser_id AND r.mode = 'w' AND r.service IN ('', '%Ls')) LEFT JOIN mail_user_ip_restriction as rb ON (rb.mailuser_id = m.mailuser_id AND rb.ip = '%r' AND rb.mode = 'b' AND rb.service IN ('', '%Ls')) WHERE (m.login = '%u' OR m.email = '%u') AND m.disable%Ls = 'n' AND (r.ip IS NULL OR r.ip = '%r') AND rb.ip IS NULL

Ahora reinicie dovecot:
servicio reinicio dovecot (o /etc/init.d/dovecot restart , dependiendo de su sistema)

¡Vigile el correo y/o el registro del sistema ahora! Si ve errores en su palomar, entonces algo salió mal y debe verificar los cambios o revertirlos.
Si todo funciona como antes, entonces está listo para comenzar.

Cómo restringir el acceso

Tiene diferentes posibilidades para restringir el acceso a un buzón ahora. Le mostraré cómo hacerlo con consultas SQL en la consola mysql pero, por supuesto, puede usar phpMyAdmin.

Bloquear ip

Para bloquear el acceso de una sola ip a una cuenta de correo, debe agregarla a la tabla de restricciones con el modo 'b':

Primero necesita el mailuser_id para su cuenta de correo (por ejemplo, [email protected]). Esta es una consulta SQL simple:

SELECCIONE `mailuser_id` DESDE `mail_user` DONDE `email` ='[email protected]';

Esto devolverá un número (id) como 12345. Ahora agregue la entrada de restricción para esta identificación:

INSERTAR EN VALORES `mail_user_ip_restriction` (NULO, 12345, '123.234.123.234', 'b', '');

Esta entrada bloqueará la ip 123.234.123.234 de acceder a todos los servicios (pop3, imap, smtp) de la cuenta de correo 12345.

Si desea que la ip pueda acceder a pop e imap pero evitar que use smtp (envío de correos), puede agregar esta entrada en su lugar:

INSERTAR EN LOS VALORES `mail_user_ip_restriction` (NULO, 12345, '123.234.123.234', 'b', 'smtp');

Puede agregar múltiples servicios como este, una entrada para cada uno. Pero ten en cuenta que la entrada '' bloquea todos los servicios.

Restringir a ips específicas

Al igual que puede bloquear, incluso puede restringir el uso de cuentas de correo a ips individuales. Esto significa que NINGUNA otra ip que las especificadas pueden acceder a la cuenta. Simplemente tienes que crear una entrada con modo 'w' en lugar de 'b':

INSERTAR EN LOS VALORES `mail_user_ip_restriction` (NULO, 12345, '123.234.123.234', 'w', 'pop3');
INSERTAR EN LOS VALORES `mail_user_ip_restriction` (NULO, 12345, '123.234.123.235', 'w', 'smtp');

Esta entrada hace lo siguiente:
- todas las direcciones IP pueden usar imap de la cuenta 12345 ([email protected])
- solo la dirección IP 123.234.123.234 puede usar pop3 para esta cuenta, ¡todas las demás direcciones IP no!
- solo la ip 123.234.123.235 puede usar smtp para esta cuenta - ¡todas las demás ip no!

Por supuesto, puede combinar todas las funciones y crear múltiples entradas de ip para diferentes modos y servicios.

Caso de uso

Ok, algunas cosas de la vida real ahora. Imagine que tiene una dirección de correo que utiliza su tienda en línea para enviar correos. Nadie más debe enviar correos electrónicos con esta cuenta, pero le gustaría verificar si alguien responde a los correos electrónicos de su tienda. Esto, de nuevo, solo lo debe hacer imap, no pop3.

Estas son las entradas que crearía en este caso, donde 10.0.0.101 es la ip del servidor web con su tienda y 12345 es el mailuser_id de su cuenta de correo.

INSERTAR EN LOS VALORES `mail_user_ip_restriction` (NULO, 12345, '10.0.0.101', 'w', 'smtp');
INSERTAR EN LOS VALORES `mail_user_ip_restriction` (NULO, 12345, 'ninguno', 'w ', 'pop3');

Ninguna otra ip que no sea 10.0.0.101 puede acceder a smtp de esta cuenta de correo específica y nadie puede acceder a pop3 para ello. Imap está disponible para todas las ips.

¡No olvides IPv6! Si su servidor o el cliente que desea especificar tiene una dirección ipv4 y una ipv6, ¡debe agregar ambas!


Ubuntu
  1. El servidor perfecto - Ubuntu 15.10 (Wily Werewolf) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3

  2. El servidor perfecto:Ubuntu 17.10 (Artful Aardvark) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  3. El servidor perfecto:Ubuntu 16.04 (Xenial Xerus) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  4. Cómo configurar un servidor de correo POP3/IMAP con Dovecot en Ubuntu 18.04

  5. Mejore su filtro de spam de Plesk con puntuación y formación

Configurar un servidor de correo con PostfixAdmin

Reemplazo de Amavisd con Rspamd en ISPConfig 3.1 en Debian y Ubuntu

El servidor perfecto:Ubuntu 20.04 con Apache, PHP, MariaDB, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.2

Cómo administrar cuentas de correo electrónico en Plesk

El servidor perfecto:Debian Squeeze (Debian 6.0) con BIND y Dovecot [ISPConfig 3]

El servidor perfecto:Debian Squeeze (Debian 6.0) con BIND, Dovecot y Nginx [ISPConfig 3]