Postfix
Установка и некоторая настройка Postfix описана в инструкции Установка Интернет-сервера на Debian и Alt Linux. В этой статье будут рассмотрены некоторые дополнительные настройки.
Содержание |
Общие сведения
- Посмотреть настройки Posfix, отличающиеся от настроек по умолчанию, можно командой:
# postconf -n
- В целях отладки будет полезно для некоторых компонентов Postfix включить более детальное журналирование. Для этого в /etc/postfix/master.cf в колонке commnads + args добавляем ключ -v. Например для virtual строка будет выглядеть так:
virtual unix - n n - - virtual -v
Пользователи не получают почту
Первым делом смотрим, что написано в журнале /var/log/maillog о приёме и обработке письма (ориентируемся на адреса отправителя и получателя).
- Если отправитель точно не спамер то, возможно, неправильно настроена обратная зона на его почтовом сервере. Проверить можно так:
# host alpicom.ch alpicom.ch has address 194.38.160.10 # host 194.38.160.10 10.160.38.194.in-addr.arpa domain name pointer neobolian.deckpoint.ch.
Это пример неправильной настройки, а вот как должно быть:
# host mail.ru mail.ru has address 194.67.57.26 # host 194.67.57.26 26.57.67.194.in-addr.arpa domain name pointer mail.ru.
- Если для фильтрации спама стоит spamassassin, то адреса и домены можно включить в белый список в файле /etc/mail/spamassassin/local.cf:
whitelist_from postmaster@domain1.ru whitelist_from *@domain2.ru
- Так же можно в самом Postfix в файле /etc/postfix/main.cf добавить ip адрес домена в список mynetworks - но это уже крайний случай, когда всё остальное уже опробовано, так как в этом списке должны быть перечислены только наши сети. Этот список применяется в нескольких случаях и в частности он определяет какие сети/адреса могут использовать наш сервер для пересылки (relay) писем.
- Если в журнале находим ошибку "450 Server configuration problem", то проверяем настройки в файле main.cf. У меня эта ошибка появилась после перезагрузки сервера. Оказалось, что postgrey автоматически не запускался при старте системы, а Postfix направлял ему запрос на разрешение принятия письма.
Вообще узнать значение ошибки можно в мануале:
# man smtpd
Для поиска по мануалу использовать слеш '/' и после него слово поиска. Слеш без слова - продолжает поиск предыдущего слова. B Интернете это руководство доступно по адресу http://www.postfix.org/smtpd.8.html
Перенаправление
- Для того, чтобы времено перенаправлять почту с одного адреса на другой нужно подредактировать в PostfixAdmin таблицу alias, поле goto. Сам PostfixAdmin этого делать не позволяет, поэтому придётся править вручную в самом MySQL, для этого удобно воспользоваться phpMyAdmin.
- Чтобы в Postfix перенаправлять почту с одного домена на другой (mail routing), используется транспортная таблица (mail transport). Подробно о ней можно узнать в руководсвте:
# man transport
или по адресу http://www.postfix.org/transport.5.html. Использовать перенаправление можно для пересылки почты через VPN или когда используем алиасы домена (см ниже)
Поскольку мы для хранения служебной информации используем MySQL, то нужно добавить понадобившиеся маршруты в таблицу transport:
# mysql -upostfixadmin -ppostfixadmin postfix
mysql> INSERT INTO transport (domain,destination) VALUES ('domain1.ru',':mail.domain2.ru');
Не лишне будет предворительно проверить, что mail.domain2.ru принимает почту:
# telnet mail.domain2.ru 25
В противном случае при попытке отправить сообщение на ящик user@domain1.ru в /var/log/maillog появится запись:
postfix/qmgr[25305]: 65D383767D: to=<user@domain1.ru>, relay=none, delay=1689, status=deferred (transport is unavailable)
Если мы не поставим двоеточие , то в журнале получим сообщение:
postfix/qmgr[25305]: warning: connect to transport mail.domain2.ru: No such file or directory
Если указали неверный транспорт (я сначала пробовал smtp:mail.domain2.ru), то:
postfix/smtp[32546]: 798993767D: to=<user@domain1.ru>, relay=none, delay=1, status=bounced ([mail.domain2.ru]: Name or service not known)
Если же всё нормально, то увидим:
postfix/smtp[354]: 5C8793767F: to=<user@domain1.ru>, relay=mail.domain2.ru[182.160.1.3], delay=1, status=sent (250 1182880 message accepted for delivery)
- Если мы купили ещё одно доменное имя newname.ru, то Postfix можно указать, чтобы письма отправляемые на user@newname.ru перенаправлялись на user@oldname.ru, другими словами сделать алиас на домен. В Postfix Admin это можно сделать нажав на кнопку "Добавить алиас". То же самое можно сделать вручную, выполнив команды:
mysql> INSERT INTO domain (domain, description, aliases, mailboxes, maxquota, transport, backupmx, created, modified, active) VALUES ('newname.ru','Our new domain','50','130','0','','0','2006-08-10 16:06:27','2006-08-10 16:06:42','1')
mysql> INSERT INTO alias (address, goto, domain, created, modified, active) VALUES ('@newname.ru','@oldname.ru','newname.ru','2006-08-10 16:08:06','2006-08-10 16:08:06','1')
После этого добавляем в файл /etc/postfix/mydestination строку
newname.ru
убедимся, что этот файл подключается в /etc/postfix/main.cf:
mydestination = localhost, $myhostname, localhost.$mydomain, $config_directory/mydestination
Также проверим, что мы не забыли указать новое имя в /etc/hosts:
127.0.0.1 localhost.localdomain localhost 10.0.0.2 localnet.dns.name 89.116.14.18 oldname.ru newname.ru
Всё, перегружаем postfix и можем использовать оба доменных имени для отправки и получения почты.
Борьба со спамом
Проверить спамерскую активность в своей сети можно командой на почтовом сервере:
# tcpdump port 25
чтобы просмотреть трафик пользователя:
# tcpdump host 10.0.0.10
по умолчанию прослушивается интерфейс eth0. Для прослушивания другого интерфейса указываем его в параметре i:
# tcpdump host 10.0.0.10 -i eth1
Средства Postfix
Правила на время установления соединения
Можно добавить ограничения средствами самого Postfix ещё во время соединения (hand shake). Эти правила позволят немного снизить входящий трафик, так как неудовлетворящие правилам сообщения не будут приняты. Вот описания правил из официальной документации:
# These restrictions apply in the context of the SMTP HELO command. smtpd_helo_required = yes smtpd_delay_reject = yes smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access, permit
Файл helo_access может выглядеть так:
64.170.162.98 REJECT Get lost - you're lying about who you are mail.mydomain.ru REJECT Get lost - you're lying about who you are
Первая строка откидывает тех, кто пытается нас убедить, что у него наш ip адрес (при настройке не забудьте заменить на свой!), вторая - тех кто представляется нашим же DNS именем. Вот ещё несколько ограничений в контексте команды RCPT TO:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
- http://www.unixwiz.net/techtips/postfix-HELO.html - Blocking spammers with Postfix HELO controls
Фильтр для темы сообщения
Будем отсеивать все сообщения содержащие в теме письма определённые слова. Для этого добавим в /etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
и создадим (или добавляем в существующий) файл /etc/postfix/header_checks, в котором пропишем правило отсева сообщений в теме которых содержаться слова sex, viagra, seduce, naked:
/^Subject.*(sex|viagra|seduce|naked)/ FILTER REJECT:
Спам фильтры
Можно воспользоваться различными спам-фильтрами как, например, spamassassin.
Добавить адрес и/или домен в белый список можно в файле /etc/spamassassin/local.cf в конце в формате:
whitelist_from postmaster@domain1.ru whitelist_from *@domain2.ru
- http://lists.altlinux.ru/pipermail/sisyphus/2003-October/029572.html - небольшой разбор полётов по работе spamassassin
- http://www.informit.com/articles/article.aspx?p=375704&seqNum=2 - как прикрутить spamassassin к Postfix (на англ)
Механизм серых списков
Можно использовать механизм серых списков (grey listing). Принцип его работы - временный отказ в принятии почты в надежде, что спамеры не будут повторять отправку. Не очень хороший способ, поскольку замедляет доставку почты и увеличивает трафик самого Интернета, так как почтовые сервера вынуждены отправлять одно сообщение несколько раз, но трафик от провайдера уменьшиться на величину объёма отказанных писем. Пока этот способ довольно действенен.
Postgrey - одно из таких приложений.
- http://www.greylisting.org/ - о технологии серых списков на английском
- http://isg.ee.ethz.ch/tools/postgrey/ - Postgrey - Postfix Greylisting Policy Server
- http://www.postfix.org/SMTPD_POLICY_README.html#greylist - Postfix SMTP Access Policy Delegation
Анализаторы журналов
- Isoqlog - творчество турецких коллег
Веб почта
SquirrelMail
Официальный сайт http://www.squirrelmail.org
Если возникли ошибки, то решение может быть в статьях PHP, Apache
Установка на Debian
# apt-get install squirrelmail
После установки файлы веб итрефейса находятся в /usr/share/squirrelmail. Его нужно подключить в конфигурационном файле Apache в одном из виртуальных хостов, либо в основном /etc/apache2/apache2.conf:
Include /etc/squirrelmail/apache.conf
Настраиваем приложение (см ниже пример конфигурации):
# /usr/share/squirrelmail/config/conf.pl
Проверим конфигурацию из браузера http://mydomain.ru/squirrelmail/src/configtest.php И можно уже проверять сам сервис по адресу http://mydomain.ru/squirrelmail/ Настраиваем локализацию на utf8. Проверяем есть ли эта кодировка в списке:
# locale -a | grep ru ru_RU.koi8r russian
Подключаем
# localedef ru_RU.UTF-8 -i ru_RU -fUTF-8 # locale -a | grep ru ru_RU.koi8r ru_RU.utf8 russian
Установка на Alt Linux
# apt-get install squirrelmail squirrelmail-i18n
Судя по тому как установился пакет из ропозитория, он был собран для предыдущих версий Alt Linux. В общем это не страшно, т.к. изменения будут незначительные. Так как в Alt Linux с 4-й версии пользователю apache принадлежит управление альтераторами на защищённом web сайте, а остальные сайты управляются пользователем apache2 и лежат в отдельном месте, то переместим сайт веб почты из /var/www/html/squirrelmail/ в /var/www/apache2/html/squirrelmail/ и поменяем владельца некоторых каталогов:
# chown root.apache2 /var/lib/squirrelmail/prefs/ # chown root.apache2 /var/spool/squirrelmail/attach/
Настраиваем приложение конфигуратором:
# /var/www/apache2/html/squirrelmail/config/conf.pl
Проверить конфигурацию http://mydomain.ru/squirrelmail/src/configtest.php Исправляем /etc/courier-imap/imapd как советуют:
IMAP_MOVE_EXPUNGE_TO_TRASH=0
Для руссификации ничего делать не пришлось. Можно проверять наш сервис по адресу http://mydomain.ru/squirrelmail
Меняем URL
Если захотим дать доступ к SquirrelMail по другому URL, например, http://mydomain.ru/webmail/, достаточно будет подправить /etc/squirrelmail/apache.conf:
Alias /webmail /usr/share/squirrelmail
Пример настроек
// Серверные настройки General ------- 1. Domain : mydomain.ru 2. Invert Time : false 3. Sendmail or SMTP : Sendmail A. Update IMAP Settings : mydomain.ru:143 (courier) B. Change Sendmail Config : /usr/sbin/sendmail // Конфигурация Папок Folder Defaults 1. Default Folder Prefix : 2. Show Folder Prefix Option : false 3. Trash Folder : INBOX.Trash 4. Sent Folder : INBOX.Sent 5. Drafts Folder : INBOX.Drafts 6. By default, move to trash : true 7. By default, move to sent : true 8. By default, save as draft : true 9. List Special Folders First : true 10. Show Special Folders Color : true 11. Auto Expunge : true 12. Default Sub. of INBOX : true 13. Show 'Contain Sub.' Option : false 14. Default Unseen Notify : 2 15. Default Unseen Type : 1 16. Auto Create Special Folders : true 17. Folder Delete Bypasses Trash : false 18. Enable /NoSelect folder fix : false // Включаем какие нужно плагины Plugins Installed Plugins 1. translate 2. squirrelspell 3. calendar 4. newmail 5. mail_fetch 6. filters 7. delete_move_next // Русифицируем Language preferencesВставляйте сюда неотформатированный текст. 1. Default Language : ru_RU 2. Default Charset : utf8 3. Enable lossy encoding : false
WebMail
http://www.net-systems.ru/text/read/webmail.html
Настраивается через веб интерфейс http://mydomain.ru/webmail/install/
Точка входа http://mydomain.ru/webmail/
Обнаружены следующие недостатки:
- Проблемы с кодировкой некоторых приходящих писем и вложений.
- Долго открывает форму нового сообщения.
- Не смог настроить отправку писем.
Horde
Точка входа http://mydomain.ru/horde3/
# apt-get install imp4
При установке удаляется модуль libapache2-mod-php4, но потом его можно опять поставить
Хорошая инструкция по установке на Debian http://wiki.debian.org/Horde
Возникли проблемы с выполнением скриптов php - разбираться не стал.
RoundCube
Судя по скриншотам отзывам и описанию - вещь стоящая...
Полезные ссылки
Семь веб-интерфейсов к электронной почте
Разные заметки
- Журналы Postfix находятся в /var/log/maillog
- Результаты обработки писем лежат в /var/spool/postfix
- В Debian Postfix ведёт журнал в /var/spool/mail.err, mail.warn
- Чтобы нашим почтовым сервером не злоупотребляли посторонние люди ограничим использование команды ETRN только пользователями нашей сети:
smtpd_etrn_restrictions = permit_mynetworks, reject
Подробное описание значения и использования этой команды можно найти на официальном сайте Postfix.
-Показать какие письма находятся в очереди на отправку
# mailq
попытаться доставить все письма из очереди
# postqueue -f
Работа над ошибками
Recipient address rejected: Access denied
При добавлении антивирусного или антиспамного сервиса в Postfix может в журнале появиться ошибка:
(host 127.0.0.1[127.0.0.1] said: 554 <user@domain.ru>: Recipient address rejected: Access denied (in reply to RCPT TO command))
а пользователь получает "Undelivered Mail Returned to Sender" с ошибкой:
Diagnostic-Code: X-Postfix; host 127.0.0.1[127.0.0.1] said: 554
Это происходит когда в список mynetworks не включён loopback интерфейс, т.е. сеть 127.0.0.0/8
554 <user@domain.ru>: Relay access denied
Если получаем ответное письмо с таки сообщением, то возможно не указаны нужные сети в mynetworks, например:
mynetworks = 10.0.0.0/24 10.1.0.0/16
Полезные ссылки
- http://www.postfix.org/documentation.html - официальная документация по различным темам. Очень полезно!
- http://www.postfix.org/postconf.5.html - описание конфигурационных параметров Postfix
- http://www.postfix.org/FILTER_README.html - описание Postfix After-Queue Content Filter
- http://onix.opennet.ru/content/view/23/26/ - Архетиктура Postfix
- http://www.irbs.net/internet/postfix/ - полезныей troubleshoot (решение проблем) по Postfix
- http://postfix.state-of-mind.de/patrick.koetter/smtpauth/ - подробно рассмотрена аутентификация в Postfix