Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

 

Ora possiamo proseguire con l' installazione di postfix e deovecot ed anche la parte piu' pallosa , la creazione di tanti piccoli file ...

ricordiamoci di cambiare la password da "your_secret_passwor" a quella che abbiamo scelto!!!


apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql
 

iniziamo a creare la configurazione , anzi la dir dove metter la configurazione


mkdir -p /etc/postfix/sql

 creiamo il file /etc/postfix/sql/mysql_virtual_domains_maps.cf con dentro (e ricordiamoci di metter la nostra password):

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

creiamo il file /etc/postfix/sql/mysql_virtual_alias_maps.cf :

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

creiamo il file /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf :

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

creiamo il file /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf :

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

creiamo il file /etc/postfix/sql/mysql_virtual_mailbox_maps.cf :

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

creiamo il file /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf :

user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

una volta creati questi file aggiorniamo la configurazione di postfix tramite i comandi postconf per utilizzare questi file (se vogliamo vedere la configurazione basat dare il comando postconf senza argomenti):

postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

 

la consegna locale dei messaggi viene fatta tramite lmtp(local mail transport protocol) , il quale prende la posta dall' MTA (Postfix)  e la mette nelle caselle di posta dell' utente locale (vmail)

postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

ora indichiamo a postfix di utilizzare i certificati che abbiamo fatto generare a certbot e che usiamo per nginx (aggiustiamo il pat al certificato reale!!!)

postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem'
postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem'

Configuriamo SMTP  per usare sasl:

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

abilitia,o il supporto a TLS/SSL e le porte relativenel file di configurazione di Postfix . modifichiamo il file /etc/postfix/master.cf , leviamo il # (commento dalle righe) il file è diviso in ude parti, una per la parte normale e una per la parte secured (s)

nel mio file ho trovato

 

-o smtpd_client_restrictions=$mua_client_restrictions

$mua_client_restrictions

indica una variabile che non è definita, possiamo crearla noi, o diretamente sotituirla con la parte sotto!

se vogliamo che postfix ascolti su di una porta diversa dalla 465 (smtps) al posto di 

smtps     inet  n       -       y       -       -       smtpd

 scriviamo

567     inet  n       -       y       -       -       smtpd

 per farlo ascoltare sulla porta 567

 

dobbiamo comunque prestar attenzione affinche davanti a  -o ci sia uno spazio:

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

 

ora passiamo al file /etc/postfix/main.cf

e modifichiamo le riga

 

myhostname=ilmioservermail.ilmiodominio.it 
inet_interfaces = ip_mia_interfaccia_di_rete,127.0.0.1 
mydestination = localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8,10.0.0.0/8,192.168.0.0/16

 

 

la prima riga serve a indicare a postfix come ci presenteremo al mondo esterno, se non la mettiamo , se il nostro hostname è ilmioservermail il mondo esterno ci vedra come ilmioservermail.localdomain

la seconda riga serve per far si che postfix sia in ascolto oltre che sulla loopback anche sulla nostra interfaccia di rete e quindi raggiungibile anche da altre macchine!!

 la terza riga abbiamo eliminato $myhostname perchè risulta duplicato

la quarta riga indica le subnet autorizzate ad usare il server di posta , siccome io lo utilizzero su di una rete privata ho indicato le reti interessate

 

riavviamo postfix

service postfix restart

modificate il file /etc/dovecot/dovecot-sql.conf.ext (nel file è tutto commentato, potete decommentare e popolare le varie riche oppure potete aggiugnere tutto alla fine) :

driver = mysql
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=your_secret_password
default_pass_scheme = MD5-CRYPT
iterate_query = SELECT username AS user FROM mailbox
user_query = SELECT CONCAT('/var/mail/vmail/',maildir) AS home, \
  CONCAT('maildir:/var/mail/vmail/',maildir) AS mail, \
  5000 AS uid, 5000 AS gid, CONCAT('*:bytes=',quota) AS quota_rule \
  FROM mailbox WHERE username = '%u' AND active = 1
