Poštový server Nginx. Nastavenie NGINX pre mail proxy

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 dokáž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 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:

  • na číslo portu ktoré zodpovedajú zadanému protokolu s direktívou listen
  • na 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 overovania pre mail proxy

Každá POP3/IMAP/SMTP požiadavka od klienta bude najprv 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 upstream servera, ktorý bude použitý na spracovanie pošty Auth-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 zapnuté;

štarttls 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ť 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 zakážte 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/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čúvať 25; protokol smt-počúvať server 5 smtp5 1 10 ; protokol pop3 ; pop3_auth obyčajný apop cram-md5 ; ) server (počúvanie 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é správy zo servera budú vrátené klientom.

iRedMail je pripravená montáž poštový server s otvoreným zdrojový kód. Zostava je založená na serveri Postfix SMTP (Mail Transfer Agent, skrátene MTA). Súčasťou zostavy sú aj: Dovecot, SpamAssassin, Greylist, ClamAV, SOGo Roundcube, NetData a NGINX.

Dovecot - IMAP/POP3 server.

Spamassassin je nástroj na filtrovanie spamu.

Greylist je antispamový nástroj založený na greyliste.

ClamAV je antivírus.

Roundcube a SOGo sú weboví klienti na prácu s emailom.

NetData je program na monitorovanie serverov v reálnom čase.

Nginx je 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. IN bezplatná verzia Môžete vytvárať iba domény, poštové schránky používateľov a správcov. Ak si potrebujete vytvoriť alias, v bezplatnej verzii cez iRedAdmin to už neurobíte. Našťastie existuje bezplatné riešenie s názvom PostfixAdmin, ktoré vám to umožňuje. PostfixAdmin sa ľahko integruje do iRedMail a skvele sa s ním pracuje.

Inštalácia

Na inštaláciu budeme potrebovať jeden z vyššie uvedených operačných systémov. Budem používať Ubuntu Server 18.04. Musíte mať tiež zakúpené Doménové meno a nakonfigurovaná zóna DNS. Ak používate DNS servery svojho registrátora domény, potom musíte v sekcii správy zóny domény urobiť dva záznamy: A a MX. Môžete tiež použiť svoj vlastný DNS nastavením delegovania v osobný účet váš registrátor názvu domény.

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

Poznámka! Čas vstupu Nastavenia DNS v trvaní 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 z webovej stránky iRedMail aktuálna verzia. Aktuá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 inštalačného programu 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 začatím inštalácie.

Spustite inštaláciu

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

Teraz musíte vybrať webový server. Nie je veľký výber, tak 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 uvádzame našu e-mailovú doménu.

Vytvorenie poštovej domény

Potom vytvoríme heslo pre poštovú schránku správcu [email protected].

Vytvorenie hesla správcu pošty

Výber webových komponentov

Potvrďte 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 pracuje s iptables. V Ubuntu je najbežnejšie používaný nástroj na správu brány firewall UFW. Ak z nejakého dôvodu máte takúto potrebu, nainštalujte UFW (apt install ufw) a pridajte pravidlá, aby UFW (príklad: ufw povoliť „Nginx Full“ alebo ufw povoliť Postfix) neblokovalo prácu poštového servera. Zoznam dostupných pravidiel môžete zobraziť spustením príkazu: ufw app list . Potom povoľte UFW: ufw povoľte.

Vytvorenie pravidla iptables

Reštartovanie brány firewall

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

Dokončenie inštalácie

Poďme reštartovať.

# reštartovať

nastavenie

Najprv sa musíte uistiť, že všetko funguje. Skúsme sa prihlásiť do ovládacieho panela iReadAdmin na https://domain/iredadmin. Prihláste sa [email protected], heslo vytvorené počas inštalácie. Existuje rozhranie v ruskom jazyku.

Ako vidíte, všetko funguje. Pri prihlasovaní do iRedAdmin ste s najväčšou pravdepodobnosťou dostali bezpečnostnú chybu súvisiacu s certifikátom. Stáva sa to preto, že iRedMail má vstavaný certifikát s vlastným podpisom, na ktorý sa prehliadač sťažuje. Ak chcete vyriešiť tento problém, musíte nainštalovať platný certifikát SSL. Ak máte zakúpený, 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 pridajme ú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 vašej 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. Hlavná vec je pre nás získať certifikát.

Získanie certifikátu

Ako vidíme, 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 informovať webový server 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 meníme v ňom posledné dva riadky.

Výmena certifikátu SSL

Cesty v súbore zmeníme na cesty, ktoré nám systém povedal pri preberaní certifikátu.

Výmena certifikátu SSL

A reštartujte NGINX.

# reštart služby nginx

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

Overuje sa certifikát 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 budeme informovať 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í chyba "Upozornenie: SSLv2 nepodporuje OpenSSL. Zvážte jeho odstránenie z ssl_protocols".

# nano /etc/postfix/main.cf

Nájdenie bloku:

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

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

Nahradenie 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

Tento krok je voliteľný, ale odporúčam to urobiť a nainštalovať PHPMyAdmin pre jednoduchú prácu s databázami.

# apt install phpmyadmin

Inštalátor sa opýta, s ktorým webovým serverom má pracovať PHPMyAdmin, keďže NGINX nie je na 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 snažíme sa ísť na https://domain/phpmyadmin/

PHPMyAdmin je spustený. Pripojenie je chránené certifikátom, nedochádza k žiadnym chybám. Pokračuj. Vytvorme správcu databázy MySQL (MariaDB).

# mysql

A dostávame sa k riadiacej konzole MariaDB. Ďalej spustí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, prihlásenie je dokončené. PHPMyAdmin je pripravený.

Inštalácia PostfixAdmin

V zásade PostfixAdmin, podobne ako PHPMyAdmin, nie je potrebné inš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, môžete tieto časti pokojne preskočiť. 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, a to manuálnou registráciou 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 sa pozrieme na jeho inštaláciu a integráciu s iRedMail. Začnime s inštaláciou:

# apt install postfixadmin

Súhlasíme a vytvoríme heslo pre systémovú databázu programu.

Inštalácia PostfixAdmin

Inštalácia PostfixAdmin

Symbolický odkaz vytvoríme rovnakým spôsobom ako pri inštalácii 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 mohol vykonávať zmeny v databáze, registrujeme ju v konfigurácii PostfixAdmin.

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

Nájdeme riadky:

$CONF["database_type"] = $dbtype;
$CONF["database_host"] = $dbserver;
$CONF["database_user"] = $dbuser;
$CONF["database_password"] = $dbpass;
$CONF["database_name"] = $dbname;

A pripomeňme si to:

$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ávami na zápis do databázy vmail. Môžete použiť predtým vytvoreného správcu
$CONF["database_password"] = "heslo"; # Heslo pre 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 krok navyše, a to zmeniť šifrovanie PostfixAdmin v položke $CONF["encrypt"] z "md5crypt" na "dovecot:SHA512-CRYPT" . Ak to neurobíte, pri pokuse o prihlásenie do SOGo pomocou používateľa vytvoreného v PostfixAdmine sa zobrazí chyba: nesprávne prihlasovacie meno alebo heslo.

Zmena typu šifrovania

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

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 kliknite na "Vpred". Teraz sme všetci pripravení, môžeme prejsť do webového rozhrania PostfixAdmin a dokončiť inštaláciu. Ak to chcete urobiť, musíte do prehliadača zadať: https://domain/postfixadmin/setup.php.

Malo by sa objaviť nasledovné:

Inštalácia PostfixAdmin

Ak sa všetko robí podľa pokynov, nemali by existovať žiadne chyby. Ak nejaké existujú, musia byť odstránené, inak vám systém nedovolí pokračovať. Nastavte inštalačné heslo a kliknite na „Vygenerovať 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 zadajte novovytvorené heslo a vytvorte 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 panela iRedAdmin.

Vytvorenie správcu PostfixAdmin

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

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

Prejdite na adresu: https://domain/postfixadmin/ a zadajte novovytvorené prihlasovacie údaje. V PostfixAdmin, ako aj v iRedAdmin, je k dispozícii ruský jazyk. Môžete si ho vybrať počas autorizácie.

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

Povolenie/zakázanie modulov iRedMail

iRedAPD je zodpovedný za správu modulov iRedMail. Má konfiguračný súbor, v ktorom sú registrované 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 riadok „pluginy“ a odstráňte z neho komponenty, ktoré nepotrebujete. Odstránim komponent „greylisting“. Samozrejme, že chráni pred spamom pomerne efektívne, no potrebné listy často nedorazia.

Greylist je technológia automatickej ochrany pred spamom založená na analýze správania sa servera odosielateľa pošty. 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 musí odosielajúci server zopakovať odoslanie neskôr. Spamerské programy to zvyčajne nerobia. Ak sa list odošle znova, pridá sa do zoznamu na 30 dní a prvýkrát dôjde k výmene pošty. Sami sa rozhodnite, či tento modul použijete alebo nie.

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čí konfigurácia 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. V iRedAdmin vytvoríme poštovú schránku [email protected]. V PostfixAdmin - [email protected]

Vytvorenie používateľa v iRedAdmin

Vytvorenie používateľa v PostfixAdmin

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

Ak budete venovať pozornosť stĺpcu „Komu“ v zozname poštových schránok PostfixAdmin, všimnete si rozdiel medzi poštovými schránkami vytvorenými v iRedAdmin a PostfixAdmin. Schránky vytvorené v iRedAdmine sú označené ako „Iba preposielať“ a tie vytvorené v PostfixAdmine sú označené ako „Poštová schránka“. Najprv som dlho nevedel pochopiť, prečo sa to deje a aký je medzi nimi rozdiel, a nakoniec som si všimol jednu vec. Poštové schránky v iRedAdmin sú vytvorené bez aliasov a poštové schránky v PostfixAdmin sú vytvorené s vlastným aliasom.

A ak sa tieto aliasy vymažú, potom sa poštové schránky zobrazia ako tie, ktoré boli vytvorené v iRedAdmin „Iba preposielať“.

Odstránenie aliasov

Aliasy boli odstránené. Kontrola PostfixAdmin.

Ako vidíte, všetky políčka 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 „Poštová schránka“. V zásade to žiadnym spôsobom neovplyvňuje 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 Nová verzia iRedMail potrebuje vykonať zmenu v jednej z Postfixových máp, ktorá spracováva aliasy. A ak to neurobíte, vytvorené aliasy nebudú fungovať. Ak to chcete urobiť, musíte opraviť nasledujúce v súbore /etc/postfix/mysql/virtual_alias_maps.cf:

Robíme:

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

A opravíme to.

Nastavenie aliasov

Reštartujte Postfix:

# reštart služby postfix

Po tomto by malo všetko fungovať.

A tak začnime kontrolovať poštu. Prihlásime sa do schránky user1 cez Roundcube a do schránky user2 cez SOGo a pošleme list zo schránky user1 používateľovi2 a späť.

Odoslanie e-mailu pomocou Roundcube

Prijatie listu v SOGo

Odoslanie e-mailu SOGo

Prijatie listu 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 (testované).

Teraz skontrolujeme aliasy. Vytvorme poštovú schránku user3 a urobme alias z poštovej schránky user1 do poštovej schránky user2. A my pošleme list zo schránky user3 do schránky user1. V tomto prípade by mal list doraziť do poštovej schránky užívateľa2.

Vytvorenie aliasu

Odoslanie listu 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

Práca aliasov je tiež v poriadku.

Poďme otestovať fungovanie poštového servera cez lokál 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.

IMAP pripojenie

Pripojenie cez POP3

Pošleme list od klienta 1 klientovi 2.

Odoslanie od klienta 1

Potvrdenie o klientovi 2

A v opačnom poradí.

Odoslanie od klienta 2

Potvrdenie o klientovi 1

Všetko funguje.

Ak prejdete na adresu: https://domain/netdata, môžete vidieť grafy stavu systému.

Záver

Tým sa dokončí inštalácia, konfigurácia a testovanie poštového systému iRedMail. Vďaka tomu sme dostali ú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, môžete namiesto webových poštových klientov použiť lokálnych poštových klientov ako napr Microsoft Outlook alebo Mozilla Thunderbird. Ak neplánujete používať webových poštových klientov, nemôžete ich vôbec nainštalovať, aby ste nepreťažili server, alebo nainštalovať jednu vec, ktorá sa vám najviac páči. Osobne sa mi páči SOGo viac, pretože jeho rozhranie je optimalizované pre mobilné zariadenia, vďaka čomu je veľmi pohodlné prezeranie email zo smartfónu. To isté platí pre NetData a iRedAdmin, ak ich neplánujete používať, je lepšie ich neinštalovať. Tento poštový systém nie je veľmi náročný na zdroje. To všetko funguje na VPS serveri s 1024 MB Náhodný vstup do pamäťe a jeden virtuálny procesor. 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 uviedol chybu súvisiacu s databázou. 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 zrútila systém, čím znemožnila normálnu prevádzku servera. Pri pokuse o prihlásenie do webových rozhraní NGINX pravidelne produkoval 502 a 504 chýb. Pošta sa posielala aj každý druhý raz. Navyše, ak pridáme až 2 GB RAM, potom vo všetkých prípadoch neboli žiadne problémy s prevádzkou antivírusu a servera ako celku. ClamAV skenoval poštu prechádzajúcu cez poštový server, o ktorej písal v protokoloch. Pri pokuse o odoslanie vírusu ako prílohy bolo doručenie zablokované. Spotreba pamäte bola približne 1,2 – 1,7 GB.

Nginx je malý, veľmi rýchly, pomerne funkčný webový server a poštový proxy server, ktorý vyvinul Igor Sysoev (rambler.ru). Vďaka veľmi nízkej spotrebe systémových prostriedkov a prevádzkovej rýchlosti, ako aj flexibilite konfigurácie, web Server Nginxčasto sa používa ako frontend pre náročnejšie servery, ako napr Apache, v projektoch s vysokou záťažou. Klasickou možnosťou je kombinácia, 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ť, spotrebúva pomerne malé množstvo systémových prostriedkov, ak existuje 10-20 takýchto procesov, je to nezmysel a ak existujú 100-500 alebo viac, systém nebude zábavný.

Skúsme si predstaviť podobnú situáciu. Predpokladajme, že Apache príde 300 HTTP požiadavky od klientov je 150 klientov na rýchlych prenajatých linkách a ďalších 150 na relatívne pomalých internetových kanáloch, aj keď nie na modemoch. Čo sa deje v tejto situácii? A stane sa nasledovné: webový server Apache na spracovanie týchto 300 pripojení 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úžia. bude zabitý a zdroje budú uvoľnené a 150 je pomalých a budú dostávať výsledky svojich požiadaviek pomaly, kvôli úzkemu internetovému kanálu, v dôsledku čoho bude v systéme visieť 150 procesov Apache, čakajúci na to, kým si klienti vyzdvihnú obsah generovaný webovým serverom, požierajúci množstvo systémových zdrojov. Prirodzene, situácia je hypotetická, ale myslím si, že podstata je jasná. Balík pomáha napraviť situáciu opísanú vyššie. Po prečítaní celej požiadavky od klienta ju odošle na spracovanie Apache, ktorý následne generuje obsah a čo najrýchlejšie vráti pripravenú odpoveď Nginxu, po čom môže s čistým svedomím proces zabiť a uvoľniť zaberané systémové prostriedky. Webový server Nginx, ktorý prijíma výsledok požiadavky Apache, zapisuje ho do vyrovnávacej pamäte alebo dokonca do súboru na disku a môže ho poskytovať pomalým klientom tak dlho, ako si želajú, pričom jeho pracovné procesy spotrebúvajú tak málo zdrojov, že .. „je dokonca zábavné o tom hovoriť“ ©. :) Táto schéma výrazne šetrí systémové zdroje, opakujem, ale pracovné procesy Nginx spotrebúvajú malé množstvo zdrojov, to platí najmä pre veľké projekty.

