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!