Сервер в кармане, или просто о сложном!

главная - Статьи - Почта - Sendmail

Установка и настройка sendmail

Теги: sendmail Почтовый сервер

Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.

Установка sendmail

Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).

cd /usr/ports/mail/sendmail-sasl
make install

После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку

SENDMAIL_CF_DIR=	/usr/local/share/sendmail/cf

Если до этого стоял более старый sendmail, устанавливаем файл submit.cf

make submit.cf

Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):

mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/030.sendmail.sh

Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды

make mailer.conf

либо вручную, изменив файл mailer.conf:

sendmail	/usr/local/sbin/sendmail
send-mail	/usr/local/sbin/sendmail
mailq		/usr/local/sbin/sendmail
newaliases	/usr/local/sbin/sendmail
hoststat	/usr/local/sbin/sendmail
purgestat	/usr/local/sbin/sendmail

На этом установка sendmail окончена. Осталоь столько запустить его командой

/usr/local/etc/rc.d/030.sendmail.sh start

sendmail sm-msp-queue

Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.

Настройка sendmail

Будем считать, что мы настраиваем два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail c поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:

  • freebsd.mc
  • aliases
  • access
  • local-host-names
  • virtusertable

aliases

Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида

имя addr_1, addr_2, addr_3...

Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку

root:   admin@perldoc.ru

Вся локальная почта, адресованная пользователю root, теперь будет приходить на адрес admin@perldoc.ru.

access

В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста

localhost.localdomain   RELAY
localhost               RELAY

local-host-names

В этом файле мы храним названия доменов, для которых наш сервер должен обрабатывать почту. Поскольку мы хотим использовать наш сервер для двух виртуальных почтовых доменов perldoc.ru и perlfaq.ru, пропишем их в файл:

perldoc.ru
perlfaq.ru

virtusertable

В файле virtusertable мы указываем sendmail, куда направлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru.

stellar@perldoc.ru	stellar-perldoc.ru
admin@perldoc.ru	admin-perldoc.ru
@perldoc.ru		error:nouser No such user here

stellar@perlfaq.ru	stellar-perlfaq.ru
@perlfaq.ru		error:nouser No such user here

Вся почта, пришедшая на адрес stellar@perldoc.ru будет направляться в почтовый ящик пользователя stellar-perldoc.ru, а почта, пришедшая на admin@perldoc.ru, соответственно будет отсылаться пользователю admin-perldoc.ru. Тоже самое будет и для домена perlfaq.ru. Если на наш домен будет прислана почта с несуществующем пользователем, сработает строчка

@perldoc.ru		error:nouser No such user here 

и sendmail откажется принимать такое сообщение.

freebsd.mc

Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc

Вот примерный вид конфигурационного файла:

1  divert(0)
2  VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $')
3  OSTYPE(freebsd4)
4  DOMAIN(generic)
5
6  FEATURE(access_db, `hash -o -T /etc/mail/access')
7  FEATURE(blacklist_recipients)
8  FEATURE(local_lmtp)
9  dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable')
10 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
11 
12 dnl Uncomment to allow relaying based on your MX records.
13 dnl NOTE: This can allow sites to use your server as a backup MX without
14 dnl       your permission.
15 dnl FEATURE(relay_based_on_MX)
16 
17 dnl DNS based black hole lists
18 dnl --------------------------------
19 dnl DNS based black hole lists come and go on a regular basis
20 dnl so this file will not serve as a database of the available servers.
21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/
22 
23 dnl Uncomment to activate Realtime Blackhole List
24 dnl information available at http://www.mail-abuse.com/
25 dnl NOTE: This is a subscription service as of July 31, 2001
26 FEATURE(dnsbl)
27 dnl Alternatively, you can provide your own server and rejection message:
28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} "
rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')
29 
30 dnl Dialup users should uncomment and define this appropriately
31 dnl define(`SMART_HOST', `your.isp.mail.server')
32 
33 dnl Uncomment the first line to change the location of the default
34 dnl /etc/mail/local-host-names and comment out the second line.
35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
36 define(`confCW_FILE', `-o /etc/mail/local-host-names')
37 
38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4
39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet')
40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6')
41 
42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
43 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
44 define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl
45 FEATURE(`no_default_msa')dnl turn off default entry for MSA
46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
47 
48 define(`confMAX_RCPTS_PER_MESSAGE', `10')
49 define(`confMAX_MESSAGE_SIZE', `1048576')
50
51 define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
52 define(`confMAX_MIME_HEADER_LENGTH', `256/128')
53 define(`confNO_RCPT_ACTION', `add-to-undisclosed')
54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
55 MAILER(local)
56 MAILER(smtp)

В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке - имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке - названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48). Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо "your.isp.mail.server" указать IP адрес или имя SMTP сервера провайдера.

Запуск и тестирование

Теперь, когда почти все сделано, нам надо пересобрать заново файл конфигурации sendmail и обновить базы данных. Делается это следующим набором команд:

cd /etc/mail
rm *.db
rm freebsd.cf
make all
make install

Результатом будет нечто вроде этого:

/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db < virtusertable chmod 0640 virtusertable.db /usr/sbin/makemap hash access.db < access chmod 0640 access.db /usr/sbin/sendmail -bi /etc/mail/aliases: 26 aliases, longest 18 bytes, 276 bytes total chmod 0640 /etc/mail/aliases.db install -m 444 freebsd.cf /etc/mail/sendmail.cf install -m 444 freebsd.submit.cf /etc/mail/submit.cf

Теперь перезапускаем sendmail

/usr/local/etc/rc.d/030.sendmail.sh stop
/usr/local/etc/rc.d/030.sendmail.sh start

и тестируем:

telnet localhost 25

Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 localhost.my.domain ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Dec 2002 13:31:56 +0300 (MSK) EHLO localhost 250-localhost.my.domain Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-DELIVERBY 250 HELP QUIT 221 2.0.0 localhost.my.domain closing connection

Наличие строчки "250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN" говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:

saslpasswd2 admin-perldoc.ru

Password:
Again (for verification):

Вводим пароль пользователя и проверяем:

sasldblistusers2

 admin-perldoc.ru@genius: userPassword 

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

Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация

Выделяем чекбокс "Аутентификация SMTP (RFC-2554)".
Переключаем кнопку "Использовать параметры, указанные ниже."
Вводим имя пользователя и пароль, которые создали при помощи saslpasswd2.
Пользователь: admin-perldoc.ru@genius.
Пароль: *********

(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс "Требовать безопасную (MD5) аутентификацию".
 

В том случае, если используется MS Outlook или другой почтовый клиент, в котором нет безопасной аутентификации (DIGEST-MD5, CRAM-MD5), необходимо использовать аутентификацию по методам PLAIN или LOGIN. При этом в качестве имени пользователя надо использовать имя пользователя БЕЗ добавленного имени машины. В нашем случае имя пользователя будет выглядеть так: admin-perldoc.ru.

После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:

Dec 30 13:54:41 genius sm-mta[77570]: AUTH=server, relay=xxx.yyy.zzz.kkk [xxx.yyy.zzz.kkk],
	authid=admin-perldoc.ru@genius, mech=CRAM-MD5, bits=0
Поддерживается http://stellar.df.ru

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?