A to je len malá časť toho, čo server Nginx dokáže; nezabudnite na možnosti ukladania údajov do vyrovnávacej pamäte a práce s memcached. Uvediem zoznam hlavných funkčnosť Webový server Nginx.

Funkcia servera Nginx ako server HTTP
  • Liečba statický obsah, indexové súbory, zoznamy adresárov, otvorená vyrovnávacia pamäť deskriptorov súborov;
  • Zrýchlené proxy s ukladaním do vyrovnávacej pamäte, distribúciou zaťaženia a odolnosťou voči chybám;
  • Zrýchlená podpora FastCGI servery s cachovaním, rozložením záťaže a odolnosťou voči chybám;
  • Modulárna štruktúra, podpora rôznych filtrov (SSI, XSLT, GZIP, resuming, chunked responses);
  • Podpora pre rozšírenia SSL a TLS SNI;
  • Na základe 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 súborov denníkov, otáčanie denníkov;
  • Obmedzenie rýchlosti odozvy klientovi;
  • Obmedzenie počtu súčasných pripojení a požiadaviek;
  • Podporuje metódy PUT, DELETE, MKCOL, COPY a MOVE;
  • Zmena nastavení a aktualizácia servera bez zastavenia práce;
  • Vstavaný Perl;
Funkcia servera Nginx ako poštový proxy server
  • Preposielanie na IMAP/POP3 backend pomocou externého HTTP autentifikačného servera;
  • Kontrola SMTP používateľa na externom zariadení HTTP server autentifikácia a presmerovanie na interný SMTP server;
  • Podporuje nasledujúce metódy autentifikácie:
    • POP3 - USER/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 STARTTLS a STLS;
