Установка почтового сервера iRedMail. Внедрение и поддержка (MySQL back-end)

Iredmail (debian+dovecot+postfix)iRedMail — это готовое решение по организации почтового сервера на базе Linux. В сборку входят такие пакеты как Postfix+Dovecot+LDAP, MySQL или PostreSQL back-end на выбор)+SpamAssassin+ClamAV+AmaViS+RoundCube . Более подробно о компонентах и их функциях:

— Postfix — агент передачи почты (MTA — Mail transfer agent) предоставляет SMTP сервис;
— Dovecot (MDA/LDA) — свободный и очень безопасный POP3/POP3S и IMAP/IMAPS сервер, служит для получения почты. Использует Sieve для фильтрации почтовых сообщей;
— MySQL — служит для хранения данных приложений и пользовательских учетных записей, управляется при помощи консоли или phpmyadmin;
— OpenLDAP — служит для хранения пользовательских учетных записей про протоколу OpenLDAP;
— Policyd — служба политик сервера Postfix; Policyd v2 — кодовое имя «cluebringer».
— Amavisd — используется в качестве интерфейса между Postfix и SpamAssassin. 
— SpamAssassin — это одна из самых известных программ по борьбе со спамом,
— ClamAV — антивирус, который в свою очередь применяются для обнаружения вирусов в почтовых сообщениях;
— Apache — web server;
— Roundcube — Webmail – пользовательский веб-интерфейс для почтовой системы;
— Awstats — анализатор лог-файлов для Apache и Postfix;
— Fail2ban — программа для сканирования лог-файлов, находящихся (как правило) в каталоге /var/log/maillog и блокирующая те ip-адреса, с которых усматриваются признаки попыток подбора паролей к разнообразным службам.

Вкратце почтовую систему на базе postfix можно описать следующей иллюстрацией:

ispmail1

И еще одна картинка для улучшения понимания:

Linux postmail 2

Преимущества использования перед другими системами:

— Бесплатный и в то же время полнофункциональный почтовый сервер, использующий свободные open source решения, которые выпускаются под лицензией GPLv2
— Поддержка таких известных виртуальных машин, как VMware, Xen, KVM, OpenVZ, VirtualBox.
— Поддержка архитектуры i386 и x86_64/amd64 и таких операционных систем как Red Hat, CentOS, Scientific Linux, Debian, Ubuntu, Gentoo, openSUSE, FreeBSD, OpenBSD.
— Простота и скорость установки, по сравнению с ручным методом, где можно допустить много ошибок и потом очень долго гуглить... Наличие большого комюнити, где можно получить тех поддержку в случае возникновения каких либо проблем.

1) Настройка системы

Как то исторически сложилось, что под почтовую систему я использую debian, поэтому в данной заметке буду описывать процесс установки сервера iRedmail на debian последней версии. Для этого скачиваем версию netinst, которая с минимальным набором ПО. Установку описывать не имеет смысла — там все предельно просто. Затем настроим сеть, для этого редактируем файл:

nano /etc/network/interfaces
 # The primary network interface
 allow-hotplug eth0
 iface eth0 inet static
 address 192.168.2.5
 netmask 255.255.255.0
 network 192.168.2.0
 broadcast 192.168.2.255
 gateway 192.168.2.1
 # dns-* options are implemented by the resolvconf package, if installed
 dns-nameservers 192.168.2.1
 dns-search test.ru

После выполнения несложных шагов по установке, убедимся что установлен ssh server. Если нет, то исправляем, установкой соответствующих пакетов:

apt-get update
apt-get install openssh-server

Непосредственно перед установкой на хосте должно быть установлено полностью определенное доменное имя (FQDN). Проверить это можно, используя следующую команду:

hostname –f

В нашем случае получаем.

mail7.test.ru

Если так, то значит во время установки debian мы сделали все правильно. Если требуется изменить имя хоста, то редактируем  /etc/hostname и /etc/hosts.

Для распаковки пакета, нам потребуется bzip. Если, его нет то выполняем команду:

sudo apt-get install bzip2.

2. Установка iredMail

Теперь перейдем непосредственно к установке самого сервера. Качаем последний стабильный релиз Iredmail отсюда. Если при помощи wget, то не забудем указать параметр --no-check-certificate — не проверять сертификат сервера.

Извлекаем пакет командой:

tar xjf iRedMail*

Переходим в директорию и запускаем установочный скрипт:

cd iRedMail*
bash iRedMail.sh

Запустится мастер, где необходимо будет ответить на ряд вопросов, определяющий дальнейший ход установки, а так же функциональные особенности сервера, которые мы хотим получить на выходе. Нажимаем Да.

iRedmail Install- First StepНа следующем экране укажем каталог для хранения почтовых сообщений. По умолчанию /var/vmail. Установщик нам сообщит, что объем почтового хранилища зависит от почтового трафика и обычно для этих целей требуется объемный диск. Путь должен быть записан в нижнем регистре.

iRedmail Install- Second StepНа следующем экране выберем back-end — тип баз данных для хранения почтовых аккаунтов. На выбор OpenLDAP, MySQL, PostgreSQL. Выбираем MySQL, нажимаем Далее.

iRedmail Install- Back-end?Далее зададим пароль администратора MySQL. Нельзя использовать специальные символы, например $ или #, а так же оставлять поле  пароля пустым. Нажимаем Next.

iRedmail Install- MySQL-Back-endЗатем указываем доменное имя, которое хотим иметь после @. Полное доменное имя мы прописали еще ранее.

iRedmail Install- MySQL-Back-endНа следующем экране, зададим пароль административной учетной записи postmaster, при помощи которой мы будем создавать другие учетные записи и управлять нашим сервером.

iRedmail Install- MySQL-Back-endСледующий экран, выбор опциональных компонентов.  Оставляем по умолчанию и нажимаем Next.

