Configurarea Exim

Crearea unui server de mail bazat pe MTA Exim (exim mail mta virtual spam virus clamav freebsd imap postgresql)

Acest articol va discuta despre crearea unui server de mail eficient bazat pe MTA exim. Prima întrebare, care, desigur, vine în minte este "De ce Exim?". Răspundeți la această întrebare în moduri diferite, așa că voi spune că sunt atât de atras de Exim:
- schema logică de prelucrare a corespondenței;
- viteza mare de lucru;
- formatul convenabil al fișierului de configurare;
- Cele mai largi posibilități de căutare a oricăror valori din fișiere, DBMS, LDAP
- built-in suport de autentificare smtp
- un număr mic de vulnerabilități găsite (de fapt, știu doar despre una recent găsită, se referă la versiuni Exim de până la 4.20 inclusiv)
- un număr foarte mare de oportunități, precum și o flexibilitate extremă
- posibilitatea înlocuirii complete a sendmail (de ex., puteți face ln -sf / usr / local / sbin / exim / usr / libexec / :-) sendmail)

În opinia mea, Exim este un produs foarte, foarte reușit, din motive întemeiate, fiind utilizat în mod implicit în sistemul de operare Debian GNU Linux. Cele două dezavantaje mari ale Exim sunt că nu există o documentație de înaltă calitate în limba rusă necesară pentru a edita Makefile pentru a include unele dintre caracteristicile Exim.

Deci, în primul rând, vom crede că ar trebui să conțină sistemul de corespondență "ideal" din punct de vedere al confortului de administrare și de utilizare. Să formăm o serie de cerințe pentru sistemul de e-mail:

1) ușurința de gestionare a utilizatorilor
2) abilitatea de a oferi acces pentru trimiterea de e-mail către utilizatorii rețelei locale și utilizatorilor mobili (folosind autentificarea smtp)
3) protecție maximă împotriva atacurilor hackerilor, a virușilor și a spamului
Sistemul de bază pentru instalarea MTA a fost FreeBSD 5.2.1, ceea ce a dus la anumite caracteristici ale instalării.

Voi lista întregul set de software pentru organizarea serverului de mail:
- exim-4.34 - MTA (agent de transfer de mail)
- courier-3.0.4 - server imap, pentru a accesa poșta pentru utilizatorii care nu au conturi de utilizator locale (utilizatori virtuali)
- clamav - pentru a căuta viruși
- spamassasin - pentru a căuta mesaje spam
- postgresql-7.4.2 - pentru stocarea tuturor datelor despre utilizatorii sistemului de poștă electronică
- squirrelmail - doar o interfață frumoasă bazată pe web pentru poștă (necesită un server web și php)

Desigur, puteți colecta toate componentele de mai sus manual, dar nu sunt un fan al acestei abordări. În primul rând, trebuie să reprezentați foarte clar ordinea de asamblare a diferitelor componente. În al doilea rând, trebuie să înțelegeți o grămadă de opțiuni pentru conectarea diferitelor biblioteci. În al treilea rând, trebuie să vizualizăm în mod clar toate căile și să aflăm care dintre utilizatori ar trebui adăugați. În al patrulea rând, această afacere este foarte dificil de actualizat. Prin urmare, vom folosi serviciile sistemului port (dacă aveți, de exemplu, Debian GNU Linux, atunci pachetul necesar se numește exim4-daemon-heavy). Pentru a face acest lucru, am pus următoarele porturi:

