Установка почтового сервера iRedMail. Внедрение и поддержка (MySQL back-end)
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 можно описать следующей иллюстрацией:
И еще одна картинка для улучшения понимания:
Преимущества использования перед другими системами:
- Бесплатный и в то же время полнофункциональный почтовый сервер, использующий свободные 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 enp0s3 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. Значит все ОК. Если требуется изменить имя хоста, то редактируем /etc/hostname и /etc/hosts.
Для распаковки пакета, нам потребуется bzip. Если, его нет то выполняем команду:
sudo apt-get install bzip2
2. Установка iredMail
Теперь перейдем непосредственно к установке самого сервера. Качаем последний стабильный релиз Iredmail отсюда. Если при помощи wget, то не забудем указать параметр --no-check-certificate - не проверять сертификат сервера.
tar xjf iRedMail*
Переходим в директорию и запускаем установочный скрипт:
cd iRedMail* shell iRedMail.sh
Запустится мастер, где необходимо будет ответить на ряд вопросов, определяющий дальнейший ход установки, а так же функциональные особенности сервера, которые мы хотим получить на выходе. Нажимаем Да.
На следующем экране укажем каталог для хранения почтовых сообщений. По умолчанию /var/vmail. Установщик нам сообщит, что объем почтового хранилища зависит от почтового трафика и обычно для этих целей требуется объемный диск. Путь должен быть записан в нижнем регистре.
На следующем экране выберем back-end - тип баз данных для хранения почтовых аккаунтов. На выбор OpenLDAP, MySQL, PostgreSQL. Выбираем MySQL, нажимаем Далее.
Далее зададим пароль администратора MySQL. Нельзя использовать специальные символы, например $ или #, а так же оставлять поле пароля пустым. Нажимаем Next.
Затем указываем доменное имя, которое хотим иметь после @. Полное доменное имя мы прописали еще ранее.
На следующем экране, зададим пароль административной учетной записи postmaster, при помощи которой мы будем создавать другие учетные записи и управлять нашим сервером.
Следующий экран, выбор опциональных компонентов. Оставляем по умолчанию и нажимаем Next.
Нажимаем 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, где будут перечислены все установленные пакеты с указанием конфигурационных файлов и паролей. Важно сохранить, этот файлик в надежном месте.
Для перехода в админку сервера iredadmin, переходим по адресу: https://debian7.test.ru/iredadmin. Здесь создаются пользователи, домены и квоты.
3. Создание нового ssl-сертификата.
В Debian, сертификаты хранятся в /etc/ssl/certs и /etc/ssl/private.
Перемещаем текущие сертификаты куда-нибудь в другой каталог.
mv /etc/ssl/private/iRedMail.key /tmp mv /etc/ssl/certs/iRedMail_CA.pem /tmp
Редактируем скрипт, находящийся в каталоге дистрибутива iRedMail.
nano tools/generate_ssl_keys.sh
Меняем, TLS-параметры применительно к своей области.
Для того что бы сертификаты оказались в нужных директориях, копируем скрипт в каталог /etc/ssl/
Запускаем скрипт.
shell /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
4. Редактирование зон 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. Откроем полученное сообщению и в меню выберем "Показать оригинал"
Находим строчки:
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", то значит что-то прописано неправильно, и гугл не доверяет серверу, с которого было отправлено письмо.
5. Резервное копирование (Backup) почты на windows-шару.
Создадим скрипт автобэкапа, например файл будет называться backup_mailboxes.sh со следующим содержимым:
#!/bin bash mount.cifs //192.168.0.2/BackupMail$ /mnt/net -v -o username="BackupUser",password="12345678",domain="test.spb" cd /mnt/net zip -r mail_backup-$(date +%Y-%m-%d_%H-%M-%S).zip /var/vmail/vmail1 fuser -m -k /mnt/net umount /mnt/net
где:
- mount -t cifs //192.168.0.2/BackupMail$ - путь к виндовой шаре;
- username="BackupUser",password="12345678",domain="test.spb" - виндовый пользователь BackupUser, его пароль и домен в который он входит;
- cd /mnt/net - Переход в директорию куда смонтирована windows-шара;
- sudo zip -r mail_backup-$(date +%Y-%m-%d_%H-%M-%S).zip /var/mail/vmail1 - архивация директории /var/mail/vmail1, на выходе получаем zip-архив;
- fuser -m -k TERM /mnt/net - безопасное извлечение устройства иначе получим ошибку "device is busy";
- umount /mnt/net - размонтирование;
Не рекомендую использовать tar.gz или его аналоги в качестве архиватора, если вы собираетесь работать с резервной копией архива под Windows. На практике пришлось столкнуться с невозможностью восстановить такой архив на NTFS-диске, если ранее он был удален. Перепробовав множества утилит по восстановлению, искомый архив прекрасно нашелся и даже открылся архиватором, вернее его первая tar-часть, а вот сам gz-архив оказался битым.
Добавим задачу в планировщик.
crontab -u root -e
Вставляем:
# Выгрузка будет происходить каждое утро в 3:00.
00 3 * * * shell /var/vmail/backup/backup_mailboxes.sh
Просмотр заданий:
crontab -l
6. Фильтрация спама и блокировка вложений средствами Postfix.
Следующие директивы в /etc/postfix/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 можно посмотреть здесь.
7. Блокировка вложений и фильтрация спама средствами 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 );
После внесения изменений перезапустим 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 ));
Для фильтрации спама, наряду со spamassassin дополнительно используется Policy Daemon, кодовое имя "cluebringer". В более поздней версии заменен на iRedAPD. Доступ к веб по адресу: https://debian7.test.ru/cluebringer/
По мимо белых списков грейлистинга, здесь можно так же задавать белые и черные списки по HELO/EHLO отправителя, проверять SPF, создавать квоты и прочее. Логика работы "немного" не удобная, особенно когда добавляешь хост в черный список, он автоматически получает статус выключен (Disabled) что в интерфейсе отображается как Yes и нужно еще раз подсветить это адрес и выбрать No, что означает что политика включена. Дебилизм конечно, но возможно это лучше чем тыркаться в mysql.
Подробнее о механизме работы, можно почитать в следующей статье. Для отключения, редактируем файл /etc/cluebringer/cluebringer.conf. 1 - включено, 0 - выключено.
И перезапустим демон командой:
/etc/init.d/postfix-cluebringer restart
Более не актуально, т.к. с версии сервера 0.9.3 фильтрацией спама занимается iRedAPD. Пропускайте!
Но лучше не отключать и разобраться в его работе, так как вещь полезная и позволяет существенно снизить объем получаемого спама.
8. Перенос почтового хранилища на другой более ёмкий диск.
Если почтовое хранилище исчерпало себя то можно подключить еще один диск и подмониторовать туда директорию с почтой, которая хранится в /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.
9. Перенаправленные почты с одного адреса на другой, автоответчик.
Самый простой способ сделать перенаправление средствами Roundcube.
Перейти в \настройки\фильтры\Наборы фильтров\ и добавить новый фильтр, нажатием на крестик. Необходимо задать имя фильтру. Выбрать правило, и действие "Отправить копию сообщения на" и указать адрес на который будет перенаправляться наша почта.
Если по каким то причинам Roundcube в вашей сети не доступен, то можно сделать перенаправление средствами mysql.
mysql -uroot -p USE vmail; 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 необходимые адреса.
Для автоответчика в Roundcube уже есть настроенный фильтр Vocation. Для создания автоответчика средствами postfix, читаем эту статью.
10. Ошибки возникающие в процессе работы почтового сервера 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 был активирован плагин reject_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 файл и перезапускаем clamav:
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-образа.
- Неправильная информация о свободном месте почтового ящика ограниченного квотой.
Была замечена следующая особенность, что если удалять старые письма в почтовом ящике, прямо из mailbox, например входящие сообщения по адресу /var/vmail/vmail1/domain.ru/t/s/t/tst-2013.08.13.17.54.47/Maildir/cur то процент свободном пространства в почтовом клиенте будь то Rouncube, Thunderbird или любой другой ни как не изменится либо изменится но незначительно. Дело в том, что сервер Dovecot понимает только локальное удаление писем непосредственно из клиента, а при удалении из maibox счетчик квоты не сбрасывается. Что бы это поправить в конкретном ящике, выполняем следующую команду:
doveadm quota recalc -u test@domain.ru
Во всех ящиках на почтовом сервере:
doveadm quota recalc -A
11. Обновление сервера iRedMail
В данном разделе будут выкладываться ссылки на актуальные статьи по обновлению почтовой системы iRedMail и ее компонентов.
18.02.2016. Обновление почтового сервера iRedMail с 0.9.2 до 0.9.5-1.
18.01.2018. Обновление почтового сервера iRedMail с 0.9.5-1 до 0.9.7.