iRedmail Install - MySQL - Выбор опциональных компонентовНажимаем Yes, соглашаемся с установкой пакетов и затем с изменением правил файрвола. Дожидаемся конца установки. Не рекомендуется прерывать процесс установки, а потом снова запускать установочный скрипт, иначе потом можно обнаружить что, что-то не работает должным образом, не пускает в iredadmin например, как это было у меня. Перезагружаем сервер.

Теперь перейдем в roundcube, набрав в адресной строке доменное имя нашего сервера или его ip-адрес.

https://mail7.test.ru/mail

Для обращения по имени, адрес сервера должен быть сопоставлен на dns-сервере или, если установка происходит в тестовой среде, нужный адрес с доменным именем можно прописать в файле C:\WINDOWS\system32\drivers\etc\hosts если используется Windows и /etc/resolv.conf для Linux.

192.168.2.5 mail7.test.ru

Соглашаемся с достоверностью сертификата, добавив его в исключения. Залогинимся при помощи административного пользователя, в нашем случае postmaster@test.ru. В самом начале, во входящих будет два сообщения. Нас интересует Details of this iRedMail installation, где будут перечислены все установленные пакеты с указанием конфигурационных файлов и паролей. Важно сохранить, этот файлик в надежном месте.

Roundcube - Main Screen

 

 

 

 

 

 

 

 

 

 

 

 

Для перехода в админку сервера iredadmin, переходим по адресу — https://debian7.test.ru/iredadmin. Здесь создаются пользователи, домены и квоты.

4. Создание нового ssl-сертификата.
В Debian, сертификаты хранятся в /etc/ssl/certs и /etc/ssl/private.

Перемещаем текущие сертификаты куда-нибудь в другой каталог.

mv /etc/ssl/private/iRedMail.key /etc/ssl/
mv /etc/ssl/certs/iRedMail_CA.pem /etc/ssl/

Редактируем скрипт, находящийся в каталоге дистрибутива iRedMail.

nano tools/generate_ssl_keys.sh

Меняем, TLS-параметры  применительно к своей области.

iRedMail - Меняем параметры TLS

Для того что бы сертификаты оказались в нужных директориях, копируем скрипт в каталог /etc/ssl/

Запускаем скрипт.

bash /etc/ssl/generate_ssl_keys.sh

Дадим права на чтение для всех пользователей.

chmod +r /etc/ssl/certs/iRedMail_CA.pem
chmod +r /etc/ssl/private/iRedMail.key

Перезапустим Apache.

service apache2 restart

5. Редактирование зон DNS. Записи ptr, spf, DKIM.

Для корректной отправки почты с нашего сервера — добавим обратную ptr-запись указывающую на доменное имя нашего почтового сервера. Прописывается в обратной зоне провайдера, владеющего этим IP. Поэтому звоним провайдеру и говорим чтобы он прописал требующуюся PTR запись.

Рекомендуется так же, прописать специальную spf-запись (Sender Policy Framework) которая позволяет проверить не подделан ли домен отправителя. SPF-запись позволяет снизить вероятность попадания в спам писем, отправленных с вашего домена. В SPF-записи домена указывается список адресов серверов, с которых имеет право отправляться почта с ящиков на вашем домене. Настройка SPF-записи не является обязательной для работы почты, тем не менее, она поможет избежать потери отправленных писем.

Переходим в админ-панель своего доменного регистратора и в днс настройках вашего домена создадим txt-запись со следующим содержимым:

v=spf1 +a +mx ip4:public_ip -all

где, V=spf1 — используемая версия spf,

«+a» — разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org;

«+mx» — разрешает прием писем, если отправляющий хост указан в одной из MX-записей для example.org;

ip4 — принимать письма, отправленные с IP-адреса public_ip — ваш адрес почтового сервера.

«-all» — все сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.

Более подробно о возможных параметрах можно почитать вот здесь, а настроить DNS на работу второго провайдера поможет следующая заметка.

 - И наконец добавим DKIM-запись (DomainKeys Identified Mail), которая служит дополнительным средством борьбы со спамом и фишингом. DKIM — это технология удостоверения подлинности отправителя при помощи цифровой подписи, связанной с именем домена. Наличие DKIM подписи подтверждает, что письмо действительно было отправлено с указанного адреса.

Встроенный в iredmail, фильтр контента amavisd-new может подписывать сообщения с помощью DKIM. Далее, рассмотрим как правильно прописать DKIM-запись для подписи сообщений в нашем тестовом домене “test.ru”. Набираем в командной строке:

amavisd-new showkeys

Вывод команды будет следующим:

; key#1, domain test.ru, /var/lib/dkim/test.ru.pem
dkim._domainkey.test.ru.        3600 TXT (
"v=DKIM1 p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYMF2Gdg6njo2kmORh2WhLFZ94"
"xUshfemY7vzXYjnAOEkX3pZTvjC+tMUlQF9PlSaJQzuuBLNu/sZzhtaeg1CEnsIU"
"HXbGG4nUK/LvsKPnyE426AhK6I1D3FGeKSS1YmLZFS81U7Nq3Cn0OYabSPmEtB/E"
"YW6lFdD6kLUGJA331QIDAQAB")

Для удобства копи-паста, содержимое команды перенаправим в файл.

amavisd-new showkeys > 1.txt

Что бы исключить ошибки, проверим нашу запись при помощи онлайн сервиса DKIM Core.

Уберем не нужные кавычки. Содержимое вывода команды пропишем на DNS-сервере регистратора доменного имени. Например применительно к reg.ru необходимо добавить TXT-запись, где в поле subdomain прописать: dkim._domainkey, где dkim — специальный слектор, который задается в конфиге amavis (/etc/amavis/conf.d/50-user) и ._domainkey обязательная часть откуда будет извлекаться открытая часть доменного ключа.

Ждем пока информация о наших изменениях доберется до корневых DNS серверов (от 30 минут до 2-3 суток) после чего, набираем в консоли:

amavisd-new testkeys

Если в ответ получим:

TESTING#1: dkim._domainkey.test.ru       => pass

