Note, that this recipe is not updated long time and could be outdated!
Got it.

Postfix e-pasta serveris

Postfix ir MTA, kas saņem un nosūta e-pastu no vienas "mītnes" uz citu. E-pasta saņemšanai un pārsūtīšanai tiek izmantots SMTP protokols.
Postfix nenodrošina e-pasta nogādi līdz lietotāja pasta kastītei. Šīs funkcijas veic MDA serveri, piemēram, Dovecot e-pasta serveris.

Saturs

Uzstādīšana

  1. root lietotājas izpilda komandu:

    apt-get install postfix
  2. Atbild uz jautājumu atbild ar Internet Site ar OK
  3. Uz System mail name atbild, piemēram, ar odo.lv un OK
  4. /etc/hosts failā rindu, kas sākas ar "127.0.0.1 java-eim", papildina ar pilnu adreses vārdu, pievieno pilnu adreses vārdu arī "publiskajai" IP adresei (192.168.x.x, kur x.x ir kaut kādi dažādi cipari, to apskatās ar ifconfig komandu):

    127.0.1.1 java-eim.test.lv
    192.168.x.x java-eim.test.lv java-eim
  5. Ja serverim pieslēdzās ne tikai no "atcilpas", bet ari no citām mītnēm (piemēram, iekšējā tikla ar adresēm 10.0.0.0), pievieno atļauto adrešu sarakstu failā /etc/postfix/main.cf:

    mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104 [::1]/128, 10.0.0.0/24
  6. Uzstāda vēstuļu apstrādes rīkus:

    apt install mailutils
  7. Pārbauda, ka e-pasta sūtīšana strādā

    sendmail vards.uzvards@test.lv
    test
    .

    Katras rindas beigās ievada Enter. Tukša rinda ar punktu norāda, ka vēstules teksts ir beidzies un nospiežot Enter tā tiek nosūtīta. Pārbauda, ka nav kļūdu ziņojumu un e-pasts ir saņemts.

  8. Ja kļūdu ziņojumu nav, bet e-pasts nav saņemts, iespējams ka vēstules saņēmējs serveris to ir izdzēsis vai pievienojis spama/mēstuļu sadaļai, jo vēstules avota serveri nav uzskatījis par pietiekami uzticamu.

Iestatīšana

SMTPS ieslēgšana

  1. Failā /etc/postfix/master.cf atkomentē rindu #smtps... un pievieno rindas:

    ...
    smtps     inet  n       -       y       -       -       smtpd
      -o syslog_name=postfix/smtps
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    ...
  2. Pārstartē postfix, un, ja nepieciešams pievieno 456 portu kā atļautu iptables vai ufw.
  3. Pārbauda kā SMTP ar TLS, tikai 25 porta vietā norāda 465 portu.

Vēstuļu sinonīmu definēšana

  1. Vēstuļu adresātu sinonīmus parasti norāda failā /etc/aliases (par to var pārliecināties, failā /etc/postfix/main.cf apskatot alias_... rindiņas).
  2. Vispārīga sinonīmu faila sintakse ir

    saņemtā_adrese:  pārsūtāmā_adrese

    kur gan saņemtā_adrese, gan pārsūtāmā_adrese var būt:

    1. e-pasta adrese formā: saņēmējs@domēns.lv
    2. saņēmējs neminot domēnu,
    3. lietotājs kā Linux sistēmā reģistrēts lietotājs (ierakstīts failā /etc/passswd) vai lietotāja sinonīms (skatīt tālāk).

Vēstules pārsūtīšana citam lietotājam

  1. Failā /etc/aliases pievieno sinonīmu un oriģinālo lietotāju, piemēram:

    vards.uzvards:   student
  2. Pārģenerē datubāzi, ievadot komandu:

    newaliases

Vēstules pārsūtīšana uz citu adresi

  1. Failā /etc/aliases oriģinālajam saņēmējam pievieno pārsūtāmo adresi (sinonīmu):

    lietotajs:   parsutama@adrese.com
  2. Pārģenerē datubāzi, ievadot komandu:

    newaliases
  3. Pārstartē postfix servisu, ievadot komandu:

    /etc/init.d/postfix restart

