FreeBSD - статьи

         

Настройка MTA/MDA


в этом разделе мы начнём с конца и поставим сначала то, что нужно основному "виновнику торжества" - postfix'у.

cyrus-sasl2

для начала поставим cyrus-sasl2. в зависимости от свежести вашего дерева портов может быть два варианта. для более старого дерева портов вы можете просто сделать:

cd /usr/ports/security/cyrus-sasl2 make -DWITHOUT_OTP -DWITHOUT_CRAM -DWITHOUT_DIGEST -DWITHOUT_NTLM

перед началом сборки должно вылезти красивое текстовое окошечко с кучей опций, из которых для нас важна только одна. остальные желательно убрать, оставив только:

[X] SASLAUTHD

после того, как cyrus-sasl2 собрался, то стандартно:

make install clean

ежели красивого окошечка не выскакивало, то, значит, у вас свежие порты и после всех этих действий у вас все ещё не хватает нужного нам saslauthd. его можно поставить вот таким образом:

cd /usr/ports/security/cyrus-sasl2-saslauthd make install clean

но повторяю, что данный порт есть только в новых портах, в старых портах он включён в порт cyrus-sasl2 и не нужен. теперь поправим конфиг для активации этого самого saslauthd в postfix. редактируем /usr/local/lib/sasl2/smtpd.conf:

pwcheck_method: saslauthd

теперь надо поставить pam-mysql. это делается стандартно:



cd /usr/ports/security/pam-mysql make install clean

после прочтения и осмысливания /usr/local/share/doc/pam_mysql/Readme добавим в /etc/pam.conf следующие строчки:

smtp auth sufficient pam_mysql.so user=mailer passwd=mailer_password db=mail table=users usercolumn=login passwdcolumn=password crypt=1 where=expired=0 smtp account sufficient pam_mysql.so user=mailer passwd=mailer_password db=mail table=users usercolumn=login passwdcolumn=password crypt=1 where=expired=0

не забудем запустить saslauthd:

/usr/local/etc/rc.d/saslauthd.sh start ps ax|grep sasl 363 ?? IWs 0:00,00 /usr/local/sbin/saslauthd -a pam 367 ?? IW 0:00,00 /usr/local/sbin/saslauthd -a pam 368 ?? IW 0:00,00 /usr/local/sbin/saslauthd -a pam 369 ?? IW 0:00,00 /usr/local/sbin/saslauthd -a pam 370 ?? IW 0:00,00 /usr/local/sbin/saslauthd -a pam


если результат примерно такой, то значит всё прошло нормально, cyrus-sasl2 поставлен и теперь можно перейти к настройке postfix.

postfix2

как обычно:

/usr/ports/mail/postfix make install clean

должна вылезти красивая и совсем не юниксоидная ;) менюшка, в которой нам надо выбрать следующие опции:

[X] SASL2 [X] TLS [X] MySQL

если какой-то из опций у вас не обнаружилось, поздравляю, у вас ну очень старые порты и надо обновлять. как это делать - не в этом how-to да и вообще ни в каком, читайте handbook - там всё написано. после установки порт должен сказать, что делать дальше это мы сразу и сделаем. в /etc/rc.conf исправим:

sendmail_enable="NONE"

в /etc/periodic.conf:

daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO"

сделаем симлинк для автоматического запуска postfix во время загрузки системы:

cd /usr/local/etc/rc.d ln -s /usr/local/sbin/postfix postfix.sh

откроем /usr/local/etc/postfix/main.cf в каком-нибудь текстовом редакторе, найдём в его теле и исправим следующие параметры:

default_privs = nobody mynetworks = 127.0.0.0/8 alias_maps = hash:/etc/mail/aliases alias_database = hash:/etc/mail/aliases mail_spool_directory = /var/mail smtpd_banner = $myhostname mail sterver

не торопимся сохранять и закрывать /usr/local/etc/postfix/main.cf, а допишем туда:

# с каким кодом отшивать письма от open relays: maps_rbl_reject_code = 554

# принимать письма от: # авторизованных клиентов # от сетей, указанных в параметре mynetworks # отшивать письма от: # не для наших доменов и пользователей # для хостов, который есть в списках open relays # (подробности на www.ordb.org) smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_rbl_client list.dsbl.org, reject_rbl_client relays.ordb.org, reject_rbl_client dynablock.wirehub.net, reject_rbl_client blackholes.wirehub.net, reject_rbl_client dnsbl.njabl.org



# списки транспортов: transport_maps = mysql:/usr/local/etc/postfix/sql/transport.cf

# куда складывать почту транспорту virtual: virtual_mailbox_base = /var/mail/virtual

# списки почтовых ящиков: virtual_mailbox_maps = mysql:/usr/local/etc/postfix/sql/users.cf

# списки алиасов: virtual_alias_maps = mysql:/usr/local/etc/postfix/sql/aliases.cf

