Postfix e-pasta serveris
Should prepare before: Dovecot e-pasta serveris |
Saturs
- Uzstādīšana
- Iestatīšana
- PHP skripta palaišana pēc vēstules saņemšanas
- Pārslēgšana uz maildir
- Virtuālo domēnu pievienošana
- Pieteikšanās ar SASL un datu šifrēšana ar TLS
- Kļūdu risināšana
- Uzturēšana
- Saites
Uzstādīšana
Kā root lietotājas izpilda komandu:
apt-get install postfix- Atbild uz jautājumu atbild ar Internet Site ar OK
- Uz System mail name atbild, piemēram, ar odo.lv un OK
/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-eimJa 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/24Uzstāda vēstuļu apstrādes rīkus:
apt install mailutilsPā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.
- 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
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
...- Pārstartē postfix, un, ja nepieciešams pievieno 456 portu kā atļautu iptables vai ufw.
- Pārbauda kā SMTP ar TLS, tikai 25 porta vietā norāda 465 portu.
Vēstuļu sinonīmu definēšana
- 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).
Vispārīga sinonīmu faila sintakse ir
saņemtā_adrese: pārsūtāmā_adresekur gan saņemtā_adrese, gan pārsūtāmā_adrese var būt:
- e-pasta adrese formā: saņēmējs@domēns.lv
- saņēmējs neminot domēnu,
- 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
Failā /etc/aliases pievieno sinonīmu un oriģinālo lietotāju, piemēram:
vards.uzvards: studentPārģenerē datubāzi, ievadot komandu:
newaliases
Vēstules pārsūtīšana uz citu adresi
Failā /etc/aliases oriģinālajam saņēmējam pievieno pārsūtāmo adresi (sinonīmu):
lietotajs: parsutama@adrese.comPārģenerē datubāzi, ievadot komandu:
newaliasesPārstartē postfix servisu, ievadot komandu:
/etc/init.d/postfix restart
PHP skripta palaišana pēc vēstules saņemšanas
- Failā /etc/potsfix/master.cf
nomaina rindu, kas sākas ar smtp uz sekojošu:
...
smtp inet n - - - - smtpd -o content_filter=mailscript:dummy
...beigās pievieno jaunas rindas:
...
mailscript unix - n n - - pipe
flags=F user=www-data argv=/home/www/postfix.php ${sender} ${size} ${recipient}
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);
?>Uzstāda faila tiesības:
chown www-data:www-data /home/www/postfix.php
chmod +x /home/www/postfix.phpPārstartē postfix:
postfix reload- 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
Nomaina konfigurāciju (failā /etc/postfix/main.cf) ar komandām:
postconf -e "home_mailbox = Maildir/"
postconf -e "mailbox_command = "Pārstartē postfix:
/etc/init.d/postfix restart- Izmaina arī Dovecot iestatījumus
Virtuālo domēnu pievienošana
Failā /etc/postfix/main.cf pievieno rindas:
virtual_alias_domains = citdomens.lv
virtual_alias_maps = hash:/etc/postfix/virtualIzveido failu /etc/postfix/virtual un pievieno tajā rindas:
info@citsdomens.lv valdisUzģ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
- Izveido vai iegūst SSL sertifikātus
- Ir nepieciešami sekojoši faili:
- /etc/ssl/private/server.key
- /etc/ssl/certs/server.crt
- vēlams /etc/ssl/certs/CA.pem fails sertifikātu ķēdes nodrošināšanai
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';Ja ir CA.pem fails, izpilda komandu:
sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/CA.pem';
Pārstartē Postfix:
sudo /etc/init.d/postfix restart- Izmaina arī Dovecot iestatījumus
Pārbaude
Piesakās serverim:
nc odo.lv 25Ievada komandu:
ehlo odo.lvPārliecinās, ka citu starpā parādās rindas:
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIMEIevada:
quit
Kļūdu risināšana
Vēstules nosūtīšana ar SMTP
- Pārliecinās, ka "postfix" serveris klausās 25 portu.
Darbina komandu
nc localhost 25Ieraksta šādas komandas:
ehlo localhost.localnet
mail from:test@test.lv
rcpt to:test@test.lv
dataPē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!
.Kad visas vēstules nosūtītas, nc sesiju pabeidz ar SMTP komandu quit ar sekojošu Enter.
TLS testēšana ar vienkāršo autentifikāciju
Pārkodē lietotāja vārdu un paroli Base64 kodējumā, ievadot komandu:
printf "\000lietotajs\000parole"|base64Pieslēdzas serverim, nodibinot TLS savienojumu ar komandu:
openssl s_client -starttls smtp -crlf -connect localhost:25un pārliecinās, ka savienojums ir izveidots
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
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)
Pārliecinās, kas norādīts failā /etc/mailname, ja tur ir, piemēram:
citsdomens.lvPārliecinās, kas ir failā /etc/postfix/main.cf
...
virtual_alias_domains = citsdomens.lv
virtual_alias_maps = hash:/etc/postfix/virtual- Pareizāk to labot, lai /etc/postfix/main.cf virtual_alias_domains nesakrīt ar /etc/mailname norādīto.
- Vai arī:
virtual_alias_maps norādītajā failā (piemēram, /etc/postfix/virtual) norāda mērķa adresi šādā formā:
info@citsdomens.lv info@localhostPā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
- Pārliecinās, ka strādā E-pasta autentifikācija ar DKIM, DMARC un SPF
Nomaina /etc/postfix/main.cf faila rindu uz:
compatibility_level = 1
Žurnalēšana
Lai Postfix rakstītu detalizētāku žurnālu, failā /etc/postfix/master.cf nomaina rindu:
smtp inet n - - - - smtpduz
smtp inet n - - - - smtpd -vUn mapē /var/log/ vēro failus: mail.err, mail.info, mail.log, mail.warn.
- komandas izvadu var arī izmantot kā konfigurācijas failu /etc/postfix/main.cf
Darbojošos iestatījumus pārbauda, palaižot komandu:
postconf -n
Uzturēšana
Nenosūtīto vēstuļu rindas apskate:
postqueue -pNenosūtītās vēstules satura apskate:
postcat -q AAAAAAkur AAAAAA ir vēstules identifikators no posqueue.
Nenosūtīto vēstuļu rindas iztīrīšana:
postsuper -d ALL
Saites
- Postfix mēstuļu novēršana
- Postgrey mēstuļu filtrs
- Spamassassin mēstuļu filtrs
- https://help.ubuntu.com/community/Postfix
- https://help.ubuntu.com/12.04/serverguide/postfix.html
- RFC0821 — SMTP Specifikācija
- RFC4616 — SASL specifikācija
Created by Valdis Vītoliņš on 2008-08-09 14:11
Last modified by Valdis Vītoliņš on 2021-07-08 18:45