Часто возникает ситуация, когда для пользователей, разъезжающих по командировкам, нужно организовать почтовый релэй.
Проблема в том, что штатный для FreeBSD sendmail настраивается на прием почты только от доверенных IP-адресов (или IP-сетей), и заранее неизвестно, с какого IP-адреса пользователь будет отправлять почту.
Как одно из решений - выдать такому пользователю логин/пароль и настроить sendmail на прием почты, основываясь на этих данных, независимо от IP-адреса, с которого пришел пользователь. Собственно рецепт настройки sendmail'a я и привожу здесь.
Благодарность за рецепт уходит Victor Prylipko <Victor.Prylipko АТ f4.n4635.z2.fidonet.org> из фидо-конференции ru.unix.bsd
Дано:
FreeBSD 4.8 STABLE;
sendmail - штатный.
Требуется:
настроить авторизацию клиента использующего Outlook Express при приеме почты от него, нужно для возможности принимать почту от клиента, если он отправляет почту с "чужих" IP-адресов.
1. Ставим из портов cyrus-sasl2 и cyrus-sasl2-saslauthd
# portinstall cyrus-sasl2 # portinstall cyrus-sasl2-saslauthd
2. Из /etc/defaults/make.conf копируем строки в /etc/make.conf
SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2 SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl2
3. Пересобираем sendmail
# cd /usr/src/lib/libsm # make clean && make obj && make depend && make # cd /usr/src/lib/libsmutil # make clean && make obj && make depend && make # cd /usr/src/usr.sbin/sendmail # make clean && make obj && make depend && make && make install
4. Добавляем строку в /etc/rc.conf
sasl_saslauthd_flags="-a sasldb"
5. Запускаем демон SASL-а
# /usr/local/etc/rc.d/saslauthd.sh start
Этот пункт рецепта спонсирован Slava Vovk aka vovk АТ km.ua
6. Создаем Sendmail.conf
# echo pwcheck_method: saslauthd > /usr/local/lib/sasl2/Sendmail.conf
Там же можно указать, где лежит srvtab:
# echo srvtab: /etc/srvtab >> /usr/local/lib/sasl2/Sendmail.conf
7. Добавляем сроки в ваш .mc файл
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
В принципе можно ограничится только одним методом LOGIN, если нужно только для Outlook Express (других клиентов я не пробовал).
TRUST_AUTH_MECH(`LOGIN')dnl define(`confAUTH_MECHANISMS', `LOGIN')dnl
8. Генерим sendmail.cf и устанавливаем его
# cd /etc/mail # make install restart
9. Заводим пользователя в базу SASL
# saslpasswd2 -a sendmail newuser
проверка, что пользователь добавлен:
# sasldblistusers2
выдаст список пользователей в базе.
10. Создаем пустой файл /etc/srvtab чтобы sendmail в логах не ругался, хотя можно этого и не делать.
11. В настройках Outlook Express - Tools | Accounts… | нужный аккаунт | Properties | Servers | ставим "галочку" My server requires authentication и жмем кнопку Settings… вводим Account name и Password которые занесли в базу в 8-м пункте.
Все, почта от пользователя принимается невзирая на /etc/mail/access.db