Postfix HELO restrictions [megoldva]

Fórumok

Sziasztok!

Egy tesztkörnyezetben készítek Postfix levelezőszervert, amelyet Postfixadmin segítségével adminisztrálnék.
A gond a következő: amikor felveszek egy új felhasználót a postfixadmin segítségével, az elkészítené a postafiókot egy teszt levél küldésével. Localhoston betolná a levelet a Postfix részére, de az elutasítja a levelet, mondván:

"May 10 20:49:35 mailserver postfix/smtpd[2026]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname;"

A main.cf idevágó sora:

smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
check_helo_access
hash:/etc/postfix/helo_access,
reject_non_fqdn_helo_hostname,
reject_invalid_helo_hostname,
permit

A kérdés: miért nem veszi figyelembe a permit_mynetworks paramétert? A mynetworks változó így szerepel:
mynetworks = 127.0.0.0/8, 192.168.100.0/24

A másik gondom, hogy miért csak mailserver néven mutatkozik be a Postfixadmin? Hol a domain név rész?

Köszönök minden ötletet.

Attila

Hozzászólások

Oké, ez furcsa, de legyen.
Szóval, a /etc/hosts fájl tartalmazta a szerver nevét fqdn nélkül (mailserver).
Ezt kivettem belőle.
Maradt a localhost és a mailserver.peldadomain.hu.
Most ha készítek postafiókot, kézbesíti a levelet minden hiba nélkül. Az érdekes az, hogy ettől még nem tudom, hogy a permit_mynetworks miért maradt hatástalan, igaz, most nem is történik semmi HELO játék. Bejön localhoston a mail és megy a helyére dovecot transporttal.
Élesben is van ilyen szerverem, ott a /etc/hosts tartalmazza a levelezőszerver nevét fqdn nélkül is, és azzal nem volt ilyen gond. Igaz, ott van rendes DNS is, talán ez a dolog nyitja, ez pedig egy teszt rendszer DNS nélkül.
Ha elkészül a tesztrendszer, lesz egy howto Debian Jessie-re: Postfix, PostfixAdmin, Dovecot, Quota, Sieve, MySQL, SPamfilter, Roundcube, stb...ha érdekel valakit egyáltalán.

Nos?

:-)

..megköszönjük.
--
God bless you, Captain Hindsight..

Hiányzik a mian.cf-ből a local domain, amivel alapból visszaválaszol.

myhostname = mail.gepem.lan

Ezért utasítja el a helo-t.
Ugyanitt megadott nvevet vedd fel a hosts fájlba is.

postfix check-el tudod nézni,hogy jó-e a konfigod.

A functions.inc.php-ben levő send_mail-ből kiindulva (csak egy kávét ittam, ilyenkor még lehet, hogy tévedek) a php_uname("n")-el kotorja elő a saját hosztnevét, ami ha jól látom nagyjából egy hostname hívás (gethostname). Az egyik lehetőség, hogy a teljes fqdn-t felviszed a hostname-nek (és valszeg megtöröd vele a disztróbeli csomagok egy részét, amik ott nem fqdn-t várnak), a másik, hogy patcheled a PostfixAdmin-t.

Config-ba:


$CONF['myhostname'] = 'foo.bar.tld';

functions.inc.php


$smtp_server = php_uname("n");

(Érdekesség: a felette levő kikommentelt sorból látszik, hogy korábban a SERVER_NAME-el játszottak, gondolom belefutottak abba, hogy időnként az Apache se tudja magáról, hogy kicsoda :) )

sor helyett:


$smtp_server = $CONF['myhostname'];

(lehetne reverse lookup, hostname -f hívás, akármi, szvsz. a definiálás a legüzembiztosabb)

Szerk.: Egyébként pedig elég gyanús ez a PFA, ha a többi is olyan, mint az "SMTP implementációjuk" (EHLO-zik egyet, aztán meg se nézi, hogy mit mond rá a szerver, mert minek az...), akkor én elkerülném.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Alapvetően a lustaság miatt használom a PFA-t, eddig nem is volt gond vele, több száz domaint a postafiókokkal könnyű vele kezelni. Csak mivel kijött az új Debian, gondoltam, csinálok egy referencia telepítést és egy leírást is hozzá, amit publikálni fogok. Ekkor jött elő ez a hiba, de a /etc/hosts fájlból kivéve a szerver rövid nevét és csak az fqdn-t és a localhost-ot benne hagyva működik. Csak azt nem tudtam eddig kitalálni, hogy ez Postfix agymenés (kevésbé valószínű) vagy PFA (inkább).

Köszönöm az ötleteket is :-)

" Egyébként pedig elég gyanús ez a PFA, ha a többi is olyan, mint az "SMTP implementációjuk" (EHLO-zik egyet, aztán meg se nézi, hogy mit mond rá a szerver, mert minek az...), akkor én elkerülném."

Nem levelezokliensnek keszult, arra ott a roundcube. Azert van benne egyaltalan a lehetoseg, hogy levelet kuldjon, mert nagyon sok szerver ugy van belove, hogy az elso level hozza letre a postafiokot a lemezen, addig meg nem lehet belepni a fiokba. Szamara ez egy tet nelkuli meccs, mert a PFA a maga reszet mindenkepp elvegzi, az, hogy a paraszt nem tud belepni addig, amig nem letezik a fiok maildir-je a lemezen, az mar neki erosen out of the scope.
--
Blog | @hron84
Üzemeltető macik

Ez oké, de felette kommentben ott is van, hogy "TODO: Ezt lehet, hogy majd le kéne cserélni valami normálisabbra, pl. Zend_Mail" :)

Meg jó, tfh., hogy tényleg csak egy próba levelet küld: küldjön HELO-t, azt minden mail szerver támogatja.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

"Szóval, a /etc/hosts fájl tartalmazta a szerver nevét fqdn nélkül"

Es hany meg hany ilyen szervert latok napi szinten, atya eg... *sohaj*

Szoval, a megoldas altalaban nem az szokott lenni, hogy akkor ne legyen a nyuves szervernek FQDN neve, hanem az, hogy megcsinaljuk tisztessegesen.

A /etc/hosts fajlnak igy KELL kineznie, a sorrend fontos!


127.0.0.1 localhost.localdomain localhost
192.168.167.166 enyemszerver.mittudomain.com enyemszerver

Ekkor a "hostname -f" parancs jo FQDN-t fog visszaadni, es habar a PFA problemajat ez nem feltetlen oldja meg, egy csomo mas szopastol meg fogod magadat kimelni, peldaul az Apache se fog arra sirankozni, hogy szerinte a gepednek nincs FQDN neve.

En kivetel nelkul mindig igy allitom be a gepeimet, a mailszervereken erre kiemelten figyelek, meg soha nem volt azzal gond, hogy a gep ne tudta volna a sajat nevet.

Ami szamodra meg megoldhatja a problemat a PostfixAdmin patchelesen kivul (amit en erosen nem ajanlok, mert foleg ha csomagbol van felteve, az elso frissites felul fogja vagni), az egyszeruen az, hogy a gep nevet mindenfele formulaban belerakod a /etc/postfix/helo_access fajlba, majd mondasz ra egy postmap /etc/postfix/helo_access -t. Hogy a permit_mynetworks miert nem mukodik ebben a kornyezetben az egy roppant erdekes kerdes, tippem szerint azert, mert a localhost egy inet_protocols = all (ez a defaultja amugy) konfiguracioju Postfix szerveren elsodlegesen az IPv6-os cimet (::1) jelenti, ami a te konfigod szerinti mynetworks-ben nincs benne.
--
Blog | @hron84
Üzemeltető macik

Szia!

A /etc/hosts fájlban természetesen elejétől fogva benne volt az FQDN (mailserver.peldadomain.hu) is. Mögötte pedig csak a rövid név (mailserver). És így nem működött. Kivettem a rövid nevet, így pedig működött. Az IPv6 pedig le van (és volt is) tiltva, mert egyelőre nem volt rá szükség.

A naplóból az látszik, hogy a localhost[127.0.0.1]-en küldte be a PFA a levelet, és mivel csak mailserver néven mutatkozott be (saját magának?), hát nem vette át a levelet, a permit_mynetworks ellenére sem.

PFA-t nem fogok patchelni, annak ellenére sem, hogy nem csomagból tettem fel. A helo_access fájl is megvan, ahogyan kérted.

Az egész kérdés azért érdekes, mert élesben tökéletesen működő levelezőszerverről vettem a Postfix konfigurációs fájlokat - Debian 7.8 - és most a 8-as Debianon így nem ment. A különbség a kettő között annyi (az eltérő Debian változaton kívül), hogy a tesztrendszerben 192.168.100.x alhálózat van, nem "éles" IP cím, illetve a tartományra nincs DNS.

Attila

Nem kerek ez a dolog, a postfix determinisztikus, ha azt mondod neki valahol, hogy permit_mynetworks, akkor azt bizony figyelembe is veszi, ha a masik fel ebbe beletartozik. A master.cf-ben veletlenul nincsenek felulbiralva az smtpd egyes opcioi? Tudsz debug szintet allitani a debug_peer_level, debug_peer_list opciokkal, hasznosak hibakeresesnel.

Na, akkor most dobálok hamut a fejemre, és veszem fel a zsákruhát is.
A megoldás végig ott volt a szemem előtt. A hibaüzenet még egyszer:

"May 10 20:49:35 mailserver postfix/smtpd[2026]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname;"

RCPT from...

Vagyis a gond nem az smtpd_helo_restrictions részben volt, hanem az smtpd_recipient_restrictions részben. A másolásnál lemaradt a permit_mynetworks rész. És mivel végig a HELO-ra panaszkodott, ott is kerestem a baj okát, persze hiába. Akkor kezdett gyanús lenni, amikor az egész HELO ellenőrzést kiszedtem (smtpd_helo_required = no; a többi kikommentelve), és még mindig nem hagyta magát.

Az smtpd_recipient_restrictions részbe viszetettem a kifelejtett permit_mynetworks részt, és láss csodát: működik.

Mea culpa, srácok...

Attila

... azzal a kiegészítéssel, hogy nálam localhost.localdomain nincs, és soha nem is volt, továbbá írtom, mint a gyomot. A 127.0.0.1 neve az, hogy localhost, és nem több.
Ezen felül minden helyi domainként használt domain (tehát ami előfordulhat bármilyen számítógépen a resolv.conf-ban) zónafájljában van egy "localhost A 127.0.0.1" bejegyzés (azaz ha a kliens nyom egy nslookup localhost parancsot, akkor is megkapja, amit szeretne).