То значит, все хорошо. Дополнительно протестировать работу почты с использованием spf и dkim можно при помощи google mail. Отправляем сообщение на почтовый ящик gmail. Откроем полученное сообщению и в меню выберем «Показать оригинал»

Gmail Test SPF и DKIMНаходим строчки:

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of admin@test.ru designates 11.222.333.444 as permitted sender) smtp.mail=admin@test.ru;
       dkim=pass header.i=@test.ru

И так же видим что, проверки пройдены успешно. Если видим «neutral» или «failed», то значит что-то прописано неправильно, и гугл не доверяет серверу, с которого было отправлено письмо.

6. Резервное копирование (Backup) почты на windows-шару.

Создадим скрипт автобэкапа, например файл будет называться backup_mailboxes.sh со следующим содержимым:

#!/bin bash

#Монтируем Windows директорию. Здесь BackupUser@test.spb - пользователь BackupUser в домене test.spb;
//192.168.0.2/BackupMail$ - Путь к виндовой шаре.

mount -t cifs //192.168.0.2/BackupMail$ /mnt/net -o username=BackupUser@test.spb,password=12345678

#Переходим в директорию /mnt/net:
cd /mnt/net

#Архивируем:
sudo zip -r mail_backup-$(date +%Y-%m-%d_%H-%M-%S).zip  /var/mail/vmail1

#Безопасное извлечение устройства иначе получим ошибку device is busy:
fuser -m -k TERM /mnt/net
#Размонтирование
umount /mnt/net

Не рекомендую использовать tar.gz или его аналоги в качестве архиватора, если вы собираетесь работать с резервной копией архива под Windows. На практике пришлось столкнуться с невозможностью восстановить такой архив на NTFS-диске, если ранее он был удален. Перепробовав множества утилит по восстановлению, искомый архив прекрасно нашелся и даже открылся архиватором, вернее его первая tar-часть, а вот сам gz-архив оказался битым.

Добавим задачу в планировщик.

sudo crontab -u root -e

Вставляем:

# Выгрузка будет происходить каждое утро в 3:00.
00 3 * * * bash /var/vmail/backup/backup_mailboxes.sh

Просмотр заданий:

crontab -l

7. Фильтрация спама и блокировка вложений средствами Postfix.

Следующие директивы в /etc/main.cf приведем к следующему виду. Обратим внимание на формат записи с новой строки, где после основной директивы, последующие параметры цепочки, должны начинаться с пробела.

# Ограничения на этапе команды HELO/EHLO:
smtpd_helo_restrictions =
 # Разрешить клиентов из доверенных сетей;
 permit_mynetworks,
 # Разрешить клиентов, прошедших SASL аутентификацию;
 permit_sasl_authenticated,
 # Отклонить клиентов DNS-имя из HELO/EHLO которых не имеет A или MX-записи;
 reject_unknown_helo_hostname,
 # Отклонять клиентов, указывающих в HELO/EHLO не полное доменное имя;
 reject_non_fqdn_helo_hostname,
 # Отклонять клиентов, использующих неправильный синтаксис доменного имени в HELO/EHLO;
 reject_invalid_helo_hostname,
 # Различные полезные ограничения доступа по HELO и сервера отправителя;
 check_helo_access pcre:/etc/postfix/helo_access.pcre

В helo_access.pcre кроме прочего добавил следующие строки, меняем на свои значения:

# Запретить использовать внешним клиентам, ip-адрес и имя вашего почтового сервера:
/^mail\.example\.com$/ 550 Don't use my hostname
/^192\.0\.34\.166$/ 550 Don't use my IP address
/^\[192\.0\.34\.166\]$/ 550 Don't use my IP address
address_verify_sender=double_bounce_sender - проверка существования адреса отправителя.

Активируем изменения командой:

/etc/init.d/postfix reload

Для фильтрации вложений по расширению файла, средствами postfix открываем на редактирование /etc/postfix/main.cf и добавляем туда следующую строку:

mime_header_checks = regexp:/etc/postfix/mime_header_checks

Открываем файл /etc/postfix/mime_header_checks на редактирование и добавляем туда следующее содержимое:

/^begin(-base64)? [0-9]+.*(\.|=2E)bat(\?=)?(\.)?/ REJECT Don't send to us letters with bat attachements
 /^[^<]*(body|filename|name=).*(\.|=2E)bat(\?=)?(\.)?/ REJECT Don't send to us letters with bat attachements

 /^begin(-base64)? [0-9]+.*(\.|=2E)cmd(\?=)?(\.)?/ REJECT Don't send to us letters with cmd attachements
 /^[^<]*(body|filename|name=).*(\.|=2E)cmd(\?=)?(\.)?/ REJECT Don't send to us letters with cmd attachements
# Или можно так:
 IF/^(.*)(body|filename|name=)/
 /(.*)\.(lnk|dll|shs|vbe|hta|com|vbs|vbe|js|jse|bat|cmd|vxd|scr|shm|pif|chm|exe)$/ REJECT We are not accept attachments in ${2} format.
 /\"(.*)\.(lnk|dll|shs|vbe|hta|com|vbs|vbe|js|jse|bat|cmd|vxd|scr|shm|pif|chm|exe)$/ REJECT We are not accept attachments in ${2} format.
 ENDIF

Активируем изменения командой:

/etc/init.d/postfix reload

Примеры реализации разных фильтров для postfix можно посмотреть здесь.

8. Блокировка вложений и фильтрация спама средствами Amavis, Policid.

Для блокирования вложений удобно так же использовать Amavis, поскольку внутри уже есть готовые шаблоны масок в файле 20-debian_defaults и другие полезные опции по фильтрации содержимого.

Все что нужно это перенести нужные строки в основной конфиг 50-user. Для того что бы блокирование стало возможным, необходимо изменить параметр $final_banned_destiny с D_PASS на D_BOUNCE, что значит, что почта не пройдет к получателям, а уведомление о блокировке сообщения будет выслано отправителю:

$final_banned_destiny = D_BOUNCE;

D_PASS — почта проходит к получателям, даже если был обнаружен вирус или спам.