Operačné systémy a platformy podporované webovým serverom Nginx
  • FreeBSD, od 3 do 8 - platformy, 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 (konfigurovaných v konfiguračnom súbore) pracovných procesov spustených pod neprivilegovaným používateľom;
  • Podpora pre nasledujúce metódy spracovania pripojenia:
    • výber 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ť povolenie alebo zakázanie zostavenia daného 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ť povolenie alebo zakázanie zostavenia daného modulu pomocou konfiguračných možností --with-poll_module alebo --without-poll_module.
    • kqueue - efektívna metóda, ktorý sa používa v operačných systémoch FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 a MacOS X. Pri použití na dvojprocesorových strojoch so systémom 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+. Štandardne nemôže byť vo fronte viac ako 1024 signálov pre celý systém. Pre servery s vysokou záťažou to nestačí, veľkosť frontu je potrebné zvýšiť pomocou parametra jadra /proc/sys/kernel/rtsig-max. Od Linuxu 2.6.6-mm2 však táto možnosť už nie je dostupná, namiesto toho má každý proces samostatný front signálov, ktorého veľkosť je určená pomocou RLIMIT_SIGPENDING.
    • Keď je rad plný, server nginx resetuje ho a spracuje pripojenia pomocou metódy poll, kým sa situácia nevráti do normálu.
    • /dev/poll je 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ť opravu, aby ste predišli panike jadra.
  • Používanie možností metódy kqueue, ako sú EV_CLEAR, EV_DISABLE (na dočasné vypnutie udalosti), NOTE_LOWAT, EV_EOF, počet dostupných údajov, chybové kódy;
  • Pracuje s 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 neaktívnych udržiavacích pripojení HTTP spotrebuje približne 2,5 milióna pamäte;
  • Minimálny počet operácií kopírovania údajov;

