Здравствуйте, уважаемый all.
Сразу пардон если вопрос уже поднимался на этом форуме, но опыта у меня пока немного, и сходу найти путевое обсуждение с путевым решением проблемы мне не удалось, потому и пишу.
Итак, к делу:
Почтовый сервер FreeBSD + Postfix + фильтр DrWeb. Куча почтовых аккаунтов.Проблема: Исходящая почта принимается только от клиентов, находящихся в локальной сети. Т.е. из дома, например, письмо уже не отправишь - Postfix не примет его (что-то типа "relay access denied"). Хотя какой же это relaying - отправка письма от своего имени через свой же SMTP-сервер?
С другой строны, в maillog вижу письма, пришедшие извне локальной сети, но содержащие в качестве адреса отправителя адреса моих локальных пользователей:postfix/smtpd[34975]: connect from unknown[xx.yyy.16.166]
postfix/smtpd[34975]: A91AE5C093: client=unknown[xx.yyy.16.166]
postfix/cleanup[34979]: A91AE5C093: message-id=<20060519065805.A91AE5C093@mydomain>
postfix/qmgr[93961]: A91AE5C093: from=<postmaster@mydomain>, size=56383, nrcpt=1 (queue active)
postfix/smtpd[34975]: disconnect from unknown[xx.yyy.16.166]
drweb-postfix[34981]: scan: the message(drweb.tmp.1I0KRr) sent by postmaster@mydomain to rector@mydomain has been cured or infected parts have been removed
drweb-postfix[34981]: scan: the message(drweb.tmp.1I0KRr) sent by postmaster@mydomain to rector@mydomain is passedОчевидно, адрес отправителя подделан. Но самое главное: Postfix принял письмо, исходящее с клиента IP xx.yyy.16.166, находящегося вне моей локальной сети!
Как же так - от моих пользователей, находящихся вне локалки, не принимает, а от спамеров принял.
Если кто-нибудь сталкивался с подобным, подскажите, пожалуйста, решение этой проблемы.
Приведите пожалуйста postconf.
>Приведите пожалуйста postconf.
%postconf -n
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
command_directory = /usr/local/sbin
config_directory = /usr/local/etc/postfix
daemon_directory = /usr/local/libexec/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
message_size_limit = 4096000
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = xxx.yyy.ru
myhostname = xxx.yyy.ru
mynetworks = 192.168.1.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
relay_domains =
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
setgid_group = maildrop
smtpd_recipient_limit = 10
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
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,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client dul.ru
smtpd_sender_restrictions =
permit_mynetworks,
permit_auth_destination,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject
unknown_local_recipient_reject_code = 550Вывод postconf -n, отформатировал для удобочитаемости. xxx.yyy.ru - мой домен. Если нужен полный вывод postconf, скажите - выложу.
А если так?
relay_domains = $mydestination
>А если так?
>relay_domains = $mydestination
А разве relay_domains по умолчанию уже не включает $mydestination ?
>Проблема: Исходящая почта принимается только от клиентов, находящихся в локальной сети. Т.е.
>из дома, например, письмо уже не отправишь - Postfix не примет
>его (что-то типа "relay access denied"). Хотя какой же это relaying
>- отправка письма от своего имени через свой же SMTP-сервер?
Это и есть самый настоящий релеинг. Прочуствуйте разницу:
1) Принять от кого-то для своего домена.
2) Принять от кого-то и переслать кому-то.>Очевидно, адрес отправителя подделан. Но самое главное: Postfix принял письмо, исходящее с
>клиента IP xx.yyy.16.166, находящегося вне моей локальной сети!
Абсолютно нормально.>Как же так - от моих пользователей, находящихся вне локалки, не принимает,
>а от спамеров принял.
И от ваших пользователей примет, но релеить не будет.>Если кто-нибудь сталкивался с подобным, подскажите, пожалуйста, решение этой проблемы.
Через regexp можно разрешить использовать ваш домен в MAIL FROM только пользователям lan и прошедшим sasl.
Судя по вашему postconf -n SASL настроен, и релей для прошедших авторизацию разрешен...
Если это не работает, покажите лог с отлупом postfix от вашего "домашнего" пользователя прошедшего sasl
Зачем заморачиватся с SASL-ом, какой SASL!!!?????Какой IP адресс ты получаешь из дома?
У тебя поставленно что-бы пускал только с "mynetworks = 192.168.1.0/24, 127.0.0.0/8"
поэтому и не принимает.
Тоесть ты не можешь отправить письмо с адреса чтото@yourdomain.com на любой другой адрес через твой сервер. он скажет relay access denied!
Пропиши IP адресс который ты получаешь дома в mynetworks и все заработает.
>Зачем заморачиватся с SASL-ом, какой SASL!!!?????
>
>Какой IP адресс ты получаешь из дома?
>У тебя поставленно что-бы пускал только с "mynetworks = 192.168.1.0/24, 127.0.0.0/8"
>поэтому и не принимает.
>Тоесть ты не можешь отправить письмо с адреса чтото@yourdomain.com на любой другой
>адрес через твой сервер. он скажет relay access denied!
>Пропиши IP адресс который ты получаешь дома в mynetworks и все заработает.
>Из дома работаю с почтой не только я, но и многие наши сотрудники. Все работают по диалапу и заранее неизвестно, с каким IP-адресом тот или иной пользователь появится в Интернете. Включать в mynetworks весь диапазон IP-адресов провайдера очень не хочется.
Уж лучше SASL.
>>Проблема: Исходящая почта принимается только от клиентов, находящихся в локальной сети. Т.е.
>>из дома, например, письмо уже не отправишь - Postfix не примет
>>его (что-то типа "relay access denied"). Хотя какой же это relaying
>>- отправка письма от своего имени через свой же SMTP-сервер?
>Это и есть самый настоящий релеинг. Прочуствуйте разницу:
>1) Принять от кого-то для своего домена.
>2) Принять от кого-то и переслать кому-то.
>
>>Очевидно, адрес отправителя подделан. Но самое главное: Postfix принял письмо, исходящее с
>>клиента IP xx.yyy.16.166, находящегося вне моей локальной сети!
>Абсолютно нормально.
>
>>Как же так - от моих пользователей, находящихся вне локалки, не принимает,
>>а от спамеров принял.
>И от ваших пользователей примет, но релеить не будет.
Понял. То есть письма, идущие в ящики моих пользователей, Postfix принимает от любого клиента - как из локалки, так и извне.
Спасибо за разъяснение.
В свое время сталкивался с такой проблемой и искал способ ее разрешения
Найденное решение используется 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 installcd /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-md5Edit /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd
mech_list: login plain digest-md5 cram-md5Start 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 = yesEdit /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.txtPostfix 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.htmlConverting Mbox mailboxes to Maildir format ( я использую Maildir-формат )
http://batleth.sapienti-sat.org/projects/mb2md/Inter7 Courieriimap ( pop3/imap сервер - courier-imap )
http://www.inter7.com/courierimap.htmlMatthias 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+spa...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-Mail.../postfix-anti-UCE.txt
Рекомендую прочитать - антиспамовые правила для postfix.
Автор много лет ведет эту страничку иногда изменяя ее,
страница весьма пользуется популярностью.
http://jimsun.linxnet.com/misc/postfix-anti-UCE.txtThe Postfix Home Page
http://www.postfix.org/X.509 Certificates
http://www.gallowglass.org/