Добрый день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 записи домена )