Kim Torgersen


Cron Och Mail

article feature image


Innehåll


Vid en snabb sökning på “varför skickar inte cron mail” så får man mest svar att man måste lägga till “MAILTO=” i sin crontab.
Jo, men sen då? Det kommer ändå inga mail.

Cron, och andra applikationer, behöver ett ytterliggare system för att kunna skicka mail.
Svaren på internet verkar förutsätta att detta redan finns. Jag använder Arch, och då kommer detta inte med vid installation.
Jag har tidigare använt postfix, och hittade inget som verkade lösa uppgiften bättre. Så jag valde att använda det.

Scenario

  • Det finns redan en mailserver (postfix) på nätverket.
  • Det finns flera fysiska servrar samma nätverk som kör cron och behöver skicka mail till mailservern.
  • Det finns en enhet på annan adress som också kör cron-job.

Steg för cron att skicka mail

  1. Installera postfix
    sudo pacman -S postfix
  2. aktivera postfix
    sudo systemctl enable --now postfix
  3. header i crontab
    MAILFROM=cron  
    MAILTO=kim@torgersen.se
    
    Jag använder bara “cron” som från i varje fil. Då får jag mail från cron@hostname i min inbox. Så jag kan se vart jobbet kördes.

Efter detta kommer det mail från enheterna på samma nätverk som mailservern. För andra enheter var det knepigare, och varierar beroende på situation. Du behöver konfigurera postfix så att den kan skicka att skicka mail. Behövs mycket konfigurering (certifikat osv) kan det vara smart att bara ha en enhet som dedikeras för detta. Sedan används denna som relä åt andra enheter.

I mitt fall så kan alla “klienter” kommunicera direkt med mailservern, som finns på eget nätverk. (Både klienter och server kör postfix.) Därför kan min från-adress vara vad som helst.

Lösning för enhet utanför nätverket

Ganska snart kom jag fram till att ISP’n på det andra nätverket blockerar port 25 (smtp). Detta är vanligt.
Men det finns en VPN-tunnel mellan de båda nätverken.

Jag kunde konfigurera den enheten att använda mailservern som relä. Dvs kommunicera direkt med servern via VPN, då smtp via internet var blockerat.

Inställningar på klienter

Ställer in på alla klient-postfix att endast lyssna på loopback-adressen. Det är ingen som ska skicka mail till/via dessa enheter.
Ställer in på enheten på det separata nätverket att använda mailservern som relä. (Mailserverns adress: 192.168.x.xxx)

/etc/postfix/main.cf

inet_interfaces = loopback-only
...
relayhost = 192.168.x.xxx

Inställningar på server

På mailservern behöver du tillåta andra enheter att skicka mail via servern.
‘permit_mynetworks’ ligger med som policy på flera restriktioner. Det jag gör på servern är att utöka ‘mynetworks’ med samtliga lokala nätverk.

/etc/postfix/main.cf

mynetworks = 192.168.1.0/24, 192.168.4.0/24, 192.168.6.0/24, 127.0.0.0/8
smtpd_relay_restrictions =
    permit_mynetworks
    ...

smtpd_sender_restrictions =
    permit_mynetworks
    ...

smtpd_helo_restrictions =
    permit_mynetworks
    ...

ISP och port 25

Det är vanligt att din ISP blockerar utgående mail på port 25. Men det är också vandligt att din ISP tillhandahåller ett smtp-relä som du kan använda. Men då krävs det att du har en domän att skicka ifrån, och rätt DNS-records för att verifiera dig som avsändare osv. Det är på detta sätt mailservern skickar mail.
Hade det inte varit för VPN så hade jag fått göra så här med, men nu slapp jag.