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 e-pasta serveris konfigurāciju.

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 SSL sertifikātus, vai arī pārliecinās, ka tie jau ir izveidoti.
  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

Dovecot

  1. Izmaina Dovecot konfigurāciju, lai tas izmantotu SASL autentifikāciju, failā (ja nepieciešams, to izveido) /etc/dovecot/local.conf pievienojot rindas:

    auth_mechanisms = plain login
    service auth {
      unix_listener /var/spool/postfix/private/auth-client {
        group = postfix
        mode = 0660
        user = postfix
      }
    }
  2. Pārstartē Dovecot:

    sudo /etc/init.d/dovecot restart

Pārbaude

  1. Piesakās serverim:

    telnet 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

    telnet 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, telnet 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

Ž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īto vēstuļu rindas iztīrīšana:

    postsuper -d ALL

Saites

Izveidojis Valdis Vītoliņš 2008-08-09 17:11
Pēdējais mainījis Valdis Vītoliņš 2017-04-24 18:12
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License