tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Vain lähtevä SMTP-email: Postfix ja Mailgun (mail relay)

Virtuaaliserverien syvin kiusa on mahdottomuus tehdä sähköpostipalvelinta. Toki tuo rajoitus on vahva turvallisuuskysymys. Sähköposti on kaikkien käytössä, mutta tekniikka sen takana on monimutkainen. Verkkosivujen esittäminen ja suunnilleen kaikki muukin on paljon jouhevampaa kuin sähköpostiliikenteen tekniikka. Koska huonosti asennetun ja hoidetun sähköpostipalvelimen kautta pystytään vähintää spammaamaan, niin sitä ei sitten enää tehdä tee-se-itse asenteella. Onneksi sähköpostien lähettäminen on helpompaa, mutta siihenkin tarvitset ulkoisen palvelun mukaan. Yksi sellainen on Mailgun.

Jos sinulla ei ole tarvetta eräällä tavalla lähettää virtuaaliserverin sähköposteja, niin älä näe vaivaa. Tee tili Gmailiin, G Suiteen, Mailguniin tai noin kiljuunaan muuhun vastaavaam ja hoida asia niiden kautta. WordPress, Drupal, Moodle… ylipäätään kaikki ne ohjelmat, joita käytetään, kun puhutaan netistä tai webistä, mahdollistavat sähköpostin lähettämisen joko natiivisti tai lisäosalla.

Sen sijaan jos sinulla on serverillä mitä tahansa muuta toimintaa, oli se toimintojen seuraamista tai jotain muuta, niin tarvitset ehdottomasti lähtevälle sähköpostille palvelimen. Mennään tässä jutussa läpi miten siihen työhön valjastetaan Postfix ja ulkoisena välittäjänä, releenä, Mailgun.

Mailgun: asetukset

Mene osoitteeseen https://mailgun.com/signup. Rekisteröityminen on simppeliä, mutta tarvitset siihen luottokortin (toki myös Electron toimii). Korttia ei veloiteta, jos pysyt ilmaisen palvelun määrissä. Mutta huolehdi myös siitä, että pysyt alle 10 000 mailissa kuukaudessa; se on 333 sähköpostia päivässä. Vertailuksi, Gmail sallii 500 sähköpostia per 24 tuntia ja G Suite 2000. Tosin, jos nuo mailimäärät eivät sinulle riitä, koska postituslistat kannattaa hoitaa vaikka Mailchimpillä, niin silloin ehkä pystyt maksamaan 100 tuhannesta mailista noin 80 taalaa kuukaudessa.

Kun olet vahvistanut tilisi (kaksivaiheinen, joten puhelinnumero on pakko antaa) ja saanut asiaankuuluvat mailit, mm. API:n, niin on aika asettaa postin vaatimat tiedot.

Mene työpöydälle (Dashboard). Koska tili on uusi, niin sähköposteihin liitettävän domainin asettaminen löytyy sivun oikeasta laidasta työlistalta: Add a custom domain. Jos sinulla on jo tili, niin domainin lisäämisen löydät valikon Domains alta nappulana Add New Domain.

Klikkaa sitä.

 

  • Anna haluamasi alidomain – itse käytän tässä ping.eksis.one, koska tulen käyttämään tätä asennusta vain järjestemäilmoituksille, en asiakkailla tai muille käyttäjille. Se voi siis olla mikä tahansa. Muista, että sinulla täytyy olla varsinainen domain ja se täytyy löytyä serverin DNS-tiedoista.
  • Aseta täppä kohtaan EU, niin postit liikkuvat vanhalta mantereelta. Jos vastaanottajat ovat lähempänä USA:ta, niin valitse US.
  • Valitse haluamasi DKIM-avaimen koko – sitä käytetään spämmiä vastaan. Kaipa 1024 on sopiva.

Klikkaa Add domain.

 

Palaat takaisin etusivulle (paitsi jos ihmettelet liian kauan, jolloin joudut kirjautumaan uudestaan sisälle). Näet työpöydän alaosassa listan lähettämiseen käytetyistä domaineista. Siellä on nyt kaksi: juuri tekemäsi ja valmis hiekkalaatikkokäyttöön tarkoitettu.

Klikkaa tekemääsi domainia.

Sinulle näytetään vaadittavat DNS-tiedot.

  • Ensimmäisessä kohdassa on linkkejä neuvoihin miten DNS-tiedot asetetaan muutamissa isoissa yrityksissä. Ainakin DigitalOceanin ohjeet olivat melkoisen iäkkäitä, mutta pääsee niilläkin vauhtiin, jos ei oikein tiedä miten ne asetetaan.
  • Aseta kaikki tarjotut arvot. Laita TTL arvoon 1800, niin saat muutokset näkyviin tässä elämässä.
  • Jos sinulla on jo asennettu jokin postipalvelin, kuten Gmail, niin sinun ei tarvitse välttämättä asettaa MX-tietueita. Muutoin ne kannattaa laittaa paikalleen.
  • Käy välillä kahvilla tai tee jotain hyödyllistä ja klikkaa aina välillä nappulaa Verify DNS settings.

