postfix transport/relay domains

 ( msandor | 2017. június 16., péntek - 14:53 )

Sziasztok!

Van egy DMZ-ben lévő postfix alapú smtp ki/bejáratom. Egyetlen domaint kezel, azt továbbítja a LAN-ban lévő mail szerverhez.

A gondom a következő: ha nem létező címzettnek jön levél, előbb átveszi, majd próbálja továbbítani a belső szervernek, az persze 550-el lepattintja, így a mailgw küld egy levelet a feladónak, ami a legtöbb esetben kamu cím, tehát a MAILER-DAEMON levél benne marad a queu-ban.
Hogy lehetne megoldani, hogy mielőtt átvenné a levelet, lecsekkolná a címlistát?

Így oldottam meg a továbbítást:

relay_domains = hash:/etc/postfix/relay_domains
transport_maps = hash:/etc/postfix/transport

Az egyik link a másikra, ez van benne:

domainem.hu smtp:[mailsrv]

A felhasználók adatai LDAP-ban vannak, ez hozzáférhető a mailgw-nek is.

Előre is köszi a tippeket!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nagy forgalom esetén én óránként/naponta exportálnám az ldapból a címeket egy fájlba amit a postfix ellenőriz, hogy csak ezeknek a címzetteknek fogadjon el levelet. Kis forgalom esetén pedig rá lehet beszélni a postfixet,hogy minden levél elfogadása előtt ellenőrizze a belső gépen a címzettet.

nem tudom mi számít kicsi/nagy forgalomnak, nálunk ezres nagyságrendben jönnek/mennek levelek naponta, szóval nem halna bele az ldap szerver az állandó válaszolásba

van konkrét ötleted a megvalósításra?

Persze: reject_unverified_recipient

Pl: /etc/postfix/main.cf:
smtpd_recipient_restrictions =
permit_mynetworks
# reject_unauth_destination is not needed here if the mail
# relay policy is specified under smtpd_relay_restrictions
# (available with Postfix 2.10 and later).
reject_unauth_destination
...
reject_unknown_recipient_domain
reject_unverified_recipient
...
# Postfix 2.6 and later privacy feature.
# unverified_recipient_reject_reason = Address lookup failed

A részletek pedig itt:http://www.postfix.org/ADDRESS_VERIFICATION_README.html

A reject_unverified_recipient az nem az LDAP-ból fogja venni a valid usereket, hanem bepróbálkozik a célszervernél.

Ez így igaz. De a cél az, hogy a belső szerverre ne próbáljon kamu címre érkező levelet továbbítani, ez pedig pont arra való;)

De ha már úgyis eléri az LDAP szervert, akkor szerintem ne gyártson felesleges tesztüzeneteket az igazi felé.

Ebből nem lesz teszt üzenet, csak az RCPT TO -ig próbálja a külső server, eljuttatni kapcsolódást.

----
올드보이

meg igy sem korrekt a dolog...

--
Allitsuk meg Andorrat!

Mondjuk ez igaz, inkább az a baj, hogy ha bármi oknál fogva visszadobja az üzeneteket, a címzett máris érvénytelennek lesz minősítve. Meg van egy kis késleltetés is, amíg ellnőriz, LDAP-ból sokkal gyorsabb. Meg amúgy is, ha ott a helyi címlista, használjuk már azt. Persze ha nincs meg a címlista a célszerverhez, akkor nincs más választás.

transport_mappal is lehet, az ilyen formátumú mappal megy:


user1@domainem.hu smtp:[mailserver]
user2@domainem.hu smtp:[mailserver]
user3@domainem.hu smtp:[mailserver]

De talán még egyszerűbb a relay_recipient_maps használata.

Az a meglévő beállítások mellé egy ilyen formátumú mapot igényel:


user1@domainem.hu OK
user2@domainem.hu OK
user3@domainem.hu OK

Én úgy néztem, hogy az OK az lehet bármi.

Ezt ldaposítani mondjuk úgy lehet, hogy

relay_recipient_maps=ldap:/etc/postfix/relay_recipients.cf

relay_recipients.cf:

server_host = xxxx
search_base = xxxx
query_filter = (mail=%s)
result_attribute = uid

A result_attribute az bármi lehet, az a lényeg, hogy érvényes címnél adjon vissza valamit a query, érvénytelennél meg ne.

Szóval valahogy így.

Ez lett a megoldás élesítettem:

main.cf-be:

relay_recipient_maps = ldap:/etc/postfix/ldap-relay_recipients.cf

ldap-relay_recipients.cf-be:

server_host = ldap://ldapserver:389
bind_dn = uid=postfix,cn=programs,dc=domain,dc=hu
bind_pw = 12345
version = 3
search_base = dc=domain,dc=hu
query_filter = (mail=%u)
result_attribute = mail

Ahogy szerettem volna, a téves címre küldött leveleket át sem veszi, elhajtja 550-el a fenébe!
Köszi mindenkinek az útmutatást!

Nem kerek a történet!

Mivel több relay domain-em is van, ez mindent lepattint, mivel csak egy címtárra ellenőrzök :-(
Ha nem találok rá elegáns megoldást, kénytelen leszek fájlt generálni a címlistával, és a végére biggyeszteni a többi domain-t is...

Idézlek: "Egyetlen domaint kezel"


// Happy debugging, suckers
#define true (rand() > 10)

Bocsánat, félreérthetően írtam!
A külvilág számára egyetlen domain-t kezel, de belső LAN-ról bizonyos domain-eket nem a neten keresztül kézbesít, hanem a belső címre továbbít!

Úgy is mondhatnám, hogy a .hu végű levélszerver, és annak a címtára nálunk van, a többi országé meg az adott ország kezében.

Sajnos nem tudom a kezdő témát szerkeszteni (ez új dolog? ritkán írok).

Jajj...

relay_recipient_maps = ldap:/etc/postfix/ldap-relay_recipients.cf hash:/etc/postfix/other-relay-recipients

other-relay-recipients:

@masikdomain.hu OK
@harmadikdomain.hu OK

De az ismeretelenekre valóban jobb lenne a fent említett verify service használata.

Így már működik, annyi változtatással, hogy a "@elsodomain.hu"-t is fel kellett vennem a listára, mert anélkül mintha nem is fordult volna az LDAP szerverhez.

Köszi!

Szerintem nem kell túlbonyolítani a dolgot.

address_verify_map = btree:/var/lib/postfix/address_verify_map