Posts filed under ‘Mail Server’

amavis:whitelist моего домена не работает

Редкий, может быть, случай, но забавный. И так, и эдак добавляла мой собственный домен в whitelist amavis. И вроде тестировала удачно: отправляла EICAR-спам со своего ящика и он пропускался. А потом хоп — рассылка от внутренней вики вновь и вновь получала метку **SPAM**!
Уже и spamassasin отдельно понастраивала, все равно хоть плачь.
А потом осенило. вики-то слала письма от имени www-data@example.com. Сама себе такой адрес придумала. Но в базе пользователей www-data нет! Честный amavis решил, что раз пользователя такого нет, хотя домен и надежный, то все равно это спам.
Добавила пользователя www-data в базу и все. Проблема решилась.

Март 6, 2012 at 12:44 Оставьте комментарий

amavis whitelist. Ubuntu

Коротко о том, как исключить собственный почтовый домен из проверки на спам.
1. В Ubuntu нет amavisd.conf, но в папке /etc/amavis/conf.d есть целый набор конфигурационных файлов. Можно заполнять их все по разделам, а можно все указывать в 50-user.
2. В нем мы и укажем необходимые директивы.

$mydomain = 'my.domain'; # обслуживаемый домен
$pax='pax';
@mynetworks = qw( 127.0.0.0/8 [::1] 192.168.11.0/24 ); # определяем свои сети
@local_domains_acl = ( ".$mydomain",".my.domain" );
$policy_bank{'MYNETS'} = {  # что делать с письмами из @mynetworks 
   bypass_spam_checks_maps   => [1],  # or: don't spam-check internal mail
   bypass_banned_checks_maps => [1],  # don't banned-check internal mail
};

3. Ничего не заработает, пока в postfix в master.cf не добавится lmtp_send_xforward_command=yes, если используется lmtp. Или smtp_send_xforward_command=yes, если smtp

amavis unix - - - - 2 lmtp
     -o smtp_data_done_timeout=1200
     -o disable_dns_lookups=yes
     -o lmtp_send_xforward_command=yes

Февраль 21, 2012 at 13:52 Оставьте комментарий

fetchmail: connection to localhost:smtp [::1/25] failed

Если у вас есть fetchmail, то вполне вероятно вы ловите у себя такое дело в логах:

Feb 14 14:59:08 jimmi fetchmail[18113]: connection to localhost:smtp [::1/25] failed: Connection refused. 

А это все потому, что fetchmail ломится по IPv6 в 25 порт. Механизм его работы следующий: как только fetchmail принял сообщение, он пытается передать его локальному MDA на 25 порт.
Можете проверить, слушает ли ваш почтарь ipv6:

kakabba@jimmi:~$ telnet ::1 25
Trying ::1...
telnet: Unable to connect to remote host: Connection refused

Запретить fetchmail использовать ipv6 я так и не смогла. Вроде бы можно в /etc/fetchmailrc указать опцию smtphost 127.0.0.1, чтобы заставить использовать только ipv4-localhost, но у меня это не дало ничего.
Поэтому я сделала вот что:

kakabba@jimmi:~$ sudo cat /etc/hosts
127.0.0.1       localhost
127.0.0.1       jimmi
#это внутренний почтовый домен:
127.0.0.1       internal.mail
192.168.11.86   jimmi
# The following lines are desirable for IPv6 capable hosts
::1     internal.mail localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Я удалила оттуда из ::1 internal.mail и localhost. Оставила там только ip6-localhost и ip6-loopback.

Февраль 14, 2012 at 15:28 Оставьте комментарий

SASL: Postfix + Dovecot

Для начала: зачем нужен SASL? Это набор правил. Выполнение которых дает прошедшему авторизацию бонусы. Начиная от просто отправки писем и заканчивая тем, что Postfix может разрешить удаленным клиентам(не принадлежащим mynetworks) отправлять письма на чужие домены, а не только на обслуживаемые Postfix. Таким образом, SMTP в частности защищается от возможности стать опенрелеем. (далее…)

Февраль 10, 2012 at 15:32 Оставьте комментарий

postfix+dovecot: virtual alias

