Для этого достаточно посмотреть
Архивы: postfix
Посмотреть очередь postfix ( postqueue view emails )
postfix белый лист ( postfix whitelist )
Сложно найти баланс между ложными срабатывания на спамм и спамом
Создаём файл
Добавляем в него записи, можно конкретный ящик, можно все ящики домена, можно домен с под доменами.
@examlpe.com OK
.example.ru OK
Теперь преобразим наш файл whitelist в индексированную базу данных, выполнив команду:
Теперь смотрим каком типом БД пользуется наш postfix
Возможные варианты ответа hash, btree или dbm
В зависимости от этого в секцию
Добавляем строку
Вот как это выглядит у меня (не забываем про запятые после переменных) (вместо hash пишем свой тип БД)
check_sender_access hash:/etc/postfix/whitelist,
permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit
ubuntu почтовый сервер ( ubuntu mail server )
И так прижало мне сделать для себя почтовый сервер на своём сервере. раньше оно работало из коробки и я горя не знал, но тут оказалось, что надо всё делать ну чтож приступим
Во первых, задайте себе вопрос а насколько он нужен вам?
если у вас до 50ти ящиков то очень рекомендую воспользоваться почтой от гугла на своём домене, я уже писал об этом способе.
Экономия времени и нервов вам обеспечена!.
Если же вы настойчивы, то есть 2 способа, оба проделывал я на своих серверах, оба работают и не ругаются.
Очень рекомендую первый, во втором периодически выпадали глюки и приходилось пере запускать демоны.
Первый Postfix + Dovecot + MYSQL
Вариант 2 более простой (postfix (smtp), sasl2 (Авторизция) cyrus-pop3d )
Поехали
Интерпритатора будет два, обычная командная строка (bash) и mysql
mysql: mysql>
Также все команды будут от root (обычно я запускаю sudo mc и жму ctrl+o и так получается консоль от root)
Устанавливаем необходимые пакеты, также ставим phpmyadmin для более удобного управления базой + вэб интерфейс почты
Создаём БД + таблицы можно как и из консоли, так и из phpmyadmin
Мне удобнее из phpmyadmin просто вводя запросы

