Skip to main content

GALVENĀ ROKASGRĀMATA: Jūsu servera iestatīšana uzticamai e-pasta piegādei. I DAĻA: Ugunsmūris

· 8 min read
Customer Care Engineer

email-server-linux-firewall-configuration-smtp-imap-setup-guide

info

Ugunsmūris ir programmatūra (vai aparatūras-programmatūras ierīce), kas kontrolē, kuras savienojuma pieprasījumi uz serveri ir atļauti un kuri ir bloķēti. Lielākajā daļā mūsdienu Linux serveru izplatījumu kāds ugunsmūra veids ir pieejams jau lietošanas gatavībā.

Uzticama e-pasta piegāde adresātam ir atkarīga ne tikai no paša pasta servera, bet arī no pareiziem DNS ierakstiem un ugunsmūra konfigurācijas. Ja ar kaut ko no minētā ir problēmas, jūsu ziņojumi ļoti iespējams nonāks mapē Spam — vai netiks piegādāti vispār.

Šis raksts izklāsta galvenos soļus, kas ļaus jums panākt gandrīz 100% uzticamu ziņojumu piegādi, kas nosūtīti no jūsu servera. 1. daļā mēs detalizēti izskatīsim iespējamās ar ugunsmūri saistītās problēmas; 2. daļā atradīsiet instrukcijas DNS ierakstu konfigurēšanai.

Informācija šajā rakstā attiecas tikai uz pasta serveriem, kas darbojas Linux izplatījumos. Kā piemēri tiek izmantoti Debian 12 un Rocky Linux 8.10 ar FASTPANEL vadības paneli.

Priekšnosacījumi

1. solis. Instalējiet diagnostikas rīkus

Lai pārbaudītu ierakstus un portus, jums būs nepieciešams:

  • dig — DNS ierakstu analīzei

  • lsof — pasta servera stāvokļa pārbaudei

  • netcat — portu pieejamības pārbaudei

  • whois — pašreizējā DNS pakalpojumu sniedzēja pārbaudei

Instalēšana Debian/Ubuntu:

sudo apt update && sudo apt install -y bind9-dnsutils netcat-openbsd lsof whois

CentOS/AlmaLinux/Rocky Linux:

sudo yum install -y bind-utils nmap-ncat lsof whois

Pasta portu pieejamība

info

Ports ir skaitlisks identifikators, ko izmanto, lai adresētu dažādus pakalpojumus serverī. Katrs pakalpojums vai lietojumprogramma klausās savā portā, lai apmainītos ar datiem tīklā (piemēram, HTTP izmanto portu 80, bet SMTP izmanto portu 25).

Lai veiktu visus turpmākos soļus, savienojieties ar savu serveri, izmantojot SSH, ar root lietotāja akreditācijas datiem vai izmantojiet sudo, palaižot komandas, kā parādīts piemēros. Kā savienoties ar serveri, izmantojot SSH, varat uzzināt mūsu SSH rakstā.

2. solis. Pārbaudiet pasta servera statusu

Pirms pārbaudīt, vai porti ir sasniedzami tīklā, vispirms pārliecinieties, ka pasta serveri darbojas un pareizi funkcionē. Izejošos pastu parasti apstrādā Exim vai Postfix, bet ienākošos pastu — Dovecot.

Lai pārbaudītu, vai tie darbojas, izmantojiet komandas:

sudo lsof -i:25
sudo lsof -i:143

Ja pakalpojumi darbojas, jūs saņemsiet izvadi, kas līdzīga šādai:

25. ports:

KOMANDA PID LIETOTĀJS FD TIPS IERĪCE IZMĒRS/IZSLĒGTS NOSaukums
exim    839 exim    4u  IPv6 778199358      0t0  TCP *:smtp (Klausīšanās)
exim    839 exim    5u  IPv4 778199359      0t0  TCP *:smtp (Klausīšanās)

Ja jūsu serveris izmanto citu SMTP serveri, piemēram, Postfix, pirmajā kolonnā redzēsiet tā precīzo nosaukumu, nevis exim. Ja nepieciešams, izmantojiet šo nosaukumu turpmākajās komandās.

143. ports:

KOMANDA PID LIETOTĀJS FD TIPS IERĪCE IZMĒRS/IZSLĒGTS NOSaukums
dovecot 859 root   39u  IPv4 778204692      0t0  TCP *:imap (Klausīšanās)
dovecot 859 root   40u  IPv6 778204693      0t0  TCP *:imap (Klausīšanās)

