LINUX.ORG.RU
решено ФорумAdmin

Postfix отмена отправки писем с подменой адреса.

 


1

1

сервер Ubuntu postfix dovecot по гайду https://www.dmosk.ru/instruktions.php?object=mailserver-ubuntu#postfix

Всё работает прекрасно, но выявлена проблема, что любой пользователь сети может отправить письмо от любого другого адреса с нашим доменом(условно любой сотрудник может сделать рассылку от имени руководителя). Как отключить эту функцию и требовать проверку по эмейлу?

в my_networks прописаны все подсети каждого отдела. smtpd_sasl_auth_enable = yes smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth

На сайте нашёл, что можно сделать так.

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_sender_login_mismatch

Но если убрать permit_mynetworks(где прописаны все подсети) почта перёстает ходить во вне.

Смотри в сторону smtpd_sender_login_maps и reject_sender_login_mismatch

Сработает только для писем, отправленных с SASL-авторизацией, те кто перечислен в mynetworks под ограничения не подпадут

Но если убрать permit_mynetworks(где прописаны все подсети) почта перёстает ходить во вне.

Значит у тебя не настроена авторизация у клиентов и тебе надо начать с ее настройки

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 4)
Ответ на: комментарий от Pinkbyte

Не совсем понимаю процесс авторизации. У меня есть база данных с логином и паролями пользователей почты. Чтобы пользоваться почтой, они авторизуются в почтовом клиенте. Какая ещё авторизация нужна?

AcRonFSYS
() автор топика

в master,cf у меня строчка -o smtpd_client_restrictions=permit_sasl_authenticated,reject

в main.cf строчка

smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch

база данных с данными пользователями mariadb

авторизация, как я понимаю через dovecot.

На внешнюю почту не доходят сообщения с чужим доменом, но со своим доменом можно написать во вне и внутри с любого эмейла@мойдомен.

AcRonFSYS
() автор топика
Ответ на: комментарий от mx__

Да, это я про конкретный конфиг ТСа. Ну и хорошая практика - ставить permit_mynetworks как можно раньше и при этом чтобы сам список mynetworks был как можно меньше(а не как у ТСа - вся сеть в разрешенных на отправку в обход авторизации)

Pinkbyte ★★★★★
()
Ответ на: комментарий от AcRonFSYS

Чтобы пользоваться почтой, они авторизуются в почтовом клиенте.
Но если убрать permit_mynetworks(где прописаны все подсети) почта перёстает ходить во вне.

Очевидно с авторизацией что-то не так, нужно смотреть логи. Но навскидку - smtpd_sasl_exceptions_networks ломает авторизацию у тебя для клиентов из mynetworks.

Ибо из описания следует:

What remote SMTP clients the Postfix SMTP server will not offer AUTH support to.

Что переводится как «список удаленных SMTP-клиентов, которым сервер НЕ БУДЕТ предлагать авторизацию». Почтовые клиенты обычно шлют авторизацию, только если сервер говорит «я поддерживаю авторизацию».

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

/etc/postfix/main.cf

#TLS parameters

smtpd_tls_cert_file=/etc/ssl/mail/public.pem

smtpd_tls_key_file=/etc/ssl/mail/private.key

smtpd_tls_security_level=may

smtp_tls_CApath=/etc/postfix/cacert.pem

smtp_tls_security_level=may

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

myhostname = mail.***.ru

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

#Список доменов, которые сервер Postfix будет считать конечными пунктами назначения для входящей почты.

mydestination = localhost.$mydomain, mail.***.ru, localhost, localhost.localdomain

relayhost =

#Какие сервера могут пересылать почту через сервер Postfix.

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, далее идут мои сетки.

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all inet_protocols = all

#Максимальный вес сообщения

message_size_limit = 81920000

virtual_mailbox_base = /hdd

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_minimum_uid = 1024

virtual_uid_maps = static:1024

virtual_gid_maps = static:1024

virtual_transport = dovecot

dovecot_destination_recipient_limit = 1

smtpd_sasl_auth_enable = yes

smtpd_sasl_exceptions_networks = $mynetworks

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth

smtp_use_tls = yes

smtpd_use_tls = yes

smtpd_tls_auth_only = yes

smtpd_helo_required = yes

milter_protocol = 2

milter_default_action = accept

smtpd_milters = inet:localhost:12301