D_DISCARD — почта не проходит к получателям, отправитель не получает уведомление.

D_REJECT — почта не проходит к получателям, отправитель должен получить reject (SMTP permanent reject response). Не рекомендуется использовать с postfix.

Лично у меня в конфиге, прописан примерно следующий код:

 $banned_filename_re = new_RE(
 qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components

 # block certain double extensions anywhere in the base name
  qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,

  qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?$'i, # Windows Class ID CLSID, strict

  qr'^application/x-msdownload$'i,                  # block these MIME types
  qr'^application/x-msdos-program$'i,
  qr'^application/hta$'i,

 qr'^application/x-msmetafile$'i,	# Windows Metafile MIME type
 qr'^\.wmf$',				# Windows Metafile file(1) type

 qr'^message/partial$'i, qr'^message/external-body$'i, # rfc2046 MIME types

 [ qr'^\.(gz|bz2|zip|rar)$'           => 0 ],  # allow any in Unix-compressed
 [ qr'^application/x-zip-compressed$'i => 0],  # allow any within such archives

 qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i, # banned extension - basic
 qr'.\.(ade|adp|app|bas|bat|chm|cmd|com|cpl|crt|emf|exe|fxp|grp|hlp)$'ix,  # banned ext - long

 qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i,  # banned extension - WinZip vulnerab.
 qr'^\.(exe-ms)$',                       # banned file(1) types
 qr'^\.(exe|lha|tnef|cab|dll)$',         # banned file(1) types
);
# See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631
# and http://www.cknow.com/vtutor/vtextensions.htm

После внесения изменений перезапустим amavis.

/etc/init.d/amavis restart

Полезно будет добавить так же следующий кусок кода:

# черный список по тексту
$blacklist_sender_re = new_RE(
 qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou|greatcasino)@'i,
 qr'^(investments|lose_weight_today|market.alert|money2you|MyGreenCard)@'i,
 qr'^(new\.tld\.registry|opt-out|opt-in|optin|saveonlsmoking2002k)@'i,
 qr'^(specialoffer|specialoffers|stockalert|stopsnoring|wantsome)@'i,
 qr'^(workathome|yesitsfree|your_friend|greatoffers)@'i,
 qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i,
);

# Список масок вирусов, которые подставляют нереальные адреса в поле отправителя.

@viruses_that_fake_sender_maps = (new_RE(
 qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,
 qr'tanatos|lentin|bridex|mimail|trojan\.dropper|dumaru|parite|spaces'i,
 qr'dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la'i,
 qr'frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown'i,
 qr'@mm|@MM', # mass mailing viruses as labeled by f-prot and uvscan
 qr'Worm'i, # worms as labeled by ClamAV, Kaspersky, etc
 [qr'^(EICAR|Joke\.|Junk\.)'i => 0],
 [qr'^(WM97|OF97|W95/CIH-|JS/Fort)'i => 0],
 [qr/.*/ => 1], # true by default (remove or comment-out if undesired)
));

# По каким маскам, проверяем антивирусом не только распакованный вариант, но
# но и оригинальную версию файла до распаковки.

@keep_decoded_original_maps = (new_RE(
# qr'^MAIL$', # retain full original message for virus checking (can be slow)
 qr'^MAIL-UNDECIPHERABLE$', # recheck full mail if it contains undecipherables
 qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
 qr'^Zip archive data', # don't trust Archive::Zip
));

Фильтрация спами при помощи polycyd (cluebringer):

Для фильтрации спама, наряду со spamassassin дополнительно используется Policy Daemon, кодовое имя «cluebringer» — Доступ к веб по адресу: https://debian7.test.ru/cluebringer/

По мимо белых списков грейлистинга, здесь можно так же задавать белые и черные списки по HELO/EHLO отправителя, проверять SPF, создавать квоты и прочее. Логика работы «немного» не удобная, особенно когда добавляешь хост в черный список, он автоматически получает статус выключен (Disabled) что в интерфейсе отображается как Yes и нужно еще раз подсветить это адрес и выбрать No, что означает что политика включена. Дебилизм конечно, но возможно это лучше чем тыркаться в mysql.

Подробнее о механизме работы, можно почитать например здесь.  Для отключения, редактируем файл cluebringer.conf. 1 — включено, 0 — выключено.

nano /etc/cluebringer/cluebringer.conf
# Greylisting module
[Greylisting]
enable=0

и перезапустим демон командой:

/etc/init.d/postfix-cluebringer restart

Но лучше не отключать и разобраться в его работе, так как вещь полезная и позволяет существенно снизить объем получаемого спама.

9. Перенос почтового хранилища на другой более ёмкий диск.

Если почтовое хранилище исчерпало себя то можно подключить еще один диск и подмониторовать туда директорию с почтой, которая хранится в /var/vmail.

После подключения диска, набираем в консоли:

fdisk -l

Система сообщит нам что у нашего диска отсутствуют разделы. Исправляем.

fdisk /dev/sdb

Нажимаем, new -->primary-->1-->write.

После форматируем диск:

mkfs -t ext4 /dev/sdb

При форматировании в ext3 и ext4, для пользователя root резервируется 5% места. Чтобы убрать 5 процентное резервирование нужно дать команду:

tune2fs -m 0 /dev/sdb

Так же имеет место быть принудительная проверка диска после некоторого количества загрузок. Если вам это не нужно, процедуру можно отменить командой:

tune2fs -c 0 /dev/sdb1

Либо сделать так, чтобы проверка происходила реже, например, 1 раз в 100 загрузок:

tune2fs -c 100 /dev/sda1

Теперь необходимо настроить монтирование раздела в директорию /var/vmail.

Для быстрого монтирования набираем:

mount -t ext4 /dev/sdb1 /var/vmail

Для постоянного монтирования добавляем строчку в /etc/fstab.

/dev/sdb - hdd-mail
UUID="45320e3b-2bc4-4068-92b5-9c3713ce2aef" /var/vmail ext4 errors=remount-ro 0 1