Tas nozīmē, ka viss ir kārtībā un varat pāriet pie nākamā soļa.

Ja pasta pakalpojumi nedarbojas, jūs saņemsiet tukšu izvadi:

~ sudo lsof -i:25
~
~ sudo lsof -i:143
~

Šajā gadījumā kaut kas nav kārtībā un pasta pakalpojumi nav pieejami. Varat mēģināt tos palaist manuāli un pēc tam pārbaudīt to statusu:

Debian/Ubuntu:

systemctl restart exim4 dovecot
systemctl status exim4
systemctl status dovecot

CentOS/AlmaLinux/Rocky Linux:

systemctl restart exim dovecot
systemctl status exim
systemctl status dovecot

Aktīvajā stāvoklī pakalpojuma statuss izskatīsies līdzīgi šādi:

Exim:

● exim.service - Exim Mail Transport Agent
   Ielādēts: ielādēts (/usr/lib/systemd/system/exim.service; ieslēgts; vendor preset: disabled)
   Aktīvs: aktīvs (darbojas) kopš Sv 2025-11-02 16:38:57 UTC; pirms 57min
 Galvenais PID: 839 (exim)
    Uzdevumi: 1
   Atmiņa: 11.0M
   CGroup: /system.slice/exim.service
           └─839 /usr/sbin/exim -bd -q1h

Brīdinājums: Žurnāls ir rotēts kopš vienības startēšanas. Žurnāla izvade ir nepilnīga vai nav pieejama.

Dovecot:

● dovecot.service - Dovecot IMAP/POP3 e-pasta serveris
   Ielādēts: ielādēts (/usr/lib/systemd/system/dovecot.service; ieslēgts; vendor preset: disabled)
   Aktīvs: aktīvs (darbojas) kopš Sv 2025-11-02 16:38:58 UTC; pirms 58min
     Dokumentācija: man:dovecot(1)
           https://doc.dovecot.org/
   Galvenais PID: 859 (dovecot)
    Uzdevumi: 5
   Atmiņa: 9.5M
   CGroup: /system.slice/dovecot.service
           ├─ 859 /usr/sbin/dovecot -F
           ├─ 880 dovecot/anvil
           ├─ 881 dovecot/log
           ├─ 882 dovecot/config
           └─1729 dovecot/stats

Šajā gadījumā viss ir kārtībā un varat pāriet pie nākamā soļa.

Ja ar pakalpojumiem ir kādas problēmas, redzēsiet izvadi, kas līdzīga šādai:

Exim:

● exim.service - Exim Mail Transport Agent
   Ielādēts: ielādēts (/usr/lib/systemd/system/exim.service; ieslēgts; vendor preset: disabled)
   Aktīvs: neaktīvs (izbeigts) kopš Sv 2025-11-02 17:38:44 UTC; pirms 3s
  Process: 839 ExecStart=/usr/sbin/exim -bd -q${QUEUE} (code=exited, status=0/SUCCESS)
 Galvenais PID: 839 (code=exited, status=0/SUCCESS)

Dovecot:

● dovecot.service - Dovecot IMAP/POP3 e-pasta serveris
   Ielādēts: ielādēts (/usr/lib/systemd/system/dovecot.service; ieslēgts; vendor preset: disabled)
   Aktīvs: neaktīvs (izbeigts) kopš Sv 2025-11-02 17:39:32 UTC; pirms 3s
     Dokumentācija: man:dovecot(1)
           https://doc.dovecot.org/
  Process: 2278 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
  Process: 859 ExecStart=/usr/sbin/dovecot -F (code=exited, status=0/SUCCESS)
 Galvenais PID: 859 (code=exited, status=0/SUCCESS)

Ir daudzi iespējamie iemesli, kāpēc pakalpojumi var nebūt pieejami (kļūdas konfigurācijas failos, nejauši izdzēsti žurnāla faili, brīvas vietas trūkums serverī un daudz kas cits). Šie aspekti nav šī raksta tvērumā.

Ja saskaraties ar šo problēmu un vēlaties to izpētīt paši, mēs iesakām mūsu rakstu par darbu ar sistēmas žurnālu. Vai sazinieties ar savu hostinga pakalpojumu sniedzēja atbalsta komandu, lai saņemtu palīdzību. Mēs uz kodu.cloud strādājam 24/7 un atbildam uz pieprasījumiem dažu minūšu laikā.

