Добрый вечер всем.
В наследство от прежнего админа досталась довольно сложно (для меня)
настроенная связка почтовых серверов.
Сам не могу осилить все настройки.
У меня опыта практически нет.
Пытаюсь сам разобраться, но многие вещи понять не могу.
Буду очень признателен за помощь.
Итак по порядку.
Есть сервак smtp.domain.ru, на котором крутится SLES 10.
Вместо штатного postfix установлен sendmail.
Но это ещё не всё =)
На нём же стоит IBM Lotus Domino 7.
Этот сервер по сути выполняет роль спам-фильтра.
Sendmail принимает почту, фильтрует с помощью procmail,
проверяет на вирусы с помощью clamav, а потом отсылает
Lotus-у, который проводит повторную проверку на вирусы
и спам с помощью ScanMail от Trend Micro.
После чего отсылает почту на другой физический сервер,
где работает только Lotus. Пользователи корпоративной сети
подключаются к этому 2-му серверу и забирают почту.
У меня задача разобраться с первым сервером.Начну с sendmail.
Запускается он суперсервером xinetd
с параметрами -С /etc/mail/sendmail1.cf -L sm-mta -bs
Вот его конфиг (/etc/mail/linux1.mc):
divert(-1)
# To enable these options just run m4 /etc/mail/linux1.mc > /etc/mail/sendmail1.cf
include(`/usr/share/sendmail/m4/cf.m4')
divert(0)
VERSIONID(`@(#)Setup for SuSE Linux 0.5 (SuSE Linux) 2004/04/02')
OSTYPE(`suse-linux')
FEATURE(`generics_entire_domain')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
DOMAIN(`generic')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
define(`confDEF_CHAR_SET', `KOI8-R')
define(`confMAX_MESSAGE_SIZE', `15728640')
define(`confMAX_MIME_HEADER_LENGTH', `512/256')
define(`ESMTP_MAILER_ARGS', `TCP hub.domain.ru 2025')
FEATURE(nouucp, `reject')
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')
FEATURE(`blacklist_recipients')
FEATURE(`delay_checks')
FEATURE(`dnsbl', `bl.spamcop.net', `"Spam blocked - see: http://spamcop.net/bl.shtml?"$&{client_addr}')
FEATURE(`dnsbl', `sbl-xbl.spamhaus.org', `Rejected - see http://www.spamhaus.org/')
MAILER(`local')
MAILER(`smtp')
MAILER(`procmail')
define(`confAUTH_MECHANISMS', `LOGIN')
TRUST_AUTH_MECH(`LOGIN')
INPUT_MAIL_FILTER(`clamav', `S=inet:3311@127.0.0.1, F=, T=S:4m;R:4m')
LOCAL_RULESETS
HMessage-Id: $>CheckMessageId
SCheckMessageId
R< $+ @ $+ > $@ OK
R$* $#error $: 553 Header Error
Основные на мой взгляд настройки:
используем local-host-names для приёма почты только для домена domain.ru (внутри одна строка domain.ru),
TCP hub.domain.ru 2025 - дополнительная опция для /etc/mail/mailertable
(внутри mailertable: domain.ru smtp:hub.domain.ru).
То есть всё, что приходит на domain.ru, пересылаем Лотусу (hub.domain.ru) на порт 2025 по smtp.
Также видно, что подключается procmail и clamav.
Внутри /etc/mail/virtusertable строчка @domain.ru admin
То есть вся почта пересылается пользователю admin.
Внутри crontab есть следующая строчка
*/10 * * * * root sendmail -Am -L mailqueue -qf
То есть каждые десять минут запускаем sendmail для обработки накопившейся очереди.
Обработка писем procmail-ом достаточно сложная, с десяток листов A4 рецептов
с многоуровневой проверкой на спам и назначением веса письму (вероятность спама).
Обработка рецептами осуществляется в /etc/procmailrc
Доставка средствами procmail осуществляется в /home/admin/.procmailrc
В опциях procmail есть такой параметр: SENDMAILFLAGS="-Am -oi"
Основное там следующее: если не явный спам - переслать пользователею
(в /home/admin/Maildir/.username), если пользователя не существует
в ldap лотуса - отправить письмо в /dev/null
Вкратце всё.
Ах да. Ещё поднят SASL, который проводит аутентификацию по LDAP, это так,
для полноты картины.
Теперь буду задавать вопросы по поводу тех моментов, которые я не совсем понимаю.
Но для начала приведу пример лога sendmail-а, при отправке письма на этот сервер с
ящика на mail.ru
Mar 20 16:45:16 smtp sm-mta[25832]: o2KDjGqq025832: from=<me@inbox.ru>, size=630, class=0, nrcpts=1, msgid=<E1NsyzL-0006vg-00.me86-inbox-ru@f249.mail.ru>, proto=ESMTP, relay=f249.mail.ru [217.69.128.174]
Mar 20 16:45:16 smtp sm-mta[25832]: o2KDjGqq025832: Milter change (add): header: X-Virus-Scanned: clamav-milter 0.95.1 at smtp
Mar 20 16:45:16 smtp sm-mta[25832]: o2KDjGqq025832: Milter change (add): header: X-Virus-Status: Clean
Mar 20 16:45:16 smtp sendmail[25885]: o2KDjGcc025885: from=admin, size=937, class=0, nrcpts=1, msgid=<E1NsyzL-0006vg-00.me86-inbox-ru@f249.mail.ru>, relay=admin@localhost
Mar 20 16:45:16 smtp sendmail[25888]: o2KDjGcc025885: to=me2@domain.ru, ctladdr=admin (1000/1002), delay=00:00:00, xdelay=00:00:00, mailer=smtp, pri=120937, relay=hub.domain.ru., dsn=4.0.0, stat=Sent
Mar 20 16:45:16 smtp sm-mta[25853]: o2KDjGqq025832: to=<me2@domain.ru>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30889, dsn=2.0.0, stat=Sent
Ещё приведу одно из писем у рута в папке
Return-Path: <root@smtp.domain.ru>
Received: from smtp.domain.ru (localhost [127.0.0.1])
by smtp.domain.ru (8.14.1/8.14.1/SuSE Linux 0.8) with ESMTP id o2KEDlIM031928
for <root@smtp.domain.ru>; Sat, 20 Mar 2010 17:13:47 +0300
Received: (from root@localhost)
by smtp.domain.ru (8.14.1/8.14.1/Submit) id o2KDgdss023924;
Sat, 20 Mar 2010 16:42:39 +0300
Date: Sat, 20 Mar 2010 16:42:39 +0300
Message-Id: <201003201342.o2KDgdss023924@smtp.domain.ru>
From: root@smtp.domain.ru
To: root@smtp.domain.ru
Subject: Cron <root@smtp> sendmail -Am -L mailqueue -qf
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
X-Virus-Scanned: clamav-milter 0.95.1 at smtp
X-Virus-Status: Clean
timeout writing message to hub.domain.ru.: Broken pipe
1. Главный вопрос: хочу понять всю цепочку, которую проходит письмо.
Опишу примерно как понимаю я. Уверен, что не совсем правильно понимаю, а может быть
вообще неверно. Итак. Пришло письмо. Суперсервер xined создал процесс sendmail,
который кладёт письмо в /root/Maildir/, потом отдаёт письмо на проверку clamav,
пересылает в соответстии с virtusertable письмо в папку admin-а (/home/admin/Maildir/tmp)
Потом видимо запускается procmail, который отрабатывает папку /home/admin/Maildir/new
и раскладывает почту юзерам по их папкам /home/admin/Maildir/.username и удаляя спам.
Где тут работает очередь /var/spool/mqueue?
2. Читал, что MAILER(`procmail') должна стоять перед остальными мэйлерами, а тут
она вконце, почему?
3. Что вообще значит MAILER(`local') ? Что значит последняя строчка в приведённом логе?
4. Таких писем, как я привёл, довольно много. Я про Broken pipe. В чём их причина?
Я так понимаю, что это ошибка при отсылке лотусу. Но почему она возникает?