Postfix CentOS sistemoje: istorinis diegimo vadovas ir saugos pastabos


Paskelbimo data:

Atnaujinta:


Techniniai straipsniai > Postfix CentOS sistemoje: istorinis diegimo vadovas ir saugos pastabos

2026 m. būsena ir saugus naudojimas

Išvada: vien paleisti „Postfix“ neužtenka saugiai gamybinei pašto paslaugai. Reikia palaikomos OS ir „Postfix“ versijos, teisingų DNS įrašų, griežtos persiuntimo politikos, autentifikuoto submission prievado, šiuolaikinio TLS, sertifikatų atnaujinimo, apsaugos nuo piktnaudžiavimo, žurnalų, eilės stebėjimo ir realiai patikrinto pristatymo.

Ką išmoksite

  • Kas buvo sukonfigūruota originalioje CentOS 7 / Postfix 2.10.1 apžvalgoje.
  • Kodėl submission autentifikavimo nustatymai negali netyčia sukurti atviro persiuntimo serverio.
  • Kokie TLS, SASL, DNS, ugniasienės ir operacijų sprendimai turi būti perkurti dabartiniam diegimui.

Kam tai skirta: administratoriams, vertinantiems paveldėtą „Postfix“ diegimo aprašą. Tai nėra kopijuoti ir tiesiogiai naudoti skirtas viešo pašto serverio receptas.

2026 m. kontekstas: „CentOS 7“ ir nurodyta „Postfix“ versija nebepalaikomos. Toliau pateikta sena konfigūracija nepatvirtinta kaip saugi dabartinei pašto paslaugai ir negali būti diegiama nepakeista. Ypač svarbu, kad submission apribojimai turėtų aiškią atmetimo taisyklę, kredencialai būtų apsaugoti, o paslauga naudotų distribucijos pateiktą systemd vienetą.

Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.

Pagrindiniai oficialūs šaltiniai

Apžvalga

Šiame straipsnyje išsaugota istorinė „Postfix“ diegimo ir submission prievado konfigūravimo „CentOS 7“ sistemoje procedūra. Senas pavyzdys turi saugos ir sintaksės trūkumų, todėl greta paaiškinama, ką būtina peržiūrėti.

Jei tame pačiame serveryje diegiate ir „Dovecot“, žr. atskirą IMAP bei POP3 vadovą.

„Postfix“ yra pašto perdavimo agentas: jis priima, nukreipia ir pristato SMTP laiškus. „Dovecot“ teikia naudotojams prieigą prie pašto dėžučių per IMAP ar POP3 ir gali teikti autentifikavimo paslaugą. Vien jų įdiegimas dar nesukuria saugios bei patikimai pristatančios pašto sistemos.

Pradiniame pavyzdyje naudotos šios versijos:

CentOS versija7.6 (1810)
"Postfix" versija2.10.1

Turinys

  1. Diegimas
  2. Sąrankos informacija
  3. Santrauka

1. Diegimas

Šiame skyriuje įdiegiamas „Postfix“ paketas ir patikrinama, ar paleidžiami jo procesai.

1-1. "Postfix" diegimas

Įdiekite „Postfix“ naudodami yum. Komandai reikia root teisių.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postfix

1-2. Paleidimo patikrinimas

Paleiskite „Postfix“ ir patikrinkite jo procesus.

[root@hostname ~]# /usr/sbin/postfix start
[root@hostname ~]# ps aux | grep postfix
root      1485  0.7  0.2  89744  2128 ?        Ss   16:02   0:00 /usr/libexec/postfix/master -w
postfix   1486  0.2  0.4  89848  4080 ?        S    16:02   0:00 pickup -l -t unix -u
postfix   1487  0.2  0.4  89916  4104 ?        S    16:02   0:00 qmgr -l -t unix -u
root      1489  0.0  0.1 112824   964 pts/0    S+   16:02   0:00 grep --color=auto postfix

Jei matomi master, pickup ir qmgr procesai, pradinis paleidimas pavyko. Baigę patikrą paslaugą sustabdykite.

[root@hostname ~]# /usr/sbin/postfix stop

2. Sąrankos informacija

2-1. Pagrindinė konfigūracija

Pagrindiniai „Postfix“ nustatymai saugomi /etc/postfix/main.cf. Prieš keisdami išsaugokite failo kopiją ir patikrinkite galutinę konfigūraciją postfix įrankiais.

[root@hostname ~]# vi /etc/postfix/main.cf

Istoriniame pavyzdyje keičiamos šios reikšmės:

main.cf【Prieš pakeitimą】


#
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
~sutrumpinimas~
#
#mydomain = domain.tld
~sutrumpinimas~
#myorigin = $myhostname
#myorigin = $mydomain
~sutrumpinimas~
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = localhost
~sutrumpinimas~
mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
~sutrumpinimas~
#mynetworks = 168.100.189.0/24, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
~sutrumpinimas~
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/

