GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Améliorez la protection anti-spam dans dovecot en limitant l'accès aux comptes de messagerie par adresse IP (par exemple avec ISPConfig 3)

Ce que nous allons faire

Ce guide vous montrera comment ajouter des restrictions IP à des comptes de messagerie uniques lors de l'utilisation de dovecot avec MySQL .

Ceci est particulièrement utile si vous avez besoin d'accéder à un compte de messagerie à partir d'une seule adresse IP ou de quelques adresses IP ou si vous souhaitez empêcher des adresses IP spécifiques d'accéder au compte de messagerie (par exemple en raison d'un abus de spam).

Prérequis

- une installation dovecot fonctionnelle avec des utilisateurs virtuels via MySQL (de préférence géré par ISPConfig 3)
Si vous n'utilisez pas ISPConfig 3, vous devrez peut-être modifier la table de la base de données et/ou les noms des colonnes dans les requêtes.

Modifications de votre système

Nous devons d'abord créer une nouvelle table de base de données sur votre serveur de messagerie . Dans ce guide, nous allons l'ajouter à la base de données ISPConfig dbispconfig .

Ouvrez la console MySQL :
mysql -u root -D dbispconfig -p

Une fois connecté, créez la nouvelle table de restriction IP avec cette requête :

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;

Maintenant, vous devez modifier la configuration SQL de Dovecot. Sur les installations ISPConfig 3 (par exemple Debian/Ubuntu), il doit résider dans /etc/dovecot/dovecot-sql.conf

Modifiez ces lignes :

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 vous n'utilisez pas la dernière version d'ISPConfig 3, les lignes de votre configuration peuvent légèrement différer)

à :

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

Redémarrez maintenant le pigeonnier :
redémarrage du pigeonnier du service (ou /etc/init.d/dovecot restart , selon votre système)

Gardez un œil sur le courrier et/ou le journal système maintenant ! Si vous voyez des erreurs de votre pigeonnier, alors quelque chose s'est mal passé et vous devez vérifier vos modifications ou les annuler.
Si tout fonctionne comme avant, alors vous êtes prêt à partir.

Comment restreindre l'accès

Vous avez maintenant différentes possibilités pour restreindre l'accès à une boîte aux lettres. Je vais vous montrer comment le faire avec des requêtes SQL sur la console mysql mais vous pouvez bien sûr utiliser phpMyAdmin.

Bloquer l'IP

Pour empêcher une seule adresse IP d'accéder à un compte de messagerie, vous devez l'ajouter à la table de restriction avec le mode 'b' :

Vous avez d'abord besoin du mailuser_id pour votre compte de messagerie (par exemple, [email protected]). Il s'agit d'une simple requête SQL :

SELECT `mailuser_id` FROM `mail_user` WHERE `email` ='[email protected]' ;

Cela renverra un nombre (id) comme 12345. Ajoutez maintenant l'entrée de restriction pour cet identifiant :

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

Cette entrée bloquera l'ip 123.234.123.234 d'accéder à tous les services (pop3, imap, smtp) du compte de messagerie 12345.

Si vous voulez que l'adresse IP puisse accéder à pop et imap mais l'empêcher d'utiliser smtp (envoi de mails), vous pouvez ajouter cette entrée à la place :

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

Vous pouvez ajouter plusieurs services comme celui-ci, une entrée pour chacun. Mais gardez à l'esprit que l'entrée '' bloque tous les services.

Restreindre à des ips spécifiques

Comme vous pouvez bloquer, vous pouvez même limiter l'utilisation des comptes de messagerie à des adresses IP uniques. Cela signifie qu'AUCUNE autre adresse IP que celles spécifiées ne peut accéder au compte. Il vous suffit de créer une entrée avec le mode 'w' au lieu de 'b' :

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

Cette entrée fait ce qui suit :
- toutes les ips peuvent utiliser l'imap du compte 12345 ([email protected])
- seule l'ip 123.234.123.234 peut utiliser pop3 pour ce compte - toutes les autres ips ne le font pas !
- seule l'ip 123.234.123.235 peut utiliser smtp pour ce compte - toutes les autres ips ne le font pas !

Bien sûr, vous pouvez combiner toutes les fonctionnalités et créer plusieurs entrées IP pour différents modes et services.

Cas d'utilisation

Ok, quelques trucs de la vraie vie maintenant. Imaginez que vous ayez une adresse e-mail qui est utilisée par votre boutique en ligne pour envoyer des e-mails. Personne d'autre ne doit envoyer d'e-mails avec ce compte, mais vous souhaitez vérifier si quelqu'un répond aux e-mails de votre boutique. Ceci, encore une fois, ne doit être fait que par imap, pas par pop3.

Ce sont les entrées que vous créeriez dans ce cas, où 10.0.0.101 est l'adresse IP du serveur Web avec votre boutique et 12345 est le mailuser_id de votre compte de messagerie.

INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 12345, '10.0.0.101', 'w', 'smtp');
INSERT INTO `mail_user_ip_restriction` VALUES (NULL, 12345, 'none', 'w ', 'pop3');

Aucune autre adresse IP que 10.0.0.101 ne peut accéder au smtp de ce compte de messagerie spécifique et personne ne peut accéder à pop3 pour cela. Imap est disponible pour tous les ips.

N'oubliez pas IPv6 ! Si votre serveur ou le client que vous souhaitez spécifier a une adresse ipv4 et une adresse ipv6, vous devez ajouter les deux !


Ubuntu
  1. Le serveur parfait - Ubuntu 15.04 (Vivid Vervet) avec Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3

  2. Le serveur parfait - Ubuntu 15.10 (Wily Werewolf) avec Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3

  3. Le serveur parfait - Ubuntu 17.10 (Artful Aardvark) avec Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3.1

  4. Le serveur parfait - Ubuntu 16.04 (Xenial Xerus) avec Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3.1

  5. Le serveur parfait - Ubuntu 18.04 (Bionic Beaver) avec Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3.1

Configurer un serveur de messagerie avec PostfixAdmin

Remplacement d'Amavisd par Rspamd dans ISPConfig 3.1 sur Debian et Ubuntu

Le serveur parfait - Ubuntu 20.04 avec Apache, PHP, MariaDB, PureFTPD, BIND, Postfix, Dovecot et ISPConfig 3.2

Comment gérer les comptes de messagerie dans Plesk

Le serveur parfait - Debian Squeeze (Debian 6.0) avec BIND et Dovecot [ISPConfig 3]

Le serveur parfait - Debian Squeeze (Debian 6.0) avec BIND, Dovecot et Nginx [ISPConfig 3]