3. solis. Pasta portu pieejamības pārbaude no globālā tīkla

Lai e-pasts darbotos pareizi, šādi TCP porti ir jābūt pieejamiem tīklā:

  • 25, 465, 587 — sūtīšanai (SMTP)

  • 143, 993 -  saņemšanai (IMAP)

To pieejamību varat pārbaudīt, izmantojot netcat:

nc -vz 1.2.3.4 25

Aizstājiet 1.2.3.4 ar jūsu servera faktisko IP adresi.

Ja ports ir atvērts, jūs saņemsiet šādu atbildi:

Debian/Ubuntu:

Savienojums ar 1.2.3.4 25 ports [tcp/smtp] izdevās!

CentOS/AlmaLinux/Rocky Linux:

Ncat: Versija 7.92 ( https://nmap.org/ncat )
Ncat: Savienots ar 1.2.3.4:25.
Ncat: Nefaida nekāds līgums 0.01 sekundēs.

Ja ports ir aizvērts, atbilde būs šāda:

Debian/Ubuntu:

nc: savienojums ar 1.2.3.4 portu 25 (tcp) neizdevās: Savienojums atteikts

CentOS/AlmaLinux/Rocky Linux:

Ncat: Versija 7.92 ( https://nmap.org/ncat )
Ncat: Savienojums atteikts.

Palaidiet šo komandu visiem portiem, kas uzskaitīti šīs sadaļas sākumā. Ja tie visi ir pieejami, pārejiet pie šī raksta otrās daļas. Ja nē, pārejiet pie 4. soļa, lai novērstu problēmu.

4. solis. Piekļuves atvēršana (nav obligāti)

Visbiežāk serveri izmanto iptables vai UFW kā ugunsmūri, lai aizsargātos pret nevēlemiem savienojumiem. Palaidiet komandu:

sudo ufw status

Ja saņemat šādu atbildi:

-bash: ufw: komanda nav atrasta

tas nozīmē, ka tiek izmantots iptables. Ja tomēr izvade sākas ar:

Status: aktīvs

Tas nozīmē, ka tiek izmantots UFW.

Pārejiet uz attiecīgo šī soļa apakšsadaļu atbilstoši izmantotajam ugunsmūrim.

warning

Ir arī citas programmatūras sistēmas ugunsmūra pārvaldībai Linux (nftables, firewalld un citas). Tās netiks aplūkotas šajā rakstā, lai netiktu palielināts tā apjoms.

Iptables

warning

Šajā sadaļā visi piemēri attiecas tikai uz IPv4. Ja jūsu serverim ir IPv6 adrese un vēlaties, lai pasta porti būtu pieejami arī caur IPv6, papildus atkārtojiet visas komandas, izmantojot ip6tables vistas iptables.

Lai parādītu visus pašreizējos noteikumus, palaidiet:

sudo iptables -L -v -n --line-numbers

Izvade var atšķirties atkarībā no serverī pievienoto noteikumu kopuma. Pēc noklusējuma nav noteikumu, taču atkarībā no hostinga konfigurācijas vai operētājsistēmas kāda konfigurācija jau var būt veikta. Aplūkosim divus galvenos gadījumus, kas bieži sastopami, konfigurējot pasta serveri.

  1. Politika “Viss, kas nav aizliegts, ir atļauts” (policy ACCEPT)

Šajā gadījumā ugunsmūris pēc noklusējuma atļauj visu trafiku, līdz tiek izveidots noteikums, kas to tieši bloķē. Šī politika parasti tiek izmantota pēc noklusējuma.

Tālāk ir sniegts noteikumu kopuma piemērs, kur SSH un pasta porti ir bloķēti:

Ķēde INPUT (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis
1       51  5637 DROP       6    --  *      *       0.0.0.0/0            0.0.0.0/0            tcp multiport dports 22
2        0     0 DROP       6    --  *      *       0.0.0.0/0            0.0.0.0/0            tcp multiport dports 25,143,993,587,465

Ķēde FORWARD (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis

Ķēde OUTPUT (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis
1        0     0 DROP       6    --  *      *       0.0.0.0/0            0.0.0.0/0            tcp multiport dports 25,143,993,587,465

Šajā piemērā:

  • Politika ACCEPT definē noklusējuma uzvedību: visi savienojumi ir atļauti, ja vien nav norādīts citādi.

  • Ķēde INPUT (ienākošie savienojumi): jauni savienojumi uz 22. portu (SSH) un visiem standarta pasta portiem (SMTP: 25, 465, 587; IMAP: 143; IMAPS: 993) ir bloķēti.

  • Ķēde OUTPUT (izejošie savienojumi): izejošie paketes uz tiem pašiem portiem ir bloķēti.

Numurs pie noteikuma ir parādīts rindas sākumā (num). Ja vēlaties izdzēst, piemēram, noteikumu, kas bloķē pasta portus INPUT ķēdē (noteikuma numurs 2), komanda būs:

sudo iptables -D INPUT 2

Šeit:

  • -D — ir komanda noteikuma dzēšanai.

  • INPUT — ir ķēde, no kuras tiek dzēsts noteikums (šajā gadījumā ienākošais trafiks).

  • 2 — ir rindas numurs, kurā atrodas dzēšamais noteikums.

Līdzīgi, lai noņemtu bloķēšanu uz izejošiem portiem no šī piemēra, jums jāpalaiž:

sudo iptables -D OUTPUT 1
warning

Rindas numuri iptables -L -v -n --line-numbers izviedē var mainīties, ja pievienojat vai dzēšat citus noteikumus. Tāpēc, ja pievienojat jaunus noteikumus, rindas numuri var mainīties. Lai izvairītos no kļūdām, pirms noteikuma dzēšanas vienmēr pārbaudiet pašreizējos rindas numurus.

Pēc tam, lai pārliecinātos, ka viss ir pareizi, palaidiet komandu vēlreiz:

iptables -L -v -n --line-numbers

Izvadē nedrīkst būt noteikumi, kas bloķē pasta portu darbību:

Ķēde INPUT (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis
1       51  5637 DROP       6    --  *      *       0.0.0.0/0            0.0.0.0/0            tcp multiport dports 22

Ķēde FORWARD (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis

Ķēde OUTPUT (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis

Ja noteikumi joprojām ir klāt, pārbaudiet ievadīto komandu un rindas numuru pareizību.

Pēc ugunsmūra noteikumu maiņas pārliecinieties, ka esat saglabājis izmaiņas; pretējā gadījumā tās tiks zaudētas pēc servera restartēšanas. Lai saglabātu pašreizējos iptables noteikumus, palaidiet:

Debian/Ubuntu:

iptables-save > /etc/iptables/rules.v4

CentOS/AlmaLinux/Rocky Linux:

iptables-save > /etc/sysconfig/iptables

Pēc tam vēlreiz pārbaudiet pasta portu pieejamību, kā aprakstīts 3. solī. Ja tie joprojām nav pieejami, pārejiet pie 5. soļa. Ja viss ir kārtībā, pārejiet pie šī raksta otrās daļas.

  1. Politika “Bloķēt visu, kas nav skaidri atļauts” (policy DROP)**

Šis konfigurācijas veids ir daudz stingrāks. Visi porti un protokoli ir bloķēti pēc noklusējuma, un tikai skaidras atļaušanas noteikumi specifiskiem portiem ļauj trafiku caur. Šī ir drošāka un ieteicamāka pieeja serveriem, īpaši, ja vēlaties samazināt riskus.

Piemērs šādas konfigurācijas noteikumiem:

Ķēde INPUT (politika DROP 306 pakas, 17962baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis
1       92 12474 ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2      466 32947 ACCEPT     6    --  *      *      0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Ķēde FORWARD (politika ACCEPT 0 pakas, 0baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis

Ķēde OUTPUT (politika DROP 197 pakas, 29192baiti)
num   pkts bytes mērķis     prot opt in     out     avots               galamērķis
1       44 10332 ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

Šajā piemērā:

  • Ķēde INPUT (ienākošie savienojumi): politika ir DROP, proti, visas paketes ir bloķētas pēc noklusējuma, izņemot tās, kurām ir atļaušanas noteikumi.

1. noteikums: ACCEPT state RELATED,ESTABLISHED — ļauj ienākošās paketes, kas saistītas ar esošiem savienojumiem vai ir ar tiem saistītas. Tas ir svarīgi, lai serveris pareizi saņemtu atbildes uz izejošiem savienojumiem (piemēram, SSH, pastu, DNS vaicājumiem). 2. noteikums: ACCEPT tcp dpt:22 — atļauj jaunus ienākošos savienojumus 22. portā (SSH).

  • Ķēde OUTPUT (izejošie savienojumi): politika ir DROP, proti, visas izejošās paketes ir bloķētas pēc noklusējuma.

1. noteikums: ACCEPT state RELATED,ESTABLISHED — ļauj izejošās paketes, kas saistītas ar esošiem savienojumiem. Tas ļauj serverim atbildēt uz klienta pieprasījumiem (piemēram, SSH, pasta savienojumiem) un uzturēt stabilu savienojumu.

Tātad redzam, ka nav atļaušanas noteikumu pasta portiem. Lai tos pievienotu, palaidiet šādas komandas:

sudo iptables -A INPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT

Pēc tam saglabājiet noteikumus:

Debian/Ubuntu:

iptables-save > /etc/iptables/rules.v4

CentOS/AlmaLinux/Rocky Linux:

iptables-save > /etc/sysconfig/iptables

Pēc tam vēlreiz pārbaudiet pasta portu pieejamību, kā aprakstīts 3. solī. Ja tie joprojām nav pieejami, pārejiet pie 5. soļa. Ja viss ir kārtībā, pārejiet pie šī raksta otrās daļas.

UFW (Unkomplicētā ugunsmūris)

Dažos serveros zamiesto iptables tiek izmantots UFW — vienkāršots interfeiss ugunsmūra konfigurēšanai. Tas ir piemērots pamata pasta servera konfigurācijai un bieži vien atrodams Ubuntu un Debian.

Lai redzētu, vai UFW ir iespējots un kuri noteikumi ir aktīvi, palaidiet:

sudo ufw status verbose

Piemēra izvade:

Status: aktīvs
Žurnāla ierakstīšana: ieslēgta (zema)
Noklusējums: bloķēt (ienākošos), atļaut (izejošos)
Jauni profili: izlaist

Šeit:

  • Default: deny (incoming) — pēc noklusējuma visi ienākošie savienojumi ir bloķēti.

  • Default: allow (outgoing) — pēc noklusējuma visi izejošie savienojumi ir atļauti.

Lai pasta serveris darbotos pareizi, ir jāatver standarta porti. Veiciet šādas komandas secīgi:

sudo ufw allow 25/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp

Ja jums ir arī izejošie ierobežojumi, jums jāatļauj SMTP porti izejošajam pastam:

sudo ufw allow out 25/tcp
sudo ufw allow out 465/tcp
sudo ufw allow out 587/tcp

Pēc noteikumu pievienošanas varat tos pārbaudīt vēlreiz:

sudo ufw status numbered

Jūs redzēsiet noteikumu sarakstu ar numuriem. Ja vēlaties dzēst noteikumu, izmantojiet numuru no izvades:

sudo ufw delete 3

UFW gadījumā noteikumi tiek saglabāti automātiski un paliek spēkā pēc servera restartēšanas.

Pēc tam vēlreiz pārbaudiet pasta portu pieejamību, kā aprakstīts 3. solī. Ja tie joprojām nav pieejami, pārejiet pie 5. soļa. Ja viss ir kārtībā, pārejiet pie šī raksta otrās daļas.

5. solis. Ugunsmūris ir konfigurēts pareizi, taču pasta porti joprojām nav pieejami (nav obligāti)

Šāda uzvedība norāda, ka pasta porti ir bloķēti nevis jūsu serverī, bet gan jūsu hostinga pakalpojumu sniedzēja iekārtās. Šajā gadījumā izveidojiet atbalsta pieprasījumu un lūdziet viņiem atbloķēt šos portus jūsu serverim. Ja tas nav iespējams, vienīgā izvēle būs mainīt hostinga pakalpojumu sniedzēju.

Mēs uz kodu.cloud nekādā veidā neierobežojam pasta portu darbību. Mūsu noteikumi aizliedz masveida e-pasta sūtīšanu, bet godprātīgiem klientiem e-pasts ir pieejams pilnībā. Jums pat nav nepieciešams konfigurēt pasta serveri, jo visiem mūsu klientiem tiek nodrošināta bezmaksas piekļuve FASTPANEL vadības panelim ar paplašinātu licenci. Pasūtiet serveri ar vadības paneli un sāciet izmantot e-pastu savā domēnā dažu minūšu laikā.

Nākamie soļi pareizai DNS ierakstu konfigurācijai tiks aplūkoti šī raksta otrajā daļā.