PHP skripta palaišana pēc vēstules saņemšanas

  1. Failā /etc/potsfix/master.cf
    1. nomaina rindu, kas sākas ar smtp uz sekojošu:

      ...
      smtp      inet  n - - - - smtpd -o content_filter=mailscript:dummy
      ...
    2. beigās pievieno jaunas rindas:

      ...
      mailscript unix - n n - - pipe
        flags=F user=www-data argv=/home/www/postfix.php ${sender} ${size} ${recipient}
  2. Izveido failu /home/www/postfix.php ar sekojošu saturu:

    #!/usr/bin/php
    <?php
    $file = fopen("/tmp/postfixtest", "a");
    fwrite($file, "Script successfully ran at ".date("Y-m-d H:i:s")."\n");


    // read from stdin
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
      $line = fread($fd, 1024);
      $email .= $line;
    }
    fclose($fd);

    fwrite($file, $email);
    fclose($file);

    ?>
  3. Uzstāda faila tiesības:

    chown www-data:www-data /home/www/postfix.php
    chmod +x /home/www/postfix.php
  4. Pārstartē postfix:

    postfix reload
  5. Nosūta servera lietotājiem vēstuli un vēro, kas tiek rakstīts failos /var/log/mail.log un /tmp/postfixtest

Saite: Triggering a PHP script when your Postfix server receives a mail

Pārslēgšana uz maildir

Maildir ir vēstuļu glabāšanas formāts mapēs un failos.

  1. Nomaina konfigurāciju (failā /etc/postfix/main.cf) ar komandām:

    postconf -e "home_mailbox = Maildir/"
    postconf -e "mailbox_command = "
  2. Pārstartē postfix:

    /etc/init.d/postfix restart
  3. Izmaina arī Dovecot iestatījumus

Virtuālo domēnu pievienošana

  1. Failā /etc/postfix/main.cf pievieno rindas:

    virtual_alias_domains = citdomens.lv
    virtual_alias_maps = hash:/etc/postfix/virtual
  2. Izveido failu /etc/postfix/virtual un pievieno tajā rindas:

    info@citsdomens.lv     valdis
  3. Uzģenerē hešu un pārstartē postfix:

    sudo postmap /etc/postfix/virtual
    sudo /etc/init.d/postfix restart

Pieteikšanās ar SASL un datu šifrēšana ar TLS

Postfix

  1. Izveido vai iegūst SSL sertifikātus
  2. Ir nepieciešami sekojoši faili:
    1. /etc/ssl/private/server.key
    2. /etc/ssl/certs/server.crt
    3. vēlams /etc/ssl/certs/CA.pem fails sertifikātu ķēdes nodrošināšanai
  3. Izmaina Postfix konfigurāciju:

    sudo postconf -e 'smtpd_sasl_type = dovecot';
    sudo postconf -e 'smtpd_sasl_path = private/auth-client';
    sudo postconf -e 'smtpd_sasl_local_domain =';
    sudo postconf -e 'smtpd_sasl_security_options = noanonymous';
    sudo postconf -e 'broken_sasl_auth_clients = yes';
    sudo postconf -e 'smtpd_sasl_auth_enable = yes';
    sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination';
    sudo postconf -e 'smtp_tls_security_level = may';
    sudo postconf -e 'smtpd_tls_security_level = may';
    sudo postconf -e 'smtp_tls_note_starttls_offer = yes';
    sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key';
    sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt';
    sudo postconf -e 'smtpd_tls_loglevel = 1';
    sudo postconf -e 'smtpd_tls_received_header = yes';
    sudo postconf -e 'myhostname = odo.lv';
    1. Ja ir CA.pem fails, izpilda komandu:

      sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/CA.pem';
  4. Pārstartē Postfix:

    sudo /etc/init.d/postfix restart
  5. Izmaina arī Dovecot iestatījumus

Pārbaude

  1. Piesakās serverim:

    nc odo.lv 25
  2. Ievada komandu:

    ehlo odo.lv
  3. Pārliecinās, ka citu starpā parādās rindas:

    250-STARTTLS
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250 8BITMIME
  4. Ievada:

    quit

Kļūdu risināšana

