Под таким названием решил представить такую сборку: postfix(MTA), dovecot(POP3/IMAP server), mysql (для хранения юзеров), amavis(антиспам – spamassassin, антивирус – clamav), postfixadmin (для заведения почтовых аккаунтов), roundcube (для доступа через web интерфейс к почтовым ящикам) и с защитой TLS
Тестовый стенд: Debian 6.0
Перед установкой обновим репозитарий:
#apt-get update
1) Установка postfix
#apt-get install postfix-mysql postfix postfix-pcre
После установки приводим переходим в каталог /etc/postfix и конфигурационные файлы приводим к такому виду:
– файл main.c:
mydomain = domain.com.ua
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, mysql:/etc/postfix/mysql/mydestination.cf
local_recipient_maps = unix:passwd.byname $alias_maps $virtual_mailbox_maps
unknown_local_recipient_reject_code = 550
unverified_recipient_reject_code = 550
mynetworks_style = subnet
mynetworks = 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
transport_maps = mysql:/etc/postfix/mysql/transport.cf
virtual_alias_maps =mysql:/etc/postfix/mysql/virtual.cf
virtual_alias_domains = $virtual_alias_maps
alias_database =hash:/etc/aliases
debug_peer_level = 3
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, permit
smtpd_helo_restrictions = permit
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unverified_sender, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.njabl.org, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client zen.spamhaus.org, permit
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, reject_unknown_recipient_domain, reject_unverified_recipient, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.njabl.org, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client dul.ru, reject_rbl_client zen.spamhaus.org, permit
smtpd_data_restrictions = permit
smtpd_end_of_data_restrictions = permit
smtpd_etrn_restrictions = permit
virtual_mailbox_base = /var/spool/vmail
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox.cf
virtual_minimum_uid = 990
virtual_mailbox_limit_maps=mysql:/etc/postfix/mysql/virtual_mailbox_limit.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user’s maildir has no space available in their inbox.
virtual_overquota_bounce = yes
virtual_uid_maps = static:990
virtual_gid_maps = static:990
virtual_maps = mysql:/etc/postfix/mysql/virtual.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
broken_sasl_auth_clients = yes
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/ssl/smtpd.pem
smtpd_tls_loglevel = 5
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
content_filter = smtp-amavis:[127.0.0.1]:10024
– файл master.cf :
Расскоментируем такие строки (если же нет – просто добавляем; вторая и третья строка должны начинаться с пробела)
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
После строки
scache unix - - - - 1 scache
удаляем всё и добавляем такое (все строки, кроме dovecot, smtp-amavis и 127.0.0.1:10025 должны начинаться с отступов, табуляции):
dovecot unix - n n - - pipe
flags=DRhu user=virtual:virtual argv=/usr/libexec/dovecot/deliver -d ${recipient}
smtp-amavis unix - - n - 8 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=8
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Создаём папку /etc/postfix/mysql и в ней такие файлы:
– mydestination.cf такого содержания:
hosts = 127.0.0.1
dbname = postfixadmin
user = mail
password = mail
table = domain
select_field = transport
where_field = domain
additional_conditions = AND (transport = 'local' OR transport = 'virtual')
– transport.cf такого содержания:
hosts = 127.0.0.1
dbname = postfixadmin
user = mail
password = mail
table = domain
select_field = transport
where_field = domain
– virtual.cf такого содержания:
hosts = 127.0.0.1
dbname = postfixadmin
user = mail
password = mail
table = alias
select_field = goto
where_field = address
– virtual_mailbox.cf такого содержания:
hosts = 127.0.0.1
dbname = postfixadmin
user = mail
password = mail
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'
– virtual_mailbox_limit.cf такого содержания:
hosts = 127.0.0.1
dbname = postfixadmin
user = mail
password = mail
table = mailbox
select_field = quota
where_field = username
2) Установка dovecot.
#apt-get install dovecot-common dovecot-imapd dovecot-pop3d
После установки приводим переходим в каталог /etc/devecot и конфигурационные файлы приводим к такому виду:
– файл dovecot.conf:
protocols = imaps pop3s
listen = *
disable_plaintext_auth = yes
log_path = /var/log/maillog
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
ssl=yes
ssl_cert_file = /etc/ssl/smtpd.pem
ssl_key_file = /etc/ssl/smtpd.pem
mail_location = maildir:%h
mail_privileged_group = mail
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 990
first_valid_gid = 990
maildir_copy_with_hardlinks = yes
protocol imap {
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
postmaster_address = postmaster@domain.com.ua
auth_socket_path = /var/run/dovecot/auth-master
}
auth_default_realm = domain.com.ua
auth_username_format = %Lu
auth_verbose = yes
auth_debug = yes
auth default {
mechanisms = digest-md5 plain login
passdb pam {
}
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = vmail
group = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
dict {
}
plugin {
}
– файл dovecot-sql.conf:
driver = mysql
connect = host=localhost user=mail password=mail dbname=postfixadmin
default_pass_scheme = MD5
user_query = SELECT CONCAT('/var/spool/vmail/',maildir) AS home, 990 AS uid, 990 AS gid FROM mailbox WHERE username = '%n@%d'
password_query = SELECT password AS password FROM mailbox WHERE username = '%n@%d' AND active = '1'
3) Установка mysql
#apt-get install mysql-server mysql-client
В процессе установки устанавливаем пароль для root’a. После установки подключаемся к mysql и создаём базу postfixadmin, пользователей postfixadmin и mail. В базе postfixadmin будут храниться наши ящики, пользователь postfixadmin с паролем postfixadmin будет иметь полные права на эту БД (от его имени будут вноситься изменения в БД), а пользователь mail с паролем mail – права только на чтение (этот пользователь нужен для postfix’a и dovecot’a):
#mysql -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 284
Server version: 5.0.81 FreeBSD port: mysql-server-5.0.81
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>CREATE DATABASE postfixadmin;
mysql>GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'postfixadmin';
mysql>GRANT SELECT ON postfixadmin.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
mysql>FLUSH PRIVILEGES;
mysql>QUIT;
4) Установка антивируса clamav
#apt-get install clamav-base clamav
5) Установка антиспама spamassassin
#apt-get install spamassassin
После установки редактируем файл /etc/default/spamassassin:
ENABLED=1
OPTIONS="--create-prefs --max-children 100 --helper-home-dir -u amavis"
CRON=1
6) Установка amavis.
#apt-get install amavisd-new arj bzip2 cabextract cpio file gzip nomarch pax unzip zip zoo
Кроме самого амависа мы установили поддержку архивов (что бы проверялись архивные сообщения).
Переходим в каталог /etc/amavis/conf.d и правим такие файлы:
– файл 05-node_id:
$myhostname = "mail.domain.com.ua";
– файл 15-av_scanners:
удаляем всё, оставляем только упоминания о clamav.
– файл 15-content_filter_mode:
расскоментируем строки (собственно включаем проверку на вирусы спам)
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
– файл 20-debian_defaults:
$virus_admin = "virus\@$mydomain";
$mydomain='domain.com.ua';
7) Установка postfixadmin
В репозитариях нету такого пакета, поэтому скачиваем с офф.сайта (http://sourceforge.net/projects/postfixadmin/) .
Дополнительно придётся поставить такие пакеты:
#apt-get install php5-mysql php5-imap
Теперь отредактируем файл config.inc.php:
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfixadmin';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
Остальные параметры по желанию. После этого запускаем установку http://IP/postfixadmin/setup.php и следуем указанием установщика. В конце будет предложено создать админа.
8) Установка roundcube.
В репозитариях находится довольно старый релиз (0.3), поэтому рекомендую качать с офф.сайта версию 0.5. Переходим к настройкам:
файл db.inc.php:
$rcmail_config['db_dsnw'] = 'mysql://roundcube:roundcube@localhost/roundcube';
файл main.inc.php
$rcmail_config['default_host'] = 'ssl://localhost';
$rcmail_config['default_port'] = 993;
$rcmail_config['imap_auth_type'] = 'LOGIN';
$rcmail_config['smtp_server'] = 'ssl://localhost';
$rcmail_config['smtp_port'] = 465;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] ='LOGIN';
$rcmail_config['username_domain'] = 'domain.com.ua';
$rcmail_config['mail_domain'] = 'domain.com.ua';
$rcmail_config['default_charset'] = 'UTF-8';
9) Подготовительные работы.
– создадим каталог /var/spool/vmail, в котором собственно и будет храниться наша почта.
#mkdir /var/spool/vmail
– заведём юзера vmail и группу vmail, с uid=990, gid=990 и сделаем его владельцем папки /var/spool/vmail с правами 700.
#groupadd -g 990 vmail
#useradd -u 990 -g 990 -d /var/spool/vmail vmail
#chmod -R 0700 /var/spool/vmail
– добавим юзера postfix в группы mail, dovecot, vmail
#usermod -G mail,dovecot,vmail postfix
– добавим юзера amavis в группу clamav, и пользователя clamav в группу amavis
#usermod -G amavis clamav
#usermod -G clamav amavis
– генерируем сертификаты:
#cd /etc/ssl/ && openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 100000
Внимание!
В случае проблем с сертификатам или с тем, что почтовый клиент не хочет цепляться на ssl порт, попробуйте рекомендации из этой статьи
Запускаем теперь сервисы:
-mysql:
#/etc/init.d/mysql start
-clamav:
#/etc/init.d/clamav-daemon start
-spamassassin:
#/etc/init.d/spamassassin start
-dovecot:
#/etc/init.d/dovecot start
-postfix:
#/etc/init.d/postfix start
После этого можно полноценно отправлять почту.
36 коментарів “Postfix+dovecot+Антиспам+Антивирус”
добрый день. Не понял как установить roundcube и вот эти пункты
– заведём юзера vmail и группу vmail, с uid=990, gid=990 и сделаем его владельцем папки /var/spool/vmail с правами 700.
– добавим юзера postfix в группы mail, dovecot, vmail
– добавим юзера amavis в группу clamav, и пользователя clamav в группу amavis
можно пожалуйста подробее
Поправил
Огромное спасибо.
Сделал всё по инструкции, создал главного админа в postfixadmin, но не могу попасть в roundcube. Постоянно ошибка “Неудачное соединение с IMAP сервером”.
Рекомендую смотреть в логи /var/log/mail.log, скорее всего неправильно указан порт или адрес сервера. Так же можно включить дебаг в dovecot’e и тогда ещё яснее будет.
Всё перерыл, а ошибка из лога такая: IMAP Error: Login failed for pupkin@pupkin.org from XXX.XXX.XXX.XXX. Could not connect to ssl://localhost:993: В соединении отказано in /usr/share/roundcube/program/include/rcube_imap.php on line 205 (POST /mail/?_task=login&_action=login)
Вот ошибка Could not connect to ssl://localhost:993 Видимо то ли неправильно указан адрес, то ли порт закрыт, то ли указать вместо localhost ->>> 127.0.0.1
Очень занимательная статья – спасибо! Но вот только вы не осветили подробно, как создавать пользователей, ведь их может быть более 1000 например 😉
В самом начале статьи я писал
А сколько их будет – разницы нет. Если нужно добавить быстро 1000 пользователей – писать скрипт, который будет загонять их прямо в mysql.
Postfixadmin создает пользователей только в базе. Ведь по идее, исходя из статьи, он должен создавать каталоги по адресу var/spool/vmail. Но там ничего не создается. Где же ждать появления ящиков?
Postfixadmin создает пользователей только в базе. Ящики по адресу /var/spool/vmail создаёт MTA или MUA, то есть postfix или dovecot.
спасибо за помощь, всё получилось
Спасибо за статью.
Не подскажите, какие строки отвечают за smtp аунтификацию.
Оутлук не отправляет relay acces denied. roundcube Тоже =( хотелось бы разобраться!
99% проблема в отправке без авторизации. За отправку отвечает настройка smtpd_sender_restrictions, которая разрешает\запрещает отправку по определённым условиям.
Прошу прощения, дело в том что у меня даже не запрашивается авторизация. acces denied. куда копать?
Или тут её как таковой нет? нужно прикручивать?
В статье рассмотрена отправка с использованием авторизации
Всё зависит от ваших настроек в аутлуке.
То есть, оутлук должен запрашивать пароль при отправке письма?
Вы должны его настроить и в нём прописать параметры отправки (логин, пароль)
18:51:57 small postfix/smtpd[5214]: fatal: no SASL authentication mechanisms
вот такая ошибка если пытаюсь отправить через roundcube.
В outlook при заданном пароле relay acces denied.
У вас не настроена авторизация в postfix’e. То есть он не знает какие механизмы авторизации есть.
Хм. Всё делал по статье. Спасибо буду терзать гугл. Извините за беспокойство!
Решено, авторизация пошла! Ещё раз Спасибо за отличную статью!
как ты решил эту проблему???? postfix/smtpd[7412]: fatal: no SASL authentication mechanisms
Это очень общая ошибка и означает, что отсутствуют или неправильно настроены механизмы аутентификации.
Добрый день.
уже 2 суток не могу настроить. Нашел вашу инструкцию, по отзывам у всех все ок.
но не у меня…
Ubuntu 12.04 все как у вас. Перед установкой снес предыдущие Posfix Dovecot
apt-get autoremove –purge dovecot-common dovecot-pop3d dovecot-imapd
apt-get autoremove –purge postfix
Initializing mail storage from mail_location setting failed: mkdir(/var/www/Maildir) failed: Permission denied
заменил на mail_location = maildir:/var/spool/vmail/%u/
auth: Fatal: Unknown database driver ‘mysql’
master: Error: service(auth): command startup failed, throttling
pop3-login: Error: Timeout waiting for handshake from auth server.
Добрый.
dovecot собран без поддержки mysql, установите пакет dobecot-mysql.
Хух!
В postfix где настройки на SQL localhost ему не нравится хотел 127.0.0.1 хотя в базе созданы юзера и на localhost и на 127.0.0.1. И при том, что postfixadmin на MySQL 127.0.0.1 конектился.
у меня не прокатила строка
smtpd_sasl_path = /var/run/dovecot/auth-client
надо
/etc/postfix/main.cf:
smtpd_sasl_path = private/auth
и клиент для получения почты на 110 порту а нужно было 995
еще postfix при перезапуске, запуске ругается на postfix, но я думаю на работу это не повлияет.
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: virtual_mailbox_limit_maps=mysql:/etc/postfix/mysql/virtual_mailbox_limit.cf
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: virtual_maildir_limit_message=Sorry, the user???s maildir has no space available in their inbox.
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: virtual_mailbox_limit_override=yes
Инструкция лучшая. У меня никакой другой мануал не получился.
почемуто если имею ящики
luda@ukraine.com.ua
vita@russia.ru
при логине под luda или vita пароль ищется в домене ukraine.com.ua
т.е. что нужно создать
luda@ukraine.com.ua
vita@ukraine.com.ua алиасы с @russia.ru на vita@ukraine.com.ua
так зачем тогда алиасы для каждого домена?
Как закоментарить вывод отладочной инфы в логи, типа подробно о коннекте и SQL запросы?
спасибо.
Вообще-то правильно использовать логин=email, тогда не будет путаниц, где искать, в каком домене.
Включите-выключите Debug
Вам не встречалось решение типа Postfix Blacklist ?
например
smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/blacklist.cf
в файле или в базе хранить ИП адреса черного спика в виде
96.4.130.0/24
96.4.130.130
Да, встречались, раньше использовал. Сейчас полностью перешёл на exim.
Спасибо.
тоже использовал раньше Exim, где-то начитался что Postfix лучше Exim’а и вот намучился с настройкой. Теперь черній список прикрутить, с ИП работает, а с маской подсети не работает типа:
smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/blacklist,
nano /etc/postfix/blacklist
117.102.89.4 REJECT You are spmmer.
postmap /etc/postfix/blacklist
postfix reload делали?
Здравствуйте
В конфиге вместо 127.0.0.1 необходимо указывать свой внешний адрес ?
В каком из 10-ти конфигов? Нужно указывать тот адрес, который “слушается”.