NGINX je možné použiť nielen ako webový server alebo http-proxy, ale aj na proxy server cez protokoly SMTP, IMAP, POP3. To vám umožní konfigurovať:

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

V tomto článku sa inštalácia vykonáva na operačnej sále. Linuxový systém. Ako poštovú službu, na ktorú sa odosielajú požiadavky, môžete použiť postfix, exim, dovecot, exchange, iredmail montáž 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 poskytuje veľa príležitostí s primeranou 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žívame CentOS alebo ak používame tento systém bezpečnosť na Ubuntu:

vi /etc/selinux/config

SELINUX=zakázané

POŽARNE DVERE

Ak používame 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

Záležiac ​​na operačný systém Inštalácia NGINX je trochu iná.

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 spustí 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 zabudovaný - medzi nimi by sme mali vidieť --with-mail . Ak tam požadovaný modul nie je, musíte aktualizovať nginx

Nastavenie NGINX

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

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;
protokol imap;
}
}

* Kde:

  • názov_servera je názov poštového servera, ktorý sa zobrazí v pozdrave SMTP.
  • auth_http - webový server a URL pre požiadavku na autentifikáciu.
  • proxy_pass_error_message - povolí alebo zakáže zobrazenie správy v prípade zlyhania autentifikácie.
  • počúvať - ​​port, na ktorom sa počúvajú požiadavky.
  • protokol - 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

