Restringir l’accés als comptes de correu electrònic mitjançant l’adreça IP

octubre 10th, 2014 by admin
  • catalan
  • spanish

En aquest article ens centrarem en protegir l’accés als comptes de correu electrònic restringint per l’adreça IP. En aquest cas, estem fent servir Dovecot amb MySQL. Aquest mètode és especialment útil si volem permetre l’accés a un compte de correu electrònic a una sola adreça IP o si per contra, volem bloquejar l’accés a una determinada adreça IP degut a l’SPAM.

Abans de començar, caldrà tenir instal·lat Dovecot amb usuaris virtuals mitjançant MySQL (en aquest cas, amb ISPConfig 3). Si no feu servir ISPConfig 3 caldrà que reviseu la taula de la base de dades i/o els noms de les columnes a les consultes.

Primer doncs, crearem una taula a la base de dades del servidor de correu on emmagatzemarem les restriccions. En aquest exemple farem servir la base de dades d’ISPConfig 3 (dbispconfig).
Obrim la consola de MySQL:

mysql -u root -D dbispconfig -p

Creem la taula de restriccions:

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;

Ara cal modificar el fitxer de configuració SQL de Dovecot (en el nostre cas /etc/dovecot/dovecot-sql.conf). Modificarem aquestes dues línies:

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'

Per aquestes dues:

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

Un cop modificat el fitxer de configuració de Dovecot, cal reiniciar el servei:

service dovecot restart

O depenent del sistema:

/etc/init.d/dovecot restart

Verifiquem que al registre del servidor de correu o del sistema no hi hagi hagut errors. En cas de que n’hi hagi, revisareem les modificacions abans de continuar.

Com bloquejar una adreça IP

Per evitar que una determinada adreça IP tingui accés a un compte de correu electrònic cal afegir-la a la taula de restriccions com a tipus “b“. Necessitarem primer el mailuser_id del compte de correu electrònic. Per consultar-lo, executarem aquest codi:

SELECT `mailuser_id` FROM `mail_user` WHERE `email` = 'mail@quevolemprotegir.com';

El sistema ens retornarà un valor, “10” per exemple. Així doncs, la consulta que enviarem a la base de dades podria ser:

INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 10, '123.234.123.234', 'b', '');

En aquest cas, estem bloquejant l’accés a la IP 123.234.123.234 al compte 10, o el que és el mateix, a mail@quevolemprotegir.com. El darrer valor és el servei que volem bloquejar i en aquest cas, posant “”, incloem POP3, IMAP i SMTP. Es poden afegir quantes restriccions es vulguin. Per exemple, si volem bloquejar l’accés IMAP al compte de correu electrònic però permetre POP3 i SMTP, posariem:

INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 10, '123.234.123.234', 'b', 'imap');

Com limitar l’accés a una determinada adreça IP

Els exemples anteriors són més adients per evitar que certs clients, com per exemple spammers, accedeixin al nostre servidor. Per contra, potser ens interessi més restringir l’accés a una determinada adreça IP, tot bloquejant a la resta. En aquest cas, només la IP introduida tindrà accés al servei que indiquem. Tan sols cal substituir la “b” per “w“.

INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 10, '123.234.123.234', 'w', 'pop3');
INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 10, '123.234.123.235', 'w', 'smtp');

Amb aquestes dues ordres, estem indicant que per a aquest compte de correu electrònic:

  1. Només l’adreça IP 213.234.123.234 té accés al servei POP3.
  2. Només l’adreça IP 123.234.123.235 té accés al servei SMTP.
  3. Qualsevol IP té accés al servei IMAP.

Cas real

Imaginem que tenim una tenda online que fa servir un compte de correu electrònic. Volem evitar que ningú més pugui enviar correus amb aquest compte però volem permetre l’accés per poder llegir els missatges que ens enviïn els clients, però només per POP3. Suposant que l’adreça IP del servidor fos 10.0.0.101 i 123 el mailuser_id del compte de correu electrònic, hauriem d’introduir el següent:

INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 123, '10.0.0.101', 'w', 'smtp');
INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 123, 'none', 'w', 'imap');

Amb aquestes dues ordres, indiquem que volem permetre l’accés SMTP a l’adreça IP 10.0.0.101 i que volem evitar que ningú pugui accedir-hi per IMAP. Al no especificar res sobre POP3, estem indicant que qualsevol hi tindrà accés.

Si el servidor o el client tenen IPv6 a més a més d’IPv4, haurem d’afegir entrades per a totes dues.

Article basat en la documentació inclosa aquí: http://www.howtoforge.com/improve_spam_abuse_protection_in_dovecot_by_restricting_access_to_mail_accounts_by_ip


0 Responses to this post

  1. No Comments

Leave a Response