non_smtpd_milters = inet:localhost:12301

smtpd_sender_restrictions =

 reject_authenticated_sender_login_mismatch, 

 permit_sasl_authenticated, 

 permit_mynetworks

в логах аутентификация проходит: dovecot[922]: pop3-login: Login: user=<injener@**.ru>, method=PLAIN, rip=10…, lip=10…*, mpid=173478, secured, session=<3xjg0Vr9jsMKSGTC>

То есть нужно как-то вывести все подсетки из my_networks? Но тогда у меня почта вообще перестаёт ходить.

AcRonFSYS
() автор топика
Ответ на: комментарий от AcRonFSYS

в логах аутентификация проходит
dovecot

Это логи dovecot-а, c ним всё хорошо. Нужны логи postfix - может у postfix нет доступа к сокету dovecot(заданному в smtpd_sasl_path) и поэтому на прием(pop3, за это отвечает dovecot) у тебя авторизация срабатывает, а на передачу(smtp, а за это - postfix) - нет.

И да - начни с удаления smtpd_sasl_exceptions_networks(который ты из приведенного конфига не удалил, как я посмотрю), содержимое mynetworks можешь пока не трогать. После этого попробуй отправить письмо и пришли логи отправки от postfix. Если там не будет ни слова про sasl(или будут ошибки авторизации) - вот туда и надо будет копать.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

smtpd_sasl_exceptions_networks - закоментировал, все подсети с mynetworks убрал.

В smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated,

Но с этими настройками почта не у всех пользователей уходит(во вне и локально). Некоторые локальные адреса будто заблокированы.

Лог письма выглядит так :

июн 05 15:51:17 mail.domain.ru postfix/smtpd[191585]: connect from ruslan.domain.local[10...*]

июн 05 15:51:17 mail.domain.ru postfix/smtpd[191585]: 160EA8002F: client=ruslan.domain.local[10...*], sasl_method=PLAIN, sasl_username=nick@domain.ru

июн 05 15:51:17 mail.domain.ru postfix/cleanup[191588]: 160EA8002F: message-id=bed5b40d-c47d-f2dd-5b03-b0b1e8718abb@domain.ru

июн 05 15:51:17 mail.domain.ru opendkim[7965]: 160EA8002F: DKIM-Signature field added (s=relay, d=domain.ru)

июн 05 15:51:17 mail.domain.ru postfix/qmgr[191265]: 160EA8002F: from=nick@domain.ru, size=1095, nrcpt=2 (queue active)

июн 05 15:51:17 mail.domain.ru postfix/smtpd[191585]: disconnect from ruslan.domain.local[10...*] ehlo=2 starttls=1 auth=1 mail=1 rcpt=2 data=1 quit=1 commands=9

июн 05 15:51:17 mail.domain.ru dovecot[191591]: lda(nick@domain.ru)<191591><2SJtCiW+fWRn7AIAY8a7Mg>: msgid=bed5b40d-c47d-f2dd-5b03-b0b1e8718abb@domain.ru: saved mail to INBOX

июн 05 15:51:17 mail.domain.ru postfix/pipe[191590]: 160EA8002F: to=nick@domain.ru, relay=dovecot, delay=0.1, delays=0.07/0.01/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service)

июн 05 15:51:18 mail.domain.ru postfix/smtp[191589]: 160EA8002F: to=nick@gmail.com, relay=gmail-smtp-in.l.google.com[142.250.150.26]:25, delay=1, delays=0.07/0.01/0.64/0.29, dsn=2.0.0, status=sent >

июн 05 15:51:18 mail.domain.ru postfix/qmgr[191265]: 160EA8002F: removed

июн 05 15:51:18 mail.domain.ru dovecot[922]: pop3-login: Login: user=nick@domain.ru, method=PLAIN, rip=10..., lip=10..., mpid=191593, TLS, session=<0G+1rl/96M0KSGUN>

июн 05 15:51:18 mail.domain.ru dovecot[922]: pop3(nick@domain.ru)<191593><0G+1rl/96M0KSGUN>: Disconnected: Logged out top=0/0, retr=1/1697, del=1/46, size=26719696 lines 1394-1444/1444 (END)

AcRonFSYS
() автор топика
Ответ на: комментарий от AcRonFSYS