- baze de date / pogstgresql7
- mail / exim (la compilare este necesar să specificați următoarele opțiuni: make WITH_PGSQL = yo
- mail / p5-Mail-SpamAssassin
- securitate / clamav
- mail / curier-imap (la compilare noi specificăm: face WITH_CRAM = yo WITH_POSTGRESQL = yo
- mail / squirrelmail

După asamblarea a tot ceea ce trebuie să mergem la etapa de instalare. Nu va trebui să-și petreacă o mare cantitate de timp pentru a regla toate componentele sistemului poștal, iar scopul acestui articol este de a minimiza acest timp :) Să începem cu setările bazei de date PostgreSQL, ca bază pentru construirea sistemului poștal.

În primul rând pgsql drepturile de utilizare a sistemului de operare postgresql (nota, acest utilizator are o coajă reală și directorul home - / usr / local / pgsql /). Deci, în primul rând, setați parola pentru acest utilizator:

Înainte de a face su pgsql și începe să creeze baza de date:

introduceți pgsql-ul parolei utilizatorului și intrați în linia de comandă sql requests. Pentru o introducere detaliată a capabilităților SGBD, vă sfătuiesc să consultați manualul sau una dintre cărți.

CREATE DATABASE users;

aderați la această bază de date:

CREATE TABLE accounts (
uid serial NOT NULL,
caracterul de conectare variază (128),
caracterele "parola" variază (128),
caracterul maildir variază (255),
caracterul gecos variază (255),
gid integer DEFAULT 150,
caracterul de acasă variază (255),
mailquota integer DEFAULT 20
);
ALTER MESA conturilor
ADĂUGĂ CONSTRAINT uid_k PRIMARY KEY (uid);
ALTER MESA conturilor
ADĂUGĂ CONSTRAINT login_k UNIQUE (autentificare);


creați tabelul de alias:

CREATE alias-uri (
mail caracter variabil (128) NU NULL,
alias caracter variabil (128)
);
ALTER MESAJ Aliate
ADAUGA CONSTRAINT mail_k PRIMARY KEY (mail);


Voi explica scopul tabelelor și câmpurilor:

După aceea, vom presupune că postgresql funcționează pentru noi. Cu toate acestea, pentru a utiliza pe deplin capabilitățile acestui DBMS, este mai bine să citiți documentația.

Apoi, continuați să configurați actualul MTA exim. Fișierul de configurare pentru versiunea "din porturi" este stocat în / usr / local / etc / exim / configure. În primul rând, aș dori să clarific semnificația anumitor termeni și să vă spun despre principiile de bază ale lucrării lui Exim.

Imaginați-vă modul de transmitere a oricărui mesaj de e-mail. Orice scrisoare este alcătuită dintr-un așa-numit "plic" și datele reale. Ceea ce suntem obișnuiți să lucrăm cu clienții de corespondență este doar "date" și nu are nimic de-a face cu plicul. Plicul descrie 2 parametri: e-mail de la: și rcpt la. care indică atât expeditorul, cât și destinatarii.

Sesiunea cu MTA poate fi precedată de un "salut" - standard (HELO) și extins (EHLO). Salut ar trebui să indice FQDN client, deși, din mai multe motive, nu respectă cu strictețe
FQDN, pentru că multe mașini pot fi în spatele NAT'om. MTA, ca răspuns la HELO sau EHLO, comunică capabilitățile sale, asigurând astfel sincronizarea dintre client și server.

Mai departe, scrisoarea ajunge pe un lanț de așa-numiți "routere", care definesc cum să livreze scrisoarea. Printre routere există un dnslookup, care furnizează mesaje bazate pe înregistrări MX în DNS, verificând fișierul alias și fișierele .forward bine și livrarea locală. Fiecare router are o anumită condiție de declanșare și transportul corespunzător. Când condiția este îndeplinită, Exim selectează transportul specificat pentru a livra mesajul, în caz contrar mesajul trece la următorul router (deci ordinea descrierii ruterelor din fișierul de configurare este importantă).

De asemenea, transportul determină ordinea de livrare a scrisorii. Astfel, configurația Exim constă din mai multe părți:

-setările globale
-acl de stabilire
-configurarea routerelor
-tuning transporturi
-Configurarea autentificatorilor
-setare coadă
-configurarea regulilor de rescriere

La înființarea Exim diverse liste utilizate pe scară largă (ListaGazde, domainlist și dnslist) și așa-numitul lookup'y prin care preia date exim din surse externe.

Mulți dintre prietenii mei, încercând să-l stăpânească pe Exim, au vrut să se gândească la cel mai confuz subiect de căutare, așa că mă voi concentra mai mult pe această problemă.
Există două tipuri de căutare: căutarea unei chei (cu o singură cheie) și căutarea după interogare (interogare). Primul este utilizat pentru căutarea în fișierele locale, iar al doilea este utilizat în diverse tipuri de baze de date (sql, ldap și așa mai departe). Orice căutări pot fi imbricate, adică o căutare utilizează rezultatele celeilalte.

Căutarea pe baza unei singure chei este construită astfel:


Ar trebui să se precizeze în mod special aranjamentul de paranteze curl. Dacă sunteți familiarizați cu limbaje funcționale, cum ar fi Lisp, sintaxa următoare va fi familiar pentru tine, sau pur și simplu trebuie să numeri fiecare listă structură, care se ocupă de exim. Apoi, toate șirul și alte constante sunt, de asemenea, închise în bretele.
Adică exemplul de mai sus poate fi considerat ca fiind
$ list -> $ -> $ driver>.

În acest caz, fișierul în sine, în care este efectuată căutarea, ar trebui să arate astfel:

în timp ce fișierul în sine ar trebui să arate astfel:

192.168.3.4: domain1. DOMAIN2.
192.168.1.9: domain3. domain4.

Căutarea este efectuată în primul câmp.

Diferența dintre căutarea în stil de interogare este că în mod explicit nu specificăm ce să căutăm, indicând în schimb o interogare. De exemplu, o interogare tipică pentru baza de date sql arată astfel:

Dacă interogarea este reușită, o valoare este returnată din baza de date, în caz contrar se efectuează o acțiune de eșec special, indicând o cerere nereușită.
Există câteva întrebări înfricoșătoare pentru ldap. Le voi analiza mai detaliat.
Portul server și ldap arată astfel:

solicită directorului să arate astfel:

Formularul de cerere este descris în standard, dar cred că ar trebui explicat în continuare.

Când aveți nevoie de autentificare pe server, atunci specificați ceva de genul

Rețineți necesitatea înlocuirii blanurilor cu% 20, conform cerințelor standardului.

Cred că, pentru o mai bună înțelegere a articolului, acest lucru este suficient.

# openssl genrsa -out mailed.key 2048
# openssl req -new -x509 -key mailed.key -days 365 -out mailed.crt

În acest caz, vor fi cerute toate câmpurile certificatului. Rețineți că fișierul cheie secret nu trebuie să fie criptat, în caz contrar Exim nu îl poate citi, doar setați proprietarul acestui fișier ca root: și setați permisiunile la 0600.

După aceasta, puteți încerca să executați Exim în modul de depanare:

și urmăriți mesajele afișate. Pentru a activa Exim în loc de sendmail, procedați în felul următor:
următoarele linii sunt necesare în fișierul /etc/rc.conf:

sendmail_enable = "NONE"
exim_enable = "DA"
# Și, de asemenea, pentru spamassasin și clamav:
clamav_clamd_enable = "YES"
spamd_enable = "DA"


Apoi, configurați livrarea de e-mail pentru aplicațiile locale prin Exim, pentru care fișierul /etc/mail/mailer.conf ar trebui să arate astfel:

sendmail / usr / local / sbin / exim
trimiteți-mail / usr / local / sbin / exim
mailq / usr / local / sbin / exim -bp
newaliases / usr / local / sbin / exim -bi
gazdă / usr / local / sbin / exim
purgestat / usr / local / sbin / exim


În continuare pentru a continua configurarea ClamAV: du-te în / usr / local / etc / și copie clamav.conf.sample în clamav.conf și partea dreaptă, astfel încât să accepte conexiunea prin TCP / IP, mai degrabă decât printr-o priză locală, care, în clamav.confnuzhny
următoarele linii:

TCPSocket 3310
TCPAddr 127.0.0.1

Apoi, copiați freshclam.conf.sample în freshclam.conf. Acest fișier specifică setările pentru programul proaspăt utilizat pentru a actualiza bazele de date antidrive clamav.

SpamAssasin funcționează fără setări suplimentare.

Să trecem la următoarea parte - aranjarea curierului. Acest server imap foloseste mai multe procese pentru munca sa, care, la randul lor, sunt configurate din diverse fisiere de configurare. În exemplul meu, se execută 3 procese - authdaemon, courier-imapd și courier-imapd-ssl. Și în lumea exterioară este deschisă
numai curier-imapd-ssl. Mai întâi, creați un certificat pentru imapd-ssl și pentru conexiunile TLS cu imapd:

corectăm fișier /usr/local/etc/couier-imap/imapd.cnf pentru DN sa pentru certificatul, care în parte prescrie req_dn setările (nu uitați că cn ar trebui să se potrivească cu FQDN al serverului IMAP):

[Req_dn]
C = RU
ST = regiunea Moscovei
L = Moscova
O = Tehnopark
OU = tehnologii Internet
CN = test.ru
emailAddress = [email protected]

Apoi, generăm certificatul cu un script special:

cd / usr / local / cota / curier-imap /
./ mkimapdcert

După aceea, configurați autentificarea imap:
cd / usr / local / etc / curier-imap /
cp authdaemonrc.dist authdaemonrc
în continuare în authdaemonrc vom înlocui lista modulelor pentru autentificare pe:

Acum, curierul știe că trebuie să se autentifice prin intermediul pgsql. Este necesar doar să configurați modulul pgsql însuși, ale cărui setări sunt stocate în authpqsqlrc. Ar trebui să conțină următoarele:

Setările # Table pentru autentificare, aici indicăm în ce domenii
# tabele stocate diferite date de utilizator:
Conturi PGSQL_USER_TABLE
PGSQL_CLEAR_PWFIELD parola
DEFAULT_DOMAIN test.ru
PGSQL_UID_FIELD uid
PGSQL_GID_FIELD gid
PGSQL_LOGIN_FIELD autentificare
PGSQL_HOME_FIELD acasă
PGSQL_NAME_FIELD gecos
PGSQL_MAILDIR_FIELD maildir


Acum du-te la setările direct imapd:
vom imapd.dist în imapd. Rulați următoarele rânduri (pentru alte setări
valorile implicite sunt fine):

# În mod prestabilit în NO, faceți-o în DA, pentru ca imapd să poată fi rulat
IMAPDSTART = DA

Aceste setări, în principiu, sunt suficiente. Apoi, copiați imapd-ssl.dist la imapd-ssl și
se pronunță următoarele rânduri:

Apoi începem curier-imap la pornirea sistemului. Pentru aceasta, mergeți la /usr/local/etc/rc.d și redenumiți din nou fișierele:

# mv curier-imap-imapd-ssl.sh.sample courier -imap-imapd-ssl.sh
# mv curier-imap-imapd.sh.sample courier-imap-imapd.sh


După aceea, considerăm că sistemul nostru de e-mail este aproape gata. Trebuie doar să construiți un mic elicopter pentru ceea ce mergem în / usr / local / www / squirrelmail și să rulați scriptul ./configure. În principiu, interfața de configurare este ușor de înțeles fără explicații inutile, prin urmare nu voi mai rezista acestei probleme (nu uitați, cel mai important, specificați serverul imap și smtp). Faceți un symlink la / usr / local / www / squirrelmail de la orice VirtualHost sau direct de la DocumentRoot de la apache în sine. Aici, în principiu, asta e tot.

Există unele caracteristici ale rularea squirrelmail în atunci când safe_mode este activat în php. Mai întâi, toate fișierele php și directoarele squirrelmail trebuie să aparțină utilizatorului din care rulează apache (VirtualHost sau configurație globală, în mod implicit - www: nogroup). În plus, trebuie să schimbați permisiunile în / var / spool / squirrelmail:

# chmod 1777 / var / spool / squirrelmail / atașați
# chmod 1777 / var / spool / squirrelmail / pref


Ei bine, proprietarul instalează aceeași ca în / usr / local / www / squirrelmail.


În cele din urmă, vă voi oferi o listă de linkuri utile:

Articole similare