В свое время сталкивался с такой проблемой и искал способ ее разрешения
Найденное решение используется c тех пор
У меня кстати тоже стоит FreeBSD, Postfix на Maildir, проверяет почту drwebТут предлагалось прописать IP-адрес в mynetworks
Это не выход - потому что внешние пользователи могут иметь произвольные IP
Предлагалось проверять mail from и если адрес имеет вид username@mydomain, то тогда разрешать релеинг.
Ранее я применял именно такой подход, но у него плохая security - любой может поставить mail from и отправлять через ваш сервер почту.
Сейчас спамеры кстати так и делают :)
В известном фильтре ORBS одна из проверок для SMTP как раз проверяет
- нельзя ли через вас послать почту таким образом.
Используется авторизация smtp auth через ssl/tls.
С точки зрения пользователя чтобы он мог отправлять почту из дома через сервер
нужно настроить почтовый account:
pop3/imap - mail.server.name
pop3 или imap over ssl = yes
smtp - mail.sever.name
smtp over ssl = yes
Использовать smtp auth = yes
логин пароль для smtp auth - такие же как для incoming connection
На сервере:
Для авторизации sasl используется saslauthd
Запущенный saslauthd делает верификацию через pam ( -a pam )
Верификация через файл с базой паролей - мне этот подход не понравился тем,
что помимо пароля для почты придется еще пробивать пароль для верификации
и как-то следить за ними
Для авторизации удаленных пользователей используется smtp auth
Но тут опять есть проблема с security - smtp auth позволяет использовать разные методы
авторизации, обычные методы PLAIN/LOGIN которые понимают практически все клиенты
небезопасные, а хорошие методы CRAM-MD5 например не понимает практически никто
и кроме всего прочего для CRAM-MD5 требуется пароль в открытом виде
( то есть опять требуется использовать базу паролей для sasl )
Поэтому smtp auth используется только в сочетании с ssl/tls
Посл-ть установки специфичная для FreeBSD:
*) cyrus-sasl2
cd /usr/ports/security/cyrus-sasl2
make WITH_BDB_VER=43 install
cd /usr/ports/security/cyrus-sasl2-saslauthd
make WITH_BDB_VER=43 install
*) postfix
cd /usr/ports/mail/postfix
USE SASL2,TLS,DB43,OpenLDAP
make install
*) change sendmail to postfix
*) setup sasl
Edit /etc/rc.conf
#### sasldb ####
saslauthd_enable="YES"
Edit /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: login plain digest-md5 cram-md5
Edit /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd
mech_list: login plain digest-md5 cram-md5
Start saslauthd
/usr/local/etc/rc.d/saslauthd.sh start
Add to /usr/local/etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
Edit /etc/pam.d/{imap,popd3,smtp}
Restart postfix
postfix stop
postfix start
#
# Часть конфига postfix:
#
# Enable SASL authentication in the Postfix SMTP server. By default,
# the Postfix SMTP server does not use authentication.
#
smtpd_sasl_auth_enable = yes
# Это для правильной аутентикации
# логин юзера расширяется указанным доменом
# то есть когда приходит vasya,
# то реально аутентификация ведется для vasya@mail.server.name
# если использовать базу sasldb, то там в качестве логина нужно писать
# vasya@mail.server.name, а не просто vasya
# The name of the local SASL authentication realm.
#
smtpd_sasl_local_domain = $myhostname
# Настроить postfix на работу с ssl/tls - это вообще отдельная песня
# Postfix certificates in PEM format.
#
smtpd_tls_cert_file = /usr/local/etc/postfix/ssl.crt/smtpd.crt
smtpd_tls_key_file = /usr/local/etc/postfix/ssl.key/smtpd.key
smtpd_tls_CAfile = /etc/ssl/ca.crt
# Enable additional Postfix SMTP server logging of TLS activity. Each logging
# level also includes the information that is logged at a lower logging level.
# 0 Disable logging of TLS activity.
# 1 Log TLS handshake and certificate information.
# 2 Log levels during TLS negotiation.
# 3 Log hexadecimal and ASCII dump of TLS negotiation process.
# 4 Also log hexadecimal and ASCII dump of complete transmission after STARTTLS.
#
smtpd_tls_loglevel = 1
# Opportunistic mode: announce STARTTLS support to SMTP clients,
# but do not require that clients use TLS encryption.
#
smtpd_use_tls = yes
# When TLS encryption is optional in the Postfix SMTP server,
# do not announce or accept SASL authentication over unencrypted connections.
#
smtpd_tls_auth_only = yes
# Name of the file containing the optional Postfix SMTP server TLS session
# cache. Specify a database type that supports enumeration, such as btree
# or sdbm; there is no need to support concurrent access. The file is created
# if it does not exist.
#
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_scache
#
# Теперь собственно надо разрешить клиентам sasl делать relaying
# Как известно все проверки в postfix рекомендуется запихать
# в smtpd_recipient_restrictions
#
# The access restrictions that the Postfix SMTP server applies in
# the context of the RCPT TO command.
#
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_hostname,
reject_unauth_destination,
check_policy_service unix:private/policy,
check_recipient_access pcre:/usr/local/etc/postfix/recipient_checks.pcre,
check_client_access hash:/usr/local/etc/postfix/client_checks,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client list.dsbl.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client sbl.spamhaus.org,
permit
# Optional access restrictions that the Postfix SMTP server applies
# in the context of the SMTP DATA command.
#
smtpd_data_restrictions =
reject_unauth_pipelining,
permit
Еще немного комментариев по поводу smtpd_recipient_restrictions
Правило permit_sasl_authenticated расположено выше чем permit_mynetworks
Это позволяет sasl-верифицированным клиентам проходить даже если они не в локальной сети
Правило reject_invalid_hostname используется в таком виде,
потому что windows-клиенты Outlook, Outlook Express не умеют посылать
полный fqdn hostname при обращении к серверу
Например компьютер student.mydomain шлет имя student
Правило check_policy_service unix:private/policy - это greylisting
Естественно что описано далеко не все,
поэтому вот еще используемые сcылки, собранные за время работы с почтой:
devin-postfix-smtp-auth.txt
http://www.thecabal.org/~devin/postfix/smtp-auth.txt
Postfix SMTP AUTH (and TLS) HOWTO
http://postfix.state-of-mind.de/patrick.koetter/smtpauth/
SASL implementations (Clients)
http://www.sendmail.org/~ca/email/mel/SASL_ClientRef.html
Converting Mbox mailboxes to Maildir format ( я использую Maildir-формат )
http://batleth.sapienti-sat.org/projects/mb2md/
Inter7 Courieriimap ( pop3/imap сервер - courier-imap )
http://www.inter7.com/courierimap.html
Matthias Andree's Postfix site
http://www-dt.e-technik.uni-dortmund.de/~ma/postfix/
postfix2 cyrus-sasl 2 courier-imap tls
http://raven.elk.ru/unix/how-to/postfix2+cyrus-sasl2+kav+spamassassin+courier-imap+tls+mysql+FreeBSD4/postfix2+cyrus-sasl2+kav+spamassassin+courier-imap+tls+mysql+FreeBSD4.html
Ralf Hildebrandt -~hildeb-postfix-Welcome.shtml
http://www.stahl.bau.tu-bs.de/~hildeb/postfix/
RH71-Postfix-Maildrop-Courier-IMAP-How-I-did-it
http://www.firstpr.com.au/web-mail/RH71-Postfix-Courier-Maildrop-IMAP/
postfix-anti-UCE.txt
Рекомендую прочитать - антиспамовые правила для postfix.
Автор много лет ведет эту страничку иногда изменяя ее,
страница весьма пользуется популярностью.
http://jimsun.linxnet.com/misc/postfix-anti-UCE.txt
The Postfix Home Page
http://www.postfix.org/
X.509 Certificates
http://www.gallowglass.org/