main.cf【po pakeitimo】


#
myhostname = example.com
#myhostname = virtual.domain.tld
~sutrumpinimas~
#
mydomain = example.com
~sutrumpinimas~
#myorigin = $myhostname
myorigin = $mydomain
~sutrumpinimas~
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
~sutrumpinimas~
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
~sutrumpinimas~
mynetworks = 127.0.0.0/8, 192.168.100.0/24
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
~sutrumpinimas~
#
#home_mailbox = Mailbox
home_mailbox = Maildir/

myhostname nurodo visą pašto serverio vardą, mydomain – organizacijos domeną, o myorigin – domeną, pridedamą prie vietoje siunčiamų laiškų. Pavyzdžio https://example.com/ domene naudojama example.com dalis, tačiau realaus pašto serverio myhostname dažniausiai būtų atskiras pilnas vardas, pavyzdžiui, mail.example.com.

Pavyzdinis adresas yra username@example.com.

mynetworks apibrėžia patikimus klientų tinklus, kuriems leidžiama persiųsti laiškus be SASL autentifikavimo. Nurodykite tik savo valdomus, tikrai patikimus adresus; per platus diapazonas gali sukurti atvirą persiuntimo serverį.

home_mailbox = Maildir/ nurodo vietinio pristatymo formatą ir katalogą naudotojo namų kataloge. Tai susiję su gaunamų vietinių laiškų saugojimu, o ne su išsiųstų laiškų aplanku.

2-2. Vietinių gavėjų ir TLS nustatymai

local_recipient_maps tikrina, ar vietinis gavėjas atitinka sistemos naudotoją arba aliases duomenų bazės įrašą. Tai padeda atmesti laiškus neegzistuojantiems vietiniams gavėjams.

[root@hostname ~]# vi /etc/postfix/main.cf

Istoriniame pavyzdyje įjungiama ši reikšmė:

main.cf【Prieš pakeitimą】


#local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =

main.cf【po pakeitimo】


local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =

Failo pabaigoje taip pat nustatoma laiško dydžio riba ir seni TLS parametrai:

main.cf


### MAIL SIZE (20 MB.)
message_size_limit = 20971520
### TLS
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt
smtpd_tls_key_file = /etc/pki/tls/private/localhost.key

smtpd_tls_cert_file ir smtpd_tls_key_file turi rodyti į pašto serverio sertifikatą ir jam priklausantį privatų raktą. Raktą skaityti turi galėti tik būtini procesai, o sertifikato vardas turi atitikti klientų naudojamą pašto serverio vardą.

Prieš įjungdami submission paslaugą paruoškite patikimą TLS sertifikatą. Bendroji sertifikato kūrimo sąvoka aptarta šiame straipsnyje, tačiau pašto serverio protokolams ir politikai vadovaukitės dabartine „Postfix“ dokumentacija:

Apache HTTP serveris CentOS: diegimas ir saugus paleidimas

2-3. „Postfix“ submission prievado nustatymai

Submission prievadas skirtas autentifikuotam naudotojo pašto kliento laiškų pateikimui, o ne serverių tarpusavio SMTP srautui.

[root@hostname ~]# vi /etc/postfix/master.cf

Redaguojamas master.cf, o ne main.cf; šių panašiai pavadintų failų nesupainiokite.

Toliau paliktas istorinis pakeitimas:

master.cf【Prieš pakeitimą】


#submission inet n - n - - smtpd
~sutrumpinimas~
#-o smtpd_sasl_auth_enable=yes
~sutrumpinimas~
#-o smtpd_client_restrictions=$mua_helo_restrictions
~sutrumpinimas~
#-o smtpd_sender_restrictions=$mua_sender_restrictions
~sutrumpinimas~
#-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

master.cf【po pakeitimo】


submission inet n - n - - smtpd
~sutrumpinimas~
-o smtpd_sasl_auth_enable=yes
~sutrumpinimas~
-o smtpd_client_restrictions=permit_sasl_authenticated
~sutrumpinimas~
-o smtpd_sender_restriction=permit_sasl_authenticated
~sutrumpinimas~
-o smtpd_recipient_restrictions=permit_sasl_authenticated


Šio pakeisto bloko nekopijuokite į gamybą. Jame smtpd_sender_restriction parašyta vienaskaita, o client ir recipient apribojimuose nėra galutinio reject. Vien permit_sasl_authenticated neužtikrina teisingos submission politikos. Sukurkite konfigūraciją pagal palaikomos „Postfix“ versijos SASL dokumentaciją, reikalaukite TLS ir po autentifikuotų klientų leidimo aiškiai atmeskite kitus.

Istoriniame „CentOS 7“ pavyzdyje SASL autentifikavimui skirtos bibliotekos įdiegiamos per yum.