Ak chcete vykonať autentifikáciu pomocou PHP, musíte do svojho systému nainštalovať 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 určuje 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. Ak chcete nastaviť autentifikačný algoritmus, upravte riadky 61 – 64. Riadky 73 – 77 sú zodpovedné za vrátenie serverov, na ktoré sa presmerovanie uskutočňuje – 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 uskutočnený pomocou názvu domény.

Nastavenie poštového servera

Výmena údajov medzi serverom proxy NGINX a poštovým serverom prebieha v otvorený formulár. K výnimke je potrebné pridať možnosť autentifikácie pomocou mechanizmu PLAIN. Ak chcete napríklad nakonfigurovať holubník, postupujte takto:

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

Pridajte riadky:

vzdialené 192.168.1.11 (
disable_plaintext_auth = nie
}

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

Tiež kontrolujeme:

* ak je ssl nastavené na požadované , kontrola nebude fungovať, pretože sa ukáže, že na jednej strane server umožňuje požiadavky vo formáte čistého textu, 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 cez otvorené porty 143 (IMAP) a 25 (SMTP).

Šifrovanie

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

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

Potom upravíme náš konfiguračný súbor:

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;
protokol imap;
}

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

Riešenie: vypnite alebo nakonfigurujte SELinux.

Nginx si rýchlo získava na popularite a mení sa z iba statického urýchľovača doručovania pre Apache na plne funkčný a vyvinutý webový server, ktorý sa čoraz viac používa izolovane. V tomto článku budeme hovoriť o zaujímavých a neštandardných scenároch používania nginx, ktoré vám umožnia vyťažiť maximum z vášho webového servera.