Kun DNS-tiedot ovat löydettävissä, niin sinulta kysytään haluatko käyttää API:a vain SMTP-serveriä.

Jos et ehdottomasti tiedä paremmin, niin valitse SMTP.

Sinulle kerrotaan tarvittavat tiedot, kuten SMTP-serverin nimi, käyttäjätunnus ja salasana. Ne kannattaa ottaa talteen, mutta toki ne saa uudestaankin, kun menee työpöydälle, klikkaa domainia ja sitten valitsee taas SMTP:n. Lisäksi esitellään koodinpätkä, jonka käytöstä en tiedä mitään.

Postfixin asennus

Urakka menee hieman takaperoisessa järjestyksessä, sillä ensin laitetaan muutama asetus kuntoon ja vasta sitten asennetaan Postfix. Koska itse kirjaudun shelliin aina root-tunnuksella, niin en tarvitse sudo -komentoa. Jos sinä käytät omaa tunnustasi, niin laita aina sudo eteen.

Aloitetaan kuitenkin tutulla parivaljakolle:

apt update
apt dist-upgrade
  • Kerrotaan, että Postfix toimii releenä:
debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"
  • Kerrotaan Postifixille, että serverin hostname on myös mailiserverin hostname:
debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"
  • Käsketään Postfix käyttämään välitettäviin posteihin Mailgunin SMTP-serveriä:

Jos valitsit Mailgunissa EU-alueen, niin käytä tätä

debconf-set-selections <<< "postfix postfix/relayhost string smtp.eu.mailgun.org"

Jos taasen otit US:n, niin laita tämä:

debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"
  • Asennetaan Postfix:
apt -y install postfix
  • Oletko jo aiemmin asentanut Postfixin? Siinä tapauksessa pääset asetuksiin tällä:
dpkg-reconfigure postfix
  • Kerrotaan Postfixille Mailgunin tiedot. Avataan kirjautumistiedot sisältävä tiedosto:
nano /etc/postfix/sasl_passwd
  • Laita tiedostoon Mailgunin serveri serveri Mailgunin SMTP-asetuksissa ilmoittama tunnus ja salasana:
smtp.mailgun.org username@mailgunin-alidomain:salasana

Minulla ne olisivat siten:

smtp.eu.mailgun.org postmaster@ping.eksis.one:enminäsinullekerro
  • Tiedosto sasl_passwd on selkokielinen tiedosto, joten turvataan se varmistamalla, että omistajuus on root-tunnuksella:
chown root:root /etc/postfix/sasl_passwd
  • Laitetaan luku- ja kirjoitusoikeudet vain root-tunnukselle:
chmod 600 /etc/postfix/sasl_passwd
  • Käsketään Postfixiä käyttämään uusia kirjautumistietoja:
postmap /etc/postfix/sasl_passwd
  • Estetään anonyymien kirjautuminen ja kiristetään turvallisuutta:
nano /etc/postfix/main.cf

Lisää tämä main.cf-tiedoston loppuun:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = AUTH LOGIN
  • Käynnistetään Postfix uudestaan:
systemctl restart postfix

Jos sinulla on host-nimi sama kuin FQDN, niin sinun ei tarvitse tehdä tätä vaihetta. Minulla host on pro, joka ei ole FQDN, joten joudun tekemään asian, jonka nimi on domain mapping. Yksinkertaistettuna kerron, että osoite root@pro (tai mikä tunnus lähettäjä onkaan) näkyy lähettäjän osoitteena alarm@ping.eksis.org. Jos olet DigitalOceanin asiakas, niin host on sama kuin asettamasi dropletin nimi ja jos haluat vaihtaa sen, niin joudut muuttamaan hallinnassa dropletin nimeä.

  • Luodaan mapping-tiedosto:
nano /etc/postfix/generic

Lisää sinne tarvittavat osoitteet. Voit laittaa useamman eri riveille, jos sinulla on tarvetta, kuten että asennat useamman alidomainen kerralla. Ns. aidon lähettäjän nimiosa ennen @-merkkiä saa olla ihan mitä tahansa, kunhan domain on se alidomain, jonka loit Mailgunissa. Minä lisään tämän, mutta muuta se sinulle sopivaksi:

root@pro alert@ping.eksis.one
  • Kerrotaan ”uudelleenohjaus” Postfixille:
postmap /etc/postfix/generic
  • Se täytyy kertoa myös Postfixin konfiguraatiotiedostossa:
