[MEGOLDVA] postfix header_checks nem megy?

Fórumok

Adott egy gép amin postfix + dovecot auth + MailScanner + spamassassin fut. Az SMTP-re kétféle módon lehet bemenni: 25-ös porton bárki, sok megszorítással és 465 porton kizárólag authentikációval. Az utóbbi porton van egy nagy problémám. Sok kliensprogram mindenféle mobilhálózatról meg dinamikus IP-ről csatlakozik, és az oda kiosztott IP-k egy része RBL listán van. Amikor pl. küldök egy levelet a saját UPC előfizetésemről, akkor a MailScanner kitalálja hogy a kliens IP RBL-en van, és spam-nek veszi.

Ez lesz belőle:

Received: from [192.168.1.160] (catv-86-101-30-40.catv.broadband.hu [86.101.30.40])
(Authenticated sender: my_user_name)
by shopzeus.com (Postfix) with ESMTPSA id 0A7CB889B805
for ; Thu, 17 Sep 2015 01:44:17 -0400 (EDT)

És utána ez:

X-shopzeus-MailScanner-SpamCheck: spam, SORBS-DNSBL, SORBS-DUL
X-shopzeus-MailScanner-From: my_username@shopzeus.com
X-Spam-Status: Yes

Az is lehetőség lenne, hogy a MailScanner és spamassassin RBL check-et kikapcsolom ezekre a levelekre. De azt nem tudom hogy kell. (Nem találtam olyan opciót, hogy feltételhez kössem az RBL check-et. Csak két állású kapcsoló: van vagy nincs.) Az az ötletem támadt, hogy egy header_checks segítségével az authenticated smtp Received: sorát átírom. Ha a levél továbbmegy akkor más smtp szerverek se veszik spam-nek az IP miatt. Ráadásul így lefut rá az összes több MailScanner ellenőrzés; csak a kliens IP marad ki belőle.

Valahogy így indultam neki:

cat >> /usr/local/etc/auth_header_checks.pcre
/^\s*(Received: from)[^\n]*(.*\(Authenticated sender:[^\n]*by shopzeus.com.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])$2
/^\s*User-Agent/ IGNORE
/^\s*X-Enigmail/ IGNORE
/^\s*X-Mailer/ IGNORE
/^\s*X-Originating-IP/ IGNORE
/^Received:/ HOLD

Utána a main.cf-be:

header_checks = pcre:/usr/local/etc/postfix/auth_header_checks.pcre

Tesztelés:

# postmap -q "Received: from [192.168.0.2] (catv-89-132-209-163.catv.broadband.hu [89.132.209.163]) (Authenticated sender: my_user_name) by shopzeus.com (Postfix) with ESMTPSA id 74318889B800 for ; Wed, 16 Sep 2015 13:56:52 -0400 (EDT)" pcre:auth_header_checks.pcre
REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1])(Authenticated sender: my_user_name) by shopzeus.com (Postfix) with ESMTPSA id 74318889B800 for ; Wed, 16 Sep 2015 13:56:52 -0400 (EDT)

Ez tök jónak tűnik. Azonban, amikor ezzel a beállítással újraindítottam a postfix-et és küldtem magamnak levelet akkor ennyit láttam:

Sep 17 02:09:08 shopzeus postfix/smtps/smtpd[15387]: connect from catv-86-101-30-40.catv.broadband.hu[86.101.30.40]
Sep 17 02:09:08 shopzeus postfix/smtps/smtpd[15387]: BE10E889B800: client=catv-86-101-30-40.catv.broadband.hu[86.101.30.40], sasl_method=PLAIN, sasl_username=my_user_name
Sep 17 02:09:08 shopzeus postfix/cleanup[15400]: BE10E889B800: hold: header Received: from [192.168.1.160] (catv-86-101-30-40.catv.broadband.hu [86.101.30.40])??(Authenticated sender: my_user_name)??by shopzeus.com (Postfix) with ESMTPSA id BE10E889B800??for from catv-86-101-30-40.catv.broadband.hu[86.101.30.40]; from= to= proto=ESMTP helo=<[192.168.1.160]>

Szóval egyből HOLD-ra tette, ahelyett hogy átírta volna a header-t.

Feltételezem ez azért lehet, mert a header_checks még azelőtt fut le, hogy a postfix beletenné az elejébe az új Received: header-t? Hogyan tudnám átírni a header-eket még az ELŐTT hogy a DKIM generálás lefutna, de az UTÁN hogy a postfix beleírta a saját received header-jét?

Hozzászólások

az ignore sorok mire jok a header_check-ben? Nyilvan azert lesz HOLD a level, mert az elozo sorokra nincs match. Btw. en az smtpd_recipients_checks-et varialnam at ugy, hogy elobb legyen annak ellenorzese, hogy authentikalt userrol van szo, es csak utana az rbl ellenorzes...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

Hát arra én is rájöttem, hogy az előző sorokra nincs match. De miért nincs? Tényleg azért, mert a postfix először futtatja a header_checks-et és utána teszi bele a saját header-jét? Vagy valami más az oka?

Amit az smtpd_recipients_checks-ről írtál azt nem értem. Előszöris, ezen a porton csak akkor tud bejönni a user ha authentikált (smtpd_sasl_security_options=noanonymous,noplaintext és smtp_sasl_tls_security_options=noanonymous). Másrészt meg nem értem miből gondoltad hogy az RBL check hamarabb fut le? Mint ahogy korábban írtam, az RBL check-et nem a postfix végzi hanem a mailscanner. Az X-Spam-Status header-t is a MailScanner teszi bele. Ha az RBL check-et a postfix konfigba írnám (és nem a recipientsbe hanem a senderbe!!!) akkor a levél be se érkezne ha RBL-es címről jönne. És akkor lehetőségem se lenne átírni a header-t, és akkor lehetőségem se lenne hogy Spam-ként kézbesítsem. De én ezt NEM AKAROM, mert nem szeretném ha elvesznének levelek.

Viszont jó hogy megkérdezted! Mert most jobban megnéztem a teszt leveleket és a következő derült ki:

- az új konfiggal a USER-AGENT és hasonló header-ek valóban eltűntek a levélből
- de a kérdéses RECEIVED nem lett átírva
- és ha föltesszük hogy a regexp pattern jó, akkor ennek csak az lehet az oka hogy a postfix még azelőtt lefuttatja a header_checks-et mielőtt hozzátenné a saját received-jét

A saját header-t a cleanup teszi bele. Eszerint az ábra szerint:

http://www.postfix.org/MILTER_README.html

Az smtpd után jön a cleanup és utána az incoming. Sajnos az ábráról nem látszódik, hogy a HOLD hol van. :-(

Én így írom át a rajtam keresztül küldött levelek Received fejlécét:

# cat header_checks_outgoing
/^(Received: from)[^\n]*(.*)/ REPLACE $1 [127.127.127.127] (localhost [127.127.127.127])$2

A hold nem tudom miért van bent nálad...

Nálam az egész egy cleanup_service-be van "belevezetve"...
--
Debian Linux rulez... :D

A HOLD azért van ott, mert a levél bemegy a spool/hold -ba és a MailScanner onnan veszi ki. Arra szükség van!

Az általad adott outgoing checks akkor jó, ha egyetlen Received van a levélben. Az enyém specifikusabb: csak azt a kliens IP-t törli ami ahhoz a Received header-hez tartozik, amit a saját szerverem adott hozzá. ;-)

De miért nem működik? Nem tudom hogyan tudnám ennél jobban debuggolni.

Ha valaki azonosítja magát, - 465-ről jön - akkor Ő lesz a levél első feladója, így csak 1 db Received lesz benne...
Más részről a többi előfordulást is kivenné... (man header_checks)

Nálam még ez is szerepel a master.cf-ben:

127.0.0.1:smtp inet n - - - - smtpd
-o always_add_missing_headers=yes
-o cleanup_service_name=cleanup_outgoing

192.168.255.254:smtp inet n - - - - smtpd
-o always_add_missing_headers=yes
-o cleanup_service_name=cleanup_outgoing

PUBLIKUS_IP:smtp inet n - - - 1 postscreen

#port 587
submission inet n - - - - smtpd
-o always_add_missing_headers=yes
-o cleanup_service_name=cleanup_outgoing

#port 465
smtps inet n - - - - smtpd
-o always_add_missing_headers=yes
-o cleanup_service_name=cleanup_outgoing

cleanup_outgoing unix n - n - 0 cleanup
-o header_checks=pcre:header_checks,pcre:header_checks_outgoing

--
Debian Linux rulez... :D

Saját cleanup service hozzáadása után működik! Köszönöm!

Egyébként nem tudom hogy jól választottam-e. Több évvel ezelőtt kezdtük el használni a MailScanner-t. A MailScanner honlapján van egy megjegyzés:

https://www.mailscanner.info/postfix/

a lap alján:

"You may have read somewhere on Postfix.org that MailScanner shouldn’t be used with Postfix."

A postfix oldalán meg:

http://www.postfix.org/addon.html a "MailScanner" résznél ez:

"WARNING: This software uses unsupported methods to manipulate Postfix queue files directly. This will result in corruption or loss of mail. The mailscanner authors have sofar refused to discuss a proper access API or protocol. "

Van javaslatod, hogy mit lenne érdemes használni helyette? Vagy jó ez, ne foglalkozzak a saját kis belső harcukkal? :-)