Почтовый шлюз postfix

Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

 В этой статье будет рассмотрен процесс установки и настройки Почтового шлюза 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 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. Mon Dec 14 22:34:46 2015
Return-Path: <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>
X-Original-To: alexey
Delivered-To: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
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: <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>
Date: Mon, 14 Dec 2015 22:34:06 +0300 (MSK)
From: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

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 []:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.  #Почтовый адрес

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

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.

Все отлично переходим к настройке почтового клиента.

Установим почтовый клиент (thunderbird-бесплатный, Outlook, The Bat-платные)

 Покажу на примере thunderbird. Ставить можно будет двумя способами через pop3 или imap на выбор(покажу два способа):

 

Настройка pop3 

Настройка imap

нажимаем готово и пользуемся.

Виртуальные пользователи (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 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
DocumentRoot /usr/local/www/postfixadmin
ServerName postfixadmin
ErrorLog /var/log/postixadmin-error.log
CustomLog /var/log/postixadmin-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

Все теперь можем зайти под админом. В браузере набираем:
http://study.loc/postfixadmin/login.php

Остальные настройки простые. Все на русском.
Это только мы настроили 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

Если у Вас, что-то не получилось, то смотрите логи!!!!

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


Яндекс.Метрика
© 2015 Мой блог

Search