Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
 
You are here: Home / Uputstva / Opšte / Postfix konfiguracija

Postfix konfiguracija

by Goran Mekić last modified Mar 30, 2009 01:01 PM
SMTP server sa podrškom za SSL

O programu

Postfix je SMTP server koji je pisan tako da bude siguran. O sigurnosti drugih rešenja ili tome koliko je bolji ili lošiji od drugih ovde neće biti reči. Ono što program radi je prima poruke koje neko šalje na Vaš server i šalje poruke koje Vaši klijenti šalju preko njega dalje na Internet. Za primanje pošte sa Vašeg servera putem POP3 ili IMAP se koriste drugi programi, a moj izbor je bio dovecot. O tome kako se dovecot konfigureše, više u ovom uputsvu.

 

Šta je potrebno pre konfiguracije

  • Postfix mora podržavati SSL. Na ovaj način je logovanje sigurnije (niko ne može ukrasti Vašu šifru dok se logujete na Vaš SMTP server, ili to može učiniti veoma teško).
  • Postfix mora podržavati LDAP i biti tako konfigurisan (konfiguracija pre kompajliranja).
  • Dovecot-sasl. Kako je u ovom uputsvu postfix usko vezan za njega, na serverskoj strani sasl implementacije je izabran dovecot umesto drugih rešenja.
  • SASL. Ne, nisam pogrešio! Dovecot-sasl nije dovoljan da bi Vaš server bio siguran. Kada Vaš server šalje poruke na druge servere, koristi se (između ostalog) SASL kako bi se odlazne konekcije kriptovale. Za ovo se koristi cyrus-sasl.

 

Konfiguracija

Umesto objašnjavanja kako nešto da uradite, ovde ću prekopirati fajlove bitne za konfiguraciju (ima ih više i ne moraju biti nazvani tako, ali to je već van opsega ovog uputsva) i komentarisati opcije. Moje iskustvo kaže da je ovo najbolji način objašnjavanja. Pa, krenimo od jednostavnijih stvari, pri čemu neću daviti sa linijama koje nisu menjane (default po instalaciji).

 

/etc/postfix/master.cf (fajl koji definiše programe i transporte koje postfix koristi):

# Transport za primanje poruka. Svaka poruka se prosleđuje DSPAM programu na skeniranje (-o opcija u drugom redu)
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=scan:127.0.0.1:10025

# Transport za primanje poruka na portu 10025 samo sa lokalne mašine (vraćanje poruka od DSPAM programa)
# Isključene su sve opcije na restrikciju (*_restrictions=) i mreža koja može da šalje na ovaj port je 127.0.0.0/8 (lokalni host)
127.0.0.1:10025 inet    n       -       n       -       -       smtpd
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o receive_override_options=no_unknown_recipient_checks

# Kada je poruka skenirana i primljena, predaje se dovecot softveru za dostavu poruka (skraćeno LDA)
# Dovecot LDA se koristi jer ima ugrađenu opciju za sortiranje poruka (o ovome više u uputsvu za dovecot)
# i zato što se poruke indeksiraju odmah po čuvanju na disk umesto pri prvom konektovanju klijenta
# što je mnogo brže kada klijent retko proverava poruke, a skoro pa iste brzine kada ih proverava često
dovecot unix    -       n       n       -       -       pipe
  flags=DRhu user=mymail:mymail argv=/usr/libexec/dovecot/deliver -d ${recipient}

 

/etc/postfix/main.cf (fajl koji sadrži podešavanja vezana za samo funkcionisanje postfix-a):

# Sledeće 4 opcije su podrazumevajuće za postfix i preporučljivo ih je staviti takvima, osim ako Vaša instalacija nije drugačija
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix

# Puno ime servera na Internetu. Budite SIGURNI da niste ovo zabrljali, jer možete dospeti na black liste veoma brzo, što će Vas označiti kao spamera
myhostname = neki.domen.org
mydomain = domen.org
myorigin = $myhostname

# Na kojim interfejsima da sluša. U našem slučaju, sluša na svim raspoloživim (eth0 i lo0)
inet_interfaces = all
# Za koje domene poddomene primamo poštu (bez virtuelnih domena)
mydestination = $myhostname, localhost.$mydomain, sparrow.$mydomain, localhost
mynetworks_style = subnet