Mail proxy

Začnime tým najzrejmejším – schopnosťou nginx pôsobiť ako mail proxy. Táto funkcia je spočiatku prítomná v nginx, ale z nejakého dôvodu sa vo výrobe používa veľmi zriedka; niektorí ľudia 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 použitia. Po prvé: použite nginx ako štít proti nepríjemným spamerom, ktorí sa pokúšajú posielať nevyžiadané e-maily cez náš server SMTP. Spameri zvyčajne nevytvárajú veľa problémov, pretože sú rýchlo odmietnutí vo fáze autentifikácie, ale keď ich je naozaj veľa, nginx pomôže ušetriť zdroje procesora. Po druhé: použite nginx na presmerovanie používateľov na viacero poštových serverov POP3/IMAP. Samozrejme, že by to mohol zvládnuť iný mail proxy, ale prečo ohradzovať servery, ak je nginx už nainštalovaný na frontende, aby poskytoval statický obsah napríklad cez HTTP?

Poštový proxy server v nginx nie je celkom štandardný. Používa dodatočnú vrstvu autentifikácie implementovanú pomocou HTTP a iba ak používateľ prekoná túto bariéru, môže pokračovať ďalej. Táto funkcionalita je zabezpečená vytvorením stránky/skriptu, na ktorý nginx odošle 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:

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