nano /etc/postfix/main.cf

Lisää tämä tiedoston loppuun:

smtp_generic_maps = hash:/etc/postfix/generic
  • Ja taas täytyy käynnistää Postfix uudestaan:
systemctl restart postfix
  • Testataan. Sen takia täytyy asentaa paketti lisää, koska muutoin ei saada lähetettyä postia komentoriviltä:
apt -y install mailutils
  • Palomuuri tarvitsee portin auki, jotta mailit pääsisivät ulos. Jos olet jo käyttänyt sivustoilla jotain tapaa lähettää sähköposteja, niin portti on luultavasti jo auki. Tällä saa asian varmistettua:
ufw allow 587
  • Lähetetään testiposti:
mail -s "Hei, olen otsikko" joku-oikea-mailiosoitteesi <<< "Tässä olisi sähköpostin tekstiä"

Jos posti löysi perille, niin kaikki on hyvin. Voit tarkistaa asian myös Mailgunin hallinnasta välilehdestä Sending.

Virheen etsintä

Kun posti ei koskaan saapunut Mailguniin, eikä siten myös sinullekaan, niin aletaan ihmettelemään mikä meni pieleen.

Tarkista ihan ensimmäiseksi, että sinulla on oikeat tiedot tiedostossa /etc/postfix/sasl_passwd. Muista käyttää niitä tunnuksia, jotka sait alidomainia asetettaessa, älä käytä Mailgunin tilille kirjautumiseen käytettäviä.

Vilkaise mitä virhelogista löytyy:

tail -n 100 /var/log/mail.log

Minulla oli tällainen rivi:

Oct 20 02:10:36 pro postfix/smtp[5090]: 29CF03B33FD: to=<jakke.lehtonen@gmail.com>, relay=smtp.mailgun.org[52.45.160.225]:25, delay=0.54,
delays=0.02/0.02/0.3/0.21, dsn=5.7.1, status=bounced (host smtp.mailgun.org[52.45.160.225] said: 550 5.7.1 Relaying denied (in reply to RCPT TO command))

Serveri smtp.mailgun.org ei ollut hyväksynyt postia. Minulla oli tiedostossa /etc/postfix/sasl_passwd SMTP-serverinä smtp.eu.mailgun.org, mutta olinkin alussa perusasetuksia tehdessäni käyttänyt US-maailman smtp.mailgun.org – serveriä. Yritin siis väärää serveriä. Avasin tiedoston /etc/postfix/main.cf ja korjasin oikeaksi. Postfixin uudelleenkäynnistys ja uusi yritys. Nyt toimi. Huvittavaa oli, että hetken kuluttua vääräkin yritys saapui.

Nyt täytyy enää asettaa tuo hyötykäyttöön, mutta se on oma kysymyksensä.

Connect ja disconnect koko ajan

Saatat löytää mail.log tiedostosta vastaavan tapaiset rivit toistumassa uudelleen ja uudelleen tasaisin väliajoin. Silti sähköpostit liikkuvat normaalisti ja lähetys näkyy logissa kuten kuuluukin:


Apr 22 16:27:38 backend postfix/smtpd[11535]: connect from localhost[127.0.0.1]
Apr 22 16:27:38 backend postfix/smtpd[11535]: disconnect from localhost[127.0.0.1] ehlo=1 quit=1 commands=2

Tuo ei ole virhe, vaan ilmoitus siitä, että jokin ohjelma käynnistää Postfixin localhostissa ja sammuttaa yhteyden samantien tekemättä mitään. Yleensä kyse on jonkin valvontaohjelman, kuten Monitin, pingi. Siinä ainoastaan tarkastetaan, että postipalvelin on pystyssä ja toimii.

Itselläni tuo tuli Monitin toimesta kerran minuutissa ja siitä ei ole sinällään mitään haittaa. Kyse on aivan samasta kuin että websivustoa pingataan, että tiedetään sen olevan toiminnassa. Ongelmanpoikasta on siinä, että se  täyttää login ja jos joutuu penkomaan jotain oikeaa virhetilannetta, niin halutun tiedon löytäminen voi olla tuskaa.

Monitin kanssa ongelman aiheutti tämä rivi postfixin seuranta-asetuksissa:

if failed host localhost port 25 with protocol smtp for 2 times within 3 cycles then restart

Koska virtuaaliserverillä ei ole mitään mieltä seurata porttia 25, joka on suurimmassa osassa, ellei kaikissa, suljettu, niin muutin sen selvittämään relay host osoitetta portin 587 kautta:


if failed host email-smtp.eu-west-1.amazonaws.com port 587 
type tcp protocol smtp using tls
with timeout 15 seconds
then alert

Nyt testit eivät enää ilmaannu logiin.