# LDA je dovecot (definisan u master.cf fajlu)
mailbox_transport = dovecot
# Ako se mailbox završava sa ¨/¨ onda je u pitanju maildir
home_mailbox = .maildir/

# Opcije za debagovanje postfix programa
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5

# Putanje nekih fajlova i direktorijuma potrebni postfix programu
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = /usr/share/doc/postfix/html
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix/readme

# Alias omogućava da jedan nalog ima više korisničkih imena. Ovde se definišu ta imena.
alias_maps = hash:/etc/postfix/aliases, hash:/usr/local/mailman/data/aliases

# Opcije za slanje sa ovog servera drugima putem SSL-a.
# Kasnijie će biti objašnjeno kako se fajlovi pomenuti ovde generišu
# SSL se koristi samo ako druga ga strana podržava
smtp_tls_CAfile = /etc/postfix/certs/cacert.pem
smtp_tls_cert_file = /etc/postfix/certs/FOO-cert.pem
smtp_tls_key_file = /etc/postfix/certs/FOO-key.pem
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_use_tls = yes
smtp_tls_security_level = may

# Isto kao prethodno samo ova pravila važe za primanje putem SSL-a
# sa tom razlikom da se SSL forsira u slučaju da primalac poruke nije
# na ovom domenu (omogućava se da serveri koji ne podržavaju SSL pošalju
# poruku korisnicima Vašeg domena
smtpd_tls_CAfile = /etc/postfix/certs/cacert.pem
smtpd_tls_cert_file = /etc/postfix/certs/FOO-cert.pem
smtpd_tls_key_file = /etc/postfix/certs/FOO-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_sasl_auth_enable = yes

# Ova linija je ključ kada je sigurnost i spam u pitanju, te sam je izdvojio. Pa da počnemo sa nabrajanjem
# permit_mynetworks - svima sa moje mreže (definisane ranije) dozvoli da koriste server
# permit_sasl_authenticated - svi koji se uloguju preko SMTP mogu da šalju
# reject_unauth_destination, reject_unauth_pipelining - odbij sve koji nisu ulogovani
# reject_non_fqdn_helo_hostname, reject_non_fqdn_sender - odbij sve koji nisu poslali hostname koji je po definisanom standardu
# check_policy_service inet:127.0.0.1:12525 - dodatna provera preko eksternog programa (u ovom slučaju, program koji sluša na portu 12525, tj policyd-weight)
# permit_auth_destination - svi koji su se ulogovani mogu da koriste ovaj server
# reject - sve što nije prošlo do ovog pravila biva odbijeno
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_non_fqdn_helo_hostname, reject_non_fqdn_sender, check_policy_service inet:127.0.0.1:12525, , reject

# Dodatne restrikcije
smtpd_client_restrictions = permit_mynetworks
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname
smtpd_delay_reject = yes

# SSL konfiguracija pri primanju pošte (dovecot sasl)
smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# Omogućite serveru DNS pretragu
# Ako vaš server koristi neki drugi server za slanje pošte, korisno je isključiti ovu opciju
# što ubrzava samo slanje (ne traži se server preko koga se šalje, nego mu se tačno kaže koji server da koristi)
disable_dns_lookups = no
unknown_local_recipient_reject_code = 550

# Opcije za TLS (drugo ime za SSL)
tls_random_exchange_name = /etc/postfix/prng_exch
tls_random_source = dev:/dev/urandom
tls_random_reseed_period = 3600s
tls_random_upd_period = 60s
tls_daemon_random_source = dev:/dev/urandom

# Ograničenja na veličinu poruke
body_checks_size_limit = 26214400
message_size_limit = 26214400

# Omogući + u korisničkom imenu
recipient_delimiter = +

# Definicije virtuelnih domena, alias-a za te domene i transporta za iste
virtual_alias_maps = ldap:aliases
virtual_mailbox_domains = ldap:domains
virtual_transport = dovecot

# Ograničenje broja poruka koje dovecot isporučuje odjednom
dovecot_destination_recipient_limit = 1
default_destination_concurency_limit = 1

