poštový server nginx. Inštalácia iRedMail

Nginx si rýchlo získava na popularite a prechádza z iba statického urýchľovača služieb pre Apache na plnohodnotný a pokročilý webový server, ktorý sa čoraz viac používa izolovane. V tomto článku si povieme o zaujímavých a neštandardných scenároch používania nginx, ktoré vám umožnia vyťažiť z webového servera maximum.

Mail proxy

Začnime tým najzrejmejším – schopnosťou nginxu pôsobiť ako mail proxy. Táto funkcia je pôvodne v nginx, ale z nejakého dôvodu sa vo výrobe používa veľmi zriedka, niektorí ani nevedia o jej existencii. Nech je to akokoľvek, nginx podporuje proxy protokoly POP3, IMAP a SMTP s rôznymi metódami autentifikácie, vrátane SSL a StartTLS, a robí to veľmi rýchlo.

Prečo je to potrebné? Táto funkcia má minimálne dve možnosti využitia. Najprv použite nginx ako štít proti otravným spamerom, ktorí sa pokúšajú posielať nevyžiadanú poštu cez náš SMTP server. Spameri zvyčajne nevytvárajú veľa problémov, pretože sa rýchlo odrazia vo fáze autentifikácie, ale keď ich je naozaj veľa, nginx pomôže ušetriť zdroje CPU. Po druhé, použite nginx na presmerovanie používateľov na viacero poštových serverov POP3/IMAP. Samozrejme, iný poštový proxy by to mohol zvládnuť, ale prečo sa obťažovať servermi, ak je nginx už nainštalovaný na frontende, aby slúžil napríklad cez HTTP?

Mail proxy v nginx nie je celkom štandardný. Využíva dodatočnú autentifikačnú vrstvu implementovanú pomocou HTTP a iba ak používateľ prekoná túto bariéru, je odovzdaný ďalej. Táto funkcionalita je zabezpečená vytvorením stránky / skriptu, ktorému nginx poskytne používateľské údaje a on / on vráti odpoveď vo forme štandardného OK alebo dôvodu odmietnutia (napríklad „Neplatné prihlasovacie meno alebo heslo“). Skript sa spúšťa s nasledujúcimi hlavičkami:

Vstup overovacieho skriptu HTTP_AUTH_USER: používateľ HTTP_AUTH_PASS: heslo HTTP_AUTH_PROTOCOL: poštový protokol (IMAP, POP3 alebo SMTP)

A vráti sa to takto:

Výstup overovacieho skriptu HTTP_AUTH_STATUS: OK alebo príčina zlyhania HTTP_AUTH_SERVER: skutočný poštový server na presmerovanie HTTP_AUTH_PORT: port servera

Pozoruhodnou vlastnosťou tohto prístupu je, že sa vôbec nedá použiť na samotnú autentifikáciu, ale na rozptýlenie používateľov na rôznych interných serveroch v závislosti od používateľského mena, údajov o aktuálnom zaťažení na poštových serveroch alebo dokonca organizovaním najjednoduchšieho vyvažovania zaťaženia pomocou kolo-robin . Ak však potrebujete iba preniesť používateľov na interný poštový server, namiesto skutočného skriptu môžete použiť stub implementovaný samotným nginxom. Napríklad najjednoduchší SMTP a IMAP proxy v konfigurácii nginx bude vyzerať takto:

# vi /etc/nginx/nginx.conf mail ( # Adresa autentifikačného skriptu auth_http localhost:8080/auth; # Vypnite príkaz XCLIENT, niektoré poštové servery mu nerozumejú xclient vypnutý; # server servera IMAP ( počúvajte 143; protokol imap; proxy zapnuté; ) # server servera SMTP (počúvanie 25; protokol smtp; zapnutý proxy; ) )

# vi /etc/nginx/nginx.conf http ( # Mapovanie na správny port poštového servera v závislosti od portu odoslaného v mape hlavičky HTTP_AUTH_PROTOCOL $http_auth_protocol $mailport (predvolené 25; smtp 25; imap 143; ) # Implementácia autentifikácie " skript" - vždy vráti OK a presmeruje používateľa na interný poštový server, pričom nastaví správny port pomocou vyššie uvedeného mapovacieho servera (počúvajte 8080; umiestnenie / auth ( add_header "Auth-Status" "OK"; add_header "Auth-Server" " 192.168.0.1" ; add_header "Auth-Port" $mailport; návrat 200; ) ) )

To je všetko. Táto konfigurácia umožňuje transparentne presmerovať používateľov na interný poštový server bez vytvárania réžie vo forme skriptu, ktorý je v tomto prípade zbytočný. Pomocou skriptu je možné túto konfiguráciu výrazne rozšíriť: nastaviť vyvažovanie záťaže, kontrolovať používateľov oproti databáze LDAP a vykonávať ďalšie operácie. Napísanie skriptu presahuje rámec tohto článku, ale je veľmi jednoduché ho implementovať aj so základnými znalosťami PHP a Pythonu.

Streamovanie videa

Nastavenie bežného videohostingu založeného na nginx je jednoduché. Jediné, čo musíte urobiť, je nahrať prekódované video do adresára prístupného pre server, pridať ho do konfigurácie a nakonfigurovať prehrávač Flash alebo HTML5 tak, aby bral video z tohto adresára. Ak však chcete nastaviť nepretržité vysielanie videa z nejakého externého zdroja alebo webovej kamery, táto schéma nebude fungovať a budete sa musieť poobzerať po špeciálnych streamovacích protokoloch.

Existuje niekoľko protokolov, ktoré tento problém riešia, najúčinnejší a podporovaný z nich je RTMP. Jediným problémom je, že takmer všetky implementácie serverov RTMP trpia problémami. Oficiálny Adobe Flash Media Server je platený. Red5 a Wowza sú napísané v Jave, a preto neposkytujú požadovaný výkon, iná implementácia, Erlyvideo, je napísaná v Erlangu, čo je dobré v prípade nastavenia klastra, ale nie také efektívne pre jeden server.

Navrhujem iný prístup - použite modul RTMP pre nginx. Má vynikajúci výkon a tiež vám umožňuje používať jeden server na obsluhovanie webového rozhrania stránky a streamovania videa. Jediným problémom je, že tento modul je neoficiálny, takže nginx s jeho podporou si budete musieť postaviť sami. Našťastie sa montáž vykonáva štandardným spôsobom:

$ sudo apt-get remove nginx $ cd /tmp $ wget http://bit.ly/VyK0lU -O nginx-rtmp.zip $ unzip nginx-rtmp.zip $ wget http://nginx.org/download/nginx- 1.2.6.tar.gz $ tar -xzf nginx-1.2.6.tar.gz $ cd nginx-1.2.6 $ ./configure --add-module=/tmp/nginx-rtmp-module-master $ make $ sudo make install

Teraz je potrebné modul nakonfigurovať. Toto sa vykonáva ako obvykle prostredníctvom konfigurácie nginx:

Rtmp ( # Aktivujte vysielací server na porte 1935 na lokalite/server rtmp (počúvajte 1935; aplikácia rtmp (naživo; ) ) )

Modul RTMP nefunguje vo viacvláknovej konfigurácii, takže počet pracovných procesov nginx bude musieť byť znížený na jeden (neskôr vám poviem, ako tento problém obísť):

worker_processes 1;

Teraz môžeme uložiť súbor a nechať nginx znova prečítať konfiguráciu. Nastavenie nginx je dokončené, ale ešte nemáme samotný videostream, takže ho musíme niekde získať. Nech je to napríklad súbor video.avi z aktuálneho adresára. Ak ho chcete premeniť na stream a zabaliť do nášho vysielača RTMP, použite starý dobrý FFmpeg:

# ffmpeg -re -i ~/video.avi -c copy -f flv rtmp://localhost/rtmp/stream

Ak video súbor nie je vo formáte H264, mal by byť prekódovaný. Dá sa to urobiť za behu pomocou rovnakého FFmpeg:

# ffmpeg -re -i ~/video.avi -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/rtmp/stream

Stream je možné zachytiť aj priamo z webovej kamery:

# ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an -f flv rtmp://localhost/rtmp/stream

Na zobrazenie streamu na strane klienta môžete použiť ľubovoľný prehrávač s podporou RTMP, napríklad mplayer:

$ mplayer rmtp://example.com/rtmp/stream

Alebo vložte prehrávač priamo na webovú stránku, ktorú obsluhuje rovnaký nginx (príklad z oficiálnej dokumentácie):

Najjednoduchší webový prehrávač RTMP

Sú tu len dva dôležité riadky: „file: „stream“ označujúci stream RTMP a „streamer: „rtmp://localhost/rtmp““, ktorý špecifikuje adresu streamera RTMP. Pre väčšinu úloh budú tieto nastavenia stačiť. Na jednej adrese je možné spustiť niekoľko rôznych streamov a nginx ich efektívne znásobí medzi klientmi. To však nie je všetko, čo modul RTMP dokáže. S jeho pomocou môžete napríklad organizovať retransmisiu video streamu z iného servera. Server FFmpeg na to vôbec nie je potrebný, stačí do konfigurácie pridať nasledujúce riadky:

# vi /etc/nginx/nginx.conf aplikácia rtmp ( žiť ďalej; stiahnuť rtmp://rtmp.example.com; )

Ak potrebujete vytvoriť viacero streamov v rôznych kvalitách, môžete zavolať transkodér FFmpeg priamo z nginx:

# vi /etc/nginx/nginx.conf aplikácia rtmp (naživo; exec ffmpeg -i rtmp://localhost/rtmp/$name -c:v flv -c:a -s 320x240 -f flv rtmp://localhost /rtmp-320x240/$name; ) aplikácia rtmp-320x240 (naživo; )

S touto konfiguráciou získame dvoch vysielateľov naraz, z ktorých jeden bude dostupný na rtmp://site/rtmp a druhý, vysielajúci v kvalite 320 x 240, na rtmp://site/rtmp–320x240. Ďalej na webe môžete zavesiť flash prehrávač a tlačidlá na výber kvality, ktoré prehrávaču vložia jednu alebo druhú adresu vysielateľa.

A na záver príklad vysielania hudby do siete:

zatiaľ čo pravdivé; do ffmpeg -re -i "`find /var/music -type f -name "*.mp3"|sort -R|head -n 1`" -vn -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/rtmp/stream; hotový

git proxy

Systém správy verzií Git je schopný zabezpečiť prístup k repozitárom nielen cez protokoly Git a SSH, ale aj cez HTTP. Kedysi bola implementácia HTTP prístupu primitívna a nedokázala zabezpečiť plnohodnotnú prácu s úložiskom. Od verzie 1.6.6 sa situácia zmenila a dnes je možné tento protokol použiť napríklad na obídenie obmedzení firewallu na oboch stranách pripojenia alebo na vytvorenie vlastného Git hostingu s webovým rozhraním.

Žiaľ, oficiálna dokumentácia hovorí len o organizovaní prístupu ku Gitu pomocou webového servera Apache, ale keďže samotná implementácia je externá aplikácia so štandardným rozhraním CGI, možno ju pripojiť k takmer akémukoľvek inému serveru, vrátane lighttpd a samozrejme, nginx. To si nevyžaduje nič iné ako samotný server, nainštalovaný Git a malý FastCGI server fcgiwrap, ktorý je potrebný, pretože nginx nevie pracovať priamo s CGI, ale dokáže volať skripty pomocou protokolu FastCGI.

Celá schéma práce bude vyzerať takto. Server fcgiwrap bude visieť na pozadí a bude čakať na požiadavku na spustenie aplikácie CGI. Nginx bude zase nakonfigurovaný tak, aby požadoval vykonanie binárneho CGI backendu git-http-backend cez rozhranie FastCGI pri každom prístupe na zadanú adresu. Po prijatí požiadavky fcgiwrap spustí git-http-backend so špecifikovanými CGI argumentmi odovzdanými klientom GIT a vráti výsledok.

Na implementáciu takejto schémy najprv nainštalujeme fcgiwrap:

$ sudo apt-get install fcgiwrap

Nemusíte ho konfigurovať, všetky parametre sa prenášajú cez FastCGI protokol. Spustí sa tiež automaticky. Preto zostáva iba nakonfigurovať nginx. Ak to chcete urobiť, vytvorte súbor /etc/nginx/sites-enabled/git (ak taký adresár neexistuje, môžete zapisovať do hlavnej konfigurácie) a napíšte doň nasledujúce:

# vi /etc/nginx/sites-enabled/git server ( # Zaveste na porte 8080 počúvajte 8080; # Adresa nášho servera (nezabudnite pridať DNS záznam) server_name git.example.ru; # Logy access_log /var /log/nginx /git-http-backend.access.log; error_log /var/log/nginx/git-http-backend.error.log; # Primárna adresa pre umiestnenie anonymného prístupu / ( # Pri pokuse o nahranie odošlite používateľa na súkromnú adresu if ($ arg_service ~* "git-receive-pack") ( prepíšte ^ /private$uri naposledy; ) zahrňte /etc/nginx/fastcgi_params; # Adresa nášho git-http-backend fastcgi_param SCRIPT_FILENAME /usr /lib/git-core/git- http-backend; # Adresa úložiska Git fastcgi_param GIT_PROJECT_ROOT /srv/git; # Adresa súboru fastcgi_param PATH_INFO $uri; # Adresa servera fcgiwrap fastcgi_pass 127.0.0.1:9001; ) # Adresa miesta prístupu na zápis ~/private(/.* )$ ( # Používateľské oprávnenia auth_basic "git anonymný iba na čítanie, overený zápis"; # Autentifikácia HTTP založená na htpasswd auth_basic_user_file /etc/nginx/htpasswd; # Nastavenia FastCGI i nclude /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_PROJECT_ROOT /srv/git; fastcgi_param PATH_INFO $ 1; fastcgi_pass 127.0.0.1:9001; ))

Táto konfigurácia predpokladá tri dôležité veci:

  1. Adresa úložiska bude /srv/git, takže nastavte príslušné povolenia: $ sudo chown -R www-data:www-data /srv/git
  2. Samotný repozitár musí byť čitateľný pre Anonymous a musí umožňovať nahrávanie cez HTTP: $ cd /srv/git $ git config core.sharedrepository true $ git config http.receivepack true
  3. Autentifikácia sa vykonáva pomocou súboru htpasswd, musíte ho vytvoriť a pridať doň používateľov: $ sudo apt-get install apache2-utils $ htpasswd -c /etc/nginx/htpasswd user1 $ htpasswd /etc/nginx/htpasswd user2 .. .

To je všetko, reštartujte nginx:

Microcaching

Predstavme si situáciu s dynamickou, často aktualizovanou stránkou, ktorá zrazu začne dostávať veľmi veľké zaťaženie (dobre, dostala sa na stránku jedného z najväčších spravodajských webov) a prestane zvládať návrat obsahu. Kompetentná optimalizácia a implementácia správnej schémy ukladania do vyrovnávacej pamäte bude trvať dlho a problémy je potrebné riešiť už teraz. Čo môžeme urobiť?

Existuje niekoľko spôsobov, ako sa dostať z tejto situácie s čo najmenšími stratami, no najzaujímavejší nápad prišiel od Fenn Bailey (Fenn Bailey, fennb.com). Myšlienkou je jednoducho umiestniť nginx pred server a prinútiť ho uložiť do vyrovnávacej pamäte všetok prenášaný obsah, ale nielen vyrovnávaciu pamäť, ale iba na jednu sekundu. Vrcholom je, že stovky a tisíce návštevníkov stránok za sekundu v skutočnosti vygenerujú iba jedno volanie na backend, pričom väčšina z nich dostane stránku uloženú vo vyrovnávacej pamäti. Zároveň si len málokto všimne rozdiel, pretože aj na dynamickej stránke jedna sekunda zvyčajne nič neznamená.

Konfigurácia s implementáciou tohto nápadu nebude vyzerať tak komplikovane:

# vi /etc/nginx/sites-enabled/cache-proxy # Konfigurácia cache proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:5m max_size=1000m; server ( listen 80; server_name example.com; # Umiestnenie adresy vyrovnávacej pamäte / ( # Predvolene povolená vyrovnávacia pamäť nastaviť $no_cache ""; # Zakázať vyrovnávaciu pamäť pre všetky metódy okrem GET a HEAD if ($request_method !~ ^(GET|HEAD) $ ) ( set $no_cache "1"; ) # Ak klient odovzdá obsah na stránku (no_cache = 1), dbáme na to, aby sa údaje, ktoré mu boli poskytnuté, neuložili do vyrovnávacej pamäte na dve sekundy a mohol vidieť výsledok sťahovania, ak ($no_cache = "1") ( add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; ) if ($http_cookie ~* "_mcnc") ( nastaviť $no_cache "1"; ) # Povoliť / zakázať vyrovnávaciu pamäť v závislosti od stavu premennej no_cache proxy_no_cache $no_cache; proxy_cache_bypass $no_cache; # Požiadavky proxy na skutočný server proxy_pass http://appserver.example.ru; mikrocache proxy_cache; proxy_cache_key $scheme$host$request_method$ request_uri; proxy_cache_valid 200 1s; # Ochrana pred problémom stáda Thundering aktualizácia proxy_cache_use_stale; # Pridať štandardné hlavičky proxy_set_h hlavička Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Neukladajte do vyrovnávacej pamäte súbory väčšie ako 1 MB proxy_max_temp_file_size 1M; ))

Špeciálne miesto v tejto konfigurácii zaberá riadok "proxy_cache_use_stale update;", bez ktorého by sme dostávali pravidelné nárazy na backend server kvôli požiadavkám, ktoré prichádzali počas aktualizácie vyrovnávacej pamäte. Inak je všetko štandardné a malo by byť jasné bez ďalšieho vysvetľovania.

Priblíženie proxy k cieľovému publiku

Napriek rozsiahlemu globálnemu zvýšeniu rýchlosti internetu stále zohráva úlohu fyzická vzdialenosť servera od cieľového publika. To znamená, že ak ruská stránka beží na serveri umiestnenom niekde v Amerike, rýchlosť prístupu k nej bude a priori pomalšia ako z ruského servera s rovnakou šírkou pásma (samozrejme, ak zatvoríte oči pred všetkými ostatnými faktormi ). Ďalšou vecou je, že je často výhodnejšie hostiť servery v zahraničí, a to aj z hľadiska údržby. Preto, aby ste získali zisk vo forme vyššej návratnosti, budete musieť ísť na trik.

Jedna z možných možností: umiestniť hlavný produktívny server na Západ a nasadiť front-end, ktorý nie je príliš náročný na zdroje a poskytuje statiku, v Rusku. To vám umožní rýchlo vyhrať bez vážnych nákladov. Konfigurácia nginx pre frontend bude v tomto prípade jednoduchá implementácia proxy, ktorú všetci poznáme:

# vi /etc/nginx/sites-enabled/proxy # Uložiť vyrovnávaciu pamäť na 30 dní v 100 GB úložisku proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:32m inactive=30d max_size=100g; server ( listen 80; server_name example.com; # V skutočnosti, naše umiestnenie proxy ~* .(jpg|jpeg|gif|png|ico|css|midi|wav|bmp|js|swf|flv|avi|djvu|mp3) $ ( # Backend adresa proxy_pass back.example.com:80; proxy_redirect vypnuté; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffer_size 16k;2 proxy_buffer_size 16k;3 proxy_cache_valid 30d; proxy_ignore_headers "Cache-Control" "Platnosť vyprší"; proxy_cache_key "$uri$is_args$args"; proxy_cache_lock zapnuté; ) )

zistenia

Dnes s pomocou nginx môžete vyriešiť veľa rôznych úloh, z ktorých mnohé vôbec nesúvisia s webovým serverom a protokolom HTTP. Mail proxy, streamovací server a rozhranie Git sú len niektoré z úloh.

Tento článok vysvetlí, ako nakonfigurovať NGINX Plus alebo NGINX Open Source ako proxy pre poštový server alebo externú poštovú službu.

Úvod

NGINX môže proxy protokoly IMAP, POP3 a SMTP k jednému z upstream poštových serverov, ktoré sú hostiteľmi poštových účtov, a teda môže byť použitý ako jediný koncový bod pre e-mailových klientov. To môže priniesť množstvo výhod, ako napríklad:

  • jednoduché škálovanie počtu poštových serverov
  • výber poštového servera na základe rôznych pravidiel, napríklad výber najbližšieho servera na základe IP adresy klienta
  • rozloženie záťaže medzi poštové servery

Predpoklady

    NGINX Plus (už obsahuje moduly pošty potrebné na prenos e-mailov cez proxy) alebo NGINX Open Source zostavili moduly pošty pomocou parametra --with-mail pre funkčnosť e-mailového proxy servera a parametra --with-mail_ssl_module pre podporu SSL/TLS:

    $ ./configure --with-mail --with-mail_ssl_module --with-openssl=[ DIR] /openssl-1.1.1

    poštové servery IMAP, POP3 a/alebo SMTP alebo externá poštová služba

Konfigurácia poštových proxy serverov SMTP/IMAP/POP3

V konfiguračnom súbore NGINX:

    mail (#...)

    mail ( názov_servera mail.example.com ; #... )

    mail ( názov_servera mail.example.com ; auth_http localhost : 9000 /cgi-bin/nginxauth.cgi ; #... )

    Prípadne zadajte, či chcete informovať používateľa o chybách z autentifikačného servera zadaním direktívy proxy_pass_error_message. Toto môže byť užitočné, keď poštovej schránke dôjde pamäť:

    mail (server_name mail.example.com; auth_http localhost: 9000 /cgi-bin/nginxauth.cgi; proxy_pass_error_message on; #...)

    Nakonfigurujte každý server SMTP, IMAP alebo POP3 pomocou blokov servera. Pre každý server zadajte:

    • a číslo portu ktoré zodpovedajú špecifikovanému protokolu s direktívou listen
    • a protokol s direktívou protokolu (ak nie je špecifikovaná, bude automaticky detekovaná z portu špecifikovaného v direktíve listen)
    • povolenej autentifikačné metódy s direktívami imap_auth, pop3_auth a smtp_auth:

    server (počúvanie 25; protokol smtp; prihlásenie smtp_auth obyčajné cram-md5; ) server (počúvanie 110; protokol pop3; pop3_auth obyčajný apop cram-md5;) server (počúvanie 143; protokol imap; )

Nastavenie autentifikácie pre Mail Proxy

Každá POP3/IMAP/SMTP požiadavka od klienta bude najskôr overená na externom HTTP autentifikačnom serveri alebo autentifikačným skriptom. Pre proxy poštového servera NGINX je povinné mať autentifikačný server. Server si môžete vytvoriť sami v súlade s overovacím protokolom NGINX, ktorý je založený na protokole HTTP.

Ak je autentifikácia úspešná, autentifikačný server vyberie upstream server a presmeruje požiadavku. V tomto prípade bude odpoveď zo servera obsahovať nasledujúce riadky:

HTTP/1.0 200 OK Auth-Status: OK Auth-Server: # názov servera alebo IP adresa nadradeného servera, ktorý sa použije na spracovanie pošty Autorizačný port: # port upstream servera

Ak overenie zlyhá, overovací server vráti chybovú správu. V tomto prípade bude odpoveď zo servera obsahovať nasledujúce riadky:

HTTP/1.0 200 OK Auth-Status: # chybové hlásenie, ktoré sa má vrátiť klientovi, napríklad „Neplatné prihlasovacie meno alebo heslo“ Auth-Wait: # počet zostávajúcich pokusov o overenie, kým sa spojenie neukončí

Upozorňujeme, že v oboch prípadoch bude odpoveď obsahovať HTTP/1.0 200 OKčo môže byť mätúce.

Ďalšie príklady požiadaviek na autentifikačný server a odpovedí z nich nájdete v module ngx_mail_auth_http_module v referenčnej dokumentácii NGINX.

Nastavenie SSL/TLS pre Mail Proxy

Použitím POP3/SMTP/IMAP cez SSL/TLS zaistíte, že dáta prenášané medzi klientom a poštovým serverom sú zabezpečené.

Ak chcete povoliť protokol SSL/TLS pre poštový server proxy:

    Uistite sa, že váš NGINX je nakonfigurovaný s podporou SSL/TLS zadaním príkazu nginx -V do príkazového riadka a potom vyhľadaním riadku with --mail_ssl_module vo výstupe:

    $ nginx -V konfigurovať argumenty: ... with--mail_ssl_module

    Uistite sa, že ste získali certifikáty servera a súkromný kľúč a umiestnite ich na server. Certifikát je možné získať od dôveryhodnej certifikačnej autority (CA) alebo vygenerovať pomocou knižnice SSL, ako je OpenSSL.

    ssl na ;

    zaskočí na ;

    Pridajte certifikáty SSL: zadajte cestu k certifikátom (ktoré musia byť vo formáte PEM) pomocou direktívy ssl_certificate a zadajte cestu k súkromnému kľúču v direktíve ssl_certificate_key:

    mail ( #... ssl_certificate /etc/ssl/certs/server.crt ; ssl_certificate_key /etc/ssl/certs/server.key ; )

    Môžete použiť iba silné verzie a šifry SSL/TLS s direktívami ssl_protocols a ssl_ciphers, alebo si môžete nastaviť svoje vlastné preferované protokoly a šifry:

    mail ( #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; )

Optimalizácia SSL/TLS pre Mail Proxy

Tieto rady vám pomôžu zrýchliť a zabezpečiť váš poštový proxy server NGINX:

    Nastavte počet pracovných procesov rovný počtu procesorov s direktívou worker_processes nastavenou na rovnakú úroveň ako kontext pošty:

    worker_processes auto ; mail (#...)

    Povoľte vyrovnávaciu pamäť zdieľanej relácie a vypnite vstavanú vyrovnávaciu pamäť relácie pomocou funkcie auto ; mail ( server_name mail.example.com ; auth_http localhost : 9000 /cgi-bin/nginxauth.cgi ; proxy_pass_error_message on ; ssl on ; ssl_certificate /etc/ssl/certs/server.crt ; ssts/serverl.certificate kľúč ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; ssl_session_cache shared:SSL:10m ; ssl_session_timeout 10m ; server (počúvanie 25 ; scramt počúvanie servera 1) prihlásenie do protokolu smtp5 0 ; protokol pop3 ; pop3_auth obyčajný apop cram-md5 ; ) server (počúvajte 143 ; protokol imap; ) )

    V tomto príklade existujú tri e-mailové proxy servery: SMTP, POP3 a IMAP. Každý zo serverov je nakonfigurovaný s podporou SSL a STARTTLS. Parametre relácie SSL sa uložia do vyrovnávacej pamäte.

    Proxy server používa HTTP autentifikačný server – jeho konfigurácia je nad rámec tohto článku. Všetky chybové hlásenia zo servera budú vrátené klientom.

Nginx- malý, veľmi rýchly, celkom funkčný webový server a poštový proxy server, vývojár Igor Sysoev (rambler.ru). Vďaka veľmi nízkej spotrebe systémových prostriedkov a rýchlosti, ako aj flexibilite konfigurácie, web server nginxčasto sa používa ako frontend pre ťažšie servery ako napr Apache, v projektoch s vysokou záťažou. Klasická možnosť je veľa, Nginx - Apache - FastCGI. Práca v takejto schéme, server nginx, akceptuje všetky požiadavky prichádzajúce cez HTTP a v závislosti od konfigurácie a samotnej požiadavky sa rozhodne, či požiadavku spracuje sám a poskytne klientovi pripravenú odpoveď, alebo pošle požiadavku na spracovanie jednému z backendov ( Apache alebo FastCGI).

Ako viete, server Apache spracováva každú požiadavku v samostatnom procese (vlákne), ktorý, treba povedať, že spotrebuje dosť NIE malé množstvo systémových prostriedkov, ak je takýchto procesov 10-20, je to nezmysel a ak existuje ak ich je 100-500 alebo viac, systém prestáva byť zábavný.

Skúsme si predstaviť takúto situáciu. Predpokladajme, že Apache 300 HTTP požiadaviek prichádza od klientov, 150 klientov sedí na rýchlych vyhradených linkách a ďalších 150 na relatívne pomalých internetových kanáloch, aj keď nie na modemoch. Čo sa stane v tejto situácii? A stane sa nasledovné, webový server Apache na spracovanie týchto 300 spojení vytvorí pre každý proces (vlákno), rýchlo vygeneruje obsah a 150 rýchlych klientov okamžite prevezme výsledok ich požiadaviek, procesy, ktoré im slúžili. budú zabité a zdroje budú uvoľnené a 150 je pomalých a výsledky ich dopytov budú trvať pomaly, kvôli úzkemu internetovému kanálu, v dôsledku čoho bude v systéme visieť 150 procesov Apachečakanie na to, kým klienti prevezmú obsah generovaný webovým serverom, čo pohltí množstvo systémových zdrojov. Prirodzene, situácia je hypotetická, ale myslím si, že podstata je jasná. Ak chcete opraviť vyššie uvedenú situáciu a balík pomáha. Po prečítaní celej požiadavky od klienta ju odovzdá na spracovanie Apache, ktorý následne generuje obsah a čo najrýchlejšie vracia pripravenú odpoveď Nginxu, po čom môže s čistým svedomím proces zabiť a uvoľniť systémové prostriedky, ktoré zaberá. Webový server Nginx, ktorý prijíma výsledok požiadavky od Apache, zapisuje ho do vyrovnávacej pamäte alebo aj do súboru na disk a môže ho dávať pomalým klientom ľubovoľne dlho, pričom jeho pracovné procesy spotrebúvajú tak málo zdrojov, že .. "je až smiešne o tom hovoriť" ©. :) Takáto schéma výrazne šetrí systémové zdroje, opakujem, ale pracovné procesy Nginx spotrebúvajú mizivé množstvo zdrojov, o to viac je to relevantné pre veľké projekty.

A to je len malá časť toho, čo server Nginx dokáže, nezabudnite na možnosť ukladania údajov do vyrovnávacej pamäte a práce s memcached. Tu je zoznam hlavných funkcií webového servera Nginx.

Funkcionalita servera Nginx ako HTTP servera

  • Spracovanie statického obsahu, indexové súbory, zoznam adresárov, otvorená vyrovnávacia pamäť deskriptorov súborov;
  • Zrýchlené proxy s ukladaním do vyrovnávacej pamäte, vyrovnávaním zaťaženia a núdzovým prepnutím;
  • Zrýchlená podpora FastCGI servery s vyrovnávacou pamäťou, vyrovnávaním zaťaženia a odolnosťou voči chybám;
  • Modulárna štruktúra, podpora rôznych filtrov (SSI, XSLT, GZIP, životopis, chunked responses);
  • Podpora pre rozšírenia SSL a TLS SNI;
  • na báze IP alebo na základe mena virtuálne servery;
  • Práca s KeepAlive a pipeline pripojeniami;
  • Možnosť konfigurovať akékoľvek časové limity, ako aj počet a veľkosť vyrovnávacích pamätí na úrovni server Apache;
  • Vykonávanie rôznych akcií v závislosti od adresy klienta;
  • Zmena URI pomocou regulárnych výrazov;
  • Špeciálne chybové stránky pre 4xx a 5xx;
  • Obmedzenie prístupu na základe adresy klienta alebo hesla;
  • Nastavenie formátov protokolových súborov, rotácia protokolov;
  • Obmedzenie rýchlosti odozvy klientovi;
  • Obmedzenie počtu súčasných pripojení a požiadaviek;
  • Podpora metód PUT, DELETE, MKCOL, COPY a MOVE;
  • Zmena nastavení a aktualizácia servera bez zastavenia práce;
  • vstavaný Perl;

Funkcionalita servera Nginx ako poštového proxy servera

  • Preposielanie na IMAP/POP3 backend pomocou externého HTTP autentifikačného servera;
  • Kontrola SMTP užívateľa na externom HTTP autentifikačnom serveri a preposielanie na interný SMTP server;
  • Podpora pre nasledujúce metódy autentifikácie:
    • POP3 - UŽÍVATEĽ/PASS, APOP, AUTH PRIHLÁSENIE/PLAIN/CRAM-MD5;
    • IMAP - PRIHLÁSENIE, AUTHOVANIE PRIHLÁSENIE/PLAIN/CRAM-MD5;
    • SMTP - AUTH LOGI / PLAIN / CRAM-MD5;
  • podpora SSL;
  • podpora pre STARTTLS a STLS;

Operačné systémy a platformy podporované webovým serverom Nginx

  • FreeBSD, platformy 3 až 8, i386 a amd64;
  • Linux, od 2.2 do 2.6 - platforma i386; Linux 2.6 - amd64;
  • platformy Solaris 9 - i386 a sun4u; platformy Solaris 10 - i386, amd64 a sun4v;
  • platformy MacOS X ppc, i386;
  • Windows XP, Windows Server 2003; (Momentálne v beta testovaní)

Architektúra a škálovateľnosť servera Nginx

  • Hlavný (hlavný) proces, niekoľko (konfigurovateľných v konfiguračnom súbore) pracovných procesov spustených pod neprivilegovaným používateľom;
  • Podpora pre nasledujúce spôsoby spracovania pripojenia:
    • vybrať je štandardná metóda. Príslušný modul Nginx sa vytvorí automaticky, ak sa na danej platforme nenájde efektívnejšia metóda. Môžete vynútiť vynútené zapnutie alebo vypnutie zostavenia tohto modulu pomocou konfiguračných možností --with-select_module alebo --without-select_module.
    • anketa je štandardná metóda. Príslušný modul Nginx sa vytvorí automaticky, ak sa na danej platforme nenájde efektívnejšia metóda. Môžete vynútiť vynútené zapnutie alebo vypnutie zostavenia tohto modulu pomocou konfiguračných možností --with-poll_module alebo --without-poll_module.
    • kqueue je efektívna metóda používaná v operačných systémoch FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 a MacOS X. Pri použití na dvojprocesorových počítačoch MacOS X môže spôsobiť paniku v jadre.
    • epoll je efektívna metóda používaná v Linuxe 2.6+. Niektoré distribúcie, ako napríklad SuSE 8.2, majú záplaty na podporu epoll v jadre 2.4.
    • rtsig - signály v reálnom čase, efektívna metóda používaná v Linuxe 2.2.19+. V predvolenom nastavení nemôže byť vo fronte pre celý systém viac ako 1024 signálov. Pre servery s vysokou záťažou to nestačí, veľkosť frontu je potrebné zvýšiť pomocou parametra jadra /proc/sys/kernel/rtsig-max. Avšak od Linuxu 2.6.6-mm2 je táto možnosť odstránená, namiesto toho má každý proces samostatný front signálov, ktorého veľkosť je určená RLIMIT_SIGPENDING.
    • Keď je rad plný, server nginx resetuje ho a spracováva pripojenia metódou poll, kým sa situácia nevráti do normálu.
    • /dev/poll- efektívna metóda, podporovaná na operačných systémoch Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ a Tru64 UNIX 5.1A+.
    • eventport - porty udalostí, efektívna metóda používaná v Solaris 10. Pred použitím je potrebné nainštalovať záplatu, aby sa predišlo panike jadra.
  • Používanie funkcií metódy kqueue, ako sú EV_CLEAR, EV_DISABLE (pre dočasné vypnutie udalosti), NOTE_LOWAT, EV_EOF, počet dostupných údajov, chybové kódy;
  • Práca so súborom sendfile (FreeBSD 3.1+, Linux 2.2.+, Mac OS X 10.5+), sendfile64 (Linux 2.4.21+) a sendfilev (Solaris 8 7/01+);
  • Podpora akceptačných filtrov (FreeBSD 4.1+) a TCP_DEFER_ACCEPT (Linux 2.4+);
  • 10 000 nečinných udržiavacích pripojení HTTP spotrebuje približne 2,5 milióna pamäte;
  • Minimálny počet operácií kopírovania údajov;

iRedMail je zostava poštového servera s otvoreným zdrojovým kódom. Zostava je založená na serveri Postfix SMTP (Mail Transfer Agent, skrátene MTA). Zostava tiež obsahuje: Dovecot, SpamAssassin, Greylist, ClamAV, SOGo Roundcube, NetData a NGINX.

Holubník- IMAP/POP3 server.

Spamassassin- nástroj na filtrovanie spamu.

Greylist- antispamový nástroj založený na šedých zoznamoch.

ClamAV- antivírus.

Okrúhla kocka a Tak choď- Weboví klienti pre prácu s e-mailom.

Netdata- program na monitorovanie prevádzky servera v reálnom čase.

Nginx- webový server.

Podporuje operačné systémy: CentOS 7, Debian 9, Ubuntu 16.04/18.04, FreeBSD 11/12 a OpenBSD 6.4.

iRedMail má platené a bezplatné verzie, ktoré sa navzájom líšia funkčnosťou vlastného webového rozhrania zostavy pošty iRedAdmin. V bezplatnej verzii môžete vytvárať iba domény, používateľské a správcovské poštové schránky. Ak si potrebujete vytvoriť alias, v bezplatnej verzii cez iRedAdmin to neurobíte. Našťastie existuje bezplatné riešenie s názvom PostfixAdmin, ktoré vám to umožňuje. PostfixAdmin sa ľahko integruje s iRedMail a funguje s ním skvele.

Inštalácia

Na inštaláciu potrebujeme jeden z vyššie uvedených operačných systémov. Budem používať Ubuntu Server 18.04. Musíte mať tiež zakúpený názov domény a nakonfigurovanú zónu DNS. Ak používate server DNS svojho registrátora domény, musíte v sekcii správy zóny domény vytvoriť dva záznamy: A a MX. Môžete tiež použiť svoj vlastný DNS nastavením delegovania v osobnom účte registrátora názvu domény.

Nastavenie zóny domény pri použití registrátora DNS

Poznámka! Nastavenia DNS sa prejavia od niekoľkých hodín do jedného týždňa. Kým sa nastavenia neprejavia, poštový server nebude fungovať správne.

Ak chcete nainštalovať, stiahnite si aktuálnu verziu z webovej lokality iRedMail. Momentálne je to 0.9.9.

# wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2

Potom rozbaľte stiahnutý archív.

# tar xjf iRedMail-0.9.9.tar.bz2

Rozbaľovanie archívu

A prejdite do vytvoreného priečinka.

# cd iRedMail-0.9.9

Priečinok s inštalátorom iRedMail

Kontrola obsahu priečinka

Obsah priečinka

A spustite inštalačný skript iRedMail.

# bash iRedMail.sh

Spustí sa inštalácia poštového systému. Počas procesu inštalácie budete musieť zodpovedať niekoľko otázok. Súhlasíme so spustením inštalácie.

Spustenie inštalácie

Výber inštalačného adresára

Teraz musíte vybrať webový server. Výber nie je veľký, preto volíme NGINX.

Výber webového servera

Teraz musíte vybrať databázový server, ktorý sa nainštaluje a nakonfiguruje na prácu s poštovým systémom. Vyberte MariaDB.

Výber databázového servera

Nastavte heslo root pre databázu.

Vytvorenie koreňového hesla databázy

Teraz špecifikujeme našu poštovú doménu.

Vytvorenie poštovej domény

Potom vytvorte heslo pre schránku správcu [e-mail chránený] doména.ru.

Vytvorte heslo správcu pošty

Výber webových komponentov

Potvrdíme zadané nastavenia.

Potvrdenie nastavení

Inštalácia sa začala.

Inštalácia

Po dokončení inštalácie potvrďte vytvorenie pravidla iptables pre SSH a reštartujte firewall. iRedMail funguje s iptables. V Ubuntu, najbežnejšie používanom nástroji na správu brány firewall UVW. Ak z nejakého dôvodu máte takúto potrebu, nainštalujte UVW (apt install ufw) a pridajte pravidlá do UVW(príklad: ufw povoliť "nginx plný" alebo ufw povoliť Postfix) nezablokoval poštový server. Zoznam dostupných pravidiel môžete zobraziť spustením príkazu: zoznam aplikácií ufw. Potom zapnite UVW: povoliť ufw.

Vytvorte pravidlo iptables

Reštart brány firewall

Týmto je inštalácia iRedMail dokončená. Systém nám dal adresy webového rozhrania a prihlasovacie údaje. Ak chcete povoliť všetky súčasti poštového systému, musíte reštartovať server.

Koniec inštalácie

Reštartujeme.

# reštartovať

Nastavenie

Najprv sa musíte uistiť, že všetko funguje. Pokúsime sa vstúpiť do ovládacieho panela iReadAdmin na adrese https://domena/iredadmin. Prihlásiť sa [e-mail chránený] doména.ru, heslo bolo vytvorené počas inštalácie. Existuje rozhranie v ruskom jazyku.

Ako vidíte, všetko funguje. Počas prihlasovania do iRedAdmin ste s najväčšou pravdepodobnosťou dostali bezpečnostnú chybu súvisiacu s certifikátom. Je to preto, že iRedMail má certifikát s vlastným podpisom, na ktorý prehliadač nadáva. Ak chcete tento problém vyriešiť, musíte nainštalovať platný certifikát SSL. Ak ste si ho zakúpili, môžete si ho nainštalovať. V príklade nainštalujem bezplatné SSL od Let's Encrypt.

Inštalácia certifikátu Let's Encrypt SSL

Certifikát nainštalujeme pomocou utility certbot. Najprv pridáme úložisko.

# add-apt-repository ppa:certbot/certbot

Potom nainštalujeme samotný certboot s potrebnými komponentmi.

# apt install python-certbot-nginx

Dostávame certifikát.

# certbot --nginx -d domain.ru

Po spustení príkazu vás systém požiada o zadanie e-mailovej adresy, zadajte. Potom sa s najväčšou pravdepodobnosťou zobrazí chyba, že nie je možné nájsť blok servera, pre ktorý bol certifikát vygenerovaný. V tomto prípade je to normálne, pretože nemáme žiadny blok servera. Pre nás je hlavné získať certifikát.

Získanie certifikátu

Ako vidíte, certifikát bol úspešne prijatý a systém nám ukázal cesty k samotnému certifikátu a ku kľúču. Sú presne to, čo potrebujeme. Vo všeobecnosti sme dostali 4 súbory, ktoré budú uložené v priečinku „/etc/letsencrypt/live/domain“. Teraz musíme povedať webovému serveru o našom certifikáte, to znamená nahradiť vložený certifikát tým, ktorý sme práve dostali. Aby sme to dosiahli, musíme upraviť iba jeden súbor.

# nano /etc/nginx/templates/ssl.tmpl

A zmeňte v ňom posledné dva riadky.

Výmena certifikátu SSL

Cesty v súbore zmeníme na cesty, ktoré nám systém povedal, keď sme dostali certifikát.

Výmena certifikátu SSL

A reštartujte NGINX.

# reštart služby nginx

Teraz sa skúsme znova prihlásiť. iRedAdmin.

Overenie certifikátu SSL

Už sa nevyskytla chyba certifikátu. Certifikát je platný. Môžete kliknúť na zámok a zobraziť jeho vlastnosti. Keď platnosť certifikátu vyprší, certboot by ho mal automaticky obnoviť.

Teraz si povedzme niečo o certifikáte Dovecot a Postfix. Za týmto účelom upravíme dva konfiguračné súbory. Robíme:

# nano /etc/dovecot/dovecot.conf

Nájdenie bloku:

#SSL: Globálne nastavenia.

A tam zaregistrovaný certifikát zmeníme na náš.

Náhradný certifikát pre Dovecot

Venujte pozornosť aj riadku „ssl_protocols“. Jeho hodnota musí byť "!SSLv3", inak sa pri reštartovaní Dovecotu zobrazí "Upozornenie: SSLv2 nie je podporované OpenSSL. Zvážte jeho odstránenie z chyby ssl_protocols".

# nano /etc/postfix/main.cf

Nájdenie bloku:

# SSL kľúč, certifikát, CA

A meníme cesty v ňom na cesty k súborom nášho certifikátu.

Náhrada certifikátu pre Postfix

Tým je inštalácia certifikátu dokončená. Je potrebné reštartovať Dovecot a Postfix, ale je lepšie reštartovať server.

# reštart služby holubník

# reštartovať

Inštalácia PHPMyAdmin

Táto položka je voliteľná, ale odporúčam vám ju dokončiť a nainštalovať PHPMyAdmin pre vašu databázu.

# apt install phpmyadmin

Inštalátor vás požiada, aby ste pracovali s webovým serverom na konfiguráciu PHPMyAdmin, keďže NGINX nie je v tomto zozname, stačí stlačiť TAB a pokračovať.

Inštalácia PHPMyAdmin

Po dokončení inštalácie, aby phpmyadmin fungoval, musíte vytvoriť symbolický odkaz na adresár, s ktorým NGINX štandardne pracuje.

# ln -s /usr/share/phpmyadmin /var/www/html

A skúste ísť do https://domain/phpmyadmin/

PHPMyAdmin funguje. Pripojenie je chránené certifikátom, nedochádza k žiadnym chybám. Pohni sa. Vytvorme správcu databázy MySQL (MariaDB).

# mysql

A dostávame sa do riadiacej konzoly MariaDB. Ďalej vykonáme príkazy jeden po druhom:

MariaDB > VYTVORIŤ POUŽÍVATEĽA "admin"@"localhost" IDENTIFIKOVANÉHO PODĽA "hesla";
MariaDB > UDELTE VŠETKY VÝHODY NA *.* "admin"@"localhost" S MOŽNOSŤOU UDELENIA;
MariaDB > FLUSH PRIVILEGES;

Vytvorenie používateľa MySQL

Všetko je v poriadku, ste prihlásený. PHPMyAdmin je pripravený.

Inštalácia PostfixAdmin

V zásade nie je možné PostfixAdmin, podobne ako PHPMyAdmin, nainštalovať. Poštový server bude fungovať dobre aj bez týchto komponentov. Potom však nebudete môcť vytvárať poštové aliasy. Ak to nepotrebujete, pokojne tieto časti preskočte. Ak stále potrebujete aliasy, máte dve možnosti: kúpiť si platenú verziu iReaAdmin alebo nainštalovať PostfixAdmin. Samozrejme, môžete to urobiť bez dodatočného softvéru ručným zápisom aliasov do databázy, ale to nie je vždy pohodlné a nie je vhodné pre každého. Odporúčam použiť PostfixAdmin, teraz zvážime jeho inštaláciu a integráciu s iRedMail. Spustíme inštaláciu:

# apt install postfixadmin

Súhlasíme a vytvoríme heslo do systémovej databázy programu.

Inštalácia PostfixAdmin

Inštalácia PostfixAdmin

Symbolický odkaz vytvoríme analogicky s inštaláciou PHPMyAdmin.

# ln -s /usr/share/postfixadmin /var/www/html

Používateľa, v mene ktorého sa webový server spúšťa, robíme vlastníkom adresára. V našom prípade je NGINX spustený ako používateľ www-data.

# chown -R www-data /usr/share/postfixadmin

Teraz musíme upraviť konfiguračný súbor PostfixAdmin a pridať informácie o databáze, ktorú iRedAdmin používa. Štandardne sa táto databáza nazýva vmail. Ak prejdete na PHPMyAdmin, môžete to tam vidieť. A tak, aby PostfixAdmin vykonal zmeny v databáze, predpíšeme to v konfigurácii PostfixAdmin.

# nano /etc/postfixadmin/config.inc.php

Nájdenie riadkov:

$CONF["database_type"] = $dbtype;
$CONF["database_host"] = $dbserver;
$CONF["database_user"] = $dbuser;
$CONF["database_password"] = $dbpass;
$CONF["názov_databázy"] = $dbname;

A pripomeňte si:

$CONF["database_type"] = "mysqli"; # Typ databázy
$CONF["database_host"] = "lokálny hostiteľ"; # Hostiteľ databázového servera
$CONF["database_user"] = "admin"; # Prihláste sa s prístupom na zápis do databázy vmail. Môžete použiť predtým vytvoreného správcu
$CONF["database_password"] = "heslo"; # Heslo používateľa uvedeného vyššie
$CONF["database_name"] = "vmail"; # Názov databázy iRedMail

Zadávanie informácií o databáze

Ak plánujete používať webového poštového klienta SOGo, musíte urobiť ešte jeden ďalší krok, a to zmeniť šifrovanie PostfixAdmin v odseku $CONF["šifrovať"] s "md5crypt" na "holubník:SHA512-CRYPT". Ak tak neurobíte, potom pri pokuse o autorizáciu v SOGo používateľom vytvoreným v PostfixAdmin, dostanete chybu s nesprávnym prihlasovacím menom alebo heslom.

Zmena typu šifrovania

Teraz, aby ste úspešne dokončili inštaláciu a nezobrazovali sa chyby, musíte zadať dotaz do databázy. Je vhodné to urobiť cez PHPMyAdmin. Vyberte databázu vmail a prejdite na kartu SQL. V okne zadajte:

DROP INDEX doména na poštovú schránku;
DROP INDEX doména na aliase;
ALTER TABLE alias ADD COLUMN `goto` text NOT NULL;

Databázový dotaz

A stlačte "Vpred". Teraz sme pripravení, môžete prejsť do webového rozhrania PostfixAdmin a dokončiť inštaláciu. Ak to chcete urobiť, v prehliadači musíte zadať: https://domain/postfixadmin/setup.php.

Malo by sa zobraziť nasledovné:

Inštalácia PostfixAdmin

Ak sa všetko robí podľa pokynov, nemali by existovať žiadne chyby. Ak stále sú, potom sú zradení, aby boli eliminovaní, inak vás systém nepustí ďalej. Nastavte inštalačné heslo a kliknite na " Vygenerujte hash hesla". Systém vygeneruje hash hesla, ktoré musí byť vložené do parametra $CONF["setup_password"].

Dokončenie inštalácie PostfixAdmin

Zmena nastavení konfiguračného súboru

Teraz zadáme heslo, ktoré sme práve vytvorili, a vytvoríme správcu PostfixAdmin. Je lepšie nevytvárať správcu s prihlásením správcu pošty, pretože môžu nastať problémy s prihlásením do administračného panelu iRedAdmin.

Vytvorenie správcu PostfixAdmin

Všetko, správca je vytvorený. Môžete sa prihlásiť.

Upozorňujeme, že z bezpečnostného hľadiska je lepšie premenovať alebo vymazať súbor setup.php v adresári postfixadmin.

Poďme: https://domena/postfixadmin/ a zadajte novovytvorené poverenia. V PostfixAdmin, ako aj v iRedAdmin, je k dispozícii ruský jazyk. Dá sa vybrať pri autorizácii.

Snažíme sa vytvoriť poštovú schránku používateľa.

Povoliť/zakázať moduly iRedMail

Moduly iRedMail spravuje iRedAPD. Má konfiguračný súbor, ktorý obsahuje pracovné moduly. Ak konkrétny modul nepotrebujete, môžete ho odstrániť z konfiguračného súboru a prestane fungovať. Robíme:

# nano /opt/iredapd/settings.py

Nájdite čiaru pluginy“ a odstráňte z neho komponenty, ktoré nepotrebujete. Odstránim komponent "greylisting". Samozrejme, že chráni pred spamom pomerne efektívne, ale potrebné listy sa často nedostanú.

Greylist (sivý zoznam) je technológia automatickej ochrany pred spamom založená na analýze správania sa servera odosielateľa. Keď je povolený „greylisting“, server prvýkrát odmietne prijať list z neznámej adresy a ohlási dočasnú chybu. V tomto prípade sa server odosielateľa musí o odoslanie pokúsiť neskôr. Spameri to zvyčajne nerobia. Ak sa list odošle znova, pridá sa do zoznamu na 30 dní a pošta je už vymenená od prvého razu. Použite tento modul alebo sa nerozhodujte sami.

Povolenie/zakázanie poštových modulov

Po vykonaní zmien musíte reštartovať. iRedAPD.

# služba iredapd reštart

Testovanie poštového servera

Tým sa dokončí nastavenie poštového servera iRedMail. Môžete prejsť do poslednej fázy - testovania. Vytvorme dve poštové schránky. Ak chcete skontrolovať jeden cez iRedAdmin, druhý cez PostfixAdmin a poslať list z jednej poštovej schránky do druhej a naopak. Vytvorte poštovú schránku v iRedAdmin [e-mail chránený] doména.ru. V PostfixAdmin - [e-mail chránený] doména.ru

Vytvorenie používateľa v iRedAdmin

Vytvorenie používateľa v PostfixAdmin

Skontrolujte, či boli vytvorení používatelia.

Ak venujete pozornosť stĺpcu „Komu“ v zozname poštových schránok PostfixAdmin, môžete vidieť rozdiel medzi poštovými schránkami vytvorenými v iRedAdmin a PostfixAdmin. Poštové schránky vytvorené v iRedAdmin sú označené ako „ iba dopredu", a tie vytvorené v PostfixAdmin ako - " Poštová schránka". Najprv som dlho nechápal, prečo sa to deje a aký je medzi nimi rozdiel, a nakoniec som si všimol jednu vec. Schránky v iRedAdmine sú vytvorené bez aliasov a poštové schránky v PostfixAdmine s aliasom pre seba.

A ak sa tieto aliasy vymažú, poštové schránky sa zobrazia ako tie, ktoré boli vytvorené v iRedAdmin“ iba dopredu".

Odstránenie aliasov

Aliasy boli odstránené. Skontrolujte PostfixAdmin.

Ako vidíte, všetky polia sa zmenili na „Iba dopredu“. Rovnakým spôsobom, ak si vytvoríte alias pre seba v poštovej schránke vytvorenej v iRedAdmin, stane sa z nej „Schránka“. V zásade to nemá vplyv na výkon pošty. Jediná vec je, že nebudete môcť vytvoriť alias na poštovú schránku vytvorenú v PostfixAdmin. Namiesto vytvorenia aliasu budete musieť upraviť existujúci. Keď už hovoríme o aliasoch, v novej verzii iRedMail musíte urobiť zmenu na jednej z Postfixových kariet, ktorá je zodpovedná za aliasy. A ak to neurobíte, vytvorené aliasy nebudú fungovať. Na to je potrebné v súbore /etc/postfix/mysql/virtual_alias_maps.cf opraviť:

Robíme:

# nano /etc/postfix/mysql/virtual_alias_maps.cf

A opravíme to.

Nastavenie aliasov

Reštartujte Postfix:

# reštart služby postfix

Potom by malo všetko fungovať.

A tak začnime kontrolovať poštu. V krabici užívateľ1 prejdeme cez Roundcube a do krabice užívateľ2- cez SOGo a poslať list zo schránky užívateľ1 na užívateľ2 a späť.

Odoslanie e-mailu pomocou Roundcube

Prijímanie e-mailu v SOGo

Odoslanie e-mailu SOGo

Prijímanie e-mailov v Roundcube

Všetko funguje bez problémov. Doručenie listu trvá od dvoch do piatich sekúnd. Rovnakým spôsobom sa listy perfektne doručujú na servery Yandex a mail.ru (skontrolované).

Teraz skontrolujeme aliasy. Vytvorme krabicu užívateľ3 a vytvorte alias z poštovej schránky užívateľ1 na krabici užívateľ2. A pošlite list zo schránky užívateľ3 na krabici užívateľ1. V tomto prípade bude list musieť prísť do krabice užívateľ2.

Vytvorte alias

Odoslanie e-mailu z poštovej schránky používateľa 3 do poštovej schránky používateľa 1

Prijatie listu do poštovej schránky používateľa 2

Aj s prácou aliasov je všetko v poriadku.

Poďme otestovať prácu poštového servera prostredníctvom lokálneho poštového klienta. Zvážte napríklad Mozilla Thunderbird. Vytvorme ďalších dvoch používateľov: klient1 a klient2. Jednu schránku prepojíme cez IMAP, druhú cez POP3 a pošleme list z jednej schránky do druhej.

Pripojenie cez IMAP

POP3 pripojenie

Pošleme list od klienta 1 klientovi 2.

Odoslanie od zákazníka 1

Príjem na klientovi 2

A v opačnom poradí.

Odoslanie od klienta 2

Príjem na klientovi 1

Všetko funguje.

Ak pôjdete na: https://domena/netdata, potom môžete sledovať grafy stavu systému.

Záver

Tým sa dokončí inštalácia, konfigurácia a testovanie poštového systému iRedMail. Získali sme tak úplne zadarmo plnohodnotný poštový server s platným SSL certifikátom, dvoma rôznymi webovými poštovými klientmi, dvomi ovládacími panelmi, ako aj antispamom a antivírusom zabudovaným do pošty. Ak chcete, namiesto webových poštových klientov môžete použiť lokálnych poštových klientov, ako je Microsoft Outlook alebo Mozilla Thunderbird. Ak neplánujete používať webových poštových klientov, nemôžete ich nainštalovať vôbec, aby ste nepreťažili server, alebo nainštalovať jednu vec, ktorá sa vám páči viac. Osobne sa mi SOGo páči viac, pretože jeho rozhranie je optimalizované pre mobilné zariadenia, vďaka čomu je veľmi pohodlné prezeranie e-mailov zo smartfónu. To isté platí pre NetData a iRedAdmin, ak ho neplánujete používať, radšej ho neinštalujte. Tento poštový systém nie je veľmi náročný na zdroje. To všetko beží na VPS serveri s 1024 MB RAM a jedným virtuálnym procesorom. Ak máte akékoľvek otázky týkajúce sa tohto poštového systému, napíšte do komentárov.

P.S. Pri testovaní tohto produktu na rôznych operačných systémoch s 1 GB RAM (Ubuntu, Debian, CentOS) sa ukázalo, že 1 GB na fungovanie ClamAV nestačí. Takmer vo všetkých prípadoch pri použití 1 GB pamäte antivírus odkázal na chybu databázy. Zároveň v operačných systémoch Debian a Ubuntu antivírus jednoducho nekontroloval poštu prechádzajúcu serverom, inak všetko fungovalo dobre. Na CentOS bola situácia trochu iná. Služba clamd úplne zavesila systém, čím znemožnila normálne fungovanie servera. Pri pokuse o prihlásenie do webových rozhraní NGINX pravidelne dával chyby 502 a 504. Pošta bola tiež odoslaná časom. Zároveň, ak pridáte RAM až do 2 GB, potom vo všetkých prípadoch neboli žiadne problémy s prevádzkou antivírusu a servera ako celku. ClamAV naskenoval poštu prechádzajúcu poštovým serverom a napísal o nej do protokolov. Pri pokuse o odoslanie vírusu v prílohe bolo odosielanie zablokované. Spotreba pamäte bola približne 1,2 – 1,7 GB.

NGINX je možné použiť nielen ako webový server alebo http-proxy, ale aj na proxy server cez protokoly SMTP, IMAP, POP3. Toto nastaví:

  • Jediný vstupný bod pre škálovateľný poštový systém.
  • Vyvažovanie záťaže medzi všetkými poštovými servermi.

Tento článok sa inštaluje do operačného systému Linux. Ako poštovú službu, na ktorú sa odosielajú požiadavky, môžete použiť postfix, exim, dovecot, exchange, iredmail Assembly a ďalšie.

Princíp činnosti

NGINX prijíma požiadavky a overuje sa na webovom serveri. V závislosti od výsledku overenia prihlasovacieho mena a hesla server proxy vráti odpoveď s niekoľkými hlavičkami.

V prípade úspechu:

Server a port poštového servera teda určujeme na základe autentifikácie. To dáva veľa príležitostí s príslušnou znalosťou programovacích jazykov.

V prípade zlyhania:

V závislosti od výsledku autentifikácie a hlavičky je klient presmerovaný na poštový server, ktorý potrebujeme.

Príprava servera

Urobme nejaké zmeny v nastaveniach zabezpečenia servera.

SELinux

Zakážte SELinux, ak používate CentOS alebo ak používate tento bezpečnostný systém na Ubuntu:

vi /etc/selinux/config

SELINUX=zakázané

POŽARNE DVERE

Ak použijeme firewall(predvolené na CentOS):

firewall-cmd --permanent --add-port=25/tcp --add-port=110/tcp --add-port=143/tcp

firewall-cmd --reload

Ak použijeme iptables(predvolené v Ubuntu):

iptables -A INPUT -p tcp --dport 25 -j PRIJAŤ

iptables -A INPUT -p tcp --dport 110 -j PRIJAŤ

iptables -A INPUT -p tcp --dport 143 -j PRIJAŤ

apt-get install iptables-persistent

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

* v tomto príklade sme povolili SMTP (25), POP3 (110), IMAP (143).

Inštalácia NGINX

V závislosti od operačného systému sa inštalácia NGINX mierne líši.

alebo Linux centos:

yum nainštalovať nginx

alebo Linux ubuntu:

apt nainštalovať nginx

Povolíme automatické spustenie služby a spustíme ju:

systemctl povoliť nginx

systemctl spustiť nginx

Ak je už NGINX v systéme nainštalovaný, skontrolujte, s ktorými modulmi pracuje:

Dostaneme zoznam možností, s ktorými je webový server zostavený - medzi nimi by sme mali vidieť --s-mailom. Ak požadovaný modul neexistuje, musíte aktualizovať nginx

Nastavenie NGINX

Otvorte konfiguračný súbor nginx a pridajte možnosť poštou:

vi /etc/nginx/nginx.conf

mail (

auth_http localhost:80/auth.php;

Server(
počúvať 25;
protokol smtp;
smtp_auth prihlásenie obyčajné cram-md5;
}

Server(
počúvať 110;
protokol pop3;

}

Server(
počúvaj 143;
protokolová mapa;
}
}

* kde:

  • názov servera— názov poštového servera, ktorý sa zobrazí počas pozdravu SMTP.
  • auth_http— webový server a URL pre požiadavku na overenie.
  • proxy_pass_error_message— povolí alebo zakáže zobrazenie správy v prípade neúspešnej autentifikácie.
  • počúvaj— port, na ktorom sa počúvajú požiadavky.
  • protokol je aplikačný protokol, pre ktorý počúva príslušný port.
  • smtp_auth— dostupné metódy autentifikácie pre SMTP.
  • pop3_auth- dostupné metódy autentifikácie pre POP3.

V sekcii http - server pridajte:

Server(
listen 80 default_server;
počúvaj [::]:80 default_server;
...

Umiestnenie ~ \.php$ (
nastaviť $root_path /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
zahŕňajú fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
...

Reštartujte server nginx:

systemctl reštartujte nginx

Inštalácia a konfigurácia PHP

Na vykonanie autentifikácie pomocou PHP musia byť v systéme nainštalované nasledujúce balíky.

Ak CentOS:

yum nainštalovať php php-fpm

Ak ubuntu:

apt-get inštalácia php php-fpm

Spustite PHP-FPM:

systemctl povoliť php-fpm

systemctl spustenie php-fpm

Overenie

Overenie prihlásenia a hesla sa vykonáva skriptom, ktorého cestu nastavuje voľba auth_http. V našom príklade ide o PHP skript.

Príklad oficiálnej šablóny pre skript na overenie prihlasovacieho mena a hesla:

vi /usr/share/nginx/html/auth.php

* Tento skript akceptuje akékoľvek prihlasovacie meno a heslo a presmeruje požiadavky na servery 192.168.1.22 a 192.168.1.33 . Na nastavenie autentifikačného algoritmu upravíme riadky 61 - 64. Riadky 73 - 77 sú zodpovedné za vrátenie serverov, na ktoré prebieha presmerovanie - v tomto príklade, ak prihlásenie začína znakmi "a", "c", "f", "g", potom bude presmerovanie na server mailhost01, inak, na mailhost02. Mapovanie názvov serverov na IP adresy je možné nastaviť na riadkoch 31, 32, inak bude hovor prebiehať podľa názvu domény.

Nastavenie poštového servera

Výmena dát medzi proxy NGINX a poštovým serverom je jasná. K výnimke je potrebné pridať možnosť autentifikácie mechanizmom PLAIN. Ak chcete napríklad nakonfigurovať holubník, postupujte takto:

vi /etc/dovecot/conf.d/10-auth.conf

Pridať riadky:

vzdialené 192.168.1.11 (
disable_plaintext_auth = nie
}

* v tomto príklade sme povolili PLAIN požiadavky na autentifikáciu zo servera 192.168.1.11 .

Tiež kontrolujeme:

* ak ssl bude záležať požadovaný, kontrola nebude fungovať, pretože sa ukáže, že na jednej strane server povoľuje požiadavky v prehľade, ale vyžaduje šifrovanie ssl.

Reštartujte službu Dovecot:

systemctl reštart dovecot

Nastavenie klienta

Môžete pokračovať v kontrole nastavení servera proxy. Ak to chcete urobiť, v nastaveniach klienta zadajte adresu alebo názov servera nginx ako IMAP/POP2/SMTP, napríklad:

* v tomto príklade je poštový klient nakonfigurovaný na pripojenie k serveru 192.168.1.11 otvorenými portami 143 (IMAP) a 25 (SMTP).

Šifrovanie

Teraz nastavíme pripojenie SSL. Nginx musí byť zostavený s modulom mail_ssl_module- skontrolujte príkazom:

Ak chýba požadovaný modul, prebudujeme nginx.

Po úprave nášho konfiguračného súboru:

vi /etc/nginx/nginx.conf

mail (
názov_servera mail.domena.miestne;
auth_http localhost/auth.php;

proxy_pass_error_message on;

SSL zapnuté;
ssl_certificate /etc/ssl/nginx/public.crt;
ssl_certificate_key /etc/ssl/nginx/private.key;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

Server(
počúvať 110;
protokol pop3;
pop3_auth obyčajný apop cram-md5;
}

Server(
počúvaj 143;
protokolová mapa;
}

Dôvod: Spustil sa bezpečnostný systém SELinux.

Riešenie: vypnite alebo nakonfigurujte SELinux.