GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Verbessern Sie den Schutz vor Spam-Missbrauch in dovecot, indem Sie den Zugriff auf E-Mail-Konten nach IP-Adresse einschränken (z. B. mit ISPConfig 3)

Was wir tun werden

Diese Anleitung zeigt Ihnen, wie Sie IP-Einschränkungen hinzufügen auf einzelne Mailkonten bei Verwendung von dovecot mit MySQL .

Dies ist besonders nützlich, wenn Sie von nur einer einzigen IP oder wenigen IPs aus auf ein E-Mail-Konto zugreifen müssen oder wenn Sie bestimmte IP-Adressen für den Zugriff auf das E-Mail-Konto sperren möchten (z. B. aufgrund von Spam-Missbrauch).

Voraussetzungen

- eine funktionierende Dovecot-Installation mit virtuellen Benutzern über MySQL (vorzugsweise von ISPConfig 3 verwaltet)
Wenn Sie ISPConfig 3 nicht verwenden, müssen Sie möglicherweise die Datenbanktabelle und/oder Spaltennamen in den Abfragen ändern.

Änderungen an Ihrem System

Zuerst müssen wir eine neue Datenbanktabelle auf Ihrem Mailserver erstellen . In diesem Howto fügen wir es der ISPConfig-Datenbank dbispconfig hinzu .

Öffnen Sie die MySQL-Konsole:
mysql -u root -D dbispconfig -p

Wenn Sie angemeldet sind, erstellen Sie die neue IP-Beschränkungstabelle mit dieser Abfrage:

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;

Jetzt müssen Sie die Dovecot-SQL-Konfiguration ändern. Bei ISPConfig 3-Installationen (z. B. Debian/Ubuntu) sollte es sich in /etc/dovecot/dovecot-sql.conf befinden

Ändern Sie diese Zeilen:

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'

(Wenn Sie nicht die neueste Version von ISPConfig 3 verwenden, können die Zeilen in Ihrer Konfiguration leicht abweichen)

zu:

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

Jetzt dovecot neu starten:
service dovecot restart (oder /etc/init.d/dovecot restart , abhängig von Ihrem System)

Behalten Sie jetzt das Mail- und/oder Systemprotokoll im Auge! Wenn Sie Fehler von Ihrem Taubenschlag sehen, dann ist etwas schief gelaufen und Sie sollten Ihre Änderungen überprüfen oder rückgängig machen.
Wenn alles so läuft wie zuvor, dann können Sie loslegen.

So beschränken Sie den Zugriff

Sie haben nun verschiedene Möglichkeiten, den Zugriff auf ein Postfach einzuschränken. Ich werde Ihnen zeigen, wie es mit SQL-Abfragen auf der MySQL-Konsole geht, aber Sie können natürlich auch phpMyAdmin verwenden.

IP blockieren

Um eine einzelne IP für den Zugriff auf ein E-Mail-Konto zu blockieren, müssen Sie sie mit Modus 'b' zur Beschränkungstabelle hinzufügen:

Zuerst benötigen Sie die mailuser_id für Ihr E-Mail-Konto (z. B. [email protected]). Dies ist eine einfache SQL-Abfrage:

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

Dies gibt eine Zahl (ID) wie 12345 zurück. Fügen Sie nun den Einschränkungseintrag für diese ID hinzu:

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

Dieser Eintrag blockiert IP 123.234.123.234 vom Zugriff auf alle Dienste (pop3, imap, smtp) des Mailkontos 12345.

Wenn Sie möchten, dass die IP auf pop und imap zugreifen kann, aber verhindern, dass sie smtp verwendet (Mails senden), können Sie stattdessen diesen Eintrag hinzufügen:

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

Sie können mehrere Dienste wie diesen hinzufügen, jeweils einen Eintrag. Beachten Sie aber, dass der Eintrag '' alle Dienste blockiert.

Auf bestimmte IPs beschränken

So wie Sie blockieren können, können Sie sogar die Verwendung von E-Mail-Konten auf einzelne IPs beschränken. Dies bedeutet, dass KEINE andere IP als die angegebenen auf das Konto zugreifen kann. Sie müssen lediglich einen Eintrag mit Modus 'w' statt 'b' erstellen:

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');

Dieser Eintrag bewirkt Folgendes:
- alle IPs können imap des Kontos 12345 verwenden ([E-Mail-geschützt])
- nur IP 123.234.123.234 kann pop3 für dieses Konto verwenden - alle anderen IPs nicht!
- Nur IP 123.234.123.235 kann SMTP für dieses Konto verwenden - alle anderen IPs nicht!

Natürlich können Sie alle Funktionen kombinieren und mehrere IP-Einträge für verschiedene Modi und Dienste erstellen.

Anwendungsfall

Ok, jetzt ein paar Dinge aus dem wirklichen Leben. Stellen Sie sich vor, Sie haben eine Mailadresse, die von Ihrem Online-Shop zum Versenden von Mails verwendet wird. Niemand sonst sollte E-Mails mit diesem Konto versenden, aber Sie möchten überprüfen, ob jemand auf Ihre Shop-E-Mails antwortet. Dies soll wiederum nur von imap erledigt werden, nicht von pop3.

Dies sind die Einträge, die Sie in diesem Fall erstellen würden, wobei 10.0.0.101 die IP des Webservers mit Ihrem Shop und 12345 die mailuser_id Ihres E-Mail-Kontos ist.

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');

Keine andere IP-Adresse als 10.0.0.101 kann auf SMTP von diesem speziellen E-Mail-Konto zugreifen und niemand kann dafür auf pop3 zugreifen. Imap ist für alle IPs verfügbar.

IPv6 nicht vergessen! Wenn Ihr Server oder der Client, den Sie angeben möchten, eine IPv4- und eine IPv6-Adresse hat, müssen Sie beide hinzufügen!


Ubuntu
  1. Der perfekte Server – Ubuntu 15.04 (Vivid Vervet) mit Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot und ISPConfig 3

  2. Der perfekte Server – Ubuntu 15.10 (Wily Werewolf) mit Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot und ISPConfig 3

  3. Der perfekte Server – Ubuntu 16.04 (Xenial Xerus) mit Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot und ISPConfig 3.1

  4. Der perfekte Server – Ubuntu 18.04 (Bionic Beaver) mit Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot und ISPConfig 3.1

  5. Wie man eingehenden Spam mit Greylisting in WHM stoppt

Richten Sie mit PostfixAdmin einen Mailserver ein

Ersetzen von Amavisd durch Rspamd in ISPConfig 3.1 auf Debian und Ubuntu

Der perfekte Server – Ubuntu 20.04 mit Apache, PHP, MariaDB, PureFTPD, BIND, Postfix, Dovecot und ISPConfig 3.2

So verwalten Sie E-Mail-Konten in Plesk

Der perfekte Server – Debian Squeeze (Debian 6.0) mit BIND &Dovecot [ISPConfig 3]

Der perfekte Server – Debian Squeeze (Debian 6.0) mit BIND, Dovecot &Nginx [ISPConfig 3]