GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Migliora la protezione dagli abusi di spam in dovecot limitando l'accesso agli account di posta in base all'indirizzo IP (ad es. con ISPConfig 3)

Cosa faremo

Questo howto ti mostrerà come aggiungere restrizioni IP a singoli account di posta quando si utilizza dovecot con MySQL .

Ciò è particolarmente utile se è necessario accedere a un account di posta da un solo IP o da alcuni IP o se si desidera impedire a indirizzi IP specifici di accedere all'account di posta (ad es. a causa di un abuso di spam).

Prerequisiti

- un'installazione dovecot funzionante con utenti virtuali tramite MySQL (preferibilmente gestito da ISPConfig 3)
Se non si utilizza ISPConfig 3 potrebbe essere necessario modificare la tabella del database e/o i nomi delle colonne nelle query.

Modifiche al tuo sistema

Per prima cosa dobbiamo creare una nuova tabella di database sul tuo server di posta . In questo howto lo aggiungeremo al database ISPConfig dbispconfig .

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

Una volta effettuato l'accesso, crea la nuova tabella di restrizione IP con questa query:

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;

Ora devi modificare la configurazione sql di dovecot. Nelle installazioni di ISPConfig 3 (ad es. Debian/Ubuntu) dovrebbe risiedere in /etc/dovecot/dovecot-sql.conf

Modifica queste righe:

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'

(se non stai usando l'ultima versione di ISPConfig 3 le righe nella tua configurazione potrebbero differire leggermente)

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

Ora riavvia dovecot:
servizio dovecot riavvia (o /etc/init.d/dovecot restart , a seconda del tuo sistema)

Tieni d'occhio la posta e/o il registro di sistema ora! Se vedi errori dalla tua colombaia, allora qualcosa è andato storto e dovresti controllare le modifiche o ripristinarle.
Se tutto funziona come prima, allora sei pronto per partire.

Come limitare l'accesso

Ora hai diverse possibilità per limitare l'accesso a una casella di posta. Ti mostrerò come farlo con le query SQL sulla console mysql ma puoi ovviamente usare phpMyAdmin.

Blocca IP

Per impedire a un singolo ip di accedere a un account di posta devi aggiungerlo alla tabella delle restrizioni con la modalità 'b':

Per prima cosa hai bisogno di mailuser_id per il tuo account di posta (ad es. [email protetta]). Questa è una semplice query SQL:

SELEZIONARE `mailuser_id` DA `mail_user` DOVE `email` ='[email protetta]';

Questo restituirà un numero (id) come 12345. Ora aggiungi la voce di restrizione per questo ID:

INSERISCI NEI VALORI `mail_user_ip_restriction` (NULL, 12345, '123.234.123.234', 'b', '');

Questa voce bloccherà l'ip 123.234.123.234 dall'accesso a tutti i servizi (pop3, imap, smtp) dell'account di posta 12345.

Se vuoi che l'ip sia in grado di accedere a pop e imap ma impedirgli di usare smtp (invio di email) puoi invece aggiungere questa voce:

INSERISCI NEI VALORI `mail_user_ip_restriction` (NULL, 12345, '123.234.123.234', 'b', 'smtp');

Puoi aggiungere più servizi come questo, una voce per ciascuno. Ma tieni presente che la voce ''blocca tutti i servizi.

Limita a IP specifici

Come puoi bloccare, puoi persino limitare l'utilizzo degli account di posta a singoli IP. Ciò significa che NESSUN altro IP oltre a quelli specificati può accedere all'account. Devi semplicemente creare una voce con la modalità 'w' invece di 'b':

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

Questa voce ha le seguenti funzioni:
- tutti gli IP possono utilizzare l'imap dell'account 12345 ([email protected])
- solo l'ip 123.234.123.234 può utilizzare pop3 per questo account, tutti gli altri IP no!
- solo l'ip 123.234.123.235 può usare smtp per questo account - tutti gli altri IP no!

Ovviamente puoi combinare tutte le funzionalità e creare più voci IP per modalità e servizi diversi.

Caso d'uso

Ok, ora alcune cose della vita reale. Immagina di avere un indirizzo e-mail che viene utilizzato dal tuo negozio online per l'invio di posta. Nessun altro dovrebbe inviare e-mail con questo account, ma vorresti controllare se qualcuno risponde alle e-mail del tuo negozio. Questo, ancora una volta, deve essere fatto solo da imap, non da pop3.

Queste sono le voci che creeresti in questo caso, dove 10.0.0.101 è l'ip del server web con il tuo negozio e 12345 è il mailuser_id del tuo account di posta.

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

Nessun altro IP diverso da 10.0.0.101 può accedere a smtp di questo specifico account di posta e nessuno può accedere a pop3 per questo. Imap è disponibile per tutti gli IP.

Non dimenticare IPv6! Se il tuo server o il client che vuoi specificare ha un indirizzo ipv4 e un indirizzo ipv6 devi aggiungerli entrambi!


Ubuntu
  1. Il server perfetto - Ubuntu 16.10 (Yakkety Yak) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  2. Il server perfetto - Ubuntu 17.04 (Zesty Zapus) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  3. Il server perfetto - Ubuntu 17.10 (Artful Aardvark) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  4. Il server perfetto - Ubuntu 16.04 (Xenial Xerus) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

  5. Il server perfetto - Ubuntu 18.04 (Bionic Beaver) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

Configura un server di posta con PostfixAdmin

Sostituzione di Amavisd con Rspamd in ISPConfig 3.1 su Debian e Ubuntu

Il server perfetto - Ubuntu 20.04 con Apache, PHP, MariaDB, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.2

Come gestire gli account e-mail in Plesk

Il server perfetto - Debian Squeeze (Debian 6.0) con BIND e Dovecot [ISPConfig 3]

Il server perfetto - Debian Squeeze (Debian 6.0) con BIND, Dovecot e Nginx [ISPConfig 3]