password_query = SELECT username AS user,password FROM mailbox \
  WHERE username = '%u' AND active='1'

modifichiamo il file /etc/dovecot/conf.d/10-mail.conf :

...
mail_location = maildir:/var/mail/vmail/%d/%n
...
mail_uid = vmail
mail_gid = vmail
...
first_valid_uid = 5000
last_valid_uid = 5000
...
mail_privileged_group = mail
...
mail_plugins = quota
...

modifichiamo il file /etc/dovecot/conf.d/10-auth.conf :

...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
#!include auth-system.conf.ext
!include auth-sql.conf.ext
...

modifichiamo il file /etc/dovecot/conf.d/10-master.conf as following:

...
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
...
}
...
service auth {
  ...
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
  ...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  ...
}
...
service auth-worker {
  user = vmail
}
...
service dict {
  unix_listener dict {
    mode = 0660
    user = vmail
    group = vmail
  }
}
...

modifichiamo il file /etc/dovecot/conf.d/10-ssl.conf :

...
ssl = yes
...
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
... ssl_dh = </etc/letsencrypt/ssl-dhparams.pem
... ssl_cipher_list = EECDH+AES:EDH+AES+aRSA ... ssl_prefer_server_ciphers = yes ...

modifichiamo il file /etc/dovecot/conf.d/20-imap.conf

...
protocol imap {
  ...
  mail_plugins = $mail_plugins imap_quota
  ...
}
...

modifichiamo il file /etc/dovecot/conf.d/20-lmtp.conf non sono tanto sicuro che sia nel file giusto .... per ora l' ho messo nel file sopra:

...
protocol imap {
  postmaster_address = Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
  mail_plugins = $mail_plugins
}
...

aggiungiamo una cartella dove indirizzare lo spam nel file /etc/dovecot/conf.d/15-mailboxes.conf:

...
mailbox Drafts {
  special_use = \Drafts
}
mailbox Spam {
  special_use = \Junk
  auto = subscribe
}
mailbox Junk {
  special_use = \Junk
}
...

ora configuriamo  Dovecot pe connettersi al DB  MySQL per gestire le quote disco, sia per dominio che per utente. in caso di superamento verranno mandate delle mail di notifica per ogni livello di riempimento

aggiungiamo nel  file /etc/dovecot/conf.d/90-quota.conf:

plugin {
quota = dict:User quota::proxy::sqlquota quota_rule = *:storage=5GB quota_rule2 = Trash:storage=+100M quota_grace = 10%% quota_exceeded_message = Quota exceeded, please contact your system administrator. quota_warning = storage=100%% quota-warning 100 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = vmail unix_listener quota-warning { group = vmail mode = 0660 user = vmail } } dict { sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}

modifichiamo il file /etc/dovecot/dovecot-dict-sql.conf.ext aggiungendo le righe sotto , assicuriamoci di inserire le credenziali mysql corrette

 

...
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=your_secret_password
...
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}
...
# map {
#   pattern = shared/expire/$user/$mailbox
#   table = expires
#   value_field = expire_stamp
#
#   fields {
#     username = $user
#     mailbox = $mailbox
#   }
# }
...

creiamo lo script che inviera il messaggio di avviso superamento quota

 /usr/local/bin/quota-warning.sh:

#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota"
From: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Subject: Quota warning

Your mailbox is $PERCENT% full. Don't forget to make a backup of old messages to remain able to receive mails.
EOF

rendiamolo eseguibile:

chmod +x /usr/local/bin/quota-warning.sh

riavviamo dovecot, se tutto è andato bene non avremo nessun messaggio d' errore:

service dovecot restart

ora il nostro mail server è pronto per esser usato o quasi, dobbiamo creare gli utenti e da allora possiamo mandare e ricevere posta sicuramente tra i nostri utenti, forse verso qualcuno all' esterno (saremo considerati spam ...)

 

ps. ogni 3 mesi dovremo rinnovare i certificati!!!!

 

step precedenti:

introduzione

postfixadmin, let's encrypt e nginx 

step successivi :

rspamd dkim dovecot dns

roundcube

test finali