A vráti nasledovné:

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 mena používateľa, údajov o aktuálnom zaťažení poštových serverov alebo dokonca organizovaním jednoduchého vyvažovania záťaže. pomocou round-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 off; # Server servera IMAP (počúvajte 143; protokol imap; proxy je zapnutá; ) # server servera SMTP (počúvanie 25; protokol smtp; proxy zapnuté; ) )

# vi /etc/nginx/nginx.conf http ( # Mapovanie na požadovaný 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 „script“ - vždy vráti OK a prenesie používateľa na interný poštový server, pričom nastaví požadovaný 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; return 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ť: konfigurovať vyvažovanie záťaže, kontrolovať používateľov pomocou databázy 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 s iba prechodnou znalosťou PHP a Pythonu.

Streamovanie videa

Je ľahké nastaviť pravidelný videohosting založený na nginx. Všetko, čo musíte urobiť, je nahrať prekódované video do adresára prístupného serveru, zaregistrovať ho v konfigurácii a nakonfigurovať prehrávač Flash alebo HTML5 tak, aby prevzal video z tohto adresára. Ak však potrebujete nastaviť nepretržité vysielanie videa z niektorých externý zdroj alebo webovú kameru, táto schéma nebude fungovať a budete musieť hľadať špeciálne streamovacie protokoly.

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 jazyku Java, a preto ich neposkytujú požadovaný výkon, Ďalšia implementácia, Erlyvideo, je napísaná v jazyku Erlang, čo je dobré pre nastavenie 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žní používať jeden server na obsluhovanie webového rozhrania stránky aj streamu 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ť. To sa vykonáva ako obvykle prostredníctvom konfigurácie nginx:

Rtmp ( # Aktivácia vysielacieho servera na porte 1935 na adrese/server rtmp ( počúvanie 1935; aplikácia rtmp (naživo; ) ) )

Modul RTMP nemôže pracovať 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ôžete uložiť súbor a prinútiť nginx, aby znova prečítal 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. Aby sme ho premenili na stream a zabalili ho do nášho vysielača RTMP, použijeme 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, je potrebné ho znova zakódovať. 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ť akýkoľvek prehrávač, ktorý podporuje 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

jwplayer("kontajner").setup(( režimy: [( typ: "flash", src: "/jwplayer/player.swf", config: ( dĺžka vyrovnávacej pamäte: 1, súbor: "stream", streamer: "rtmp:/) /localhost/rtmp", provider: "rtmp", ) )] ));

Sú tu len dva dôležité riadky: „file: „stream“ označujúci stream RTMP a „streamer: „rtmp://localhost/rtmp““, ktorý označuje adresu streamera RTMP. Pre väčšinu úloh budú takéto nastavenia úplne postačujúce. Môžete poslať niekoľko rôznych streamov na jednu adresu 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 zorganizovať prenos 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 (naživo; vytiahnite rtmp://rtmp.example.com; )

Ak potrebujete vytvoriť viacero streamov rôznej kvality, 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; )

Touto konfiguráciou získame dvoch vysielateľov naraz, z ktorých jeden bude dostupný na adrese rtmp://site/rtmp a druhý, vysielajúci v kvalite 320 x 240, na adrese rtmp://site/rtmp. – 320 x 240. Ďalej môžete na stránku pridať flash prehrávač a tlačidlá na výber kvality, ktoré hráčovi poskytnú jednu alebo druhú adresu vysielateľa.

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

Aj keď je to pravda; 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 riadenia verzií Git je schopný poskytovať prístup k úložiskám 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. S verziou 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 ho možno pripojiť k takmer akémukoľvek inému serveru, vrátane lighttpd a samozrejme nginx. To nevyžaduje nič okrem samotného servera, nainštalovaného Gitu a malého FastCGI servera fcgiwrap, ktorý je potrebný, pretože nginx nevie pracovať priamo s CGI, ale môž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 súboru CGI git-http-backend cez rozhranie FastCGI pri každom prístupe na adresu, ktorú zadáme. Po prijatí požiadavky fcgiwrap vykoná git-http-backend so špecifikovanými argumentmi CGI odovzdanými klientom GIT a vráti výsledok.

Ak chcete implementovať takúto schému, najskôr nainštalujte fcgiwrap:

$ sudo apt-get install fcgiwrap

Nie je potrebné ho konfigurovať, všetky parametre sa prenášajú cez protokol FastCGI. Spustí sa tiež automaticky. Zostáva teda len nakonfigurovať nginx. Ak to chcete urobiť, vytvorte súbor /etc/nginx/sites-enabled/git (ak taký adresár neexistuje, môžete zapísať do hlavnej konfigurácie) a zapísať doň nasledujúce:

# vi /etc/nginx/sites-enabled/git server ( # Visíme na porte 8080 počúvame 8080; # Adresa nášho servera (nezabudnite pridať záznam v DNS) server_name git.example.ru; # Logs 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 stiahnutie, poslať používateľa na súkromnú adresu, ak ($ ​​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 prístupu na zápis umiestnenie ~/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 zahŕňajú /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:

  • Adresa úložiska bude /srv/git, takže nastavíme príslušné prístupové práva: $ sudo chown -R www-data:www-data /srv/git
  • Samotný repozitár musí byť otvorený na čítanie anonymným používateľom a musí umožňovať nahrávanie cez HTTP: $ cd /srv/git $ git config core.sharedrepository true $ git config http.receivepack true
  • 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 dynamickým, často aktualizovaným webom, ktorý zrazu začne dostávať veľmi veľké zaťaženie (dobre, skončil na stránke jedného z najväčších spravodajských webov) a prestane zvládať návrat obsahu. Správna optimalizácia a implementácia správnej schémy ukladania do vyrovnávacej pamäte bude trvať dlho a problémy je potrebné vyrieš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 navrhol 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 jednu sekundu. Zvrat je v tom, že stovky a tisíce návštevníkov stránok za sekundu v skutočnosti vygenerujú iba jednu požiadavku na backend, pričom dostanú stránku väčšinou 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 vyrovnávacej pamäte 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 vo vyrovnávacej pamäti / ( # Cache je predvolene povolená nastavená $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 if ($no_cache = "1") ( add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; ) if ($http_cookie ~* "_mcnc") ( set $no_cache "1"; ) # Povolenie/zakázanie vyrovnávacej pamäte 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_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Neukladáme 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 je obsadené riadkom „proxy_cache_use_stale update;“, bez ktorého by sme dostávali pravidelné nárazy na backend server kvôli požiadavkám prijatým počas aktualizácie vyrovnávacej pamäte. Inak je všetko štandardné a malo by byť jasné bez zbytočného vysvetľovania.

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

    Napriek rozsiahlemu globálnemu nárastu 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 kanála (samozrejme, ak zatvoríte oči pred všetkými ostatnými faktormi ). Ďalšou vecou je, že umiestnenie serverov v zahraničí je často výnosnejšie, a to aj z hľadiska údržby. Preto, aby ste získali zisk vo forme vyšších výplatných sadzieb, budete musieť použiť nejaké triky.

    Jedna z možných možností: umiestniť hlavný produktívny server na Západ a nasadiť frontend, ktorý nie je príliš náročný na zdroje a produkuje statické údaje v Rusku. To vám umožní získať rýchlosť bez vážnych nákladov. Konfigurácia nginx pre frontend bude v tomto prípade jednoduchou a známou implementáciou proxy pre nás všetkých:

    # 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) $ ( # Adresa backendu 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é; ) )

    závery

    Dnes s pomocou nginx môžete vyriešiť veľa rôznych problémov, 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 týchto úloh.

    Publikácie na danú tému