где, UUID нужного диска можно узнать при помощи команды blkid.

10. Перенаправленные почты с одного адреса на другой, автоответчик.

Самый простой способ сделать перенаправление средствами Roundcube.

Перейти в \настройки\фильтры\Наборы фильтров\ и добавить новый фильтр, нажатием на крестик. Необходимо задать имя фильтру. Выбрать правило, и действие «Отправить копию сообщения на» и указать адрес на который будет перенаправляться наша почта.

iRedMail - фильтр перенаправления почты

Если по каким то причинам Roundcube в вашей сети не доступен, то можно сделать перенаправление средствами mysql.

mysql -uroot -p
mysql> USE vmail;
mysql> UPDATE alias SET goto='admin@test.ru,forwarding01@yandex.ru,forwarding02@yandex.ru' WHERE address='admin@test.ru';

Здесь forwarding01@yandex.ru, forwarding02@yandex.ru — адреса на которые перенаправляется почта. Тоже самое можно выполнить используя phpmyadmin. Выбрать базу vmail, таблицу alias и прописать в поле goto необходимые  адреса.

iRedMail-phpmyadmin - перенаправление почтыДля автоответчика в Roundcube уже есть настроенный фильтр Vocation. Для создания автоответчика средствами postfix, читаем эту статью.

11. Ошибки возникающие в процессе работы почтового сервера iRedMail и их устранение.

Сюда буду выкладывать ошибки с которыми приходится сталкиваться во время работы:

 - Ошибка доставки, в ответ приходит следующая месага:

550 #5.1.0 Address rejected <адрес получателя> (in reply to RCPT TO command)Reporting-MTA: dns; mail.ngs.ru.

Такая ошибка возникает в следующих случаях:

— Такого адреса не существует или допущена опечатка.

— Спам фильтры не принимают письма с вашего адреса.

Если ни одно из этих условий неверно, перешлите ошибку администратору почтового сервера на котором размещен адрес получателя или владельцу адреса.

или такой вариант:

relay=relay.domain.com[11.22.33.444]:25, delay=2.9, delays=0.05/0.02/2.5/0.24, dsn=5.0.0, status=bounced
(host relay.domain.com[11.22.33.444] said: 550-Verification failed for <user1@test.ru> 550-Called:
22.444.200.300 550-Sent: RCPT TO:<user1@test.ru> 550-Response: 554 5.7.1 <user1@test.ru>:
Recipient address rejected: Policy rejection 550 Sender verify failed (in reply to MAIL FROM command))

Срабатывают спам-фильтры сервера получателя (в прим: relay.domain.com), который пытается проверить действительный почтовый ящик сервера отправителя (в пример: user1@test.ru), для этого он посылает команду с пустым полем «MAIL FROM <>» а сервер «iRedMail» блокирует его, поскольку считает что данное поле не должно быть пустым. В ответ сервер relay.domain.com отправлет ошибку ферификации для пользователя user1@test.ru (550-Verification failed for <user1@test.ru>). При повторной отправке сообщения на сервер relay.domain.com к сообщению может добавится еще:

550-Previous (cached) callout verification failure 550 Sender verify failed (in reply to MAIL FROM command)

Что указывает на закэшированный отрицательный результат предыдущей проверки. Сообщение отправляемое некоторыми почтовыми серверами, например exim.

В моем случае ситуация возникла, после обновления iRedMail сервера до версии 0.91, где в конфиге компонента iRedAPD, который в свою очередь обновился до версии 1.6.0 был активирован плагин regect_null_sender запрещающий пустое поле отправителя. Плагин по мнению авторов сборки iRedMail, рекомендуемый к использованию и служит дополнительным средством борьбы со спамом, хотя строго говоря нарушает существующие правила RFC по работе smtp-протокола, а именно RFC 2505, где указано что "Недопустим отказ от приема почты с адресом «MAIL From: <>». Поэтому в данном случае мы либо соблюдаем RFC и не используем данный плагин в своей работе, или доверяем опыту сборщиков iRedMail, включаем плагин, то тогда в случае возникновения подобной блокировки придется связываться с админом почтового сервера и попросить внести наш сервер в белый список.

  — Письма от внешних отправителей не доходят до получателей домена test.ru, в ответ к отправителям возвращается ошибка 554 Transaction Failed.

<host1@test.ru>:host mail.test.ru[11.222.333.444] said: 554 Transaction Failed: Command "FROM" field differs from data "FROM" field. (in reply to end of DATA command)

В данном случае виноват аппаратный брэндмауэр D-Link DFL, на котором настроено правило фильтрации от спама с включенной опцией проверки несоответствия адреса «От кого» в команде SMTP-протокола с адресом «От кого» заголовка сообщения. — Check emails for mismatching SMTP command «From» address and email header «From» address. Многие спамеры умышленно делают их различными для того, чтобы сообщения проходили фильтрацию, таким образом, данная функция обеспечивает дополнительную проверку целостности сообщения. Опция полезная, но иногда под нее попадают уже известные надежные сервера типа  яндекса. Поэтому возможно следующие варианты, либо отключать эту опцию, либо не блокировать письма, а помечать как спам, или просто добавлять сервер или почтовый ящик в белый список.

Проблема с запуском clamd — ClamAV-clamd av-scanner FAILED

В логах следующая запись:

mail amavis[32426]: (32426-05) (!)ClamAV-clamd av-scanner FAILED: run_av error: Too many retries to talk to /tmp/clamd.socket (All attempts (1) failed connecting to /tmp/clamd.socket) at (eval 113) line 603.\n
Jan 14 12:32:03 mail amavis[32426]: (32426-05) (!)WARN: all primary virus scanners failed, considering backup

Создаем отсутствующий sock файл:

touch /var/lib/clamav/clamd.sock
chown clamav:clamav /var/lib/clamav/clamd.sock

Перезапускаем демон:

/etc/init.d/clamav-daemon

Если ругается что файлы баз не обнаружены, то запускаем:

freshclam -V