# Definicija korisnika koji se kači na LDAP 
ldap_user = cn=root,dc=ldap
ldap_pass = password

# Definicija LDAP konfiguracije za alias-e
aliases_server_host = localhost
aliases_search_base = dc=ldap
aliases_query_filter = (&(uid=%u)(objectClass=person))
aliases_result_attribute = mail
aliases_scope = sub
aliases_cache = yes
aliases_bind = yes
aliases_bind_dn = $ldap_user
aliases_bind_pw = $ldap_pass
aliases_version = 3

# Definicija LDAP konfiguracije za virtuelne domene
domains_server_host = localhost
domains_search_base = dc=ldap
domains_query_filter = (&(ou=%s)(objectClass=organizationalUnit))
domains_result_attribute = ou
domains_scope = sub
domains_cache = yes
domains_bind = yes
domains_bind_dn = $ldap_user
domains_bind_pw = $ldap_pass
domains_version = 3

Lokalne alias-e za korisnike (obratite pažnju na tačku posle lokalnog imena koja ne postoji u prethodnom fajlu). /etc/postfix/aliases:

meka:               meka@domen1.org

Lokalne aliase morate mapirati, a za ovo se koristi sledeća komanda:

# postalias /etc/postfix/aliases

 

 

Generisanje ključeva

Ključevi su fajlovi uz pomoć kojih se kriptuje prenos podataka kroz SMTP protokol. Za ovo se koristi OpenSSL. Daću samo komande koje su potrebne da biste generisali ključeve bez preteranih komentara. Putanja može da se razlikuje, što zavisi od distribucije koju koristite. Jako bitno je da kad Vas program bude pitao, "Common Name" mora da bude ime domena:

# cd /etc/ssl/misc
# rm -Rf demoCA
# ./CA.pl -newca
# ./CA.pl -newreq
# ./CA.pl -signreq 
# openssl rsa -in newkey.pem -out newkey.pem.out
# cp demoCA/cacert.pem /etc/postfix/certs/
# cp newcert.pem /etc/postfix/certs/FOO-cert.pem
# cp newkey.pem.out /etc/postfix/certs/FOO-key.pem
# chmod 600 /etc/postfix/certs/FOO-key.pem

Ključevi traju 6 meseci, godinu dana ili 5 godina. Nakon toga se istim ovim postupkom moraju obnoviti.


Odbijanje poruka po MIME specifikaciji

Vrlo zgodan način da odbijete sve poruke čiji attachment-i sadrže nadaleko čuvene .pif .bat .exe i slične ekstenzije. Da bi ovo proradilo morate ponovo editovati /etc/postfix/main.cf i dodati liniju kojom definišete lokaciju ovih pravila:

mime_header_checks = regexp:/etc/postfix/maps/mime_header_checks

ukoliko se koristimo gore navedenom konfiguracijom, ovo bi bilo pametno dodati pre ili posle sekcije #Dodatne restrikcije i naravno adekvatno iskomentarisati npr. #Odbacivanje poruka sa neželjenim ekstenzijama u attachment-u.

Kad smo ovo uradili, vreme je da se dotični fajl na toj putanji i napravi, te da se popuni odgovarajućim sadržajem. U mom slučaju to izgleda ovako:

 

/name=[^>]*\.(bat|com|exe|dll|pif|scr)/ REJECT
/name=[^>]*\.(bat|com|exe|dll|pif|scr)/* REJECT

 

što bi trebalo da odbaci svu poštu koja u attachment-u ima fajl čija se ekstenzija završava sa nekom od navedenih ekstenzija, odnosno sadrži jednu od navedenih ekstenzija. Ovim se NE analizira sadržaj attachment-a, tako da je Postfix moguće prevariti izbegavanjem navođenja ekstenzija, odnosno preimenovanjem, te je za punu zaštitu potrebno uključiti i antivirusni program.

 

Kao i posle svake izmene konfiguracionih fajlova, potrebno je restartovati servis postfix. Način može biti zavistan od distribucije te ovde neću navesti ni jedan, kako ne bi bilo zabune.

Oba reda nisu neophodna, ali su navedeni kao primer.

Document Actions