В этой статье будет рассмотрен процесс установки и настройки Почтового шлюза postfix
Рассмотрим настройку с системными пользователями и виртуальными пользователями (postfixadmin) и пользователями из LDAP
Устанавливаем точную дату и время
Редактируем 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
Рекомендации
Далее необходимо выбрать как настраивать почтовый шлюз, есть два способа настройки
- Все пользователи в postfix будут локальными, то есть реальные пользователи ОС FreeBSD. Скажу про недостаток такого способа, если Вашей почтой будут пользоваться большое количество пользователей (лучше до 50, так рекомендуют!), то создавать 50 реальных пользователей для системы согласитесь не очень удобно и не практично, да и безопасность системы может быть под угрозой.
- Второй способ, создать виртуальных пользователей для почты с поддержкой например mysql (самый распространенный способ) и в плане безопасности очень даже подходящий.
- Способ забирать пользователей из 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) по умолчанию.
Устанавливаем из портов
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 в автозагрузку
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.
Создадим пользователя 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 в автозагрузку
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
Если у Вас, что-то не получилось, то смотрите логи!!!!