В привиденном логе видна авторизация и при этом нет никаких ошибок при отправке на nick@domain.ru и nick@gmail.com. От сервера почта наружу(в данном случае - в гугл) ушла и там ее на обработку приняли. А вот не попала ли она там в спам - это уже надо спрашивать с принимающей стороны.

Опять же, нелишним будет прогнать тест почтового сервера, например через тот же mxtoolbox

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

через mail-tester показывает 10/10. Проблема в том, что с почтовых клиентов(аутлук,тандебёрд) можно подставить любой мейл с моим доменом и отправить почту не от себя и оно также успешно доставится.

AcRonFSYS
() автор топика
Ответ на: комментарий от AcRonFSYS

Я понял в чём суть проблемы, но пока во всех приведенных тобой логов нет ошибок отправки писем.

1) оставь reject_authenticated_sender_login_mismatch;
2) настрой smtpd_sender_login_maps

и покажи ошибку отправки сообщения.

В прошлом конфиге я у тебя smtpd_sender_login_maps(о котором я говорил еще в первом сообщении) не увидел.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

По поводу неотправки почты с большинства компьютеров проблема была найдена: на клиентах пользователя была отключена авторизация, поэтому письма не уходили. Пришлось всем включать STARTLS авторизацию. Теперь на сервере всё прекрасно работает и письма уходят со всеми проверками(SPF,DMARK,DKIM) - но оказываются всё равно в спаме. Если же нажать «не спам», то следующие письма от конкретного отправителя будут доходить нормально, но это же тоже не дело…

Впервые слышу о login_maps, надо разбираться что за функция. Как только пойму что к чему - обязательно отпишу здесь. Спасибо вам за помощь.

AcRonFSYS
() автор топика
Ответ на: комментарий от AcRonFSYS

Впервые слышу о login_maps, надо разбираться что за функция

Эмм... Так это как раз для reject_authenticated_sender_login_mismatch штука. Карта кому от каких ящиков можно отправлять почту(можно сделать например так, чтобы пользователь userA@domain.test мог отправлять почту от userA@domain.test и userB@domain.test). Без нее reject_authenticated_sender_login_mismatch просто будет запрещать отправку всем. Хотя в текущих доках написано что даже без этой карты у пользователя userA@domain.test будет разрешена отправка почты от userA@domain.test (но в старых версиях такое не работало, я точно помню)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Век живи - век учись. Действительно пропускал эту строчку. Если я правильно понимаю, у меня отдельная база данных на mysql с виртуальными пользователями. У меня в учреждении больше сотни почтовых ящиков, получается мне нужно каждый логин и адрес вручную прописывать в отдельный файл, чтобы не допускать отправки с чужого эмейла?

AcRonFSYS
() автор топика
Ответ на: комментарий от AcRonFSYS

Не перестану повторять, так делать нельзя, почтарь должен висеть на отдельном ip. Причина простая, ваш пользователь ловит гадости и начинает рассылать гадости в результате ваш ip улетает во всякие bl и тому подобные рейтинговые системы опуская рейтинг ниже плинтуса.

anc ★★★★★
()
Ответ на: комментарий от AcRonFSYS

получается мне нужно каждый логин и адрес вручную прописывать в отдельный файл, чтобы не допускать отправки с чужого эмейла?

Нет, не нужно. Карта пользователей у вас берется из SQL-базы (строчка virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf). В mysql_virtual_mailbox_maps.cf скорее всего содержится SQL-запрос.

Вам нужно сделать подобный запрос(в отдельном .cf файле) для карты разрешенных ящиков.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Запросы я брал с гайда. Понимания мало, идёт выборка и сопоставление строчек, как я полагаю. Выглядят они так:

user = user

password = password

hosts = localhost

dbname = name

query = SELECT CONCAT(domain,‘/’,maildir) FROM mailbox WHERE username=‘%s’ AND active = ‘1’

Делаю так:

в main.cf

пишу smtpd_sender_login_maps = proxy:mysql:/etc/postfix/stmpd_sender_login_maps.cf

И тот же самый запрос вставить не получится?

AcRonFSYS
() автор топика
Последнее исправление: AcRonFSYS (всего исправлений: 3)
Ответ на: комментарий от AcRonFSYS

Если с BL можно( но их больше одного), то с рейтингом никак. И в любом случае, даже если было бы можно, что вам это даст? Вы не поняли основной мысли, в любом случае вам необходимо вешать почтарь на отдельный ip.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 2)