Kurozora, ошибаешься! Ты взаимодействуешь с ними на том же уровне, что и мы с тобой , здесь и сейчас. Это я про гугл.
С сендмайлом я переборщил, но если ты документацию по нему почитаешь ( ~600-700 стр. ) то поймёшь - такие заморочки и конфиги в натуре гомик псал - настолько там всё "через жопу".
Настраиваем 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