[root@hostname ~]# yum -y install cyrus-sasl
[root@hostname ~]# yum -y install cyrus-sasl-plain
[root@hostname ~]# yum -y install cyrus-sasl-md5
[root@hostname ~]# yum -y install cyrus-sasl-devel

Tada saslauthd nustatomas autentifikuoti pagal UNIX paskyrų slaptažodžius. Šis shadow mechanizmas išplečia sistemos paskyrų riziką; naujam diegimui rinkitės aiškiai suprojektuotą tapatybių šaltinį ir neleiskite prisijungti nereikalingoms sisteminėms paskyroms.

[root@hostname ~]# vi /etc/sysconfig/saslauthd

Istoriniame faile nurodyta:

saslauthd


#MECH=pam
MECH=shadow

2-4. SASL įjungimas

Įjunkite saslauthd paslaugą. Po konfigūracijos pakeitimų ją taip pat paleiskite ir patikrinkite autentifikavimą atskiroje bandymo aplinkoje.

[root@hostname ~]# systemctl enable saslauthd
[root@hostname ~]# systemctl is-enabled saslauthd
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep saslauthd
saslauthd.service                                enabled
[root@hostname ~]# systemctl daemon-reload

2-5. Paleidimo patikrinimas

Paleiskite „Postfix“ ir patikrinkite jo procesus. Prieš paleidimą taip pat verta vykdyti sintaksės bei konfigūracijos patikrą ir peržiūrėti žurnalus.

[root@hostname ~]# /usr/sbin/postfix start
[root@hostname ~]# ps aux | grep postfix
root      1838  0.0  0.1  89744  2080 ?        Ss   18:14   0:00 /usr/libexec/postfix/master -w
postfix   1839  0.0  0.3  89848  3988 ?        S    18:14   0:00 pickup -l -t unix -u
postfix   1840  0.0  0.3  89916  4008 ?        S    18:14   0:00 qmgr -l -t unix -u
root      1845  0.0  0.0 112824   968 pts/0    S+   18:15   0:00 grep --color=auto postfix

Jei matomi master, pickup ir qmgr procesai, paslauga veikia, tačiau tai dar nepatvirtina TLS, SASL, persiuntimo politikos ar pristatomumo. Baigę šią pradinę patikrą paslaugą sustabdykite.

[root@hostname ~]# /usr/sbin/postfix stop

2-6. Automatinio paleidimo nustatymas

Kad „Postfix“ būtų paleistas kartu su sistema, įjunkite distribucijos pateiktą systemd paslaugą. Toliau pateikta procedūra skirta „CentOS 7“.

Patikrinkite, ar yra /usr/lib/systemd/system/postfix.service. Jei vieneto nėra, pirmiausia išsiaiškinkite, kodėl jo nepateikė paketas. Toliau išsaugotas pasirinktinio vieneto pavyzdys, tačiau gamyboje geriau naudoti tiekėjo prižiūrimą vienetą.

[root@hostname ~]# touch /etc/systemd/system/postfix.service
[root@hostname ~]# vi /etc/systemd/system/postfix.service

Istoriniame faile įrašyta ši konfigūracija:

[Unit]
#Aprašymas.
Description=Postfix
#kontrolė prieš vykdymą ir po jo.
#Before=xxx.service
After=syslog.target network.target

[Service]
#Naudotojo ir grupės paskyrimas
User=root
Group=root
#Suaktyvinus būseną, nustatykite būseną Aktyvuota.
Type=oneshot
RemainAfterExit=yes
#Paleiskite, sustabdykite ir perkraukite.
ExecStart=/usr/sbin/postfix start
ExecStop=/usr/sbin/postfix stop
ExecReload=/usr/sbin/postfix reload

[Install]
#3 lygmens lygiaverčiai nustatymai.
WantedBy=multi-user.target

Išsaugoję vienetą, įjunkite jį per systemctl. Jei failas ką tik sukurtas ar pakeistas, daemon-reload paprastai vykdomas prieš enable arba start.

[root@hostname ~]# systemctl enable postfix
[root@hostname ~]# systemctl is-enabled postfix
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep postfix
postfix.service                                enabled
[root@hostname ~]# systemctl daemon-reload

3. Santrauka

Istoriniame pavyzdyje „Postfix“ įdiegiamas, nustatomi domenai, vietinis pristatymas, TLS, submission prievadas, SASL ir automatinis paleidimas.

Seno master.cf pakeitimo tiesiogiai nenaudokite: peržiūrėkite direktyvos pavadinimą, pridėkite aiškią atmetimo politiką, reikalaukite TLS ir patikrinkite, kad serveris netaptų atviru persiuntimo mazgu. Viešai pašto paslaugai taip pat būtini teisingi DNS bei reputacijos įrašai, stebėjimas, atnaujinimai ir bandymai.