Erinevus lehekülje "Postfix" redaktsioonide vahel

Allikas: Kuutõrvaja
(Amavis)
(Amavis)
408. rida: 408. rida:
 
     -o relay_recipient_maps=
 
     -o relay_recipient_maps=
  
probleemid gpg kinnituega
+
probleem gpg kinnitusega
 
http://www.bramschoenmakers.nl/en/node/359
 
http://www.bramschoenmakers.nl/en/node/359
  

Redaktsioon: 6. mai 2009, kell 12:16

Sissejuhatus

Postfix on vabavaraline mail transfre agent (MTA), serveritarkvara mis mõeldud emailide vastuvõtmiseks ning saatmiseks. Postfixi kiirus, kergelt administreeritavus ja turvalisus on teinud sellest ühe enimkasutatava mta ja laialdase alternatiivi sendmailile.

Selle kirjutas hollandlane Wietse Venema ja kasutusse võeti esmakordselt 1999.a.

Anatoomia

Kitsam pilt MTA'st. Tegemist ei ole mingi väikese tarkvaraga. Kokku koosneb postfix kuskil 11'nest põhilisest käsurea utiliidist ja 20nest protsessist/deemonist.

Psfxcomn.gif

Kollased märgid on mail programmid neist kastid on maili järjekorrad (queue) või failid

sinised kastid on lookup table'd

programmid üldkasti sees töötavad kontrollituna postfixi master daemoni poolt info selle sees kuulub samuti postfixi mailisüsteemile

Kuna deemoneid on äärmiselt palju ja nende kõigi esiletoomine võtaks palju aega siis kõige olulisemad deemonid on

  • master

The master daemon is the brain of the Postfix mail system. It spawns all other daemons.

  • smtpd

The smtpd daemon (server) handles incoming connections.

  • smtp

The smtp client handles outgoing connections.

  • qmgr

The qmgr-Daemon is the heart of the Postfix mail system. It processes and controls all messages in the mail queues.

  • local

The local program is Postfix’ own local delivery agent. It stores messages in mailboxes.

Posfixil on neli põhilist järjekorda: maildrop, incoming, active ja deferred. Lokaalne meil saadetakse maildropile ja kopeeritakse incoming järjekorda. Incoming järjekord on mailidele mis äsja saabunud ja queue manager pole neid veel ülevaadanud. Mailid mida ei saa edastada tõstetakse defferred järjekorda ,et see ei jääks saabuvatele-saadetavatele kirjadele jalgu.

Kaustad

Peamisteks postfixi kaustadeks on

/etc/postfix (/ust/local/etc/postfix BSD's) kus asuvad seadistusfailid ja tabelid aadressidega

/usr/libexec/postfix postfixi deemonid

/var/spool/postfix järjekorra (queue) failid

/usr/sbin postfixi käsud

Pisut detailsemat juttu http://www.linuxjournal.com/article/9454

Paigaldus

Üldiselt peaks iga vähegi enesest lugupidavam ja suurem operatsioonisüsteem omama mingit oma porti/installipakki postfixist. Postfix on juba paljude operatsioonisüsteemide vaikimisi mta'ks, näiteks ubuntul. Kaasa tuleb installiga ka ohtralt seadistuse näiteid, abifaile ja manuale

Seadistus

Postfixi põhilisteks seadistusfailideks on main.cf ja master.cf. Main.cf sisaldab postfixi seadistusparameetreid mis vajalikud mailide liigutamiseks ning master.cf seadistab deemonprotsesse

Main.cf

Kõige lihtsamaks main.cf seadistuseks oleks

smtpd_banner = $myhostname ESMTP $mail_name (no spam please ;) )
myhostname = loomaaed.tartu.ee
mydomain = $myhostname
myorigin = $mydomain
inet_interfaces = all
mynetworks = 127.0.0.0/8, 192.168.1.0/24
mydestination = $myhostname, localhost.$mydomain, /usr/local/etc/postfix/mydestination
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
relay_domains = $mydestination, /etc/postfix/relay_domains
home_mailbox = mbox
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

See kõik on üldine ja töötab ühtemoodi nii freebsd, solarise kui debiani või kasvõi windowsil (kui postfix sinna kunagi porditakse)

