Exchange 2003 a export inbound SMTP domén a adres

Kombinace Exchange serveru a předřazenych antivirů/antispamů postavených na bázi linuxu/SpamAssassinu/ClamAV antiviru/greylistingu je velmi častá a aspoň dle mého názoru velmi efektivní. Pro správné nastavení linuxových produktů je třeba předávat mezi platformami určité informace – minimálně jde o seznam inbound domén a dále o výpis všech adres všech SMTP enabled objektů, které v Exchange serveru existují. A to vše v ideálním případě automatizovaně bez zásahu lidské ruky.

Pokud není na Exchange serveru příchozí pošta pouze z jedné domény, vyplatí se zavést automatický export domén, jež jsou uvedeny v Recipient policies. Admin Exchange pak nemusí myslet na to, že po přidání další domény musí zkontaktovat admina linuxových AV/AS, aby si ten ručně zmodifikoval seznam inbound domén. Na druhou stranu, toto řešení je funkční pouze u instalací, u nichž se Recipient policies používají, není tak použitelné třeba u hostované Exchange, kde se jde alternativní cestou přes SMTP Event Sink.

Rozumný příkaz pro “meziprodukt” vypadá takto:

ldifde -d "cn=configuration,dc=<domain>[,dc=<domain>]" 
-r "(objectClass=msExchRecipientPolicy)" -l gatewayProxy,disabledGatewayProxy
-f c:\temp\proxies.txt

Výstup je následující:

dn: CN=Default Policy,CN=Recipient Policies,CN=DOLSBS,CN=Microsoft Exchange,CN=Services,
CN=Configuration,DC=domena,DC=local: add gatewayProxy: smtp:@domena.local gatewayProxy: SMTP:@domena.tld gatewayProxy: X400:c=CZ;a= ;p=DOMENA;o=Exchange;

Z toho se dá již velmi rozumně programově parsovat potřebné – začnu číst jednotlivé řádky a pokud je na začátku řetězec “gatewayProxy: smtp:@”, tak si dočtu zbytek. Je důležité nepoužívat case-sensitive porovnávání, protože SMTP: značí primární doménu, ze které se vytváří Reply-to adresy. Zapomenout se nesmí pochopitelně na odfiltrování pomocné interní domény – ve výše uvedeném případe jde o domena.local.

O způsobu generování všech existujících SMTP adres jsem již jednou psal. Pro AV/AS antiviry mohu zvolit třeba variantu s dsquery.

dsquery * forestroot -scope subtree -filter "(&(mail=*)(proxyaddresses=smtp:*))" 
-attr proxyaddresses >c":\temp\smtp_dump.txt

Ukázka výstupu je taková – kvůli délce řádků jsem je musel zalomit a každý následující řádek odsadit o jeden úhoz zleva:

proxyaddresses 
smtp:Administrator@domena.local;SMTP:Administrator@domena.cz;smtp:postmaster@domena.cz;
X400:c=CZ;a= ;p=DOMENA;o=Exchange;s=Administrator;;smtp:postmaster@domena.local;
smtp:Radek@domena.local;X400:c=CZ;a= ;p=DOMENA;o=Exchange;s=Dolezel;g=Radek;;
SMTP:Radek@domena.cz;  
           

Opět se jedná o dobře zpracovatelný tvar. Načtu postupně řádky, rozdělím do pomocného pole pomocí středníku a následně toto pomocné pole projdu a zkontroluji výskyt řetězce “smtp:” (opět pozor na case-sensitive). Ignorovat budu adresy končící na “@domena.local”. Výstupem bude požadovaný seznam všech SMTP adres s veřejně dostupnými doménovými názvy, tj. takové, které by pro greylisting měl předřazeny linuxový AV/AS systém znát.