четверг, 1 февраля 2018 г.

Linux Debian Postfix Dovecot Roundcube base work config

   Сделано по материалам с этой ссылке плюс добавлен Rouncube (Nginx, php5-fpm, MySQL) для отправки через веб-интерфейс, плюс в процессе вносились изменения. Почта будет хранится в личном каталоге в подкаталоге Maildir.

Конспект для себя. В итоге будет базовая настройка Postfix+Dovecot+Roundcube.

Система Debian 8. Есть домен ttt.pp.ua и доступ к днс записям, статический белый IP.
Имя машины mail.ttt.pp.ua. В hosts прописал <белый IP>  mail.ttt.pp.ua.
/etc/mailname mail.ttt.pp.ua

Postfix


apt-get update
apt-get install postfix

Выбираю интернет сайт, mail.ttt.pp.ua.

Настройки:

myhostname = mail.ttt.pp.ua (этот хост прописан как MX в DNS записях)
mydomain = ttt.pp.ua (это купленный домен)
myorigin = $mydomain (это то что стоит после @ при отправке)
mydestination = ttt.pp.ua, mail.ttt.pp.ua, localhost.ttt.pp.ua, localhost
(это домены для которых принимает почту, т.е. если я с внешнего ящика шлю на user@ttt.pp.ua, то у меня должен быть прописан в mydestination домен ttt.pp.ua, иначе будет ошибка 454 4.7.1 Relay access denied)

Завожу пользователя, прописываю в /etc/aliases root: user, команда #newaliases
По мануалу к текущей конфигурации добавляю

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
home_mailbox = Maildir/
mailbox_command =

Закомментировал #mailbox_command = procmail -a "$EXTENSION"
В mynetworks добавил сеть предприятия и убрал ipv6
Для тестирования почты поставил swaks. Можно отправить тестовое сообщение на gmail

# swaks --to blogvic123@gmail.com --from user@mail.ttt.pp.ua
=== Trying gmail-smtp-in.l.google.com:25...
=== Connected to gmail-smtp-in.l.google.com.
<-  220 mx.google.com ESMTP x18si827218ljx.91 - gsmtp
 -> EHLO mail.ttt.pp.ua
<-  250-mx.google.com at your service, [111.111.111.111]
<-  250-SIZE 157286400
<-  250-8BITMIME
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-PIPELINING
<-  250-CHUNKING
<-  250 SMTPUTF8
 -> MAIL FROM:<user@mail.ttt.pp.ua>
<-  250 2.1.0 OK x18si827218ljx.91 - gsmtp
 -> RCPT TO:<blogvic123@gmail.com>
<-  250 2.1.5 OK x18si827218ljx.91 - gsmtp
 -> DATA
<-  354  Go ahead x18si827218ljx.91 - gsmtp
 -> Date: Wed, 31 Jan 2018 11:15:43 +0200
 -> To: blogvic123@gmail.com
 -> From: user@mail.ttt.pp.ua
 -> Subject: test Wed, 31 Jan 2018 11:15:43 +0200
 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ->
 -> This is a test mailing
 ->
 -> .
<-  250 2.0.0 OK 1517390144 x18si827218ljx.91 - gsmtp
 -> QUIT
<-  221 2.0.0 closing connection x18si827218ljx.91 - gsmtp
=== Connection closed with remote host.

Почта пришла, упала в спам

UPD 06.02.2018
В настройке по-умолчанию уже есть сертификат ключ

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Можно еще добавить настройки для SSL

smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may

# обязательно включить
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous

# You can ENFORCE the use of TLS, so that the Postfix SMTP server announces STARTTLS
# and accepts no mail without TLS encryption
smtpd_enforce_tls = yes

# 1 - Log TLS handshake and certificate information.
smtpd_tls_loglevel = 1

# To include information about the protocol and cipher used as well as the client and
# issuer CommonName into the "Received:" message header
smtpd_tls_received_header = yes

Теперь лог более информативен

Feb  6 10:33:42 mail postfix/smtpd[29826]: connect from mail-it0-f67.google.com[209.85.214.67]
Feb  6 10:33:43 mail postfix/smtpd[29826]: Anonymous TLS connection established from mail-it0-f67.google.com[209.85.214.67]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Feb  6 10:33:44 mail postfix/smtpd[29826]: 9AE2D160CC5: client=mail-it0-f67.google.com[209.85.214.67]
Feb  6 10:33:44 mail postfix/cleanup[29832]: 9AE2D160CC5: message-id=<CADr6FcAKdeoAuWvi46iryL_wYOnDxcfW-W46=AhFCwHn4s132w@mail.gmail.com>
Feb  6 10:33:44 mail postfix/qmgr[29814]: 9AE2D160CC5: from=<blogvic123@gmail.com>, size=2399, nrcpt=1 (queue active)
Feb  6 10:33:45 mail postfix/local[29833]: 9AE2D160CC5: to=<user@ttt.pp.ua>, relay=local, delay=1.3, delays=1.2/0/0/0.03, dsn=2.0.0, status=sent (delivered to maildir)
Feb  6 10:33:45 mail postfix/qmgr[29814]: 9AE2D160CC5: removed
Feb  6 10:33:45 mail postfix/smtpd[29826]: disconnect from mail-it0-f67.google.com[209.85.214.67]