Seejärel tuleb muidugi seadistada ka postfixi septsiifilisem osa, mis varieerub erinevatel operatsioonisüsteemidel omasuudu, näiteks kus asub deemon, kus spool kaust või mis õigustes töötab postfix

Kasutada võib ka muutujaid stiilis config_directory = /usr/local/etc/postfix ja kasutada stiilis transport_maps = hash:$config_directory/transport

Seletaks pisut põhilisi ridu lahti

smtpd_banner = $myhostname ESMTP $mail_name (no spam please ;) )

Üldine teade mida näeb kui ühenduda 25 pordi külge, üldiselt täidab pigem ilu ülesannet :)

myhostname = kool.edu.ee

See muutuja võetakse tavaliselt shellist ja sõltub mis on sereri hostnameks määratud, üldiselt võib olla soov seda siiski sageli muuta

mydomain = $myhostname

mydomain võib samuti sageli erineda myhostnamest, üldiselt kui aga ei võib kasutada näiteks muutujat $myhostname

myorigin = $mydomain

is the domain name that locally-posted email appears to have come from and is delivered to.

inet_interfaces = all

Postfix kuulab vaikimisi kõikidel võrguseadmetel mis serveril küljes 25ndat porti ja kust posti ka vastu võetakse

mynetworks = 127.0.0.0/8, 192.168.1.0/24

IP aadressid või võrkude vahemikud mis on turvalised nimetame localhosti ja serveri taguse kontori sisevõrgu. Nendest võrkudest võib saata maile läbi serveri. Kõik katsed saata või relay'da maili teistelt mitte siin defineeritud ip'delt keelatakse

mydestination = $myhostname, localhost.$mydomain, /usr/local/etc/postfix/mydestination

Siin võib defineerida veel kõik masina küljes olevad domeenid neid komaga eraldadest, kust server peaks emaile vastuvõtma, lihtustamise huvides võib need kõik mydestination faili lisada ning faili korraga külgevõtta

/usr/local/etc/postfix/mydestination
loomaaed.tartu.ee
mail.tartu.ee

unknown_local_recipient_reject_code = 550

Viisakas seadistada teiste mailisaatjate jaoks.

alias_maps = hash:/etc/mail/aliases

alias faili, vaikimisi etc all

alias_database = hash:/etc/mail/aliases

Alias faili andmebaas

relay_domains = $mydestination, /etc/postfix/relay_domains

Nimed domeenidest millele mailiserver on teiseks mx'iks. Näiteks lihtsalt loeteluna.

loomaaed.tartu.ee
mail.tartu.ee

home_mailbox = mbox

Mailide salvestamise formaadiks mailbox. See on kõige vanem ja lihtsam formaat kuid mitte kõige parem ja tänapäeval oleks tegelikult juba üsnagi mõttekas kasutada maildir'i home_mailbox = Maildir/ võimalik on kogu maili kettale transportimine anda eraldi programmine, näit cyrusele mailbox_transport = cyrus

smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain

Piirangud läbi mailiserveri saatjale, lubame automaatselt mynetworgist saatmised ning keelame tundmatud

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

siinpuhul saab seadistada veel

 permit_sasl_authenticated,
 reject_non_fqdn_hostname,
 reject_non_fqdn_sender,
 reject_non_fqdn_recipient,
 reject_unauth_destination,
 reject_unauth_pipelining,
 reject_invalid_hostname,
 reject_rbl_client bl.spamcop.net,
 reject_rbl_client sbl-xbl.spamhaus.org

Veel main.cf'i kasulikke muutujaid töökindluse suurendamiseks

Kõikide muutujate lahtiseletamine ja esiletoomine läheks väga pikaks, nendekohta on üsnagi mahukas ja põhjalik kirjeldus ametlikuls postconf manualis http://www.postfix.org/postconf.5.html aga püüaks veel mõningaid ja põhiliselt spamimise /ddos'imisi piiravaid ja töökindlust suurendavaid parameetreid esiletuua

maximal_queue_lifetime = 3d bounce_queue_lifetime = 3h

Saba elupikkuse reguleerimine, oluline masinates mis näiteks paljudele teistele domeenidele relay'ks

relay_domains = /etc/mail/relay-domains

domeenid milledele näiteks ollakse teiseks mx'iks

Suhtlemiskiiruste limiteerimised

anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 5
smtpd_client_connection_rate_limit = 100
smtpd_client_message_rate_limit = 100
smtpd_client_recipient_rate_limit = 200
smtpd_client_event_limit_exceptions = $mynetworks, ".ee"
smtpd_timeout = 60s

Hea kasutada spammimiste pidurdamisteks

selleks hea näiteks nõuda ka smtpd_helo_required = yes kui korrektset suhtlus pole ei tule ka vastuseid ja määrata veel lisatäiendusi smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname, reject_invalid_hostname

Teised konfiguratsioonifailid

virtual

Sarnane alias failile mida kasutatakse lokaalseks failide transportimiseks kuid laialdasemate võimalustega.

näiteks

postmaste@loomaaed.tartu.eer  postmaster
info@loomaaed.tartu.ee       kasutaja
sales@loomaaed.tartu.ee      keegi
canonical

Aadresside sidumine lokaalsete ja mittelokaalsete domeenidega

transports
 The  optional  transport(5) table specifies a mapping from
      email addresses to message delivery transports  and  next-
      hop  destinations.   Message  delivery  transports such as
      local or smtp are defined in the master.cf file, and next-
      hop  destinations are typically hosts or domain names. The
      table is searched by the trivial-rewrite(8) daemon.

Võimaldab kõiki või teatud domeenide maile suunata edasi teisele aadressile

Kasutamiseks vaja main.cf'is defineerida

transport_maps = hash:/etc/postfix/transport

Ning faili /etc/postfix/transport

*midagi.ee smtp:mail.tartu.ee

postmapi andmebaasi genereerimiseks

postmap /etc/postfix/transport

restart postfix and now every e-mail sent to example.com will relay through your specified e-mail server.

Kirjade töötlemine välise programmiga transport maps abil

Ühel või teisel põhjusel võib olla vaja sellist asjakorraldus, et kas postisüsteemi kõiki või vaid teatud tunnustele vastavaid kirju saaks töödelda välise programmiga. Ja selliselt, et väline programm saab andmeid oma stdio'sse ning järele mõned argumendid. Üheks võimaluseks seda korraldada on kostümiseeritud transporti kirjeldamise abil. /etc/postfix/main.cf faili tuleb lisada rida

transport_maps = hash:/etc/postfix/transport

/etc/postfix/transport failis peab sisalduma nt rida

loomaaed.tartu.ee pf

ning tuleb öelda

# postmap /etc/postfix/transport

/etc/postfix/master.cf failis peab sisaldub sektsioon

pf    unix  -       n       n       -       -       pipe   
flags=RDX user=programmikasutaja argv=/bin/pf.pl ${user} ${domain}

ning kui /bin/pf.pl sisaldab nt

#!/usr/bin/perl
open (fh, ">>/tmp/pf.log");

print fh "$ARGV[0]\n";
print fh "$ARGV[1]\n\n\n";

@read=<STDIN>;

foreach $rida (@read) {
  print fh $rida;
}

Siis selle faili algusse kirjutatakse epostiaadressi @ märgist vasemale ja paremale jääv osa erinevatele ridadele ning kirja sisu kusjuures lisatakse päisele mõned read vastavalt sellele, mida lipud flags järel ütlevad.

SMTP communication control

access Postfix

For content control

header_checks body_checks mime_header_checks nested_header_checks (obscure)

Master.cf

Kontrollib kõiki postfixi endapoolt starditavaid teenuseid

Krüpteeringud TLS

Andmevahetuse krüptimine

Selleks, et server võimaldaks krüptida smtp klientide sissetulevaid ühendusi peavad olema seadistusfailis main.cf read

smtpd_tls_key_file = /etc/postfix/serdid/smtp.loomaaed.tartu.ee.pem
smtpd_tls_cert_file = /etc/postfix/serdid/smtp.loomaaed.tartu.ee.crt
smtpd_tls_CAfile = /etc/postfix/serdid/loomaaed-ca.crt
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

kus

  • smtpd_tls_key_file näitab, millises failis asub sertifikaadile vastav salajane võti
  • smtpd_tls_cert_file näitab, millises failis asub sertifikaat
  • smtpd_tls_CAfile näitab, millises failis asuvad sertifikaadi allkirjastanud ahela ülemised sertifikaadid

Selleks, et teha kindlaks, kas postiserver toetab SMTP STARTSSL laiendust sobib öelda