Затем создайте таблицы в базе данных
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
) ENGINE = InnoDB;
mysql>
CREATE TABLE `virtual_users` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
user VARCHAR(40) NOT NULL,
password VARCHAR(32) NOT NULL,
CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE = InnoDB;
mysql>
CREATE TABLE `virtual_aliases` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
source VARCHAR(40) NOT NULL,
destination VARCHAR(80) NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE = InnoDB;
Создаём файлы конфигурации для Postfix’a с информацией о базе данных.
Вот с таким содержанием
password = mailuserpasswd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
Этот запрос выбирает виртуальные домены (да да наш почтовый сервер будет работать на несколько доменов как реальных так и виртуальных)
Применим конфигурацию postfix
Добавим в БД запись о первом виртуальном сервере example.com (не забываем поставить свой)
Проверим всё ли верно мы сделали
Появится цифра 1 – значит всё сделано правильно.
Теперь создаём пользователей, за них будет отвечать отдельная группа. создаём её
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Примиряем изменения
postconf -e virtual_uid_maps=static:5000
$>
postconf -e virtual_gid_maps=static:5000
Создадим тестовый почтовый ящик, например john@example.com с паролем johnpasswd
Потом создаём view в базе данных.
Проверим результат
Вы должны увидеть это:
| email | password |
+------------------+----------------------------------+
| john@example.com | 14123123123243372b1cb9275e6dd |
+------------------+----------------------------------+
Создадим файл конфигурации для Postfix’a в котором укажем данные для работы с почтовыми ящиками наших пользователей
С содержанием
password = mailuserpasswd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM view_users WHERE email='%s'
Применим изменения
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Проверьте результат командой
Вы должны увидеть цифру 1 если все правильно настроено.
Если вам не нужны алиасы, можете пропустить этот пункт, но я редко такое вижу на практике
они нужны для пересылки почты с одного ящика на другой, или с нескольких на один
Добавим в базу данных тестовый альяс для нашего польователя john@example.com, вся почта пришедшая на его ящик будет дополнительно пересылаться на ящик jmiller@gmail.com
Создадим view для альясов по аналогии с view для пользователей
Проверим результат
Вы должны увидеть это
| email | destination |
+------------------+-------------------+
| john@example.com | john@example.com |
| john@example.com | jmiller@gmail.com |
+------------------+-------------------+
С содержанием
password = mailuserpasswd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email='%s'
Проверим правильность настроек
Вы увидите это
впишем в него
password = mailuserpasswd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email='%s'
Запишем настройки в главный файл конфига Postfix
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
Выставим правильные права доступа на файлы конфигкрации почтового сервера, ведь в них хранятся пароли от базы данных
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Далее настроим dovecot в качестве локального агента доставки писем, добавим в конец файла /etc/postfix/master.cf
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
перезапускаем postfix
И добавляем информацию о виртуальном транспорте в главный конфиг Postfix
postconf -e dovecot_destination_recipient_limit=1
Перейдем к настройкам dovecot, все файлы его конфигурации хранятся в папке /etc/dovecot, начнем настройку с файла /etc/dovecot/dovecot.conf
Найдите строку protocols и смените на
Так же изменяем строку disable_plaintext_auth до состояния disable_plaintext_auth = no
также меняем параметр mail_location
Найдите строку namespace private и измените до
separator = .
prefix = INBOX.
inbox = yes
}
Перейдите к секции «auth default» и отредактируйте разрешенные механизмы аутентификации
В этой же секции измените
args = /etc/dovecot/dovecot-sql.conf
}
Меняем параметр userdb static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
Переходим к секции socket listen сдесь мы укажем файлы сокета для аутентификации dovecot
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
Переходим к секции protocol lda, не забудьте сменить адрес постмастера на реальный
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
mail_plugins = cmusieve
global_script_path = /home/vmail/globalsieverc
}
На этом файл можно сохранить.
Далее редактируем файл /etc/dovecot/dovecot-sql.conf
Делаем как ниже
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpasswd
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email='%u';
Перезапускаем dovecot
и смотрим лог файл /var/log/mail.log, там вы должны увидеть
dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mymailserver)
Правим права доступа к файлам конфигурации dovecot
chmod g+r /etc/dovecot/dovecot.conf
Настроим TLS/SSL
-keyout /etc/ssl/private/dovecot.pem
Ответьте на несколько вопросов и сертификат будет создан, не забудьте указать правльно все параметры вместо примеров привеленных ниже
.........++++++
............................++++++
writing new private key to '/etc/ssl/certs/dovecot.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:Russia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:postmaster@example.com
Выставим права доступа на файл
Создадим еще один сертификат по аналогии с предыдущим
-keyout /etc/ssl/private/postfix.pem
Сменим права доступа
Вносим изменения в конфиг Postfix’a
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
postconf -e smtpd_use_tls=yes
Теперь настроим аутентификацию SMTP, не забываем сменить примеры на реальные адреса сетей! В примере используется сеть 192.168.50.0/24 ей разрешено отправлятиь почту без SMTP авторизации.
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
Редактируем файл /etc/postfix/main.cf изменив параметр размера почтового ящика например на 10 мегабайт
На этом почти всё ![]()
Перезапускаем postfix и dovecot
/etc/init.d/postfix restart
/etc/init.d/dovecot restart
Проверим, всё и хорошо
команда должна отдать пустой результат.
Все ошибки и прочие события из жизни вашего почтовика вы можете найти в логах
/var/log/mail.err
/var/log/mail.warn
/var/log/mail.info
Ах забыл совсем
) у нас же есть ещё вэб морда для почты и завётся она
Настройка Squirrelmail
Ответим на вопросы, введя данные, что использовали при настройке сервера
Теперь привяжем к апачу
ln -s /etc/apache2/sites-available/squirrelmail /etc/apache2/sites-enabled/squirrelmail
a2ensite squirrelmail
Перезапустим апач
Ну и всё готово ![]()
Заходим на
вводим логин пароль (логин вводится целиком с доменом)