Vēstules nosūtīšana ar SMTP

  1. Pārliecinās, ka "postfix" serveris klausās 25 portu.
  2. Darbina komandu

    nc localhost 25
  3. Ieraksta šādas komandas:

    ehlo localhost.localnet
    mail from:test@test.lv
    rcpt to:test@test.lv
    data

    Pēc vēlēšanās aiz "data" komandas var ierakstīt "date:" un "subject:", kā arī vēstules tekstu. Piemēram:

    date: Fri Jan 1 12:00:00 EET 1999
    subject: Vienkāršs tests
    Sveiks!
    .

    Tāpat kā programmā "sendmail", arī sūtot datus tieši SMTP protokolam, ir būtiski vēstuli pabeigt, rakstot jaunā rindā punktu (.) un tūlīt pēc tam atkal pārejot jaunā rindā.

  4. Kad visas vēstules nosūtītas, nc sesiju pabeidz ar SMTP komandu quit ar sekojošu Enter.

    Ievērojiet, ka vēstules nosūtītāja e-pastā var ierakstīt ko vien vajag, tāpat arī nosūtīšanas datuma lauciņā "Date:". Viens no spama/mēstuļu identificēšanas kritērijiem ir atpakaļadrese, kuras DNS vārds nesakrīt ar e-pasta izcelsmes IP adresei atbilstošo DNS vārdu.

TLS testēšana ar vienkāršo autentifikāciju

  1. Pārkodē lietotāja vārdu un paroli Base64 kodējumā, ievadot komandu:

    printf "\000lietotajs\000parole"|base64
  2. Pieslēdzas serverim, nodibinot TLS savienojumu ar komandu:

    openssl s_client -starttls smtp -crlf -connect localhost:25

    un pārliecinās, ka savienojums ir izveidots

  3. Piesakās pasta serverim, ievadot komandu:

    ehlo localhost.localnet
    auth plain AGxpZXRvdGFqcwBwYXJvbGU=

    kur AGxpZXRvdGFqcwBwYXJvbGU= ir iepriekš pārkodētais pieteikšanās vārds un parole

  4. Ievada komandas pasta sūtīšanai:

    ehlo localhost.localnet
    mail from:test@test.lv
    rcpt to:test@test.lv
    data
    ...
    .

Kļūda: status=bounced (User unknown in virtual alias table)

  1. Pārliecinās, kas norādīts failā /etc/mailname, ja tur ir, piemēram:

    citsdomens.lv
  2. Pārliecinās, kas ir failā /etc/postfix/main.cf

    ...
    virtual_alias_domains = citsdomens.lv
    virtual_alias_maps = hash:/etc/postfix/virtual
  3. Pareizāk to labot, lai /etc/postfix/main.cf virtual_alias_domains nesakrīt ar /etc/mailname norādīto.
  4. Vai arī:
    1. virtual_alias_maps norādītajā failā (piemēram, /etc/postfix/virtual) norāda mērķa adresi šādā  formā:

      info@citsdomens.lv info@localhost
    2. Pārģenerē kartes hešu un pārlaiž postfix:

      postmap /etc/postfix/virtual
      /etc/init.d/postfix restart

Netiek saņemtas vēstules no Gmail

  1. Pārliecinās, ka strādā E-pasta autentifikācija ar DKIM, DMARC un SPF
  2. Nomaina /etc/postfix/main.cf faila rindu uz:

    compatibility_level = 1

Žurnalēšana

  1. Lai Postfix rakstītu detalizētāku žurnālu, failā /etc/postfix/master.cf nomaina rindu:

    smtp      inet  n       -       -       -       -       smtpd

    uz

    smtp      inet  n       -       -       -       -       smtpd -v

    Un mapē /var/log/ vēro failus: mail.err,  mail.info,  mail.log,  mail.warn.

  2. Darbojošos iestatījumus pārbauda, palaižot komandu:

    postconf -n
    komandas izvadu var arī izmantot kā konfigurācijas failu /etc/postfix/main.cf

Uzturēšana

  1. Nenosūtīto vēstuļu rindas apskate:

    postqueue -p
  2. Nenosūtītās vēstules satura apskate:

    postcat -q AAAAAA

    kur AAAAAA ir vēstules identifikators no posqueue.

  3. Nenosūtīto vēstuļu rindas iztīrīšana:

    postsuper -d ALL

Saites


  
Tags Linux E-pasts Serveris
Created by Valdis Vītoliņš on 2008-08-09 14:11
Last modified by Valdis Vītoliņš on 2021-07-08 18:45
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License