Категорії
Linux Mail systems

Postfix+dovecot+Антиспам+Антивирус

Под таким названием решил представить такую сборку: 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 например 😉

В самом начале статьи я писал

postfixadmin (для заведения почтовых аккаунтов)

А сколько их будет – разницы нет. Если нужно добавить быстро 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. То есть он не знает какие механизмы авторизации есть.

Хм. Всё делал по статье. Спасибо буду терзать гугл. Извините за беспокойство!

Это очень общая ошибка и означает, что отсутствуют или неправильно настроены механизмы аутентификации.

Добрый день.

уже 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

Здравствуйте
В конфиге вместо 127.0.0.1 необходимо указывать свой внешний адрес ?

В каком из 10-ти конфигов? Нужно указывать тот адрес, который “слушается”.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff