Postfix konfiguracija
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.
Artikelaktionen