$ openssl s_client -starttls smtp -showcerts -connect 192.168.1.251:25

Auth SASL

Kasutajate autentimine ja kürpteeritud login

Mysql kasutajad

postfixadmin

Imap deemonid

Imap-uw

Vanem ja lihtsam deemon, suudab vaid mbox formaati jagada. Halvasti konfigureeritav ja ebastabiilsem. Suurtesse süsteemidesse ei soovitaks

Dovecot

Lihtne, töökindel ja äärmiselt hästi konfigureeritav imap klient, loeb nii maildir++ kui mbox formaati. Sobib väiksematesse mailiserveritesse eriti hästi.

Courier

maildir++ formaati hästi lugev töökindel imapideemon, mboxi ei toeta, võimaldab mysqlilt autentimist. Sobib koos mysql ja postfixadminiga ideaalselt keskmiste suurustega süsteemidesse.

Cyrus

Lisaks imap deemonile tegeleb ka ise mailide kettale toimetamisega. Hoiab neid eraldi muudetud maildir++ formaadis ning peab berkeley db andmebaasides infot. Sobib väga suure koormusega süsteemidesse.

Viirusetõrje/spam

clamav, amavisd, postgrey jpt

Amavis

Põhimõtteliselt Amavis tarkvara iseseisvalt sisulist lisaväärtust postisüsteemile ei paku, aga ta võimaldab ühendada Postfix'i kokku väliste teenustega, näiteks viiruste analüüsi tarkvaraga ClamAV.

Amavis nimeks enamuse operatsioonisüsteemide tarkvarakogumikes on amavisd-new

Vaikeseadistustega Amavis sobib kasutamiseks Amavis kuulab soketil 127.0.0.1:10024 Amavis pöördub MTA poole aadressile 127.0.0.1:10025

Selleks, et Postfix kõik talle laekunud posti saadaks läbi Amavisi peab lisama main.cf faili rea

content_filter=amavisfeed:[127.0.0.1]:10024

ning faili master.cf lisama sektsioonid

amavisfeed unix    -       -       n       -       2     smtp
   -o smtp_data_done_timeout=1200
   -o smtp_send_xforward_command=yes
   -o smtp_tls_note_starttls_offer=no

127.0.0.1:10025 inet n    -       n       -       -     smtpd
   -o content_filter=
   -o smtpd_delay_reject=no
   -o smtpd_client_restrictions=permit_mynetworks,reject
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o smtpd_data_restrictions=reject_unauth_pipelining
   -o smtpd_end_of_data_restrictions=
   -o smtpd_restriction_classes=
   -o mynetworks=127.0.0.0/8
   -o smtpd_error_sleep_time=0
   -o smtpd_soft_error_limit=1001
   -o smtpd_hard_error_limit=1000
   -o smtpd_client_connection_count_limit=0
   -o smtpd_client_connection_rate_limit=0 
   -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
   -o local_header_rewrite_clients=
   -o smtpd_milters=
   -o local_recipient_maps=
   -o relay_recipient_maps=

probleem gpg kinnitusega http://www.bramschoenmakers.nl/en/node/359

ClamAV

ClamAV on vaba tarkvaraline viirustõrjeprogramm, mille kasutamisel tarvitatakse ClamAV tasuta viiruste kontrolli andmebaasi teenust. Tavaliselt kutsub Postfix ClamAV välja Amavise abil.

Vaikeseadistustega ClamAV sobib kasutamiseks.

Sõltuvalt operatsioonisüsteemist on võibolla vajalik amavisd seadistuses clamav kasutamist lubavate ridade lahtikommenteerimine.

Postfixi olulised tööriistad

Oluliseimad posfixi käsud mida sagedaimini igapäevaelus võib vajaminna on

  • postalias - loob aliase andmebaasi
  • postcat - võimaldab vaadata järjekorras olevate fialide sisu
  • postmap - loob lookup map'e, suur hulk postfixi konfiguratsiooni informatsiooni hoitakse lookup tabelites.
  • postconf - postfixi parameetrite/seadistuse vaatamine ja muutmine

konfiguratsiooniooni saab jooksvalt vaadata käsuga postconf -n

Postconf võimaldab kiirelt ja mugavalt muuta mingeid parameetreid main.cf seadistuses ning seda võib kasutada nii hästi skriptimisel näiteks

postconf -e 'readme_directory = no'