# списки uid и gid пользователей: virtual_uid_maps = mysql:/usr/local/etc/postfix/sql/uids.cf virtual_gid_maps = mysql:/usr/local/etc/postfix/sql/gids.cf

# списки наших доменов, для которых мы принимаем почту relay_domains = $transport_maps

# списки наших пользователей: local_recipient_maps = $virtual_mailbox_maps $virtual_maps $transport_maps

# включаем плагин sasl2 для smtpd авторизации smtpd_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous broken_sasl_auth_clients = yes

# использовать transport layer security для отправки почты # (пока все оставляем закомментаренным, ибо ключей у нас ещё нет) #smtp_use_tls = yes

# наши ключи. генерируются с помощью courier-imap (далее) #smtp_tls_key_file = /usr/local/share/courier-imap/pop3d.pem #smtp_tls_cert_file = $smtp_tls_key_file #smtp_tls_CAfile = $smtp_tls_key_file #smtp_tls_note_starttls_offer = yes

# включать возможность авторизации только в режиме tls #smtpd_tls_auth_only = yes

# использовать tls для приёма почты #smtpd_use_tls = yes #smtpd_tls_loglevel = 1 #smtpd_tls_received_header = yes #smtpd_tls_session_cache_timeout = 3600s #tls_random_source = dev:/dev/urandom

# наши ключи. генерируются с помощью courier-imap (далее) #smtpd_tls_key_file = /usr/local/share/courier-imap/pop3d.pem #smtpd_tls_cert_file = $smtpd_tls_key_file #smtpd_tls_CAfile = $smtpd_tls_key_file

сохраняем /usr/local/etc/postfix/main.cf и напишем maps файлы для mysql:

/usr/local/etc/postfix/sql/transport.cf: user = mailer password = mailer_password dbname = mail table = transport select_field = transport where_field = domain hosts = localhost

/usr/local/etc/postfix/sql/users.cf user = mailer password = mailer_password dbname = mail table = users select_field = maildir where_field = login additional_conditions = and expired = '0' hosts = localhost



/usr/local/etc/postfix/sql/aliases.cf: user = mailer password = mailer_password dbname = mail table = aliases select_field = rcpt where_field = alias hosts = localhost

/usr/local/etc/postfix/sql/gids.cf: user = mailer password = mailer_password dbname = mail table = users select_field = 6 where_field = login additional_conditions = and expired = '0' hosts = localhost

/usr/local/etc/postfix/sql/uids.cf: user = mailer password = mailer_password dbname = mail table = users select_field = 1009 where_field = login additional_conditions = and expired = '0' hosts = localhost

по поводу последних двух файлов нужно заметить, что реально полей для gid и uid в таблицах нет, ибо они все одинаковые и прописаны прямо в параметре select_field. чтобы узнать значения gid и uid для вашей системы, вам нужно посмотреть в /etc/passwd и /etc/group какие uid и gid принадлежат пользователю postfix (которого добавляет порт /usr/ports/mail/postfix) и группе mail. и прописать соответствующие значения в последних двух sql файлах.

если вы всё сделали правильно, то ваш MTA и MDA успешно настроен. теперь нужно создать каталог virtual mailbox base и выставить ему атрибутов:

mkdir -pv /var/mail/virtual chown postfix:mail /var/mail/virtual chmod 770 /var/mail/virtual

теперь можно запускать postfix. запускаем для начала 'postfix check' и смотрим, что он скажет на свою конфигурацию. если всё нормально, то запускаем: 'postfix start'. если postfix на что-то ругнулся, то надо это что-то исправить, к тому же postfix он не настолько злобный и на всякую ерунду не ругается.

ну что ж, настала пора проверить SMTP часть нашего MTA:

telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 raven.elk.ru mail sterver mail from: user@aol.com 250 Ok rcpt to: me@raven.elk.ru 250 Ok data 354 End data with <CR><LF>.<CR><LF> test message . 250 Ok: queued as AB11E334F2 quit 221 Bye Connection closed by foreign host.

если у вас в консоли всё примерно так же, как и выше, то SMTP часть у вас работает нормально.



теперь проверим возможность авторизации:

telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 raven.elk.ru mail sterver ehlo aol.com 250-raven.elk.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-XVERP 250 8BITMIME AUTH PLAIN bWVAcmF2ZW4uZWxrLnJ1AG1lQHJhdmVuLmVsay5ydQBwYXNzd29yZDop 235 Authentication successful

строка 'bWVAcmF2ZW4uZWxrLnJ1AG1lQHJhdmVuLmVsay5ydQBwYXNzd29yZDop' справедлива для логина 'me@raven.elk.ru' и пароля 'password:)'. генерируется эта строчка следующим образом:

perl -MMIME::Base64 -e \ 'print encode_base64("логин\0логин\0пароль");'

если диалог с почтовым сервером прошёл как показано выше, то значит авторизация работает. если же нет, то, читайте /var/log/maillog. вероятно, вы что-то не так сделали и очень вероятно, что чтение данного лога поможет выяснить что же конкретно неправильно.




  • Содержание раздела