Итак: есть почтовый сервер, в котором MTA — Postfix, MDA — Dovecot. T — transfer, D — delivery.
Пользователей больше одного, поэтому они сделаны виртуальными и хранятся в MySQL.
Соответственно в main.cf postfix есть строчки, касающиеся запросов к базе:
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Эти файлы конфигураций содержат информацию для подключения к базе и сам запрос. В результате запросов postfix получает из базы домены, которые должен обслуживать, и пользователей.
Затем может понадобится переадресация. Для внешних доменов я рекомендую использовать generic.
А здесь речь пойдет о переадресации писем на внутренние адреса. Мне это понадобилось для создания списка рассылки без применения специальных пакетов типа Mailman и пр.
Цель: при отсылке письма на какой-то внутренний почтовый адрес, оно рассылается целому списку пользователей. При этом на сам адрес рассылки письмо не приходит. Это просто alias.
Средство: использовать virtual_alias_maps. Только осторожнее со старыми postfix старше 2.1!
Добавляем в main.cf строчку
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Соответственно в базе MySQL должна быть таблица, содержащая aliasы.
Для тотальной рассылки по всем пользователям в ней должна быть одна запись:
ключ — адрес_рассылки, результат запроса — список_адресов-абонентов_рассылки_через_запятую.
Чтобы сформировать строчку с абонентами рассылки, советую снять дамп с таблицы виртуальных пользователей через phpmyadmin в CSV, а затем скриптом обработать — получить строку из всех адресов через запятую. Также стоит узнать ее размер и соответственно выставить длину строки в таблице alias.
И последнее: чтобы все заработало, необходимо удостовериться, что в main.cf НЕТ строки
receive_override_options = no_address_mappings
Это связано с механизмом работы postfix, который позволяет добавлять внешние фильтры контента письма (типа amavis). И соответственно эта опция запрещает манипуляции с исходным адресом письма: к нему относятся virtual aliasing, canonical, bcc и тд
Прочитать об этом можно здесь.
Интересный факт: если эту опцию оставить, создать alias и пытаться отослать письмо на адрес рассылки, то dovecot создаст mailbox для этого адреса и положит туда письмо, хотя пользователя такого не существует в таблице пользователей! То есть по факту dovecot письмо доставил — это будет отражено в логах. Но никто никогда его не получит при помощи postfix — пользователя-то такого нет.

Январь 24, 2012 at 17:14 Оставьте комментарий

postfix+dovecot: root@localhost мусорит в логах

Linux любит общаться сам с собой с помощью писем. Всякие cron.daily и прочие существа имеют что сказать. И иногда это приносит неприятности. Допустим, вы открыли /var/log/mail.log (если у вас Ubuntu как у меня). А там через какие-то промежутки времени возникают такие сообщения:

Jan 10 13:04:51 jimmi deliver(root): chdir(/root) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): stat(/root/.dovecot.sieve) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): chdir(/root) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): stat(/root/.dovecot.sieve) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): mkdir(/home/vmail//root/cur) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +w perm: /home/mail_master/)
Jan 10 13:04:51 jimmi deliver(root): msgid=<20110106042451.B72D8BF48@localhost>: save failed to INBOX: Internal error occurred. Refer to server log for more information. [2011-01-10 13:04:51]
Jan 10 13:04:51 jimmi deliver(root): mkdir(/home/mail_master//root/cur) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +w perm: /home/mail_master/)
Jan 10 13:04:51 jimmi deliver(root): msgid=<20110108035902.665C3C0C7@localhost>: save failed to INBOX: Internal error occurred. Refer to server log for more information. [2011-01-10 13:04:51]
Jan 10 13:04:51 jimmi postfix/local[12515]: 665C3C0C7: to=<root@localhost>, orig_to=<root>, relay=local, delay=191150, delays=191150/0.02/0/0.02, dsn=4.3.0, status=deferred (temporary failure)

Это происходит, когда у root нет alias. (далее…)

Январь 10, 2012 at 14:26 Оставьте комментарий

Fetchmailrc из passwd

Я использую Fetchmail вместе с postfix relayhost_map, чтобы объединить два аккаунта электронной почты: реальный(например, на gmail) и виртуальный, который обслуживается postfix. Fetchmail собирает письма с реальных аккаунтов, и для каждого нужно указать хост, логин и пароль.
Если такой аккаунт один, то несложно и руками забить, но если их хотя бы 5, то уже становится лениво. Тем более, что один раз я уже подобную работу делала, когда создавала файл passwd для postfix.
(далее…)

Август 11, 2011 at 16:26 Оставьте комментарий

Предыдущие записи