Dovecot

apt-get install dovecot-common dovecot-imapd

Текущую настройку по-умолчанию можно посмотреть

doveconf -n
# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.3
mail_location = mbox:~/mail:INBOX=/var/mail/%u
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
protocols = " imap pop3s"
ssl = no
userdb {
  driver = passwd
}
doveconf: Error: protocols: Unknown protocol: pop3s
doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: protocols: Unknown protocol: pop3s

Внесем изменения

Протокол pop3s уберем. В dovecot.conf есть запись

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

Смотрим по этому пути. В каталоге лежит файл pop3sd.protocol с таким содержимым
protocols = $protocols pop3s
Его и удалим.

Для базовой настройке нам нужно добавить:

10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login

# для формата логина user@domain.com
auth_username_format = %n

10-master.conf
Раскомментируем порт для imap

service imap-login {
   inet_listener imap {
      port = 143
   }
Для совместной работы с postfix раскомментировать

# Postfix smtp-auth 
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666   
  }
}

10-ssl.conf
Для работы с сертификатом, созданным по-умолчанию
ssl = required
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key


Запрет на использование слабых протоколов SSL
# SSL protocols to use
ssl_protocols = !SSLv2 !SSLv3

10-mail.conf
Изменить хранилище подобно postfix для хранения в личной папке пользователя

# LAYOUT=fs - иерархия как в файловой системе
mail_location = maildir:~/Maildir:LAYOUT=fs

Чтобы удобно искать было, где вносить изменения, можно использовать команду:
grep -r "what_find" /etc/dovecot

service dovecot restart

Roundcube

Ставим для начала php5-fpm с зависимостями с сайта Roundcube
apt-get install php5-fpm php-pear php5-mysql php5-intl
Закрываем уязвимость nginx в php.ini
cgi.fix_pathinfo=0

Устанавливаем nginx
apt-get install nginx

Настраиваем wemail, default_server в listen убираем, иначе будет ошибка. Также настроим работу по HTTPS с самоподписанным сертификатом snakeoil созданным по-умолчанию.

/etc/nginx/sites-available/webmail
server {
        listen 80;
        #listen [::]:80 default_server;

        #SSL configuration
        #
        listen 443 ssl;
        # listen [::]:443 ssl default_server;
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        include snippets/snakeoil.conf;

        root /var/www/rcm;

        access_log /var/log/nginx/rcm.access.log;
        error_log  /var/log/nginx/rcm.error.log;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name mail.ttt.pp.ua www.mail.ttt.pp.ua;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;

        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }

}

Ставим MySQL
apt-get install mysql-server mysql-client

Далее конфигурируем под Roundcube:
mysql -u root -p
mysql> CREATE DATABASE roundcubemail;
mysql> CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON roundcubemail.* to 'roundcube'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

Если пошло не так, например у меня
ERROR 1396 (HY000): Operation CREATE USER failed
мне помогла статья

use mysql
delete from mysql.user where user='username';
delete from mysql.db where user='username';
flush privileges;

Проверяем
CREATE USER 'username' IDENTIFIED BY 'password';

Query OK, 0 rows affected (0.00 sec)

По мануалу разработчика качаем архив распаковываем в rcm, добавляем права на temp logs для www-data. После заходим на страницу инсталляции https://mail.ttt.pp.ua/installer в моем случае.
Подключение к базе должно быть ОК, нужно проинициализировать базу - кнопка initialize. Предлагается ввести настройки и нажать внизу кнопку config. После, если нужно, можно внести изменения в сам файл конфигурации config\config.inc.php, после редактирования настройки применяются сразу.

Что нужно для работы с базовой конфигурацией:
$config['default_host'] = 'mail.ttt.pp.ua';
$config['smtp_server'] = 'mail.ttt.pp.ua';
$config['smtp_port'] = 25;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

$config['smtp_auth_type'] = '';

Если что-то не работает, можно повключать дебаги внутри конфигурационного файла, чтобы было легче анализировать. Тип смтп авторизации пусто - сам выберет лучший.

Теперь можно отправлять почту через веб-интерфейс, будет падать в спам.

Комментариев нет:

Отправить комментарий