Убедимся что amavis так же запущен:

/etc/init.d/amavis status start

— Ошибка сокета — /tmp/socket:

Ошибка сокета может банально возникать из-за нехватки системных ресурсов. В логах можно получить следующие ошибки:

Jan 12 16:17:35 mail amavis[31635]: (31635-10) (!)connect to /tmp/clamd.socket failed, attempt #1: Can't connect to UNIX socket /tmp/clamd.socket: Connection refused
Jan 12 16:17:36 mail amavis[31635]: (31635-10) (!)connect to /tmp/clamd.socket failed, attempt #1: Can't connect to UNIX socket /tmp/clamd.socket: Connection refused
Jan 12 16:17:36 mail amavis[31635]: (31635-10) (!)ClamAV-clamd: All attempts (1) failed connecting to /tmp/clamd.socket, retrying (2)
Jan 12 16:17:42 mail amavis[31635]: (31635-10) (!)connect to /tmp/clamd.socket failed, attempt #1: Can't connect to UNIX socket /tmp/clamd.socket: Connection refused
Jan 12 16:17:42 mail amavis[31635]: (31635-10) (!)ClamAV-clamd av-scanner FAILED: run_av error: Too many retries to talk to /tmp/clamd.socket (All attempts (1) failed connecting to /tmp/clamd.socket) at (eval 113) line 603.\n
Jan 12 16:17:42 mail amavis[31635]: (31635-10) (!)WARN: all primary virus scanners failed, considering backups

или

amavis[32427]: (32427-04) (!)connect to /tmp/clamd.socket failed, attempt #1: Can't connect to UNIX socket /tmp/clamd.socket: \303\220\302\235\303\220\...
Jan 14 12:32:37 mail amavis[32427]: (32427-04) (!)ClamAV-clamd av-scanner FAILED: run_av error: Too many retries to talk to /tmp/clamd.socket (All attempts (1) failed connecting to /tmp/clamd.socket) at (eval 113) line 603.\n
Jan 14 12:32:37 mail amavis[32427]: (32427-04) (!)WARN: all primary virus scanners failed, considering backups
Jan 14 12:32:37 mail amavis[32427]: (32427-04) (!)run_av (ClamAV-clamscan) FAILED - unexpected exit 2, output="WARNING: Ignoring deprecated option

Набираем в консоли:

free -m

И смотрим сколько памяти выделено для всего сервера, а сколько отжирают другие процессы. В моем случае было мало оперативки 512 мб, выделил серверу 2048, после объем вырос до 900 метров. Очевидно, что при таком объеме сервер задыхался.

— Нехватка свободного места на диске «No space left on device»

В логах видим следующее:

Jun  8 06:25:52 mail postfix/cleanup[23449]: warning: 9A7E763075: write queue file: No space left on device
Jun  8 06:25:52 mail postfix/pickup[23030]: warning: maildrop/555638131F: error writing 9A7E763075: queue file write error
Jun  8 06:25:52 mail postfix/pickup[23030]: 9DB5A63075: uid=0 from=<root>
Jun  8 06:25:52 mail postfix/cleanup[23449]: 9DB5A63075: message-id=<20140608022552.9DB5A63075@mail.domain.ru>
Jun  8 06:25:52 mail postfix/cleanup[23449]: warning: 9DB5A63075: write queue file: No space left on device
Jun  8 06:25:52 mail postfix/pickup[23030]: warning: maildrop/8994581321: error writing 9DB5A63075: queue file write error

Дословно, «не могу записать файл очереди. Нет свободного места на устройстве.» Соответственно, почта перестает ходить, apache перестает принимать запросы на доступ через web, короче ситуация крайне неприятная. В моем случае вероятно, место закончилось из-за большого количества ранее загруженных deb-пакетов, которые хранятся в

/var/cache/apt/archives

Посмотреть сколько занимают места на диске эти пакеты:

du -sh /var/cache/apt/archives/

Почистить можно командой:

apt-get clean

Посмотреть свободное место на дисках/устройствах в мб и гб:

df -h

При случае основной диск можно расширить при помощи Gparted, загрузившись с Live-образа.

12. Обновление сервера iRedMail

В данном разделе будут выкладываться ссылки на актуальные статьи по обновлению почтовой системы iRedMail и ее компонентов.

18.20.2016. Обновление почтового сервера iRedMail с 0.9.2 до 0.9.5-1.

