В этой статье будет рассмотрен процесс установки и настройки Почтового шлюза postfix

Рассмотрим настройку с системными пользователями и виртуальными пользователями (postfixadmin) и пользователями из LDAP  

 

Установка postfix

Устанавливаем точную дату и время

Редактируем rc.conf

nano /etc/rc.conf

И добавляем

ntpdate_enable="YES"
ntpdate_flags="ntp2.stratum2.ru"
  • Обновим пакеты
portsnap fetch
portsnap extract
  • Устанавливаем почтовый шлюз.Каталог умолчанию /usr/local/etc/postfix
cd /usr/ports/mail/postfix
make config 

отмечаем 

mysql
pcre
sasl
tls
Dovecot2
make install  

Рекомендации

Далее необходимо выбрать как настраивать почтовый шлюз, есть два способа настройки

  1. Все пользователи в postfix будут локальными, то есть реальные пользователи ОС FreeBSD. Скажу про недостаток такого способа, если Вашей почтой будут пользоваться большое количество пользователей (лучше до 50, так рекомендуют!), то создавать 50 реальных пользователей для системы согласитесь не очень удобно и не практично, да и безопасность системы может быть под угрозой.
  2. Второй способ, создать виртуальных пользователей для почты с поддержкой например mysql (самый распространенный способ) и в плане безопасности очень даже подходящий.
  3. Способ забирать пользователей из LDAP сервера (мы его рассмотрим позже, по мере наполнения статьи)

Какой способ использовать решать Вам, но для практических действий будут показаны все способы.

Предварительная настройка

Редактируем rc.conf

nano /etc/rc.conf
hostname="mail.study.loc" или mail.study.com #Как Вы уже поняли .loc - это локальная сеть .com - глобальная сеть

Добавляем

#postfix
postfix_enable="YES"
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Так как получать почту мы будем с помощью dovecot, то sendmail нам не нужен, мы его отключаем! 

nano /etc/periodic.conf

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_sumit_mailq="NO"
daily_submit_queuerun="NO"

Системные пользователи

Простая настройка postfix

Переходим в каталог /usr/local/etc/postfix

сохраняем main.cf

mv main.cf main.cf.old

Редактируем новый конфиг

nano main.cf
#GENERAL
myhostname = mail.study.loc
mydomain = study.loc
mydestination = $mydomain, $myhostname, localhost.$mydomain
myorigin = $mydomain
mynetworks = 127.0.0.0/8 192.168.1.0/24
inet_protocols = all
inet_interfaces = all
alias_maps = hash:/etc/aliases
alias_database = $alias_maps

 Далее вводим команду 

newaliases

И перезапускаем почтовый сервер

service postfix restart    (такая команда подходит до версии 10.2, дальше только через rc.d)

Проверим настройки (команды выделены красным цветом )

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.study.loc ESMTP Postfix
ehlo localhost
250-mail.study.loc
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:alex        #Пользователь системный отправитель
250 2.1.0 Ok
rcpt to:alexey        #Пользователь системный получатель
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
"Здесь вводим тест сообщения"
.        #Точку нужно поставить
250 2.0.0 Ok: queued as A214313F9FDC #Сообщение доставлено адресату
quit

Проверим данные, которые мы отправили пользователю alexey

less /var/mail/alexey #Формат сообщений mbox
From alex@study.loc Mon Dec 14 22:34:46 2015
Return-Path: <alex@study.loc>
X-Original-To: alexey
Delivered-To: alexey@study.loc
Received: from localhost (localhost [127.0.0.1])
 by mail.study.loc (Postfix) with SMTP id A214313F9FDC
 for <alexey>; Mon, 14 Dec 2015 22:34:06 +0300 (MSK)
Message-Id: <20151214193413.A214313F9FDC@mail.study.loc>
Date: Mon, 14 Dec 2015 22:34:06 +0300 (MSK)
From: alex@study.loc

Hello world!    #Текст сообщения

Это самая простая настройка почтовика, она очень уязвима для спамеров и к тому же почтовик может только отправлять письма, но не получать, для этого существует dovecot, порты которые он использует 110 (pop3) и 995(pop3s) , этот сервис настроим чуть позже!!!

И так продолжаем улучшать защиту нашего почтового сервера. Организуем шифрование данных на уровне SSL\TLS (порты 465-995) по умолчанию.

SSL\TLS 

Устанавливаем из портов

cd /usr/ports/security/cyrus-sasl2-saslauthd
make install clean

Добавим в автозагрузку nano /etc/rc.conf

saslauthd_enable="YES"
saslauthd_flags="-a pam"

Создаем файл smtpd.conf в каталоге /usr/local/lib/sasl2

touch smtpd.conf
chmod 644 smtp.conf
nano smtpd.conf

Вот параметры:

 pwcheck_method: saslauthd                         
  mech_list: plain login                    

Переходим в каталог ssl

cd /etc/ssl

Генерируем сертификаты

  • openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 

           Enter pass phrase for smtp.key: #Вводим парольную фразу

           Verifying — Enter pass phrase for smtp.key: #Повторяем ее

  •  chmod 0600 smtpd.key
  • openssl req -new -key smtpd.key -out smtpd.csr
 
Enter pass phrase for smtp.key:
           Country Name (2 letter code) [AU]: RU
           State or Province Name (full name) [Some-State]:Russia
           Locality Name (eg, city) []:Moscow
           Organization Name (eg, company) [Internet Widgits Pty Ltd]:study.loc    
           Organizational Unit Name (eg, section) []:study.loc
           Common Name (e.g. server FQDN or YOUR name[]: mail.study.loc #Имя моего локального компьютера
           Email Address []:post@study.loc  #Почтовый адрес
           A challenge password []: Enter и еще раз Enter
  • openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
  • openssl rsa -in smtpd.key -out smtpd.key.unencrypted
  • mv -f smtpd.key.unencrypted smtpd.key
  • openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
 
Country Name (2 letter code) [AU]: RU
           State or Province Name (full name) [Some-State]:Russia
           Locality Name (eg, city) []:Moscow
           Organization Name (eg, company) [Internet Widgits Pty Ltd]:study.loc    
           Organizational Unit Name (eg, section) []:study.loc
           Common Name (e.g. server FQDN or YOUR name) []:mail.study.loc #Имя моего локального компьютера
           Email Address []:post@study.loc  #Почтовый адрес

 Затем открываем конфиг main.cf и прописываем

 
Country Name (2 letter code) [AU]: RU
           State or Province Name (full name) [Some-State]:Russia
           Locality Name (eg, city) []:Moscow
           Organization Name (eg, company) [Internet Widgits Pty Ltd]:study.loc    
           Organizational Unit Name (eg, section) []:study.loc
           Common Name (e.g. server FQDN or YOUR name) []:mail.study.loc #Имя моего локального компьютера
           Email Address []:post@study.loc  #Почтовый адрес
nano /usr/local/etc/postfix/main.cf 

#SASL Parametrs
smtpd_sasl_type = cyrus
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes
#smtpd_helo_required = yes         #Нужны для почтовика в глобальной сети, в локальной лучше отключить
#smtpd_recipient_restrictions =
# permit_mynetworks,
# permit_sasl_authenticated,
# reject_unauth_destination
#TLS Parametrs
#smtpd_tls_auth_only = yes   #Если раскомментировать, то только получим только TLS
#smtpd_use_tls = yes      
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/smtpd.key #Сертификаты созданные ранее
smtpd_tls_cert_file =/etc/ssl/smtpd.crt
smtpd_tls_CAfile =/etc/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Далее редактируем master.cf

nano  /usr/local/etc/postfix/master.cf

Раскомментируем строки

smtps     inet  n       -       n       -       -       smtpd

 -o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes

И перезапускаем почтовый сервер

service postfix restart    (такая команда подходит до версии 10.2, дальше только через rc.d)

Проверяем наши настройки

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.study.loc ESMTP Postfix
ehlo localhost
250-mail.study.loc
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit

Второй способ проверки для защищенного соединения

openssl s_client -connect localhost:465
 
220 mail.study.loc ESMTP Postfix

А дальше как обычно

Отлично smtp (465 порт) настроен.

Dovecot (pop3 и imap)

Добавим dovecot в автозагрузку

nano /etc/rc.conf
dovecot_enable="YES"

переходим к рабочему каталогу 

cd /usr/local/etc/dovecot/копируем необходимые файлы
cp -r /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot

Редактируем конфиг

nano dovecot.conf

Раскомментируем  

protocols = pop3 imap  
listen = *, ::  #Все так должно стоять
!include conf.d/*.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u   #Ящик mbox
Вот это строку наоборот нужно закомментировать
#!include_try local.conf

 Далее переходим в подкаталог conf.d

cd conf.d/

Приступаем к редактированию файлов

nano 10-auth.conf
Раскомментируем

disable_plaintext_auth = yes
auth_realms = study.loc
auth_username_chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012344567890.-_@
auth_username_format = %Lu
auth_mechanisms = plain login
nano 10-logging.conf
Раскомментируем
log_path = /var/log/dovecot.log   #Мне нужно было только это
nano 10-master.conf
Раскомментируем

service imap-login {
 inet_listener imap {
 port = 143
 }
 inet_listener imaps {
 port = 993
 ssl = yes
 }

service pop3-login {
 inet_listener pop3 {
 port = 110        #раскомментировать
 }
 inet_listener pop3s {
 port = 995      #раскомментировать
 ssl = yes
nano 10-ssl.conf
Раскомментируем
ssl = yes
ssl_cert = </etc/ssl/smtpd.crt       #Сгенерированные сертификаты
ssl_key = </etc/ssl/smtpd.key      #Сгенерированные сертификаты

Перезапустим dovecot

service dovecot restart

Проверим dovecot

telnet localhost 110
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
+OK Dovecot ready.
user alexey #Системный пользователь
+OK
pass qwerty #Его пароль (он не шифруется)
+OK Logged in.
list #Проверка количества писем
+OK 2 messages:
1 826
2 1104
.
quit

Второй способ проверки для защищенного соединения

openssl s_client -connect localhost:995
+OK Dovecot ready.
Значит все в порядке шифрование работает!
openssl s_client -connect localhost:993
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.

Все отлично. Можете поставить любой почтовый клиент.

Виртуальные пользователи (mysql)

Прежде всего нужно поставить web server или быстрый способ установки и только после этого можем ставить postfixadmin

cd /usr/ports/mail/postfixadmin
make config
make install

Открываем конфиг http.conf

nano /usr/local/etc/apache24/httpd.conf 

Перемещаемся в конец файла и вставляем следующее

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"

<Directory "/usr/local/www/postfixadmin/">
Options Indexes FollowSymLinks
AllowOverride Limit
Order Allow,Deny
Allow from all
Require all granted
</Directory>

Или вставить в  httpd-vhosts.conf

nano /usr/local/etc/apache24/extra/httpd-vhosts.conf

вставляем

<VirtualHost *:80>
ServerAdmin admin@study.loc
DocumentRoot /usr/local/www/postfixadmin
ServerName postfixadmin
ErrorLog /var/log/postfixadmin-error.log
CustomLog /var/log/postfixadmin-access.log common
</VirtualHost>

Создаем базу данных и пользователя для нее. Я создавал с помощью phpmyadmin.

редактируем config.inc.php

nano /usr/local/www/postfixadmin/config.inc.php
$CONF['configured'] = true;    #Вместо false ставим true
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';   #Ставим свое значение - моё localhost
$CONF['database_user'] = 'postfix';    #Имя пользователя для базы
$CONF['database_password'] = 'postfix'; #Пароль для базы
$CONF['database_name'] = 'postfix';   #Имя базы данных

Перезапускаем apache24

service apache24 restart

В браузере набираем study.loc(192.168.1.9)/postfixadmin/setup.php

Ставим пароль

$CONF[‘setup_password’] = ‘d0edd14187f90347215f1d7ab8febb67:5708f9f0c9f10bd8b7f05039e41dc318ab9f6ab3’;

Эту строку копируем в конфиг файл

nano /usr/local/www/postfixadmin/config.inc.php
$CONF['setup_password'] = 'd0edd14187f90347215f1d7ab8febb67:5708f9f0c9f10bd8b7f05039e41dc318ab9f6ab3';

Добавляем администратора

Добавляем свои данные и нажимаем «Добавить администратора»

Если у Вас локальный почтовик, то нужно поменять эту строку $CONF[’emailcheck_resolve_domain’]=YES на

$CONF['']=NO

Иначе не даст добавить @study.loc

Настройки простые. Все на русском.
Это только мы настроили web интерфейс, теперь его нужно связать с postfix.

Настройка postfix

Создадим пользователя vmail и группу vmail

adduser vmail
 
ID пользователя и группы 5000 (Как пример)

Создаю папку, куда будет приходить почта 

mkdir /var/vmail

Пропишем права доступа на папку

chmod -R 777 /var/vmail
chown -R vmail:vmail /var/vmail

Установим механизм авторизации

nano /usr/local/lib/sasl2/smtpd.conf

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username = '%u@%r'

Далее редактирую main.cf

nano /usr/local/etc/postfix/main.cf
#General

myhostname = mail
mydomain = study.loc
myorigin = $mydomain
mynetworks = 127.0.0.0/8 192.168.1.0/24
inet_protocols = all
inet_interfaces = all
alias_maps = hash:/etc/aliases
alias_database = $alias_maps
home_mailbox = Maildir:/var/vmail/%d/%u

#SASL Parametrs
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes
#smtpd_helo_required = yes
#smtpd_recipient_restrictions =
# permit_mynetworks,
# permit_sasl_authenticated,
# reject_unauth_destination

#TLS Parametrs
#smtpd_tls_auth_only = yes
#smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/smtpd.key
smtpd_tls_cert_file =/etc/ssl/smtpd.crt
smtpd_tls_CAfile =/etc/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

#Virtual
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/vir_domain.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/vir_alias.cf
virtual_alias_domains = mysql:/usr/local/etc/postfix/vir_alias_dom.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/vir_mailbox.cf
virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Продолжаем настройку

Создаем конфиги

nano vir_domain.cf
hosts = localhost
user = postfix
password = postfix
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u' AND backupmx = '0' AND active = '1'
nano vir_alias.cf
hosts = localhost
user = postfix
password = postfix
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
nano vir_alias_dom.cf
hosts = localhost 
user = postfix 
password = postfix 
dbname = postfix 
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'

nano vir_mailbox.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Отредактируем master.cf. Дополнительно откроем 587 порт

nano /usr/local/etc/postfix/master.cf 

Раскомментируем

submission inet n - n - - smtpd 
-o smtpd_tls_security_level=encrypt 
-o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       n       -       -       smtpd
-o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes

Добавим строку для связки с dovecot

dovecot unix - n n - - pipe 
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Dovecot (imap pop3 lmtp)

Добавим dovecot в автозагрузку

nano /etc/rc.conf
dovecot_enable="YES"

переходим к рабочему каталогу

cd /usr/local/etc/dovecot/

копируем необходимые файлы

cp -r /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot

Редактируем конфиг

nano dovecot.conf 
Раскомментируем

listen = *, ::
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf 
nano dovecot-sql.conf.ext
driver = mysql

connect =host=127.0.0.1 dbname=postfix user=postfix password=postfix

default_pass_scheme = MD5-CRYPT

password_query = SELECT username as user, password, '/var/vmail/%d/%u'\
as\
userdb_home, 'maildir:/var/vmail/%d/%u' as userdb_mail, 5000 as\
userdb_uid, 5000 as userdb_gid, concat('*:bytes=', quota) AS\
userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

user_query = SELECT '/var/vmail/%d/%u' as home,\
'maildir:/var/vmail/%d/%u'as mail, 5000 AS uid, 5000 AS gid,\
concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username =\
'%u' AND active = '1'
cd /usr/local/etc/dovecot/conf.d
nano 10-auth.conf
disable_plaintext_auth = no
auth_default_realm = study.loc
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234Z01234567890.-_@
#!include auth-system.conf.ext #Закомментируем
!include auth-sql.conf.ext

Пропишим логи

nano 10-logging.conf
log_path = /var/log/dovecot.log
nano 10-mail.conf
mail_location = maildir:/var/vmail/%d/%u
mail_uid =5000nan
mail_gid =5000
mail_privileged_group =mail
nano 10-master.conf
service imap-login {
inet_listener imap {
port = 143
 }

 inet_listener imaps {
port = 993
ssl = yes
}

service pop3-login {
 inet_listener pop3 {
 port = 110
 }
 inet_listener pop3s {
 port = 995
 ssl = yes
 }
}

service lmtp {
 unix_listener lmtp {
 mode = 0666
 }

service auth {
 unix_listener auth-userdb {
 mode = 0666
 user = postfix
 group = postfix
 }

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

service dict {
unix_listener dict {
 mode = 0600
 user = vmail
 group = vmail
 }
}
 nano 10-ssl.conf
ssl = yes
ssl_cert = </etc/ssl/smtpd.crt 
ssl_key =</etc/ssl/smtpd.key
nano auth-sql.conf.ext
passdb {
driver = sql
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

userdb{
driver = sql
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

Перезапустим postfix

service postfix

Перезапустим dovecot

service dovecot restart
Настройки почты можно произвести с шифрованием или нет, есть пример "Системные пользователи", а пользователей создавать в postfixadmin
Если у Вас, что-то не получилось, то смотрите логи!!!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *