The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Завернуть исходящее почтовое сообщение на Procmail в Postfix"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта)
Изначальное сообщение [ Отслеживать ]

"Завернуть исходящее почтовое сообщение на Procmail в Postfix"  +/
Сообщение от vfp7 email(ok) on 13-Авг-13, 15:40 
Добрый день

FreeBSD 9.1 x64, из портов Fetchmail, Procmail, Dovecot2, Postfix

Fetchmail собирает почту на внешних серверах для почтовых ящиков пользователей, отдает ее Procmail который раскидывает сообщения по папкам пользователей в Dovecot.
Пользователи используя ssl аутентификацию Dovecot с хранением списка пользователей в файле, забирают почту по IMAPs.
Отправка почты реализована через Postfix, так же с ssl аутентификацией в Dovecot.

Получение - отправка почты на/из внешки работает.
Не могу победить релей Postfix для пользователей локальной сети, то есть что бы к примеру admin@microsoft.com отправил письмо на info@microsoft.com, то есть что бы это письмо поступило в Postfix, и не летело в инет на почтовый сервер хостинга компании или пыталось аутентифицироваться как локальный пользователь, а отдавалось Procmail, который бы сразу же завернул бы это письмо в папку пользователя.
Конфиги облегчил до максимума в сторону permit, секурность восстановлю после разрешения вопроса с заворачиванием писем.

#uname -a
FreeBSD microsoft 9.1-RELEASE-p5 FreeBSD 9.1-RELEASE-p5 #0: Sat Jul 27 01:14:23 UTC 2013     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

#postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/local/sbin
config_directory = /usr/local/etc/postfix
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
debug_peer_level = 1
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
default_privs = nobody
html_directory = /usr/local/share/doc/postfix
in_flow_delay = 1s
inet_interfaces = all
inet_protocols = ipv4
local_recipient_maps =
mail_owner = postfix
mail_spool_directory = /var/vmail/microsoft.com
mailbox_command = /usr/local/bin/procmail -d "$USER"
mailbox_size_limit = 1000000000
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
message_size_limit = 100000000
mydestination = microsoft.com, localhost, mail1.microsoft.com, localhost.$mydomain
mydomain = microsoft.com
myhostname = mail.microsoft.com
mynetworks = 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24, 127.0.0.0/8
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/local/share/doc/postfix
relay_domains = $mydestination
relayhost =
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
smtp_tls_note_starttls_offer = yes
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_restrictions = permit_sasl_authenticated permit
smtpd_data_restrictions = permit
smtpd_delay_reject = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks permit
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_sasl_authenticated,permit_mynetworks permit
smtpd_tls_CAfile = /usr/local/etc/ssl/certs/mail.pem
smtpd_tls_cert_file = /usr/local/etc/ssl/certs/mail.pem
smtpd_tls_key_file = /usr/local/etc/ssl/certs/mail.key
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
soft_bounce = no
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 450
virtual_mailbox_limit = 1000000000

#cat /usr/local/etc/postfix/master.cf
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_reject_unlisted_recipient=no
smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

#cat /usr/local/etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *
login_trusted_networks = 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 127.0.0.1 ::1
shutdown_clients = yes
mail_uid = postfix
mail_gid = postfix
first_valid_uid = 6
first_valid_gid = 6
log_path = "syslog"
mail_debug = no
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
verbose_ssl = no
auth_verbose_passwords = no
mail_temp_dir = /var/tmp
ssl = yes
ssl_cert=</usr/local/etc/ssl/certs/mail.pem
ssl_key=</usr/local/etc/ssl/certs/mail.key
disable_plaintext_auth = no
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
mail_home = /var/vmail/microsoft.com/%n
mail_location = maildir:/var/vmail/microsoft.com/%n
auth_default_realm = PLAIN
auth_mechanisms = PLAIN LOGIN CRAM-MD5 DIGEST-MD5
auth_username_format = %Lu
auth_worker_max_count = 30
auth_failure_delay = 2 secs
auth_ssl_require_client_cert = no
auth_ssl_username_from_cert = no
login_greeting = IMAPs server ready.
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
lda_original_recipient_header =
auth_socket_path = /var/spool/postfix/private/auth
mail_plugin_dir = /usr/local/lib/dovecot
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  service_count = 1
  process_min_avail = 3
  vsz_limit = 64M
}
passdb {
  driver = passwd-file
  args = /usr/local/etc/dovecot/passwd
}
protocol imap {
    ssl_cert=</usr/local/etc/ssl/certs/mail.pem
    ssl_key=</usr/local/etc/ssl/certs/mail.key
    imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
protocol pop3 {
    ssl_cert=</usr/local/etc/ssl/certs/mail.pem
    ssl_key=</usr/local/etc/ssl/certs/mail.key
    pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
    pop3_uidl_format = XuXv
}
protocol lda {
    log_path =
    info_log_path =
    mail_plugins = sieve
    postmaster_address = admin@microsoft.com
    auth_socket_path = /var/spool/postfix/private/auth
}
userdb {
  driver = static
  args =  uid=postfix gid=postfix home=/var/vmail/microsoft.com/%n
}
plugin {
    auth_socket_path = /var/spool/postfix/private/auth
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    sieve_dir = /var/vmail/microsoft.com/%n
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service lmtp {
  unix_listener lmtp {
  mode = 0666
  }
inet_listener lmtp {
  }
}
service auth {
   unix_listener /var/spool/postfix/private/auth {
     mode = 0600
     user = postfix
     group = postfix
   }
   unix_listener auth-master {
     mode = 0600
     user = postfix
   }
   unix_listener auth-userdb {
     mode = 0600
     user = postfix
   }
}
service imap {
  vsz_limit = 256M
  process_limit = 128
}
service pop3 {
  process_limit = 256
}

#cat /usr/local/etc/fetchmailrc
set daemon 180
set syslog
set postmaster admin@microsoft.com
set no bouncemail

defaults:
timeout 60
batchlimit 100

poll mail.microsoft.com
protocol pop3
interval 180
user "admin@microsoft.com" there with password "microsoft.com"
options
keep
mda '/usr/local/bin/procmail -d %T';

poll mail.microsoft.com
protocol pop3
interval 180
user "info@microsoft.com" there with password "microsoft.com"
options
keep
mda '/usr/local/bin/procmail -d %T';

poll mail.microsoft.com
protocol pop3
interval 180
user "user@microsoft.com" there with password "microsoft.com"
options
keep
mda '/usr/local/bin/procmail -d %T';

#cat /usr/local/etc/procmailrc
SHELL="/bin/sh"
UMASK=          007
MAILDIR=        /var/vmail/microsoft.com
LOGFILE=        /var/log/procmail.log
LOGABSTRACT=    no
VERBOSE=        off
DEFAULT=        ${MAILDIR}/admin/
LOCKFILE=       ${MAILDIR}/.lockmail
:0
* ^Subject:.*(credit|cash|money|debt|sex|sale|loan)
/dev/null
:0
* ^To:.*info@microsoft.com
${MAILDIR}/info/
:0
* ^To:.*user@microsoft.com
${MAILDIR}/user/
:0
* ^To:.*admin@microsoft.com
${MAILDIR}/admin/

#cat /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN DIGEST-MD5 CRAM-MD5

#cat /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN DIGEST-MD5 CRAM-MD5

#cat /usr/local/etc/dovecot/passwd
admin@microsoft.com:{PLAIN}microsoft.com
info@microsoft.com:{PLAIN}microsoft.com
user@microsoft.com:{PLAIN}microsoft.com


При попытке отправить со своей почты admin@microsoft.com на admin@microsoft.com в логах ловлю:
#cat /var/log/maillog
Aug 13 15:22:07 microsoft postfix/local[39370]: 64B3C1B18362: to=<admin@microsoft.com>, relay=local, delay=0.03, delays=0.03/0/0/0, dsn=5.1.1, status=bounced (unknown user: "admin")

То есть Postfix пытается найти пользователя admin@microsoft.com среди локальных пользователей системы.
Если подкорректировать дестинейшн, то это письмо полетит на внешний сервер по MX записи домена, но мне нужно заставить Postfix отдать это письмо на Procmail ...
То есть исходящая почта для домена microsoft.com должна завернуться на Procmail, а остальная почта должна отправиться напрямую адресатам ( там прямой внешний ip прописанных в MX записи домена )

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Завернуть исходящее почтовое сообщение на Procmail в Postfix"  +/
Сообщение от vfp7 email(ok) on 14-Авг-13, 11:15 
Сам же и отвечаю, как обычно :)

в мой /usr/local/etc/postfix/main.cf добавляем строку:

mailbox_transport = procmail

в мой же /usr/local/etc/postfix/master.cf добавляем:

procmail unix - n n - 4 pipe
  flags=DRhu user=mailnull argv=/usr/local/bin/procmail -a ${recipient}

В логах уже становится:

Aug 14 11:10:06 microsoft postfix/pipe[49165]: 80C121B1837B: to=<admin@microsoft.com>, relay=procmail, delay=0.03, delays=0.01/0.01/0/0.01, dsn=2.0.0, status=sent (delivered via procmail service)

Что и требовалось сделать :)

PS: Если кто то возьмет эти конфиги за рабочии, не забудьте про восстановление настройки безопасности !!!

Конечно можно еще решить эту задачу через перенаправление аунтефикации к dovecot, как я изначально и хотел, но это решение мне даже больше нравится, за счет более глубокой обработки почты в Procmail.

Можно закрывать тему ...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Завернуть исходящее почтовое сообщение на Procmail в Postfix"  +/
Сообщение от Дядя_Федор on 14-Авг-13, 12:46 
Могу дополнить своими изысканиями, если хотите. :) Добавляем строку alway_bcc=virtual и вся проходящая почта попадает к пользователю virtual (которого надо создать, естественно). У этого пользователя в домашней директории лежит файлик .procmailrc, в котором записаны правила для обработки почты в зависимости от критериев обработки. У меня, например, там записаны правила для складирования почты, отмеченной, как спам (для обучения байесовых фильтров спамассасина) и правила для складирования ежедневных отчетов от платежных систем ОСМП и QIWI. Отчеты затем скриптом заносятся в базу и используются для сравнения прошедших и зафиксированных платежными системами платежей юзверей.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру