Csak kimenő email beállítás non-prod szerveren

 ( fejesjoco | 2017. december 30., szombat - 1:01 )

Cél: házi szerverről email értesítéseket lehessen küldeni saját Gmailes címemre, esetleg máshova is. Email fogadása lehetetlen, cgNAT és dinamikus IP miatt egyaránt.

Mikor legutóbb csináltam ilyet, volt vagy 10 éve, simán a t-online smtp-jét állítottam be Exim smarthostnak, kamu feladóval (root@localhost vagy ilyesmi). Azóta sokkal szigorúbb lett az emailezés.

Azt gondolom, hogy ha teljesen kamu feladója van az emailnek, akkor az nem biztos, hogy megérkezik bárhova, mert spamnek fog tűnni. Ha meg igazi feladót adok meg, pl. a saját Gmail címemet, ugyancsak nem fog megjönni, mert nem az elvárt IP-ről indul a levél, és SPF meg ilyesmi fogja megölni.

És milyen SMTP szervert használjak? Megbízható és ingyenes közül egyet választhatok? Használhatnám a Gmail-t, de nem szívesen írom be a Gmail-es jelszavam egy config fájlba. Kamu Gmail fiók szintén nem szép dolog, ott is bejöhet mobilos validáció, kitiltás vagy mittudomén.

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ő.

ISP SMTP?

Gmailen is van smtp. De természetesen nem kamu gmail címmel hanem a valódival kell használni.


Normális HUP-ot használok!

Határeset, lásd lentebb. Furcsán fog kinézni, hogy én küldtem levelet saját magamnak.

Különböző gmail aliasokat használhatsz címzettként, ez alapján szabályokat is létrehozhatsz, így nem zavaró, hogy mindig Te vagy a feladó.
Fejesjoco+smartmontools@gmail.com, fejesjoco+lmsensors@gmail.com stb.
https://support.google.com/mail/answer/22370?hl=hu

De ha akarod, hozz létre több account-ot, e célból nem tilos:
"The Creation and Use of Multiple Gmail Accounts
Don’t create or use multiple accounts to abuse Google policies, bypass Gmail account limitations, circumvent filters, or otherwise subvert restrictions placed on your account. (For example, if you’ve been blocked by another user or have had your Gmail account disabled due to abuse, don’t create a replacement account that engages in similar activity.)
You’re also not allowed to create Gmail accounts by automated means or buy, sell, trade, or re-sell Gmail accounts to others"
https://www.google.com/gmail/about/policy/

Üdv,
Marci

Tudtommal még ma sem tilos magadnak gmailre leveleket írnod. Régebben küldtem én is magamnak ilyen módon szerverekről üziket.


Normális HUP-ot használok!

en regisztraltam egy gmail fiokot a hazi szerveremnek, azzal levelezik smtp-n, siman jelszavas auth-al.

Ez technikailag pont ugyanaz a szituáció, (submission) mint amikor a saját gépeden a kedvenc levelezőkliensedet használod.

Authentikált SMTP, és azt az SMTP szervert használod, amelyik a feladó domain SPF rekordjához passzol. (Ha a feladó címe @gmail.com-ra végződik, akkor a Google SMTP szerverét használod, stb.)

> nem szívesen írom be a Gmail-es jelszavam egy config fájlba

Authentikált SMTP-hez kénytelen leszel beírni az authentikációs adatokat...

"Ez technikailag pont ugyanaz a szituáció, (submission) mint amikor a saját gépeden a kedvenc levelezőkliensedet használod."

Nem teljesen. Én egy ember vagyok, nekem van egy saját email címem. A szerver nem egy ember. Kicsit gáz, ha a root@hp.localnet accountról menő levél úgy néz ki, mintha Gipsz Jakab <gipszjakab@gmail.com> adta volna fel. Sőt, a szerveren több account is van, pl. smartmontool@hp.localnet és lmsensors@hp.localnet, amit jó lenne megkülönböztetni. N darab kamu accountot regisztrálni még gázabb.

"Authentikált SMTP-hez kénytelen leszel beírni az authentikációs adatokat..."

Igen, de nem a saját éles Gmailes fiókomhoz valót. A kamu Gmailes fióktól pedig tartok egy kicsit.

Az email @ utáni része (domain part) kötött. Ha a külvilágba szeretnél valid e-mailt küldeni, akkor azt nem teheted meg @hp.localnet végződéssel, annak érvényes, globálisan létező, ellenőrizhető domainnek kell lennie.

A @ előtti rész (local part) egy teljesen másik kérdés. Amennyiben egy levelezési szolgáltatótól (legyen az akár a gmail, akár bármi más) postafiókot kapsz, akkor ott a szolgáltató általában valamilyen keretek közé szorítja, hogy mi lehet a @ előtt. Ez nem feltétlenül egy darab e-mail címet jelent, lehetnek mindenféle alias-ok, stb.

Ha már gmail: emlékeim szerint a local part tartalmazhat szeparátorként "+" jelet, és az alapján akár szűrheted / válogathatod is a leveleket.

Ha van saját domained és/vagy hosztneved, akkor a levelezést biztosító szolgáltatótól kaphatsz arra megoldást, hogy Te tudd specifikálni, mi legyen a @ előtt. A gmail-nek is van ilyen megoldása.

Jelen esetedben talán az a legjobb megoldás, hogy csinálsz a szervereidnek egy darab postafiókot, mondjuk

címmel. A leveleket pedig az alábbi címmel küldöd ki:

gipszjakabszervere+cron@gmail.com
gipszjakabszervere+smartmontools@gmail.com
gipszjakabszervere+lmsensors@gmail.com

Ha a külvilágba szeretnél valid e-mailt küldeni, akkor azt nem teheted meg @hp.localnet végződéssel, annak érvényes, globálisan létező, ellenőrizhető domainnek kell lennie.

de megteheti (abban az ertelemben legalabbis, hogy raprobalhat), mert azt a fogado szerver donti el, hogy mit ellenoriz (pl. hello helo name, etc). Egy normalis helyen nyilvan ellenorzik, hogy a felado cime(nek domainje) koser-e, stb.

Ugy latom, pl. a joco.name domainben nincs spf/dkim hasznalva, igy abban tetszoleges local reszt is beallithat a sender cimben...

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

Én kipróbáltam.
Küldtem emailt gmail-es fiókra a

címről és néhány mp alatt megérkezett.
Tehát lehet.

--

nTOMasz
"The hardest thing in this world is to live in it!"

Lehet, hogy hülyeség, de most ez állt össze:
* A saját gmail címem gipsz.jakab@gmail.com.
* Ha egy levél feladója valami helyi account (pl. root), átírjuk gipsz.jakab+root@gmail.com-ra. Ha be van állítva a from, azt is átírjuk, vagy eldobjuk a levelet. Az átírás 1 db reguláris kifejezéssel megy.
* Ha egy levél címzettje valami helyi account, ugyanígy átírjuk. Ha létező címzett, akkor hagyjuk meg annak, ami.
* Valami minimál sendmail-szerű démon annyit csinál, hogy a leveleket a Gmail SMTP-jével küldi el, application specific password-del autentikálva.

Így minden levél feladója és címzettje valódi email cím lesz, mégis látszik benne, hogy honnan jött/hova ment, és minden levél megjelenik a Gmail inboxomban (és a sentben is). Azt hiszem, ez így egyben megold minden problémát. Vagy túlkomplikálom? Értem, hogy miért olyan nagy a szigor emailek terén (köszi, spammerek), de szerintem egy tök alap use case, hogy egy szerverről az értesítések minden gond nélkül eljussanak egy emberhez, helyes feladóval meg minden.

Gmailnél még lehet olyan gond, hogy tudtommal a kiküldött levelek feladóját átírja, és nem tudom, meghagyja-e a pluszos részt. Ugyanez működhet akkor is, ha az ISP-mnél regisztrálok egy címet, és a küldőket arra írom át (a címzett továbbra is a saját gmail címem). Vagy a küldő és feladó lehet két külön Gmail cím. Ez már mindegy.

Még nekem kell utánanéznem, hogy a kérdéses programok milyen feladóval és címzettel fognak próbálkozni, lesz-e gondom envelope vs header címzéssel, meg ilyesmi. Illetve meg kell találni azt a programot, ami ezt tudja. Léteznek olyan egyszerű dolgok, mint pl. ssmtp, de szerintem kevés lesz. Lehet, hogy Postfix/Exim lesz.

A doksi alapján nem vagyok benne biztos, hogy a gmail elfogad aliast (gipsz.jakab+root@gmail.com) feladónak.

Üdv,
Marci

Mondjuk a header-be betehet saját részeket és akkor mindegy lehet az e-mail cím: ezek alapján válogatja a fiókban a leveleket. (Nem ismerem a Gmailt, gondolom lehet header sor alapján rendezni alatta is, én Exchange-et használok, ott sima ügy.)
--
https://naszta.hu

En ilyesmit probalnek:

https://www.shellhacks.com/postfix-gmail-relay-linux-mint-ubuntu-debian/

De a mail header tartalmat ettol fuggetlenul a kuldo alkalmazasnak/szkriptnek kell megfeleloen osszeallitani.

Igen, ez jó kezdet, de önmagában nem elég. Egyrészt kell egy forward, hogy pl a rootnak címzett levél kimenjen, rendes címzettel. Másrészt jó lenne látni a levélben, egyedi fejlécek nélkül, hogy azt eredetileg ki küldte és kinek.

Add the full address of your preferred account in a new .forward file with the command below:

  echo  > ~/.forward

, ahol username egy alias-szál kiegészített vagy egy erre a célra létrehozott cím.

Üdv,
Marci

unix user helyett jobb az alias map feature, ha mar postfix-rol van szo...

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

A legjobb lenne 1 db regex az N darab (vagy 2xN: külön küldő és címzett) mapping helyett. X@localhost -> gipsz.jakab+X@gmail.com oszt' kész. Vagy csak nekem jut eszembe ilyen? Lehet írnom kéne gyorsan egy újabb sendmail alternatívát.

lol. Mielott ujrairnad a sendmail-t, probald ki a postfix address rewriting feature-jet :-)

http://www.postfix.org/ADDRESS_REWRITING_README.html#generic

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

Kb. valami ilyesmi megteszi:

/etc/postfix/generic:
    (.*)@localdomain.local               gipsz.jakab+$1@gmail.com

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

de miert root-nak kuldod a leveleket?

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

Pár dolog alapból rootnak vagy egyéb helyi accountnak megy, pl. cron (tudom, hogy át lehet állítani, de ahány user, annyi helyen). Egy csomó mindent kézzel kell konfigurálni, pl. smartd, APT unattended upgrades.

Elismerem, van egy szépsége annak, ha helyi accountnak történő mail deliveryt teljesen tiltjuk, és csak kifelé engedjük. Csak akkor egy csomó helyre kell kézzel beírni a címet. És ha valamit kihagyok, akkor menni fog az email a 19313 PID-ű mittudoménmilyen service accountnak és sose fogom észrevenni.

Sokkal kevesebb dologhoz kell hozzányúlni, ha azt mondom, minden helyi accountnak címzett levél legyen átírva egy külső címre (1 db regex a megfelelő helyre). És akkor tuti nem maradok le semmiről. Én azt gondoltam volna, ez a tipikus usecase.

Arra van a local aliases (/etc/aliases). Ezt még a postfix is kezeli...

sub

Kiderült, hogy ezt null clientnek becézik. http://www.postfix.org/STANDARD_CONFIGURATION_README.html#null_client