31 комментарий Установка почтового сервера iRedMail. Внедрение и поддержка (MySQL back-end)

  • Илья

    Спасибо за статью!

  • Bootmen

    Здраствуйте.

    Подскажите пож.

    Установил iredmail и заметил пробелу-

    не срабатывает permit_sasl_authenticated

    то есть например в цепочке:

    smtpd_helo_restrictions = permit_mynetworks,

    permit_sasl_authenticated,

    reject_non_fqdn_helo_hostname,

    reject_invalid_helo_hostname,

    check_helo_access pcre:/etc/postfix/helo_access.pcre

    Все правила все равно срабатывают для пользователей

    прошедших аутификацию.

    Всю голову сломал. Помогоите пож.

    • admin admin

      Добрый, а как вы проверяете?

      • Bootmen

        Уже разобрался сам. :)

        Просто у некоторых узеров стоит Бат выпуска до 2010 года.

        К тому пиратский (не обновляется).

        И по своей глючности не работает нормально с TLS.

        Почтовик не воспринимает их как нормально залогиненых и применяет

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

        Тут другая проблема возникла с вебмордой.

        Когда узер хочет выйти из вебинтефейса (кнопка =выход=),

        почтовик вежливо это ему запрещает. (??!!)

        Грит типа операция эта разрешена по безопасности и обратитесь

        к админу. Бред какой то.

        • admin admin

          Это во всех браузерах такое? Не разу не сталкивался с таким...если только IE что-нибудь блокирует, в mozilla и chrome не наблюдал такого!

          • Bootmen

            Изредка выскакивает. Сегодня небыло.

            Вообще глючноватая последняя сборка.

            Тут долго не мог избавится от одной заразы:

            warning: problem talking to server 127.0.0.1:7777: Success

            Cрабатывало если у клиента не было поля From

            (ответы например от даемонда майлру)

            Оказалось что разработчики добавили дурацкий плагин

            «reject_null_sender» который и гадил втихомолку.

            И какойто админ на ихнем сайте с китайской фамилией

            утверждал, что это все по правилам. ::)

          • admin admin

            По поводу reject_null_sender, да есть такая тема, или отключить или попросить админа добавить ваш сервак в белый список. И как бы да, строго говоря это не по правилам, но я пока оставил, наблюдаю :) За почти 3 года использования сервера пока только один раз сталкивался с невозможностью доставить письмо по причине ответной проверки сервером пустого адреса отправителя.

  • Bootmen

    Сегодня вообще отключил iredapd в main.cf

    Как заметил уже в третий раз: после недельной ротации логов, примерно через час

    сервер впадает в ступор и всем отвечает problem talking to server 127.0.0.1:7777

    Дебаг был выключен и я не смог застукать какой плагин глючит.

    Какие проблемы ожидают меня в связи с этим отключением?

    Проблем от начальства я сегодня уже нахватал.

    • admin admin

      А зачем отключил? Не пробовал гуглить проблему у них на форуме? Вот здесь например товарищ нашаманил что-то в smtpd_recipient_restrictions и копи паста от ZhangHuangbin как бы помогла :) Ну как минимум перестанут работать плагины перечисленные в конфиге iredapd, другой вопрос на сколько конкретно они вам нужны. В глобальном смысле думаю ничего страшного, а так лучше задать этот вопрос товарищу ZhangHuangbin — это он автор :)

      • Bootmen

        В сылке вообще ни о чем.

        Я по другой ветке этого китайца питона обновлял. Тоже не помогло.

        С рестрикшенами я давно работаю. Они не могут повлиять

        на последующие правила в цепочке.

        Разве, что где то применяются REDIRECT или REPLACE.

        У меня такого нет.

        Я только понял, что проблема вылазиет после ротации логов.

        То есть после рестарта iredpad. А другие процессы делают рестарт

        позже или вообще не перегружаются. Я уже подумывал вставить

        в кронтаб полную перезагрузку init 6 сразу после ротации.

        Но, это конечно кривое решение. Интересно если я этому

        китайцу вопрос задам (через гугля переводчка) он поймет суть?

        :)

        • admin admin

          а кто его знает может и поймет, но лучше я думаю через yandex translate, там перевод точнее будет :)

  • Andrey

    Подскажите как произвести настройку так что б письма приходящие на несуществующие ящики сливались на существующий?)

    • admin admin

      Andrey, сам я так не пробовал, нет необходимости, ищете статью на iredmail.org по запросу «SQL: Add per-domain catch-all account» возможно это то что вам нужно.

  • Добрый день. Подскажите, пожалуйста, как я могу отключить проверку вложений? Не уходят и не приходят письма с нектороми вложениями (некоторые файлы .pdf, .docx, xlsx) — иногда пролетают, иногда нет. Иногда помогает переименновываение без изменения расширения файла. Когда письмо не отправляется, отправителю приходит ответ 550 5.7.1 message content rejected. В настройках postfix, amavis, spamassassin в опциях спама, вирусов и бана стоят значения D_PASS, ни в одной опции нет значений D_REJECT or D_BOUNCE.

    Ошибка остается. Остановил демонов amavis, spamassassin, clamav. Нет результата, письмо не уходит. Прошу Вашей помощи. Какую строку в каком конфигурационном файле нужно исправить и как, для того, чтобы сервер пропускал письма с вложениями? Очень благодарен за ответы.

    • admin admin

      А как вы настраивали сервер? Речь идет об iRedMail, если да то какая версия? Или вы сами все настраивали с 0-ля? Как проверяете, почтовый клиент какой? Рекомендую параллельно поднять виртуалку с новой ОС и свежим IredMail и оттуда взять настройки и перенести в существующий сервак если это продакшн. И еще неплохо бы от вас получить полный лог начиная с установки соединения на какой нибудь почтовый сервер, например yandex, с вложением и без.

  • Доброе утро. Забыл добавить. Linux server 3.2.0-4-amd64 #1 SMP Debian 3.2.73-2+deb7u1 x86_64 GNU/Linux

  • Здравствуйте, admin. Речь идет о iRedMail версии 0.8.5. Работает исправно и давно (года полтора, точно). Настраивал сам по учебнику. Проверял с любого клиента, с любого бразуера, с любого аккаунта. Дело имено в вложенных файлах. Виртуалку поднять, конечно, можно, но только это ничего не изменит, т.к. на сервере и так стоят практически дефолтные настройки. Я и полез в них только из-за этой ерунды. Она не очень мешает, т.к. большинство файлов проходит нормально, те, что не проходят — ну может, процент-два.

    Логи почистил, перезагрузил сервер и тут же отправил «непроходное» письмо со своего же аккаунта на свой. Снятые после этого логи здесь megafilter.ru/download/log.zip

    Виртуалки и прочие затеи, это безусловно хорошо, но вопрос то был — где в настройках блокировка писем по вложениям?

    Письмо не уходит с ошибкой 550 5.7.1 message content rejected.

    :\

    • admin admin

      Да древняя версия однако, судя по логам там еще spamassassin в виде отдельного демона, а не интегрирован в amavis как в последних версиях, у меня к примеру в логах вообще нет не строчки про «smapd» и в самой свежей версии на новом сервере проверил тоже. Ну судя по кусочку из лога, «mail postfix/cleanup[6368]: C6476339: reject: body...5.7.1 message content rejected» проблема именно в postfixе, тем более если, при отключенном amavis, spamassassin, clamav тоже самое. В main.cf случайно не задействована проверка тела сообщения — body_checks = regexp:/etc/postfix/body_checks ? Если да, то отключаем эту и прочие «regexp» и проверяем как будет. Еще у вас amavis ругается что «internal_networks not configured» и spamd не может создать пользовательские настройки — «...cannot create user preferences file...» не плохо бы поправить!

  • Здравствуйте, admin! Спасибо, что помогли! Я бы никогда в жизни не додумался, что одна единственная строка, которая была поставлена для проверки в файл боди_чекс, вида «/.*Test.*/ REJECT» может привести к таким последствиям. Ни в одном из файлов в бинарном виде я не нашел подобной строки. А вот в теле письма, где уже идет base64, есть букафки «...teST...». Мне сложно передать свои чувства, просто опа какая-то. Спасибо огромное! Не сочтите за наглость спросить что можно сделать с указанными вами косяками?

    • admin admin

      НЕ за что)) По поводу amavis и строки «internal_networks not configured» скорее всего это тот тоже 'spamassasin' ругается, и надо в /etc/spamassasin/local.cf добавить параметр «internal_networks» с указанием локальной сети и всех подсетей вашей организации если нужно, включая внешний ip почтового сервера. Там же можно указать параметр «trusted_networks» с указанием тех же ip хостов, которым вы доверяете и от которых точно не будет спама. Подробнее — wiki.apache.org/spamassassin/TrustPath

      По второй проблеме: «config: cannot create user preferences file /nonexistent/.spamassassin/user_prefs: No such file or directory» гуглится на раз:

      В /etc/default/spamassassin находим строку:

      OPTIONS="--create-prefs --max-children 5 --helper-home-dir"

      и меняем ее на

      OPTIONS="--create-prefs --max-children 5 --helper-home-dir -u debian-spamd"

      Затем выполняем:

      mkdir -p /nonexistent/.spamassassin

      chown debian-spamd: /nonexistent/.spamassassin

      service spamassassin restart

      Но поможет или нет, сложно сказать, у меня такой проблемы не было и spamassassin вообще никак не беспокоит!

  • Pavel Zaharov

    добрый день, не могу приконектится с outlook, по логам дает следующее: Helo command rejected: need fully-qualified hostname; from= to= proto=ESMTP helo=

    • admin admin

      Pavel, проверьте в свойствах учетной записи Outlook, на вкладке «Сервер исходящей почты» стоит ли галочка SMTP-серверу требуется проверка подлинности (My outgoing server (SMTP) requires authentication)

  • Добрый день!!! Поставил iRedMail-0.9.3 , FreeBSD 10.2-RELEASE-p7, при работе в веб морде Roundcubе не прикрепляются файлы , прикрепляются только с расширением тхт, в логах ошибок нет. При том что с клиентов OUTLOOK 2007 , ТHE BAT вложения любые уходят. В РНР.INI все включено. В входящих письмах все вложения скачиваются и открываются.В каком направлении копать?Буду очень благодарен если укажите в каком направлении смотреть.

    • admin admin

      Добрый, а права на /roundcubemail/temp и /roundcubemail/logs точно 755 ? Чистую установку freebsd и iredmail делаете? Вообще недавно ставил на чистый debian, такого не наблюдал!

  • regect_null_sender в статье это опечатка — reject_null_sender

    Для приведения в соответствие с rfc2505 в плагине plugins/reject_null_sender.py достаточно

    закомментить строки:

    #if not (sender or sasl_username):

    # logging.debug ('Spam (no sender address or sasl_username).')

    # return SMTP_ACTIONS['reject']

    • admin admin

      Не увидел, где у меня опечатка, ну в любом случае, данный плагин для меня уже не актуален. В последней версии сборки от него так же отказались.

  • Александр

    Добрый день admin. Ставлю iRedMail 0.9.5-1 последнюю на сегодняшний день. На чистую ubuntu 14.04 LTS Server, ставится что называется влет. Но... Не проходит авторизация в awstat. Данные использую из письма, которое приходит на postmaster'a со всеми параметрами доступа.Как авторизоваться?

    На сколько я понял из заголовка входящего письма, проверка идет только на вирусы, спам-фильтр ничего не пишет, т.е. скорее всего просто по умолчанию не работает. Как его активировать? Пробовал в /etc/default/spamassasin выставить ENABLED=1, после этого вылетает amavis и больше не стартует, даже если вернуть в исходное состояние.После этого письма становятся в очередь и не уходят. Не подскажете по этим вопросам?

    • admin admin

      Добрый, до последней сборки пока не добрался, но на текущей версии все работает. По идее если в awstat не пускает, то и в iredadmin и в roundcube под postmaster'ом не должен, учетные данные то одни. У вас как?

      Проверка идет и на вирусы и на спам, в конфиге amavisа директива отвечающая за спам это @bypass_spam_checks_maps, если строка не закоментированна, то проверка идет. Так же можете перезапустить amavis и затем в логах увидеть какие из модулей он подгружает. Если в перечне есть:

      mail amavis[30888]: ANTI-VIRUS code loaded

      mail amavis[30888]: ANTI-SPAM code loaded

      mail amavis[30888]: ANTI-SPAM-SA code loaded

      То значит антивирусный и антиспам модуль работает и spamassasin активирован и дополнительно включать его не надо. Он управляется и запускается из под amavis в каждый момент времени когда это нужно.

      А что бы наглядно видеть в логах что amavis так же работает, можно включить более подробное логирование, в конфиге '50-user' опция: $log_level = 0; ( доступные значения от 1 до 5) и $sa_debug = 1; — включить дебаггер для spamassasin и затем в логах посмотреть как это все выглядит.

  • Добрый день. Возникла проблема при настройке DKIM

    dkim — специальный селектор где его взять (где лежит)?

    Извините за банальшину

    • admin admin

      Добрый, что бы поменять имя селектора, открываем на редактирование /etc/amavis/conf.d./50-user и находим строку:

      # Add dkim_key here.

      dkim_key («test.ru», «dkim», «/var/lib/dkim/test.ru.pem»);

      Меняем «dkim» на свое значение. Перезапускаем amavis.

Оставить ответ

Войти с помощью: 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

*