Käsuga muudetakse readme_directory väli

  • postqueue - võimaldab ligipääsu postfixi järjekorrale
  • postsuper - võimaldab järjekorraga manipuleerida, kustutada neid või liigutada ringi, samuti parandada vajaduse korral järjekorra struktuuri
  • postdrop -
  • postfix
  • postkick
  • postlock
  • postlog

Logi ja probleemidega tegelemine

Kui mingil põhjusel on tarvis uurida mõnda parasjagu sabas olevat kirja, siis sobib selleks programm postcat. Tavaliselt saab logist või mailq programmi väljundist teada kirja identifikaatori ning selle abil õnnesub sabast kirjale vastav fail üles leida.

# mailq
....
C558C4DC80      794 Sat Dec 20 10:18:55  bounce@loomaaed.tartu.ee
          (connect to smtp-gw.loomaaed.tartu.ee[10.0.2.5]: Connection refused)
                                       mart@loomaaed.tartu.ee
..
# find /var/spool/postfix -name C558C4DC80 -ls
313873    4 -rw-------   1 postfix  postfix       257 Dec 21 23:14 /var/spool/postfix/defer/C/C558C4DC80
318592    4 -rwx------   1 postfix  postfix      1001 Dec 22 00:20 /var/spool/postfix/deferred/C/C558C4DC80

# postcat /var/spool/postfix/deferred/C/C558C4DC80
... 
nö inimloetaval kujul formateeritud väljund

Kui on vajadus sabas olev kiri kustutada, siis ei tohiks seda teha niisama failisüsteemist vastavate failide kustutamise teel vaid tuleb kasutada nt programmi postsuper, öeldes

# postsuper -d C558C4DC80

Suuremate mailivoogude ning blokeerumiste korral on hea uurida mis domeenid on probleemiks ja mis järjekordades on need kinni. Mailq pole samuti sageli selles osas eriti ülevaatlik.

# qshape deferred | head
                                         T  5 10 20 40 80 160 320 640 1280 1280+
                                 TOTAL 540  0  3  1  2 10   4  14  31   59   416
                          mingi.edu.ee 320  0  2  1  0  9   3   4  11   51   239
                           hotmail.org  25  0  0  0  0  1   0   0   0    0    24

Mõne domeeni või saatja kõigi kirjade eemaldamiseks võib kasutada sarnast käsku

mailq | grep spamidomeen.ee | awk '{ print $1 }' | tr -d '*!' | postsuper -d -

Postisüsteemi heaks testimise abivahendiks on ikka telnet muidugi ja telnet port 25 sest kui MX pole masinale määratud siis on talle väga raske maili normaalsete vahenditega saata

Ühendume mailiserveriga

# telnet zoo.loomaaed.ee 25
Trying 193.40.0.17...
Connected to zoo.loomaaed.ee.
Escape character is '^]'.
220 zoo.loomaaed.ee ESMTP

Ütleme tervituse

HELO zoo.loomaaed.ee
250 zoo.loomaaed.ee

Aadress kellele soovime maili saata

MAIL FROM: kadri@mailiserver.ee
250 2.1.0 Ok

Kirjutame aadressi mis aadressilt saadetakse

RCPT TO: katsetus@zoo.loomaaed.ee
250 2.1.5 Ok

Sisestame andmed

DATA
354 End data with <CR><LF>.<CR><LF>
tere

Kui enam midagi lisada ei soovi lõpetame punktiga

.
250 2.0.0 Ok: queued as 95C49F3118

Kirjutatud mail on ülal oleva teksti järgi lisatud järjekorda ning võime väljuda quit käsuga

quit

Lingid

http://www.postfix.org/documentation.html Ametlik dokumentatsioon

http://en.wikipedia.org/wiki/Comparison_of_mail_servers Mailiserverite võrdlused

http://dspam.nuclearelephant.com/index.shtml dspam koduleht

http://www.redhat.com/support/resources/howto/RH-postfix-HOWTO/x368.html redhat'i postfixi põhjalikud manualid

http://www.postfix.org/OVERVIEW.html postfixi arhidektuuri täpsem ülevaade

http://www.onlamp.com/pub/a/onlamp/2004/01/22/postfix.html postfixi logimisest

http://www.cyberciti.biz/faq/howto-blacklist-reject-sender-email-address/ blacklist aadressidele