Вариант 2 более простой (postfix (smtp), sasl2 (Авторизция) cyrus-pop3d )
Стами postfix (smtp), sasl2 (Авторизция) cyrus-pop3d (POP3 демон)
Во время первоначальной настройки postfix укажите конфигурацию для Интернет-сайта (Internet Site).
На вопрос об имени почтового сервера-оставьте вариант по-умолчанию или укажите свой. В нашем случае это было domain.ru
Настроим сервер авторизации saslauthd на использование базы данных паролей sasldb2.
Для этого отредактируем файл /etc/default/saslauthd:
MECHANISMS="sasldb"
Запускаем сервис
проверим работает ли он, но для начала необходимо добавить хотя бы одного пользователя.
Password:
Again (for verification):
смотрим список пользователей
test@proxy: userPassword
Пробуем авторизироваться
На что получаем ответ
У почтового сервера postfix есть одна особенность – после запуска он работает в chroot окружении, которое находится в папке /var/spool/postfix/
Учитывая то, что для авторизации пользователей postfix будет использоваться демон saslauthd, нам нужно перенести его socket в рабочую директорию нашего сервера /var/spool/postfix/. Самый простой способ сделать это заключается в монтировании в нужную папку директории с уже созданным сокетом демона saslauthd.
Делается это редактированием файла /etc/fstab.
Не забудьте поставить [Enter] после последней строки.
Создаём каталог и монтируем.
mount /var/run/saslauthd
Настраиваем postfix на работу с sasl авторизацией
Добавим в /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_authenticated_header = yes
smtpd_sasl_application_name = smtpd
запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.
mech_list: PLAIN LOGIN
Перезапустим наш postfix сервер и просмотрим следующие файлы на предмет ошибок:
tail /var/log/mail.err
tail /var/log/mail.info
tail /var/log/mail.warn
tail /var/log/mail.log
Если все чисто, сухо и гладко – обратимся к утилите telnet, для того, чтобы подключиться к нашему серверу.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 krasfun ESMTP Postfix (Ubuntu)
EHLO www.ru
250-krasfun
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
221 2.0.0 Bye
Connection closed by foreign host.
root@proxy:/var/log#
Если у вас нечто похожее – продолжаем
Для того, чтобы «подружить» saslauthd и postfix необходимо выполнить следующее:
Cyrus – это мощный набор POP3/NNTP/IMAP и некоторых других демонов для создания полноценных сервисов работы с электронной почтой.
Отредактируем файл /etc/imapd.conf
allowplaintext: yes
sasl_mech_list: PLAIN
sasl_pwcheck_method: saslauthd auxprop
sasl_auxprop_plugin: sasldb
Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:
/etc/fstab :
создаём каталоги для cyrus.
mkdir -p /var/spool/postfix/var/run/cyrus
mount /var/spool/postfix/var/run/saslauthd
mount /var/spool/postfix/var/run/cyrus
Монтируем
предоставим возможность cyrus забирать почту у postfix и отпалять почту на куда угодно. Отредактируем файл /etc/postfix/main.cf:
local_recipient_maps =
Добавим группу и добавим в неё постфикс
adduser postfix lmtp
Дальше 2 команды
dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket
Добавим пользователя cyrus в нашу базу учетных записей:
Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:
/etc/init.d/cyrus2.2 restart
/etc/init.d/saslauthd restart
Добавим почтового пользователя например saber и создадим ему каталоги
cyradm localhost –user cyrus
localhost> cm user.saber
localhost> cm user.saber.INBOX
localhost> cm user.saber.Sent
localhost> cm user.saber.Draft
localhost> cm user.saber.Trash
На этом всё, можно пользоваться, рекомендую ещё настроить шифрование, но мне оно не нужно было
Настройка клиента
Буду на основе Аутглюк экспресс.
Добавляем почтовый акк, в общем всё как обычно КРОМЕ
не ставим галочку
«Использовать безопасную бла бла SPA»
и ставим галочку ниже Сервер исходящей почты «проверка подлинности пользователя»
И всё можно пользоваться