Postfix smtp üzerinden geçiş yaparken gelen adresi zorlamak


28

AWS EC2 örneklerimizden e-posta raporları almaya çalışıyorum. Exchange Online kullanıyoruz (Microsoft Online Services'in bir parçası). Özellikle SMTP geçişi için bir kullanıcı hesabı oluşturdum ve bu sunucu aracılığıyla mesajları iletmek için tüm gereklilikleri karşılamak için Postfix'i kurdum. Ancak, Exchange Online'ın SMTP sunucusu, Kimden adresi kimlik doğrulama adresiyle tam olarak eşleşmezse (hata mesajıdır 550 5.7.1 Client does not have permissions to send as this sender) mesajları reddeder .

Dikkatli bir konfigürasyonla, hizmetleri bu kullanıcı olarak gönderecek şekilde ayarlayabilirim. Ancak dikkatli olmanın büyük bir hayranı değilim - sorunu düzeltmek yerine postfix zorlamayı tercih ederim. Bunu yapmanın bir yolu var mı?

Yanıtlar:


38

Bu gerçekten postfix'de nasıl yapılır.

Bu yapılandırma gönderen adreslerini hem yerel kaynaklı hem de aktarılan SMTP posta trafiğinden değiştirir:

/etc/postfix/main.cf:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Sunucunun kendisinden kaynaklanan e-postadan zarf adresini yeniden yaz

/ Etc / sonek / sender_canonical_maps:

/.+/    newsender@address.com

SMTP ile iletilen e-postadaki adreslerden yeniden yazma

/ Etc / sonek / header_check:

/From:.*/ REPLACE From: newsender@address.com

Örneğin, tüm çok işlevli ve çok amaçlı uygulamalarınız tarafından kullanılan bir yerel röle smtp sunucusu kullanıyorsanız bu çok faydalıdır.

Office 365 SMTP sunucusunu kullanıyorsanız, kimliği doğrulanan kullanıcının e-postasından farklı bir gönderen adresine sahip olan herhangi bir posta reddedilir. Yukarıdaki yapılandırma bunu engeller.


Teşekkürler! Bu benim aradığım şeye benziyor. Ne yazık ki, Office 365'e erişimim iki işten önceydi. Birisi bunun onlar için işe yarayıp yaramadığını onaylayabilir mi?
John Whitlock

1
Yapabilirim. Bunu Office 365 ile kullanıyorum.
Jasper

1
sender_canonical_mapsPostfix kullanılırken reddedilen postayı yerel makaraya kaydedemez ve bunun yerine geçici olarak röle yoluyla göndermeye çalışır
havza

2
@Jasper FYI Yukarıdaki yapılandırmaları değiştirmek için bunu daha kolay buldumpostconf -e sender_canonical_classes=envelope_sender,header_sender postconf -e sender_canonical_maps=regexp:/etc/postfix/sender_canonical_maps postconf -e smtp_header_checks=regexp:/etc/postfix/header_check
Jacob Evans

benzer bir problem yaşadım , sender_canonical_classes = envelope_sender günümü kurtardı!
Stephan Richter

13

İsteğe bağlı genel tablo, posta sunucudan teslim edildiğinde (gönderildiğinde) geçerli olan bir adres eşlemesini belirtir.

Bu, posta sunucu tarafından alındığında geçerli olan kanonik eşlemenin tam tersidir .

(Not: hem FROM hem de TO adresleri, genel ve kanonik tabloların yerine koymak için eşleştirilmiştir.)

Sunucu tarafından posta alındığında kurallı tablo kullanılması zaten açıklanmış diğer cevaplardır.

Posta kullanarak sunucudan gönderildiğinde FROM adreslerini yeniden yazabilirsiniz smtp_generic_maps.

Postfix dokümantasyonuna göre :

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    user@localdomain.local      account@isp.example.com
    @localdomain.local          wholedomain@isp.example.com

O zaman yapın:

sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload

Referanslar:


1
Bu çalışır ancak FROM adını nasıl değiştirebilirim?
Joanna Mikalai

Genel haritalar konusundaki deneyimim, hem FROM hem de TO adreslerini tanımlaması, sadece FROM adresini OP'nin istediği gibi zorlamak için kanonik haritaları kullanmasıdır
doz87

Regex kullanarak gönderenin postalarını değiştirmek ve gönderenlerin adreslerini eşleştirmek mümkün mü?
WM

@ doz87 hem FROM hem de TO, hem kanonik hem de genel haritalar ile eşleştirilecektir. İki harita arasındaki farkı açıklamak için cevabımı güncelledim.
Jocelyn

@WM evet, regexp kullanabilirsiniz. Ben hiç denemedim ama muhtemelen değişime olurdu hash:için regexp:böyle main.cf ve kullanım hatlarında /foo.*@localdomain.local/ account@example.comjenerik haritası. Bu, man sayfasında açıklanmaktadır: postfix.org/generic.5.html
Jocelyn

7

Güncelleme: Bir BT arkadaşının tavsiyesi üzerine, bir bulut posta sunucusu yapmak yerine tüm sunucularımda posta kodu kullanıyorum. İşte şimdiye kadar benim çözümüm:

/etc/postfix/main.cf

# output of hostname -f - mail from local users appears to come from here
myhostname = domU-01-02-03-04-05-06.compute-1.internal
# Local delivery - include all 127.0.0.1 aliases from /etc/hosts
mydestination = $myhostname, $mydomain, rest_of_entries_from_hosts
# Needed for address translation to work
myorigin = $mydomain

# Talking to MS Online
# :submission = port 587
relayhost = [smtp.mail.microsoftonline.com]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =   # Yes, leave empty
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic

# Enable if you need debugging, but it does leak credentials to the log
#debug_peer_level = 2
#debug_peer_list = smtp.mail.microsoftonline.com

# Only listen on the local interfaces (not the public)
inet_interfaces = localhost

# I left out a bunch of CentOS defaults.  postconf -n is your friend.
# These are included
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

/etc/postfix/sasl_passwd

# Run postmap /etc/postfix/sasl_passwd after editing
# Also, chown root:root; chmod 600
smtp.mail.microsoftonline.com relayer@hosteddomain.com:YourP@ssw0rd

/etc/postfix/generic

# Run postmap /etc/postfix/generic
# I've seen local mail come from either source
# output of dnsdomainname
@compute-1.internal relayer@hosteddomain.com
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal relayer@hosteddomain.com

/etc/aliases

# Run newaliases after changing
# Lot of stuff here. Mostly, just make sure the graph points to root, such as
mailer-daemon:  postmaster
postmaster:     root

# And the important part - your email or distribution group
root:           awsadmins@hosteddomain.com

/etc/passwd

# Sometimes it helps to expand the name, so email comes from 'root at aws host 5'
#  rather than just 'root'
# Was
#root:x:0:0:root:/root:/bin/bash
# Is
root:x:0:0:root on aws host 5:/root:/bin/bash

Mutlu olduğum şeyler:

  • Köklere çok sayıda posta gönderilir ve bir satır aliasonu kimin yönlendirdiğini gösterir.
  • Yerel kullanıcılardan gelen tüm postalar geldiği için çevrilir relayer@hosteddomain.com, bu nedenle MS Online SMTP sunucusundan geçer.
  • postfix sendmail'den çok daha iyi dokümantasyona sahip.

Mutlu olmadığım şeyler:

  • Her ana bilgisayar ve birkaç adım için özel değişiklikler gerekir. Yardım etmek için bir bash betiği yazdım.
  • passwdAdı hile her zaman işe yaramaz ve bir posta geliyor ne sunucu anlamaya zor olabilir.
  • Gönderilen her posta, günlüğe üç uyarı koyar:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(SMTP sunucusu AUTHönce STARTTLS, ama AUTH LOGINsonra boş bir liste gönderir )
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate (Sertifikaların etrafında bazı yapılandırma seçenekleri var, ancak sertifika yenilendiğinde posta tesliminin kesilip kesilmediğinden emin değilim)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (# 2 ile aynı)

Posta sunucularında güçlü görüşlerini paylaştığı için serverfault topluluğuna teşekkür ederiz.


4

Bir harita listesi belirlemek için smtpd_sender_login_maps kullanabilirsiniz : gönderen adres - kullanıcı.

Örnek:

smtpd_sender_login_maps = 
    hash:/etc/postfix/login-map 

/ Etc / postfix / giriş-harita:

mail1@domain    userlogin
mail2@domain    userlogin, otheruser@example.com

Göndermek için çalışır, aynı şekilde iletmek için de çalışması gerekir.


Kuyruk zamanında adresini yeniden yazma amacı mı? Benim izlenimim, smtpd_sender_login_maps'ın, girişleri e-posta adreslerine çevirmemek için gönderenleri (smtpd_sender_restrictions'ın bir parçası olarak) reddetmek için kullanıldığıdır. Bu yerinde, echo "This is a test" | /usr/sbin/sendmail test@example.comhala gelen postaları sıraya sokar (ve sonunda iletir)user@domU-DE-AD-BE-EF-00-01.compute-1.internal
John Whitlock

Benim hatam, bir şekilde senin postfix için yetki verdiğini anladım. Böyle bir durumda smtpd_sender_login_maps, hangi kullanıcının hangi gönderici adresini kullanabileceğini sınırlar.
ipek 11

Bu benim son çözümümün bir parçası olabilir. Bir göndericinin adresinin dışındaki herkesi ön uçta reddedebilir ve herhangi bir ön uç reddetme postasına bir hizmetin doğru bir şekilde yapılandırılmadığını bildirmek için bildirebilirim. Tüm yerel hesapları Tek Doğru Kimden olarak değiştirmek için bunları kullanıp kullanamayacağımı görmek için smtp_generic_maps adresine bakıyorum. Ancak, yerel hesapları nasıl belirlediğini anlamak için posta eki belgelerini tekrar okumam gerekiyor - AWS DNS sezgime uygun değil.
John Whitlock,

0

Kullandığım kanonik eşleme böyle no-reply@example.com için app01 @ kökünü yeniden yazma gibi adresinden yeniden yazmak.


3
Sunucu Arızasına Hoşgeldiniz! Yanıtların, içeriğe işaretçiler değil, içerik içermesini gerçekten tercih ediyoruz. Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir.
user9517
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.