nginx փոստի սերվեր: iRedMail-ի տեղադրում

Nginx-ը արագորեն դառնում է ժողովրդականություն՝ վերածվելով Apache-ի համար պարզապես ստատիկ սպասարկման արագացուցիչից մինչև լիարժեք և առաջադեմ վեբ սերվեր, որն ավելի ու ավելի է օգտագործվում առանձին: Այս հոդվածում մենք կխոսենք nginx-ի օգտագործման հետաքրքիր և ոչ ստանդարտ սցենարների մասին, որոնք թույլ կտան առավելագույն օգուտ քաղել վեբ սերվերից։

Փոստի վստահված անձ

Սկսենք ամենաակնհայտից՝ nginx-ի՝ որպես փոստի վստահված անձ գործելու կարողությունից: Այս ֆունկցիան ի սկզբանե nginx-ում է, բայց ինչ-ինչ պատճառներով այն օգտագործվում է արտադրության մեջ չափազանց հազվադեպ, ոմանք նույնիսկ չգիտեն դրա գոյության մասին: Ինչ էլ որ լինի, nginx-ն աջակցում է POP3, IMAP և SMTP արձանագրությունների պրոքսիինգ՝ նույնականացման տարբեր մեթոդներով, ներառյալ SSL և StartTLS, և դա անում է շատ արագ:

Ինչու է սա անհրաժեշտ: Այս ֆունկցիոնալության առնվազն երկու օգտագործում կա: Նախ, օգտագործեք nginx-ը որպես վահան ընդդեմ նյարդայնացնող սպամերի, որոնք փորձում են անպետք նամակներ ուղարկել մեր SMTP սերվերի միջոցով: Սովորաբար սպամերները շատ խնդիրներ չեն ստեղծում, քանի որ նրանք արագորեն ցատկում են նույնականացման փուլում, սակայն, երբ դրանք իսկապես շատ են, nginx-ը կօգնի խնայել պրոցեսորի ռեսուրսները: Երկրորդ, օգտագործեք nginx-ը՝ օգտվողներին մի քանի POP3/IMAP փոստային սերվերներ վերահղելու համար: Իհարկե, փոստի մեկ այլ վստահված անձ նույնպես կարող է կարգավորել դա, բայց ինչու՞ ցանկապատել սերվերի այգին, եթե nginx-ն արդեն տեղադրված է ճակատային մասում, օրինակ, HTTP-ի միջոցով ստատիկ սպասարկելու համար:

Փոստի վստահված անձը nginx-ում այնքան էլ ստանդարտ չէ: Այն օգտագործում է նույնականացման լրացուցիչ շերտ, որն իրականացվում է HTTP-ի միջոցով, և միայն այն դեպքում, եթե օգտվողն անցնի այս արգելքը, նա փոխանցվում է: Այս ֆունկցիոնալությունը տրամադրվում է էջ/սկրիպտ ստեղծելով, որին nginx-ը տալիս է օգտվողի տվյալները, և նա պատասխան է տալիս ստանդարտ OK կամ մերժման պատճառի տեսքով (օրինակ՝ «Սխալ մուտք կամ գաղտնաբառ»): Սցենարն աշխատում է հետևյալ վերնագրերով.

Նույնականացման սկրիպտի մուտքագրում HTTP_AUTH_USER. օգտվող HTTP_AUTH_PASS. գաղտնաբառը HTTP_AUTH_PROTOCOL. փոստի արձանագրություն (IMAP, POP3 կամ SMTP)

Եվ այն վերադառնում է այսպես.

Նույնականացման սկրիպտի ելք HTTP_AUTH_STATUS. Լավ կամ ձախողման պատճառը HTTP_AUTH_SERVER. իրական փոստի սերվեր՝ HTTP_AUTH_PORT վերահղելու համար. սերվերի միացք

Այս մոտեցման ուշագրավ առանձնահատկությունն այն է, որ այն կարող է օգտագործվել ոչ թե ինքնությունը հաստատելու համար, այլ օգտատերերին ցրելու համար տարբեր ներքին սերվերներում՝ կախված օգտվողի անունից, փոստի սերվերների ընթացիկ բեռների վերաբերյալ տվյալներից կամ նույնիսկ ամենապարզ բեռի հավասարակշռումը կազմակերպելու միջոցով: շրջանաձև . Այնուամենայնիվ, եթե ձեզ պարզապես անհրաժեշտ է օգտատերերին փոխանցել ներքին փոստի սերվեր, կարող եք իրական սկրիպտի փոխարեն օգտագործել անգինքսի կողմից ներդրված կոճղը: Օրինակ, ամենապարզ SMTP և IMAP վստահված անձը nginx կոնֆիգուրայում կունենա հետևյալ տեսքը.

# vi /etc/nginx/nginx.conf mail ( # Նույնականացման սկրիպտի հասցեն auth_http localhost:8080/auth; # Անջատել XCLIENT հրամանը, որոշ փոստային սերվերներ չեն հասկանում այն ​​xclient off; # IMAP սերվերի սերվեր (լսել 143; արձանագրություն imap; վստահված անձը միացված է;) # SMTP սերվերի սերվեր (լսել 25; արձանագրություն smtp; վստահված անձը միացված է;))

# vi /etc/nginx/nginx.conf http ( # Քարտեզ դեպի փոստային սերվերի ճիշտ նավահանգիստ՝ կախված HTTP_AUTH_PROTOCOL վերնագրի քարտեզում ուղարկված նավահանգստից $http_auth_protocol $mailport ( լռելյայն 25; smtp 25; imap 143; ) # Իրականացում նույնականացման «սկրիպտը» - միշտ վերադարձնում է OK և օգտատիրոջը վերահղում է ներքին փոստի սերվեր՝ սահմանելով ճիշտ նավահանգիստը՝ օգտագործելով վերը նշված քարտեզագրման սերվերը (լսել 8080; տեղադրություն / հաստատում ( add_header «Auth-Status» «OK»; add_header «Auth- Սերվեր" "192.168.0.1" ; add_header "Auth-Port" $mailport; վերադարձ 200; ) ) )

Դա բոլորն է: Այս կոնֆիգուրացիան թույլ է տալիս թափանցիկ կերպով վերահղել օգտվողներին ներքին փոստի սերվեր՝ առանց այս դեպքում ավելորդ սկրիպտի տեսքով գերավճար ստեղծելու: Օգտագործելով սկրիպտ՝ այս կոնֆիգուրացիան կարող է զգալիորեն ընդլայնվել՝ կարգավորել բեռի հավասարակշռումը, ստուգել օգտվողներին LDAP տվյալների բազայի համեմատ և կատարել այլ գործողություններ: Սցենար գրելը դուրս է այս հոդվածի շրջանակներից, բայց այն շատ հեշտ է իրականացնել նույնիսկ PHP-ի և Python-ի միայն տարրական իմացությամբ:

Տեսահոսք

Կանոնավոր nginx-ի վրա հիմնված վիդեո հոստինգի ստեղծումը հեշտ է. Բավական է միայն վերբեռնել տրանսկոդավորված տեսանյութը սերվերին հասանելի գրացուցակում, ավելացնել այն կոնֆիգուրացիայի մեջ և կարգավորել ֆլեշ կամ HTML5 նվագարկիչը, որպեսզի այն տեսագրություն վերցնի այս գրացուցակից: Այնուամենայնիվ, եթե ցանկանում եք կարգավորել շարունակական վիդեո հեռարձակում ինչ-որ արտաքին աղբյուրից կամ վեբ-տեսախցիկից, այս սխեման չի աշխատի, և դուք ստիպված կլինեք նայել հատուկ հոսքային արձանագրություններին:

Կան մի քանի արձանագրություններ, որոնք լուծում են այս խնդիրը, դրանցից ամենաարդյունավետն ու աջակցվողը RTMP-ն է: Միակ դժվարությունն այն է, որ RTMP սերվերի գրեթե բոլոր իրականացումները տառապում են խնդիրներից: Պաշտոնական Adobe Flash Media Server-ը վճարովի է: Red5-ը և Wowza-ն գրված են Java-ով և, հետևաբար, չեն ապահովում ցանկալի կատարումը, մեկ այլ կատարում՝ Erlyvideo-ն, գրված է Erlang-ով, որը լավ է կլաստերի տեղադրման դեպքում, բայց ոչ այնքան արդյունավետ մեկ սերվերի համար։

Ես առաջարկում եմ մեկ այլ մոտեցում՝ օգտագործել RTMP մոդուլը nginx-ի համար: Այն ունի գերազանց կատարողականություն և նաև թույլ է տալիս օգտագործել մեկ սերվեր՝ ինչպես կայքի վեբ ինտերֆեյսը, այնպես էլ վիդեո հոսքը սպասարկելու համար: Միակ խնդիրն այն է, որ այս մոդուլը ոչ պաշտոնական է, ուստի դուք ստիպված կլինեք ինքներդ կառուցել nginx դրա աջակցությամբ: Բարեբախտաբար, հավաքումն իրականացվում է ստանդարտ ձևով.

$ sudo apt-get հեռացնել 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 $ կատարել $ sudo make install

Այժմ մոդուլը պետք է կազմաձևվի: Դա արվում է, ինչպես միշտ, nginx config-ի միջոցով.

Rtmp ( # Ակտիվացրեք հեռարձակման սերվերը 1935-րդ նավահանգստում կայքի/rtmp սերվերում (լսեք 1935; հավելված rtmp (ուղիղ միացում; )))

RTMP մոդուլը չի ​​կարող աշխատել բազմաշերտ կոնֆիգուրացիայի մեջ, ուստի nginx աշխատանքային գործընթացների թիվը պետք է կրճատվի մինչև մեկի (հետագայում ես ձեզ կասեմ, թե ինչպես շրջանցել այս խնդիրը).

աշխատողի_գործընթացներ 1;

Այժմ մենք կարող ենք պահպանել ֆայլը և թույլ տալ, որ nginx-ը նորից կարդա կոնֆիգուրացիան: Nginx-ի կարգավորումն ավարտված է, բայց մենք դեռ չունենք վիդեո հոսք, այնպես որ մենք պետք է այն ինչ-որ տեղ հասցնենք: Օրինակ, թող դա լինի video.avi ֆայլը ընթացիկ գրացուցակից: Այն հոսքի վերածելու և մեր RTMP հեռարձակողի մեջ փաթաթելու համար եկեք օգտագործենք հին լավ FFmpeg-ը.

# ffmpeg -re -i ~/video.avi -c պատճեն -f flv rtmp://localhost/rtmp/stream

Եթե ​​վիդեո ֆայլը H264 ձևաչափով չէ, այն պետք է վերակոդավորվի: Դա կարելի է անել անմիջապես՝ օգտագործելով նույն FFmpeg-ը.

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

Հեռարձակումը կարող է նկարահանվել նաև անմիջապես վեբ-տեսախցիկից.

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

Հոսքը հաճախորդի կողմից դիտելու համար կարող եք օգտագործել ցանկացած RTMP միացված նվագարկիչ, օրինակ՝ mplayer:

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

Կամ տեղադրեք նվագարկիչը անմիջապես վեբ էջում, որը սպասարկվում է նույն nginx-ի կողմից (օրինակ՝ պաշտոնական փաստաթղթերից).

Ամենապարզ RTMP վեբ նվագարկիչը

Այստեղ կա ընդամենը երկու կարևոր տող՝ «ֆայլ՝ «հոսք»՝ ցույց տալով RTMP հոսքը և «հոսող՝ «rtmp://localhost/rtmp»», որը նշում է RTMP հոսքի հասցեն։ Առաջադրանքների մեծ մասի համար այս կարգավորումները բավարար կլինեն: Մի քանի տարբեր հոսքեր կարող են գործարկվել մեկ հասցեով, և nginx-ը դրանք արդյունավետորեն կմուլտիպլեքսացնի հաճախորդների միջև: Բայց սա այն ամենը չէ, ինչի ընդունակ է RTMP մոդուլը: Նրա օգնությամբ, օրինակ, դուք կարող եք կազմակերպել վիդեո հոսքի վերահաղորդումը մեկ այլ սերվերից։ Դրա համար FFmpeg սերվերն ընդհանրապես անհրաժեշտ չէ, պարզապես կոնֆիգում ավելացրեք հետևյալ տողերը.

# vi /etc/nginx/nginx.conf հավելվածը rtmp ( ապրում է; քաշեք rtmp://rtmp.example.com; )

Եթե ​​Ձեզ անհրաժեշտ է ստեղծել բազմաթիվ հոսքեր տարբեր որակներով, կարող եք զանգահարել FFmpeg տրանսկոդերին անմիջապես nginx-ից.

# vi /etc/nginx/nginx.conf հավելված rtmp ( ապրում է; exec ffmpeg -i rtmp://localhost/rtmp/$name -c:v flv -c:a -s 320x240 -f flv rtmp://localhost /rtmp-320x240/$name;) հավելված rtmp-320x240 (ուղիղ միացում;)

Այս կոնֆիգուրացիայով մենք կստանանք միանգամից երկու հեռարձակող, որոնցից մեկը հասանելի կլինի rtmp://site/rtmp հասցեով, իսկ երկրորդը՝ հեռարձակվող 320 x 240 որակով, rtmp://site/rtmp–320x240 հասցեով: Կայքում կարող եք կախել ֆլեշ նվագարկիչ և որակյալ ընտրության կոճակներ, որոնք նվագարկիչին կսայթաքեն հեռարձակողի այս կամ այն ​​հասցեով:

Եվ վերջապես, ցանցին երաժշտություն հեռարձակելու օրինակ.

մինչդեռ ճշմարիտ; անել ffmpeg -re -i "`find /var/music -type f -name "*.mp3"|տեսակավորել -R|head -n 1`" -vn -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/rtmp/stream; կատարած

git proxy

Git տարբերակի կառավարման համակարգը ի վիճակի է մուտք գործել պահեստներ ոչ միայն Git և SSH արձանագրությունների, այլ նաև HTTP-ի միջոցով։ Ժամանակին HTTP մուտքի իրականացումը պարզունակ էր և չէր կարողանում լիարժեք աշխատանք ապահովել պահեստի հետ։ 1.6.6 տարբերակից ի վեր իրավիճակը փոխվել է, և այսօր այս արձանագրությունը կարող է օգտագործվել, օրինակ, շրջանցելու firewall-ի սահմանափակումները կապի երկու կողմերում կամ ստեղծելու ձեր սեփական Git հոստինգը վեբ ինտերֆեյսով:

Ցավոք, պաշտոնական փաստաթղթերում խոսվում է միայն Apache վեբ սերվերի միջոցով Git մուտքի կազմակերպման մասին, բայց քանի որ իրականացումն ինքնին արտաքին հավելված է ստանդարտ CGI ինտերֆեյսով, այն կարող է կցվել գրեթե ցանկացած այլ սերվերի, ներառյալ lighttpd և, իհարկե, nginx. Սա այլ բան չի պահանջում, քան ինքը սերվերը, տեղադրված Git-ը և փոքրիկ FastCGI սերվերը fcgiwrap, որն անհրաժեշտ է, քանի որ nginx-ը չգիտի, թե ինչպես ուղղակիորեն աշխատել CGI-ի հետ, բայց այն կարող է կանչել սկրիպտներ՝ օգտագործելով FastCGI արձանագրությունը:

Աշխատանքի ամբողջ սխեման այսպիսի տեսք կունենա. fcgiwrap սերվերը կախված կլինի հետին պլանում և կսպասի CGI հավելվածը գործարկելու հարցում: Nginx-ը, իր հերթին, կկարգավորվի այնպես, որ պահանջի git-http-backend CGI երկուականի կատարումը FastCGI ինտերֆեյսի միջոցով ամեն անգամ, երբ մեր նշած հասցեն մուտք է գործում: Հարցում ստանալուց հետո fcgiwrap-ը կատարում է git-http-backend-ը GIT հաճախորդի կողմից փոխանցված նշված CGI արգումենտներով և վերադարձնում է արդյունքը:

Նման սխեմա իրականացնելու համար մենք նախ տեղադրում ենք fcgiwrap:

$ sudo apt-get տեղադրել fcgiwrap

Ձեզ անհրաժեշտ չէ այն կարգավորել, բոլոր պարամետրերը փոխանցվում են FastCGI արձանագրության միջոցով: Այն նաև ինքնաբերաբար կսկսվի: Հետևաբար, մնում է միայն կարգավորել nginx-ը: Դա անելու համար ստեղծեք /etc/nginx/sites-enabled/git ֆայլը (եթե այդպիսի գրացուցակ չկա, կարող եք գրել հիմնական կոնֆիգում) և դրանում գրել հետևյալը.

# vi /etc/nginx/sites-enabled/git սերվեր ( # Hang on port 8080 listen 8080; # Մեր սերվերի հասցեն (մի մոռացեք ավելացնել DNS մուտք) սերվերի անունը git.example.ru; # Logs access_log /var /log/nginx /git-http-backend.access.log; error_log /var/log/nginx/git-http-backend.error.log; # Անանուն մուտքի գտնվելու վայրի առաջնային հասցեն / ( # Վերբեռնելիս, ուղարկեք օգտվողը դեպի մասնավոր հասցե, եթե ($ arg_service ~* «git-receive-pack») (վերագրել ^ /private$uri վերջին; ) ներառել /etc/nginx/fastcgi_params; # հասցեն մեր git-http-backend fastcgi_param SCRIPT_FILENAME /usr /lib/git-core/git- http-backend; # Git շտեմարանի հասցեն fastcgi_param GIT_PROJECT_ROOT /srv/git; # Ֆայլի հասցեն fastcgi_param PATH_INFO $uri; # Սերվերի հասցե fcgiwrap fastcgi_pass 127.0.0.1:90 մուտքի համար հասցե #1: ~/private(/.*)$ ( # Օգտատիրոջ թույլտվություններ auth_basic «git անանուն միայն կարդալու, վավերացված գրություն»; # HTTP նույնականացում՝ հիմնված htpasswd auth_basic_user_file /etc/nginx/htpasswd; # FastCGI կարգավորումներ i ներառյալ /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; ))

Այս կազմաձևը ենթադրում է երեք կարևոր բան.

  1. Պահեստի հասցեն կլինի /srv/git, այնպես որ սահմանեք համապատասխան թույլտվությունները՝ $ sudo chown -R www-data:www-data /srv/git
  2. Պահեստն ինքը պետք է ընթեռնելի լինի Anonymous-ի կողմից և թույլ տա վերբեռնել HTTP-ով. $ cd /srv/git $ git config core.sharedrepository true $ git config http.receivepack true
  3. Նույնականացումը կատարվում է htpasswd ֆայլի միջոցով, դուք պետք է ստեղծեք այն և դրան ավելացնեք օգտվողներ՝ $ sudo apt-get install apache2-utils $ htpasswd -c /etc/nginx/htpasswd user1 $ htpasswd /etc/nginx/htpasswd user2: .

Այսքանը, վերագործարկեք nginx:

Microcaching

Եկեք պատկերացնենք մի իրավիճակ դինամիկ, հաճախակի թարմացվող կայքի հետ, որը հանկարծ սկսում է շատ մեծ բեռներ ստանալ (դե, այն հայտնվել է ամենամեծ լրատվական կայքերից մեկի էջում) և դադարում է հաղթահարել բովանդակության վերադարձը: Իրավասու օպտիմիզացումը և ճիշտ քեշավորման սխեմայի իրականացումը երկար ժամանակ կպահանջվի, և խնդիրներն այժմ պետք է լուծվեն: Ինչ կարող ենք մենք անել?

Այս իրավիճակից նվազագույն կորուստներով դուրս գալու մի քանի եղանակ կա, բայց ամենահետաքրքիր գաղափարը Ֆեն Բեյլին է (fennb.com): Գաղափարն այն է, որ պարզապես nginx-ը դնենք սերվերի առջև և ստիպենք նրան քեշավորել բոլոր փոխանցվող բովանդակությունը, բայց ոչ միայն քեշը, այլ ընդամենը մեկ վայրկյան: Կարևորն այստեղ այն է, որ հարյուրավոր և հազարավոր կայքի այցելուներ վայրկյանում, փաստորեն, կստեղծեն միայն մեկ զանգ դեպի հետին պլան, որոնցից շատերը ստանում են քեշավորված էջ: Միևնույն ժամանակ, դժվար թե որևէ մեկը նկատի տարբերությունը, քանի որ նույնիսկ դինամիկ կայքում մեկ վայրկյանը սովորաբար ոչինչ չի նշանակում։

Այս գաղափարի իրականացման հետ կապված կազմաձևը այնքան էլ բարդ չի թվա.

# vi /etc/nginx/sites-enabled/cache-proxy # Configure cache proxy_cache_path /var/cache/nginx level=1:2 keys_zone=microcache:5m max_size=1000m; սերվեր (լսել 80; server_name example.com; # Cache հասցեի գտնվելու վայրը / ( # Cache-ը միացված է լռելյայն սահմանել $no_cache ""; # Անջատել քեշը բոլոր մեթոդների համար, բացառությամբ GET-ի և HEAD-ի, եթե ($request_method !~ ^(GET|HEAD) $ ) ( set $no_cache "1"; ) # Եթե հաճախորդը բովանդակություն է վերբեռնում կայք (no_cache = 1), մենք համոզվում ենք, որ նրան տրված տվյալները երկու վայրկյան քեշում չեն պահվում, և նա կարող է տեսնել ներբեռնման արդյունքը, եթե. ($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 "; ) # Միացնել / անջատել քեշը կախված փոփոխականի վիճակից no_cache proxy_no_cache $no_cache; proxy_cache_bypass $no_cache; # վստահված անձի հարցումներ իրական սերվերի proxy_pass http://appserver.example.ru; proxy_cache proxy_cache_key $scheme$host$request_method$ request_uri; proxy_cache_valid 200 1s; # Պաշտպանություն ամպրոպային երամի խնդրից proxy_cache_use_stale թարմացումից; # Ավելացնել ստանդարտ վերնագրեր proxy_set_h վերնագիր Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Մի պահեք 1 ՄԲ-ից մեծ ֆայլեր proxy_max_temp_file_size 1M; ))

Այս կազմաձևում առանձնահատուկ տեղ է զբաղեցնում «proxy_cache_use_stale updating;» տողը, առանց որի մենք կստանայինք բեռի պարբերական պայթյունավտանգ սերվերի վրա՝ քեշի թարմացման ժամանակ ստացված հարցումների պատճառով: Հակառակ դեպքում, ամեն ինչ ստանդարտ է և պետք է պարզ լինի առանց լրացուցիչ բացատրությունների:

Վստահված անձի մոտարկումը թիրախային լսարանին

Չնայած ինտերնետի արագության համատարած գլոբալ աճին, սերվերի ֆիզիկական հեռավորությունը թիրախային լսարանից դեռ շարունակում է իր դերը խաղալ: Սա նշանակում է, որ եթե ռուսական կայքն աշխատում է Ամերիկայում գտնվող ինչ-որ տեղ տեղակայված սերվերի վրա, ապա դրան մուտքի արագությունը ապրիորի ավելի դանդաղ կլինի, քան նույն թողունակությամբ ռուսական սերվերից (իհարկե, եթե փակեք ձեր աչքերը մնացած բոլոր գործոնների վրա։ ): Մեկ այլ բան այն է, որ հաճախ ավելի ձեռնտու է սերվերներ հյուրընկալել արտասահմանում, այդ թվում՝ սպասարկման առումով։ Հետևաբար, շահույթ ստանալու համար, ավելի բարձր վերադարձի դրույքաչափերի տեսքով, դուք ստիպված կլինեք գնալ հնարք:

Հնարավոր տարբերակներից մեկը՝ տեղադրել հիմնական արտադրողական սերվերը Արևմուտքում և տեղակայել ճակատային մասը, որն այնքան էլ ռեսուրս պահանջող չէ, որը տալիս է ստատիկ, Ռուսաստանում: Սա թույլ կտա արագությամբ հաղթել առանց լուրջ ծախսերի։ Fronend-ի համար nginx կազմաձևումն այս դեպքում կլինի պարզ վստահված անձի իրականացում, որը ծանոթ է բոլորիս.

# vi /etc/nginx/sites-enabled/proxy # Պահպանել քեշը 30 օր 100 ԳԲ պահեստում proxy_cache_path /var/cache/nginx level=1:2 keys_zone=static:32m inactive=30d max_size=100g; սերվեր (լսել 80; server_name example.com; # Փաստորեն, մեր վստահված անձի գտնվելու վայրը ~* .(jpg|jpeg|gif|png|ico|css|midi|wav|bmp|js|swf|flv|avi|djvu|mp3) $ ( # Backend հասցե proxy_pass back.example.com:80; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_proxy_add_x_proxy_fferwarded; proxy_cache_valid 30d; proxy_ignore_headers «Cache-Control» «Սպառվում է»; proxy_cache_key «$uri$is_args$args»; proxy_cache_lock միացված է; ) )

գտածոներ

Այսօր nginx-ի օգնությամբ դուք կարող եք լուծել բազմաթիվ տարբեր խնդիրներ, որոնցից շատերը ընդհանրապես կապված չեն վեբ սերվերի և HTTP պրոտոկոլի հետ։ Փոստի վստահված անձը, հոսքային սերվերը և Git ինտերֆեյսը առաջադրանքներից ընդամենը մի քանիսն են:

Այս հոդվածը կբացատրի, թե ինչպես կարգավորել NGINX Plus-ը կամ NGINX Open Source-ը որպես փոստի սերվերի կամ արտաքին փոստային ծառայության վստահված անձ:

Ներածություն

NGINX-ը կարող է վստահել IMAP, POP3 և SMTP արձանագրությունները վերին հոսքի փոստի սերվերներից մեկին, որը հյուրընկալում է փոստի հաշիվները և, հետևաբար, կարող է օգտագործվել որպես մեկ վերջնական կետ էլփոստի հաճախորդների համար: Սա կարող է բերել մի շարք առավելությունների, ինչպիսիք են.

  • Փոստի սերվերների քանակի հեշտ չափում
  • Փոստի սերվերի ընտրություն՝ հիմնված տարբեր կանոնների վրա, օրինակ՝ ընտրելով մոտակա սերվերը՝ հիմնվելով հաճախորդի IP հասցեի վրա
  • բեռի բաշխում փոստի սերվերների միջև

Նախադրյալներ

    NGINX Plus-ը (արդեն ներառում է փոստի մոդուլները, որոնք անհրաժեշտ են պրոքսի էլ.փոստի տրաֆիկի համար) կամ NGINX Open Source-ը կազմել է Փոստի մոդուլները՝ օգտագործելով --with-mail պարամետրը էլ.

    $ ./կարգավորել --with-mail --with-mail_ssl_module --with-openssl=[ DIR] /openssl-1.1.1

    IMAP, POP3 և/կամ SMTP փոստի սերվերներ կամ արտաքին փոստային ծառայություն

SMTP/IMAP/POP3 փոստի վստահված սերվերների կարգավորում

NGINX կազմաձևման ֆայլում.

    փոստ (#...)

    փոստ (server_name mail.example.com; #...)

    փոստ (server_name mail.example.com; auth_http localhost: 9000 /cgi-bin/nginxauth.cgi; #...)

    Որպես այլընտրանք, նշեք՝ արդյոք օգտագործողին տեղեկացնե՞լ վավերացման սերվերի սխալների մասին՝ նշելով proxy_pass_error_message հրահանգը: Սա կարող է հարմար լինել, երբ փոստարկղի հիշողությունը սպառվում է.

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

    Կազմաձևեք յուրաքանչյուր SMTP, IMAP կամ POP3 սերվեր սերվերի բլոկներով: Յուրաքանչյուր սերվերի համար նշեք.

    • որ նավահանգստի համարըորոնք համապատասխանում են լսման հրահանգով սահմանված արձանագրությանը
    • որ արձանագրությունարձանագրության հրահանգով (եթե նշված չէ, ավտոմատ կերպով կհայտնաբերվի լսելու հրահանգում նշված նավահանգիստից)
    • թույլատրվում է իսկորոշման մեթոդներ imap_auth, pop3_auth և smtp_auth հրահանգներով.

    սերվեր (լսել 25; արձանագրություն smtp; smtp_auth մուտք պարզ cram-md5;) սերվեր (լսել 110; արձանագրություն pop3; pop3_auth պարզ apop cram-md5;) սերվեր (լսել 143; արձանագրության imap;)

Փոստի վստահված անձի համար վավերացման կարգավորում

Հաճախորդից ստացված յուրաքանչյուր POP3/IMAP/SMTP հարցում նախ կհաստատվի արտաքին HTTP նույնականացման սերվերի վրա կամ նույնականացման սկրիպտի միջոցով: Նույնականացման սերվեր ունենալը պարտադիր է NGINX փոստային սերվերի վստահված անձի համար: Սերվերը կարող է ստեղծվել ինքներդ՝ համաձայն NGINX վավերացման արձանագրության, որը հիմնված է HTTP արձանագրության վրա:

Եթե ​​նույնականացումը հաջող է, նույնականացման սերվերը կընտրի վերին հոսքի սերվեր և կվերահղորդի հարցումը: Այս դեպքում սերվերի պատասխանը կպարունակի հետևյալ տողերը.

HTTP/1.0 200 OK Auth-Status՝ OK Auth-Server: # վերին հոսքի սերվերի սերվերի անունը կամ IP հասցեն, որը կօգտագործվի փոստի մշակման համար Auth port: # վերին հոսքի սերվերի նավահանգիստը

Եթե ​​նույնականացումը ձախողվի, նույնականացման սերվերը կվերադարձնի սխալի հաղորդագրություն: Այս դեպքում սերվերի պատասխանը կպարունակի հետևյալ տողերը.

HTTP/1.0 200 OK Auth-Status: # Սխալի հաղորդագրություն, որը պետք է վերադարձվի հաճախորդին, օրինակ՝ «Սխալ մուտք կամ գաղտնաբառ» Auth-Սպասեք: # նույնականացման մնացած փորձերի քանակը մինչև կապը փակվի

Նշենք, որ երկու դեպքում էլ պատասխանը կպարունակի HTTP/1.0 200 OKորը կարող է շփոթեցնող լինել:

Նույնականացման սերվերին ուղղված հարցումների և պատասխանների լրացուցիչ օրինակների համար տե՛ս ngx_mail_auth_http_module-ը NGINX Reference փաստաթղթերում:

SSL/TLS-ի կարգավորում փոստի վստահված անձի համար

Օգտագործելով POP3/SMTP/IMAP-ը SSL/TLS-ի միջոցով՝ դուք համոզվում եք, որ հաճախորդի և փոստային սերվերի միջև փոխանցված տվյալները ապահովված են:

SSL/TLS փոստի վստահված անձի համար միացնելու համար՝

    Համոզվեք, որ ձեր NGINX-ը կազմաձևված է SSL/TLS աջակցությամբ՝ հրամանի տողում մուտքագրելով nginx -V հրամանը և ելքում փնտրելով --mail_ssl_module տողը.

    $ nginx -V կազմաձևել արգումենտները՝ ... with--mail_ssl_module

    Համոզվեք, որ ստացել եք սերվերի վկայականներ և անձնական բանալի և դրել դրանք սերվերի վրա: Վկայականը կարելի է ձեռք բերել վստահելի հավաստագրման մարմնից (CA) կամ ստեղծվել SSL գրադարանի միջոցով, ինչպիսին է OpenSSL-ը:

    ssl վրա;

    ցնցվում է;

    Ավելացնել SSL վկայագրեր. նշեք դեպի վկայագրերի ուղին (որը պետք է լինի PEM ձևաչափով) ssl_certificate հրահանգով և նշեք դեպի մասնավոր բանալի ուղին ssl_certificate_key հրահանգում.

    փոստ (#... ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key;)

    Դուք կարող եք օգտագործել միայն SSL/TLS-ի ուժեղ տարբերակները և ծածկագրերը ssl_protocols և ssl_ciphers հրահանգներով, կամ կարող եք սահմանել ձեր սեփական նախընտրելի արձանագրությունները և ծածկագրերը.

    փոստ (#... ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; )

SSL/TLS օպտիմիզացում փոստի վստահված անձի համար

Այս ակնարկները կօգնեն ձեզ ավելի արագ և անվտանգ դարձնել ձեր NGINX փոստի վստահված անձը.

    Սահմանեք աշխատանքային գործընթացների թիվը հավասար պրոցեսորների թվին, երբ աշխատանքային_գործընթացների հրահանգը դրված է նույն մակարդակի վրա, ինչ փոստի համատեքստը.

    worker_processes auto ; փոստ (#...)

    Միացնել համօգտագործվող նիստերի քեշը և անջատել ներկառուցված նստաշրջանի քեշը ավտոմատի միջոցով; փոստ (server_name mail.example.com; auth_http localhost: 9000 /cgi-bin/nginxauth.cgi; proxy_pass_error_message միացված; ssl միացված; ssl_certificate /etc/ssl/certs/server. բանալի ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_cache համօգտագործված:SSL:10m; ssl_session_timeout 10m; սերվեր (լսել 25 logsmmtm, սերվեր (լսել 25 loginthmtm, c. ; արձանագրություն pop3; pop3_auth պարզ apop cram-md5;) սերվեր (լսել 143; արձանագրության պատկեր;))

    Այս օրինակում կան երեք էլփոստի վստահված սերվերներ՝ SMTP, POP3 և IMAP: Սերվերներից յուրաքանչյուրը կազմաձևված է SSL և STARTTLS աջակցությամբ: SSL նստաշրջանի պարամետրերը կպահվեն:

    Վստահված սերվերն օգտագործում է HTTP նույնականացման սերվեր. դրա կազմաձևումը դուրս է այս հոդվածի շրջանակներից: Սերվերից ստացված բոլոր սխալ հաղորդագրությունները կվերադարձվեն հաճախորդներին:

Նգինքս- փոքր չափերով, շատ արագ, բավականին ֆունկցիոնալ վեբ սերվեր և փոստի վստահված սերվեր, մշակող Իգոր Սիսոև (rambler.ru): Համակարգի ռեսուրսների և արագության շատ ցածր սպառման, ինչպես նաև կազմաձևման ճկունության պատճառով, վեբ nginx սերվերհաճախ օգտագործվում է որպես առջեւի վերջ ավելի ծանր սերվերների համար, ինչպիսիք են Ապաչի, բարձր բեռնվածության նախագծերում։ Դասական տարբերակը մի փունջ է, Նգինքս - Ապաչի - FastCGI. Աշխատելով նման սխեմայով, nginx սերվեր, ընդունում է բոլոր հարցումները, որոնք գալիս են HTTP-ի միջոցով և, կախված կոնֆիգուրացիայից և բուն հարցումից, որոշում է՝ մշակե՞լ հարցումը և հաճախորդին տալ պատրաստի պատասխան, թե՞ մշակման հարցում ուղարկել հետին պլաններից մեկին ( Ապաչիկամ FastCGI).

Ինչպես գիտեք, Apache սերվերը յուրաքանչյուր հարցում մշակում է առանձին պրոցեսով (թեմա), որը, պետք է ասել, սպառում է համակարգային ռեսուրսների բավականին ՉԻ Քիչ քանակություն, եթե այդպիսի 10-20 պրոցես կա, դա անհեթեթություն է, իսկ եթե կա. դրանցից 100-500 կամ ավելին են, համակարգը դառնում է ոչ զվարճալի:

Փորձենք պատկերացնել նման իրավիճակ։ Ենթադրենք՝ շարունակվում է Ապաչի 300 HTTP հարցումներ գալիս են հաճախորդներից, 150 հաճախորդներ նստում են արագ վարձակալված գծերի վրա, իսկ մնացած 150-ը համեմատաբար դանդաղ ինտերնետ ալիքների վրա, նույնիսկ եթե ոչ մոդեմներում: Ի՞նչ է տեղի ունենում այս իրավիճակում: Եվ տեղի է ունենում հետևյալը, Apache վեբ սերվերը, այս 300 կապերը մշակելու համար, ստեղծում է յուրաքանչյուր պրոցեսի համար (թել), այն արագ կգեներացնի բովանդակություն, և 150 արագ հաճախորդներ անմիջապես կվերցնեն իրենց հարցումների արդյունքը, այն գործընթացները, որոնք սպասարկել են իրենց: կսպանվեն, և ռեսուրսները կթողարկվեն, իսկ 150-ը դանդաղ են, և նրանց հարցումների արդյունքները դանդաղ են տանելու, քանի որ նեղ ինտերնետ ալիքը, որի արդյունքում համակարգում կկախվեն 150 գործընթացներ: Ապաչի, սպասելով, որ հաճախորդները վերցնեն վեբ սերվերի կողմից ստեղծված բովանդակությունը՝ կուլ տալով համակարգի բազմաթիվ ռեսուրսներ: Բնականաբար, իրավիճակը հիպոթետիկ է, բայց, կարծում եմ, էությունը պարզ է. Վերը նշված իրավիճակը շտկելու համար և փաթեթը օգնում է: Հաճախորդի հարցումն ամբողջությամբ կարդալուց հետո այն փոխանցում է մշակման Ապաչի, որն իր հերթին ստեղծում է բովանդակություն և հնարավորինս արագ վերադարձնում պատրաստ պատասխանը Nginx-ին, որից հետո այն կարող է մաքուր խղճով սպանել գործընթացը և ազատել իր զբաղեցրած համակարգի ռեսուրսները: Nginx վեբ սերվեր, ստանալով հարցման արդյունքը Ապաչի, այն գրում է բուֆերի կամ նույնիսկ սկավառակի վրա գտնվող ֆայլի վրա և կարող է կամայականորեն երկար ժամանակ տալ դանդաղ հաճախորդներին, մինչդեռ նրա աշխատանքային գործընթացներն այնքան քիչ ռեսուրսներ են խլում, որ .. «նույնիսկ ծիծաղելի է դրա մասին խոսելը» ©: :) Նման սխեման զգալիորեն խնայում է համակարգի ռեսուրսները, կրկնում եմ, բայց Nginx աշխատանքային գործընթացները խղճուկ քանակությամբ ռեսուրսներ են խլում, սա առավել ևս տեղին է մեծ նախագծերի համար:

Եվ սա միայն մի փոքր մասն է այն բանի, ինչ կարող է անել Nginx սերվերը, մի մոռացեք տվյալների քեշավորման և հետ աշխատելու հնարավորության մասին: memcached. Ահա Nginx վեբ սերվերի հիմնական հատկանիշների ցանկը.

Nginx սերվերի ֆունկցիոնալությունը որպես HTTP սերվեր

  • Ստատիկ բովանդակության մշակում, ինդեքսային ֆայլեր, գրացուցակների ցանկ, բաց ֆայլերի նկարագրիչի քեշ;
  • Արագացված պրոքսիինգ քեշավորման, բեռի հավասարակշռման և ձախողման միջոցով;
  • Արագացված աջակցություն FastCGIսերվերներ քեշավորման, բեռների հավասարակշռման և սխալների հանդուրժողականությամբ.
  • Մոդուլային կառուցվածք, տարբեր ֆիլտրերի աջակցություն (SSI, XSLT, GZIP, ռեզյումե, մասնատված պատասխաններ);
  • Աջակցություն SSL և TLS SNI ընդլայնումների համար;
  • ip-ի վրա հիմնվածկամ անվան վրա հիմնվածվիրտուալ սերվերներ;
  • KeepAlive և խողովակաշարային կապերի հետ աշխատելը;
  • Հնարավորություն կազմաձևելու ցանկացած ժամանակացույց, ինչպես նաև բուֆերների քանակն ու չափը մակարդակով Apache սերվեր;
  • Կատարել տարբեր գործողություններ՝ կախված հաճախորդի հասցեից.
  • URI-ի փոփոխություն՝ օգտագործելով կանոնավոր արտահայտություններ;
  • Հատուկ սխալի էջեր 4xx-ի և 5xx-ի համար;
  • Մուտքի սահմանափակում՝ հիմնված հաճախորդի հասցեի կամ գաղտնաբառի վրա.
  • Մատյան ֆայլերի ձևաչափերի կարգավորում, մատյանների ռոտացիա;
  • Հաճախորդին արձագանքելու արագության սահմանափակում;
  • Միաժամանակյա միացումների և հարցումների քանակի սահմանափակում.
  • Աջակցություն PUT, DELETE, MKCOL, COPY և MOVE մեթոդներին;
  • Կարգավորումների փոփոխություն և սերվերի թարմացում՝ առանց աշխատանքը դադարեցնելու.
  • ներկառուցված Պերլ;

Nginx սերվերի ֆունկցիոնալությունը՝ որպես փոստի վստահված սերվեր

  • Փոխանցում դեպի IMAP/POP3 հետին պլան՝ օգտագործելով արտաքին HTTP վավերացման սերվեր;
  • Օգտագործողի SMTP-ի ստուգում արտաքին HTTP վավերացման սերվերի վրա և վերահասցեավորում ներքին SMTP սերվերին;
  • Աջակցություն նույնականացման հետևյալ մեթոդներին.
    • POP3 - USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
    • IMAP - ՄՈՒՏՔ, AUTH LOGIN/PLAIN/CRAM-MD5;
    • SMTP - AUTH LOGI / PLAIN / CRAM-MD5;
  • SSL աջակցություն;
  • աջակցություն STARTTLS-ի և STLS-ի համար;

Օպերացիոն համակարգեր և հարթակներ, որոնք աջակցվում են Nginx վեբ սերվերի կողմից

  • FreeBSD, հարթակներ 3-ից 8, i386 և amd64;
  • Linux, 2.2-ից մինչև 2.6 - i386 հարթակ; Linux 2.6 - amd64;
  • Solaris 9 - i386 և sun4u հարթակներ; Solaris 10 - i386, amd64 և sun4v հարթակներ;
  • MacOS X հարթակներ ppc, i386;
  • Windows XP, Windows Server 2003; (Ներկայումս բետա թեստավորման փուլում է)

Nginx սերվերի ճարտարապետություն և մասշտաբայնություն

  • Հիմնական (գլխավոր) գործընթացը, մի քանի (կազմաձևման ֆայլում կազմաձևված) աշխատանքային գործընթացներ, որոնք աշխատում են ոչ արտոնյալ օգտվողի ներքո.
  • Աջակցություն կապի կառավարման հետևյալ մեթոդներին.
    • ընտրելստանդարտ մեթոդ է: Համապատասխան Nginx մոդուլը կառուցվում է ավտոմատ կերպով, եթե տվյալ հարթակում ավելի արդյունավետ մեթոդ չի գտնվել: Դուք կարող եք ստիպել, որ այս մոդուլի կառուցումը պարտադիր կերպով միացվի կամ անջատվի՝ օգտագործելով --with-select_module կամ --without-select_module կազմաձևման տարբերակները:
    • հարցումստանդարտ մեթոդ է: Համապատասխան Nginx մոդուլը կառուցվում է ավտոմատ կերպով, եթե տվյալ հարթակում ավելի արդյունավետ մեթոդ չի գտնվել: Դուք կարող եք ստիպել, որ այս մոդուլի կառուցումը պարտադիր կերպով միացվի կամ անջատվի՝ օգտագործելով --with-poll_module կամ --without-poll_module կազմաձևման տարբերակները:
    • հերթԱրդյունավետ մեթոդ է, որն օգտագործվում է FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 և MacOS X օպերացիոն համակարգերում: Երբ օգտագործվում է կրկնակի պրոցեսորով MacOS X մեքենաների վրա, այն կարող է միջուկի խուճապ առաջացնել:
    • էպոլլ Linux 2.6+-ում օգտագործվող արդյունավետ մեթոդ է: Որոշ բաշխումներ, ինչպիսիք են SuSE 8.2-ը, ունեն 2.4 միջուկում epoll-ը աջակցող patches:
    • rtsig - իրական ժամանակի ազդանշաններ, արդյունավետ մեթոդ, որն օգտագործվում է Linux 2.2.19+-ում: Լռելյայնորեն, ամբողջ համակարգի համար հերթում չի կարող լինել ոչ ավելի, քան 1024 ազդանշան: Սա բավարար չէ մեծ բեռնված սերվերների համար, հերթի չափը պետք է մեծացվի՝ օգտագործելով /proc/sys/kernel/rtsig-max միջուկի պարամետրը: Այնուամենայնիվ, Linux 2.6.6-mm2-ի դրությամբ այս տարբերակը հանված է, փոխարենը յուրաքանչյուր գործընթաց ունի առանձին ազդանշանային հերթ, որի չափը որոշվում է RLIMIT_SIGPENDING-ով:
    • Երբ հերթը լցված է, nginx սերվերզրոյացնում է այն և կարգավորում է կապերը հարցման մեթոդով, մինչև իրավիճակը վերադառնա նորմալ:
    • /dev/ հարցում- արդյունավետ մեթոդ, որն աջակցվում է Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ և Tru64 UNIX 5.1A+ օպերացիոն համակարգերում:
    • eventport - իրադարձության նավահանգիստներ, արդյունավետ մեթոդ, որն օգտագործվում է Solaris 10-ում: Օգտագործելուց առաջ պետք է տեղադրել կարկատել՝ միջուկի խուճապից խուսափելու համար:
  • Օգտագործելով kqueue մեթոդի առանձնահատկությունները, ինչպիսիք են EV_CLEAR, EV_DISABLE (միջոցառումը ժամանակավորապես անջատելու համար), NOTE_LOWAT, EV_EOF, հասանելի տվյալների քանակը, սխալի կոդերը;
  • Աշխատեք sendfile (FreeBSD 3.1+, Linux 2.2.+, Mac OS X 10.5+), sendfile64 (Linux 2.4.21+) և sendfilev (Solaris 8 7/01+) հետ;
  • Ընդունման ֆիլտրերի (FreeBSD 4.1+) և TCP_DEFER_ACCEPT (Linux 2.4+) աջակցություն;
  • 10,000 անգործուն HTTP կապերը սպառում են մոտավորապես 2,5 մ հիշողություն;
  • Տվյալների պատճենման գործողությունների նվազագույն քանակը.

iRedMail-ը բաց կոդով փոստի սերվեր է: Համագումարը հիմնված է Postfix SMTP սերվերի վրա (Mail Transfer Agent, կարճ MTA): Համագումարը ներառում է նաև՝ Dovecot, SpamAssassin, Greylist, ClamAV, SOGo Roundcube, NetData և NGINX:

Աղավնանոց- IMAP/POP3 սերվեր:

Spamassassin- սպամի զտման գործիք:

Մոխրագույն ցուցակ- հակասպամի գործիք, որը հիմնված է մոխրագույն ցուցակների վրա:

ClamAV- հակավիրուսային.

Կլոր խորանարդև SOGo- Վեբ-հաճախորդներ էլ. փոստի հետ աշխատելու համար:

Զուտ տվյալներ- իրական ժամանակում սերվերի աշխատանքի մոնիտորինգի ծրագիր:

Նգինքս- վեբ սերվեր:

Աջակցում է օպերացիոն համակարգերին՝ CentOS 7, Դեբիան 9, Ubuntu 16.04/18.04, FreeBSD 11/12և OpenBSD 6.4.

iRedMail-ն ունի վճարովի և անվճար տարբերակներ, որոնք միմյանցից տարբերվում են փոստի հավաքման iRedAdmin-ի սեփական վեբ ինտերֆեյսի ֆունկցիոնալությամբ: Անվճար տարբերակում կարող եք ստեղծել միայն տիրույթներ, օգտագործողի և ադմինիստրատորի փոստարկղեր։ Եթե ​​Ձեզ անհրաժեշտ է ստեղծել կեղծանուն, ապա դուք չեք կարողանա դա անել անվճար տարբերակում iRedAdmin-ի միջոցով: Բարեբախտաբար, կա PostfixAdmin անունով անվճար լուծում, որը թույլ է տալիս դա անել: PostfixAdmin-ը հեշտությամբ ինտեգրվում է iRedMail-ին և հիանալի աշխատում դրա հետ:

Տեղադրում

Տեղադրելու համար մեզ անհրաժեշտ է վերը թվարկված օպերացիոն համակարգերից մեկը: Ես կօգտագործեմ Ubuntu Server 18.04-ը: Դուք նաև պետք է ունենաք գնված տիրույթի անուն և կազմաձևված DNS գոտի: Եթե ​​դուք օգտագործում եք ձեր տիրույթի ռեգիստրարի DNS սերվերը, ապա դուք պետք է երկու գրառում կատարեք տիրույթի գոտիների կառավարման բաժնում՝ A և MX: Դուք կարող եք նաև օգտագործել ձեր սեփական DNS-ը՝ պատվիրակություն ստեղծելով ձեր տիրույթի անունների գրանցողի անձնական հաշվում:

DNS ռեգիստրատոր օգտագործելիս տիրույթի գոտի ստեղծելը

Նշում! DNS կարգավորումներն ուժի մեջ են մտնում մի քանի ժամից մինչև մեկ շաբաթ: Քանի դեռ կարգավորումներն ուժի մեջ չեն մտել, փոստային սերվերը ճիշտ չի աշխատի:

Տեղադրելու համար ներբեռնեք ընթացիկ տարբերակը iRedMail կայքից: Այս պահին այն 0.9.9 է։

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

Այնուհետև հանեք ներբեռնված արխիվը:

# tar xjf iRedMail-0.9.9.tar.bz2

Արխիվի բացում

Եվ գնացեք ստեղծված թղթապանակ:

# cd iRedMail-0.9.9

Թղթապանակ iRedMail տեղադրիչով

Թղթապանակի բովանդակության ստուգում

Թղթապանակի բովանդակությունը

Եվ գործարկեք iRedMail-ի տեղադրման սցենարը:

# bash iRedMail.sh

Փոստային համակարգի տեղադրումը կսկսվի։ Տեղադրման գործընթացում դուք պետք է պատասխանեք մի շարք հարցերի: Մենք համաձայն ենք սկսել տեղադրումը:

Տեղադրման սկիզբը

Տեղադրման գրացուցակի ընտրություն

Այժմ դուք պետք է ընտրեք վեբ սերվեր: Ընտրությունը մեծ չէ, ուստի մենք ընտրում ենք NGINX:

Վեբ սերվերի ընտրություն

Այժմ դուք պետք է ընտրեք տվյալների բազայի սերվերը, որը կտեղադրվի և կկարգավորվի փոստի համակարգի հետ աշխատելու համար: Ընտրեք MariaDB:

Ընտրելով տվյալների բազայի սերվեր

Սահմանեք արմատային գաղտնաբառը տվյալների բազայի համար:

Տվյալների բազայի արմատային գաղտնաբառի ստեղծում

Այժմ մենք նշում ենք մեր փոստի տիրույթը:

Փոստի տիրույթի ստեղծում

Այնուհետև ստեղծեք գաղտնաբառ ադմինիստրատորի տուփի համար [էլփոստը պաշտպանված է] domain.ru.

Ստեղծեք էլփոստի ադմինիստրատորի գաղտնաբառ

Վեբ բաղադրիչների ընտրություն

Մենք հաստատում ենք նշված կարգավորումները:

Պարամետրերի հաստատում

Տեղադրումը սկսվեց:

Տեղադրում

Տեղադրման ավարտից հետո հաստատեք կանոնի ստեղծումը iptablesհամար SSHև վերագործարկեք firewall-ը: iRedMail-ն աշխատում է iptables. Ubuntu-ում՝ firewall-ի կառավարման ամենահաճախ օգտագործվող ծրագիրը UVW. Եթե ​​այս կամ այն ​​պատճառով դուք ունեք նման կարիք, ապա տեղադրեք UVW (apt install ufw) և ավելացրեք կանոններ UVW(օրինակ: ufw թույլ է տալիս «nginx full»կամ ufw թույլ է տալիս Postfix) չի արգելափակել փոստի սերվերը: Դուք կարող եք դիտել առկա կանոնների ցանկը՝ գործարկելով հրամանը. ufw հավելվածների ցանկը. Այնուհետեւ միացրեք UVW: ufw միացնել.

Ստեղծեք iptables կանոն

Firewall-ի վերագործարկում

Սա ավարտում է iRedMail-ի տեղադրումը: Համակարգը մեզ տվեց վեբ ինտերֆեյսի հասցեներ և մուտքի հավատարմագրեր: Փոստի համակարգի բոլոր բաղադրիչները միացնելու համար դուք պետք է վերագործարկեք սերվերը:

Տեղադրման ավարտը

Մենք վերագործարկում ենք:

# վերաբեռնում

Կարգավորում

Նախ անհրաժեշտ է համոզվել, որ ամեն ինչ աշխատում է: Մենք փորձում ենք մուտք գործել iReadAdmin կառավարման վահանակ՝ հասցեով https://domain/iredadmin. Մուտք գործել [էլփոստը պաշտպանված է] domain.ru, գաղտնաբառը ստեղծվել է տեղադրման ժամանակ։ Առկա է ռուսալեզու ինտերֆեյս։

Ինչպես տեսնում եք, ամեն ինչ աշխատում է: iRedAdmin մուտք գործելիս, ամենայն հավանականությամբ, ստացել եք անվտանգության սխալ՝ կապված վկայագրի հետ: Դա պայմանավորված է նրանով, որ iRedMail-ն ունի ինքնստորագրված վկայագիր, որի վրա զննարկիչը երդվում է: Այս խնդիրը շտկելու համար դուք պետք է տեղադրեք վավեր SSL վկայագիր: Եթե ​​գնել եք մեկը, կարող եք տեղադրել այն: Օրինակում ես կտեղադրեմ անվճար SSL Let's Encrypt-ից:

Let's Encrypt SSL վկայագրի տեղադրում

Մենք կտեղադրենք վկայագիրը՝ օգտագործելով certbot կոմունալ ծրագիրը: Եկեք նախ ավելացնենք պահեստ:

# add-apt-repository ppa:certbot/certbot

Այնուհետև մենք ինքնին տեղադրում ենք certboot-ը՝ անհրաժեշտ բաղադրիչներով:

# apt տեղադրել python-certbot-nginx

Մենք վկայական ենք ստանում.

# certbot --nginx -d domain.ru

Հրամանը գործարկելուց հետո համակարգը ձեզ կխնդրի մուտքագրել էլփոստի հասցե, մուտքագրեք: Դրանից հետո, ամենայն հավանականությամբ, կստանաք սխալ, որ հնարավոր չէ գտնել սերվերի բլոկը, որի համար ստեղծվել է վկայագիրը: Այս դեպքում դա նորմալ է, քանի որ մենք չունենք որևէ սերվերի բլոկ: Մեզ համար գլխավորը վկայական ստանալն է։

վկայական ստանալը

Ինչպես տեսնում եք, սերտիֆիկատը հաջողությամբ ստացվեց, և համակարգը մեզ ցույց տվեց դեպի վկայագիր և դեպի բանալին տանող ուղիները: Նրանք հենց այն են, ինչ մեզ պետք է: Ընդհանուր առմամբ, մենք ստացել ենք 4 ֆայլ, որոնք կպահվեն «/etc/letsencrypt/live/domain» թղթապանակում։ Այժմ մենք պետք է վեբ սերվերին տեղեկացնենք մեր վկայագրի մասին, այսինքն՝ փոխարինենք ներդրված վկայականը նոր ստացածով: Դա անելու համար մենք պետք է խմբագրենք ընդամենը մեկ ֆայլ:

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

Եվ դրա մեջ փոխեք վերջին երկու տողերը։

SSL վկայագրի փոխարինում

Մենք փոխում ենք ֆայլի ուղիները այն ուղիներով, որոնք համակարգը մեզ ասել է վկայագիրը ստանալու ժամանակ:

SSL վկայագրի փոխարինում

Եվ վերագործարկեք NGINX-ը:

# ծառայության nginx վերագործարկում

Հիմա եկեք փորձենք նորից մուտք գործել: iRedAdmin.

SSL վկայագրի ստուգում

Այլևս վկայագրի սխալ չկա: Վկայականը վավեր է: Դուք կարող եք սեղմել կողպեքի վրա և տեսնել դրա հատկությունները: Երբ վկայագրի ժամկետը լրանա, certboot-ը պետք է այն ինքնաբերաբար թարմացնի:

Այժմ խոսենք Dovecot և Postfix վկայականի մասին: Դա անելու համար մենք կխմբագրենք երկու կոնֆիգուրացիայի ֆայլ: Մենք անում ենք:

# nano /etc/dovecot/dovecot.conf

Բլոկ գտնելը.

#SSL: Համաշխարհային կարգավորումներ:

Իսկ այնտեղ գրանցված վկայականը փոխում ենք մերը։

Dovecot-ի վկայականի փոխարինում

Ուշադրություն դարձրեք նաև «ssl_protocols» տողին: Դրա արժեքը պետք է լինի «!SSLv3», հակառակ դեպքում դուք կստանաք «Զգուշացում. SSLv2-ը չի աջակցվում OpenSSL-ի կողմից: Խնդրում ենք հաշվի առնել այն հեռացնելու ssl_protocols» սխալը Dovecot-ը վերագործարկելիս:

# nano /etc/postfix/main.cf

Բլոկ գտնելը.

# SSL բանալի, վկայագիր, CA

Եվ մենք դրա մեջ եղած ուղիները փոխում ենք դեպի մեր վկայագրի ֆայլերի ուղիները:

Վկայագրի փոխարինում Postfix-ի համար

Սա ավարտում է վկայագրի տեղադրումը: Անհրաժեշտ է վերագործարկել Dovecot-ը և Postfix-ը, բայց ավելի լավ է վերագործարկել սերվերը:

# սպասարկման աղավնանոցի վերագործարկում

# վերաբեռնում

PHPMyAdmin-ի տեղադրում

Այս տարրը կամընտիր է, բայց ես խորհուրդ եմ տալիս լրացնել այն և տեղադրել PHPMyAdmin՝ ձեր տվյալների բազայի փորձի համար:

# apt տեղադրել phpmyadmin

Տեղադրողը ձեզ կխնդրի աշխատել, թե որ վեբ սերվերի հետ պետք է կարգավորել PHPMyAdmin-ը, քանի որ NGINX-ն այս ցանկում չէ, պարզապես սեղմեք TAB և շարժվեք առաջ:

PHPMyAdmin-ի տեղադրում

Տեղադրումն ավարտվելուց հետո, որպեսզի phpmyadmin-ը աշխատի, դուք պետք է սիմհղում կազմեք այն գրացուցակին, որի հետ լռելյայն աշխատում է NGINX-ը:

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

Եվ փորձեք գնալ https://domain/phpmyadmin/

PHPMyAdmin-ն աշխատում է: Կապը պաշտպանված է վկայականով, սխալներ չկան։ Առաջ շարժվել. Եկեք ստեղծենք MySQL տվյալների բազայի ադմինիստրատոր (MariaDB):

# mysql

Եվ մենք մտնում ենք MariaDB կառավարման վահանակ: Հաջորդը, մենք մեկ առ մեկ կատարում ենք հրամանները.

MariaDB > ՍՏԵՂԾԵԼ ՕԳՏԱԳՈՐԾՈՂ «admin»@»localhost», որը նույնականացվում է «գաղտնաբառով»;
MariaDB > ՏՐԱՄԱԴՐԵԼ ԲՈԼՈՐ ԱՐՏՈՆՈՒԹՅՈՒՆՆԵՐԸ *.*-ին "admin"@"localhost"-ին GRANT OPTION-ով;
MariaDB > FLUSH ԱՐՏՈՆՈՒԹՅՈՒՆՆԵՐ;

MySQL օգտվողի ստեղծում

Ամեն ինչ կարգին է, դուք մուտք եք գործել: PHPMyAdmin-ը պատրաստ է:

PostfixAdmin-ի տեղադրում

Սկզբունքորեն, PostfixAdmin-ը, ինչպես PHPMyAdmin-ը, չի կարող տեղադրվել: Փոստի սերվերը լավ կաշխատի առանց այս բաղադրիչների: Բայց հետո դուք չեք կարողանա ստեղծել փոստի կեղծանուններ: Եթե ​​դա ձեզ պետք չէ, ապա ազատ զգալ բաց թողնել այս բաժինները: Եթե ​​ձեզ դեռևս անհրաժեշտ են այլանուններ, ապա ունեք երկու տարբերակ՝ գնել iReaAdmin-ի վճարովի տարբերակը կամ տեղադրել PostfixAdmin: Իհարկե, դուք կարող եք դա անել առանց լրացուցիչ ծրագրաշարի` ձեռքով տվյալների բազայում մականուններ գրելով, բայց դա միշտ չէ, որ հարմար է և հարմար չէ բոլորի համար: Ես խորհուրդ եմ տալիս օգտագործել PostfixAdmin-ը, այժմ մենք կքննարկենք դրա տեղադրումը և ինտեգրումը iRedMail-ի հետ: Մենք սկսում ենք տեղադրումը.

# apt install postfixadmin

Մենք համաձայնում ենք և գաղտնաբառ ենք ստեղծում ծրագրի համակարգի տվյալների բազայի համար:

PostfixAdmin-ի տեղադրում

PostfixAdmin-ի տեղադրում

Մենք համանման հղում ենք անում PHPMyAdmin-ի տեղադրման հետ:

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

Մենք գրացուցակի սեփականատեր ենք դարձնում այն ​​օգտվողին, ում անունից գործարկվել է վեբ սերվերը: Մեր դեպքում NGINX-ը գործարկվում է որպես www-data օգտատեր:

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

Այժմ մենք պետք է խմբագրենք PostfixAdmin կոնֆիգուրացիայի ֆայլը և ավելացնենք տեղեկատվություն տվյալների բազայի մասին, որն օգտագործում է iRedAdmin-ը: Լռելյայնորեն այս տվյալների բազան կոչվում է vmail: Եթե ​​դուք գնում եք PHPMyAdmin, կարող եք տեսնել այն այնտեղ: Եվ այսպես, որպեսզի PostfixAdmin-ը փոփոխություններ կատարի տվյալների բազայում, մենք դա նշանակում ենք PostfixAdmin կոնֆիգուրացիայով։

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

Գտեք տողերը.

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

Եվ հիշեք.

$CONF["database_type"] = "mysqli"; # Տվյալների բազայի տեսակը
$CONF["database_host"] = "localhost"; # Տվյալների բազայի սերվերի հոսթ
$CONF["database_user"] = "admin"; # Մուտք գործեք vmail տվյալների բազա գրելու հասանելիությամբ: Դուք կարող եք օգտագործել նախկինում ստեղծված ադմինիստրատորը
$CONF["database_password"] = "գաղտնաբառ"; # Վերևում նշված օգտատիրոջ գաղտնաբառը
$CONF["database_name"] = "vmail"; # iRedMail տվյալների բազայի անունը

Տվյալների բազայի տվյալների մուտքագրում

Եթե ​​նախատեսում եք օգտագործել SOGo վեբ փոստի հաճախորդը, ապա ձեզ հարկավոր է ևս մեկ լրացուցիչ քայլ կատարել, այն է՝ փոխել PostfixAdmin կոդավորումը պարբերությունում: $CONF [«գաղտնագրել»]հետ «md5crypt»վրա «աղավնանոց:SHA512-CRYPT». Եթե ​​դուք դա չեք անում, ապա երբ փորձեք SOGo-ում լիազորել PostfixAdmin-ում ստեղծված օգտատիրոջ կողմից, դուք սխալ մուտքի կամ գաղտնաբառի սխալ կստանաք:

Կոդավորման տեսակը փոխելը

Այժմ, որպեսզի հաջողությամբ ավարտեք տեղադրումը և սխալներ չստանաք, դուք պետք է հարցում կատարեք տվյալների բազայում: Հարմար է դա անել PHPMyAdmin-ի միջոցով։ Ընտրեք vmail տվյալների բազան և անցեք SQL ներդիր: Պատուհանում մուտքագրեք.

DROP INDEX տիրույթը փոստարկղում;
DROP INDEX տիրույթը կեղծանունով;
ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԻ կեղծանունը ԱՎԵԼԱՑՆԵԼ ՍՅՈՒՆԸ «goto» տեքստը NOT NULL;

Տվյալների բազայի հարցում

Եվ սեղմեք «Առաջ»: Այժմ մենք պատրաստ ենք, կարող եք գնալ PostfixAdmin վեբ ինտերֆեյս և ավարտել տեղադրումը: Դա անելու համար զննարկիչում անհրաժեշտ է մուտքագրել. https://domain/postfixadmin/setup.php.

Պետք է հայտնվի հետևյալը.

PostfixAdmin-ի տեղադրում

Եթե ​​ամեն ինչ արվում է հրահանգների համաձայն, ապա սխալներ չպետք է լինեն: Եթե ​​դեռ կան, ուրեմն դավաճանում են, որ վերացնեն, հակառակ դեպքում համակարգը քեզ չի թողնի շարունակես։ Սահմանեք տեղադրման գաղտնաբառը և սեղմեք « Ստեղծեք գաղտնաբառի հեշՀամակարգը կստեղծի գաղտնաբառի հեշ, որը պետք է տեղադրվի պարամետրի մեջ $CONF["setup_password"].

Ավարտելով PostfixAdmin-ի տեղադրումը

Կազմաձևման ֆայլի կարգավորումների փոփոխություն

Այժմ մենք մուտքագրում ենք հենց նոր ստեղծած գաղտնաբառը և ստեղծում PostfixAdmin ադմինիստրատորը։ Ավելի լավ է չստեղծել ադմինիստրատոր՝ փոստմաստեր մուտքով, քանի որ կարող են խնդիրներ առաջանալ iRedAdmin կառավարման վահանակ մուտք գործելու հետ:

PostfixAdmin ադմինիստրատորի ստեղծում

Ամեն ինչ, ադմինը ստեղծված է։ Դուք կարող եք մուտք գործել:

Խնդրում ենք նկատի ունենալ, որ ավելի լավ է վերանվանել կամ ջնջել setup.php ֆայլը postfixadmin գրացուցակում անվտանգության տեսանկյունից:

Գնացինք: https://domain/postfixadmin/և մուտքագրեք նոր ստեղծված հավատարմագրերը: PostfixAdmin-ում, ինչպես նաև iRedAdmin-ում ռուսերենը հասանելի է: Այն կարող է ընտրվել թույլտվության ժամանակ:

Մենք փորձում ենք ստեղծել օգտվողի փոստարկղ:

Միացնել/անջատել iRedMail մոդուլները

iRedMail մոդուլները կառավարվում են iRedAPD-ի կողմից: Այն ունի կազմաձևման ֆայլ, որը պարունակում է աշխատանքային մոդուլներ: Եթե ​​ձեզ որոշակի մոդուլ պետք չէ, կարող եք հեռացնել այն կազմաձևման ֆայլից և այն կդադարի աշխատել: Մենք անում ենք:

# nano /opt/iredapd/settings.py

Գտեք գիծը պլագիններ«Եվ հեռացրեք այն բաղադրիչները, որոնք ձեզ պետք չեն դրանից: Ես կհեռացնեմ բաղադրիչը «գորշ ցուցակում». Իհարկե, այն բավականին արդյունավետ է պաշտպանում սպամից, բայց անհրաժեշտ տառերը հաճախ չեն հասնում։

Մոխրագույն ցուցակը (մոխրագույն ցուցակ) սպամից պաշտպանվելու ավտոմատ տեխնոլոգիա է, որը հիմնված է ուղարկողի սերվերի վարքագծի վերլուծության վրա: Երբ «մոխրագույն ցուցակը» միացված է, սերվերն առաջին անգամ հրաժարվում է անհայտ հասցեից նամակ ընդունել՝ հաղորդելով ժամանակավոր սխալի մասին: Այս դեպքում, ուղարկող սերվերը պետք է նորից փորձի ուղարկել ավելի ուշ: Սպամերները սովորաբար դա չեն անում: Եթե ​​նամակը նորից ուղարկվի, ապա այն ավելացվում է ցուցակում 30 օրով և փոստն արդեն փոխանակվում է առաջին անգամից։ Օգտագործեք այս մոդուլը, կամ ինքներդ չորոշեք:

Փոստի մոդուլների միացում/անջատում

Փոփոխություններ կատարելուց հետո դուք պետք է վերագործարկեք: iRedAPD.

# ծառայություն iredapd-ի վերագործարկում

Փոստի սերվերի փորձարկում

Սա ավարտում է iRedMail փոստի սերվերի կարգավորումը: Կարող եք անցնել վերջնական փուլ՝ թեստավորում։ Եկեք ստեղծենք երկու փոստարկղ: Մեկը iRedAdmin-ի միջոցով ստուգելու համար, երկրորդը PostfixAdmin-ի միջոցով և նամակ ուղարկեք մի փոստարկղից մյուսը և հակառակը: Ստեղծեք փոստարկղ iRedAdmin-ում [էլփոստը պաշտպանված է] domain.ru. PostfixAdmin-ում - [էլփոստը պաշտպանված է] domain.ru

Օգտագործողի ստեղծում iRedAdmin-ում

Օգտագործողի ստեղծում PostfixAdmin-ում

Ստուգեք, որ օգտվողները ստեղծվել են:

Եթե ​​ուշադրություն դարձնեք PostfixAdmin փոստարկղերի ցանկում «To» սյունակին, ապա կարող եք տեսնել iRedAdmin-ում և PostfixAdmin-ում ստեղծված փոստարկղերի տարբերությունը: iRedAdmin-ում ստեղծված փոստարկղերը նշված են որպես « միայն առաջ", և PostfixAdmin-ում ստեղծվածները որպես -" ՓոստարկղՍկզբում երկար ժամանակ ես չէի կարողանում հասկանալ, թե ինչու է դա տեղի ունենում և որն է դրանց տարբերությունը, և վերջապես ես նկատեցի մի բան. փոստարկղերը iRedAdmin-ում ստեղծվում են առանց այլանունների, իսկ PostfixAdmin-ում փոստարկղերը՝ իր մականունով:

Եվ եթե այս անունները ջնջվեն, ապա փոստարկղերը կցուցադրվեն որպես iRedAdmin-ում ստեղծված: միայն առաջ".

Փոխանունների հեռացում

Փոխանունները հեռացվել են: Ստուգեք PostfixAdmin-ը:

Ինչպես տեսնում եք, բոլոր տուփերը դարձել են «Միայն առաջ»։ Նույն կերպ, եթե iRedAdmin-ում ստեղծված փոստարկղում ձեզ համար անուն ստեղծեք, այն կդառնա «Փոստարկղ»։ Սկզբունքորեն, դա չի ազդում փոստի աշխատանքի վրա: Միակ բանն այն է, որ PostfixAdmin-ում ստեղծված փոստարկղի վրա դուք չեք կարողանա կեղծանուն ստեղծել: Այլանուն ստեղծելու փոխարեն, դուք պետք է խմբագրեք գոյություն ունեցողը: Եթե ​​խոսենք այլանունների մասին, ապա iRedMail-ի նոր տարբերակում դուք պետք է փոփոխություն կատարեք Postfix քարտերից մեկում, որը պատասխանատու է կեղծանունների համար: Եվ եթե դուք դա չանեք, ապա ստեղծված կեղծանունները չեն աշխատի: Դրա համար անհրաժեշտ է ֆայլում /etc/postfix/mysql/virtual_alias_maps.cfուղղել:

Մենք անում ենք:

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

Եվ մենք դա ուղղում ենք:

Փոխանունների տեղադրում

Վերագործարկեք Postfix-ը.

# ծառայության հետֆիքսման վերագործարկում

Դրանից հետո ամեն ինչ պետք է աշխատի։

Եվ այսպես, եկեք սկսենք ստուգել փոստը: Տուփի մեջ օգտվող 1մենք կանցնենք Roundcube-ի միջով և կներս մտնենք տուփի մեջ օգտվող 2- SOGo-ի միջոցով և նամակ ուղարկեք փոստարկղից օգտվող 1վրա օգտվող 2և ետ.

Նամակ ուղարկելով Roundcube-ով

SOGo-ում էլփոստի ստացում

Նամակ ուղարկելով SOGo-ին

Էլփոստի ստացում Roundcube-ում

Ամեն ինչ աշխատում է առանց խնդիրների։ Նամակի առաքումը տևում է երկուից հինգ վայրկյան: Նույն կերպ նամակները հիանալի կերպով առաքվում են Yandex և mail.ru սերվերներին (ստուգված):

Հիմա եկեք ստուգենք կեղծանունները: Եկեք ստեղծենք տուփ օգտվող 3և փոստարկղից կեղծանուն պատրաստեք օգտվող 1տուփի վրա օգտվող 2. Եվ տուփից նամակ ուղարկիր օգտվող 3տուփի վրա օգտվող 1. Այս դեպքում նամակը պետք է գա տուփ օգտվող 2.

Ստեղծեք կեղծանուն

Նամակ ուղարկել user3-ի փոստարկղից user1-ի փոստարկղ

User2-ի փոստարկղում նամակ ստանալը

Փոխանունների աշխատանքի դեպքում նույնպես ամեն ինչ կարգին է։

Եկեք փորձարկենք փոստային սերվերի աշխատանքը տեղական փոստային հաճախորդի միջոցով: Օրինակ, հաշվի առեք Mozilla Thunderbird-ը: Եկեք ստեղծենք ևս երկու օգտվող. հաճախորդ 1և հաճախորդ 2. Մենք մի փոստարկղը կմիացնենք IMAP-ի, մյուսը՝ POP3-ի միջոցով և նամակ կուղարկենք մի փոստարկղից մյուսը:

Միացում IMAP-ի միջոցով

POP3 միացում

Հաճախորդ 1-ից նամակ ենք ուղարկում Հաճախորդ 2-ին:

Առաքում հաճախորդից 1

Ստանալ հաճախորդի կողմից 2

Եվ հակառակ հերթականությամբ:

Ուղարկում է հաճախորդից 2

Ստացեք հաճախորդ 1-ում

Ամեն ինչ աշխատում է։

Եթե ​​դուք գնում եք. https://domain/netdata, ապա կարող եք դիտարկել համակարգի վիճակի գրաֆիկները։

Եզրակացություն

Սա ավարտում է iRedMail փոստի համակարգի տեղադրումը, կազմաձևումը և փորձարկումը: Արդյունքում մենք ստացանք լրիվ անվճար փոստի սերվեր՝ վավեր SSL վկայականով, երկու տարբեր վեբ վրա հիմնված փոստի հաճախորդների, երկու կառավարման վահանակների, ինչպես նաև փոստի մեջ ներկառուցված հակասպամի և հակավիրուսի միջոցով: Ցանկության դեպքում, վեբ փոստի հաճախորդների փոխարեն, կարող եք օգտագործել տեղական փոստի սպասառուներ, ինչպիսիք են Microsoft Outlook-ը կամ Mozilla Thunderbird-ը: Եթե ​​դուք չեք նախատեսում օգտագործել վեբ փոստի հաճախորդներ, ապա չեք կարող դրանք ընդհանրապես տեղադրել, որպեսզի չծանրաբեռնեք սերվերը կամ տեղադրեք մի բան, որն ավելի շատ է ձեզ դուր գալիս: Ինձ անձամբ ավելի շատ դուր է գալիս SOGo-ն, քանի որ դրա ինտերֆեյսը օպտիմիզացված է բջջային սարքերի համար, ինչը շատ հարմար է դարձնում սմարթֆոնից էլփոստ դիտելը: Նույնը վերաբերում է NetData-ին և iRedAdmin-ին, եթե չեք նախատեսում օգտագործել այն, ավելի լավ է չտեղադրեք: Փոստի այս համակարգը ռեսուրսների վրա այնքան էլ պահանջկոտ չէ: Այս ամենը աշխատում է VPS սերվերի վրա՝ 1024 ՄԲ օպերատիվ հիշողությամբ և մեկ վիրտուալ պրոցեսորով։ Եթե ​​հարցեր ունեք այս փոստի համակարգի վերաբերյալ, գրեք մեկնաբանություններում:

P.S. Այս ապրանքի փորձարկման ժամանակ 1 ԳԲ օպերացիոն հիշողությամբ տարբեր օպերացիոն համակարգերի վրա (Ubuntu, Debian, CentOS), պարզվեց, որ 1 ԳԲ-ը բավարար չէ ClamAV-ի աշխատանքի համար։ Գրեթե բոլոր դեպքերում 1 ԳԲ հիշողություն օգտագործելիս հակավիրուսը վկայակոչել է տվյալների բազայի սխալը։ Միևնույն ժամանակ, Debian և Ubuntu օպերացիոն համակարգերում հակավիրուսը պարզապես չի սկանավորել սերվերով անցնող փոստը, հակառակ դեպքում ամեն ինչ լավ էր աշխատում։ CentOS-ում իրավիճակը մի փոքր այլ էր: Clamd ծառայությունն ամբողջությամբ անջատեց համակարգը՝ այդպիսով անհնարին դարձնելով սերվերի նորմալ աշխատանքը: Երբ փորձում էին մուտք գործել վեբ ինտերֆեյսներ, NGINX-ը պարբերաբար տալիս էր 502 և 504 սխալներ։ Նամակներ են ուղարկվել նաև ժամանակի ընթացքում: Միևնույն ժամանակ, եթե ավելացնեք RAM մինչև 2 ԳԲ, ապա բոլոր դեպքերում հակավիրուսային և ընդհանուր առմամբ սերվերի շահագործման հետ կապված խնդիրներ չեն եղել: ClamAV-ը սկանավորել է փոստի սերվերով անցնող փոստը և դրա մասին գրել տեղեկամատյաններում: Երբ փորձում էին վիրուս ուղարկել հավելվածում, ուղարկումն արգելափակվել էր: Հիշողության սպառումը մոտավորապես 1,2 - 1,7 ԳԲ էր:

NGINX-ը կարող է օգտագործվել ոչ միայն որպես վեբ սերվեր կամ http-proxy, այլ նաև SMTP, IMAP, POP3 արձանագրությունների միջոցով փոստի պրոքսիավորման համար: Սա կստեղծի.

  • Մեկ մուտքի կետ՝ ընդլայնելի փոստային համակարգի համար:
  • Բեռնվածության հավասարակշռում բոլոր փոստի սերվերների միջև:

Այս հոդվածը տեղադրվում է Linux օպերացիոն համակարգում: Որպես փոստային ծառայություն, որին ուղարկվում են հարցումներ, դուք կարող եք օգտագործել postfix, exim, dovecot, exchange, iredmail assembly և այլն:

Գործողության սկզբունքը

NGINX-ն ընդունում է հարցումները և վավերացնում է վեբ սերվերին: Կախված մուտքի և գաղտնաբառի ստուգման արդյունքից, վստահված անձը կվերադարձնի պատասխան մի քանի վերնագրերով:

Հաջողության դեպքում.

Այսպիսով, մենք որոշում ենք փոստային սերվերի սերվերը և նավահանգիստը վավերացման հիման վրա: Սա շատ հնարավորություններ է տալիս ծրագրավորման լեզուների համապատասխան իմացությամբ։

Անհաջողության դեպքում.

Կախված նույնականացման արդյունքից և վերնագրից, հաճախորդը վերահղվում է մեզ անհրաժեշտ փոստային սերվերին:

Սերվերի պատրաստում

Եկեք որոշ փոփոխություններ կատարենք սերվերի անվտանգության կարգավորումներում:

SELinux

Անջատեք SELinux-ը, եթե օգտագործում եք CentOS կամ եթե օգտագործում եք այս անվտանգության համակարգը Ubuntu-ում.

vi /etc/selinux/config

SELINUX=անջատված է

Firewall

Եթե ​​մենք օգտագործում ենք firewalld(կանխադրված CentOS-ում):

firewall-cmd --մշտական ​​--add-port=25/tcp --add-port=110/tcp --add-port=143/tcp

firewall-cmd --վերբեռնել

Եթե ​​մենք օգտագործում ենք iptables(կանխադրված Ubuntu-ում):

iptables -A INPUT -p tcp --dport 25 -j ԸՆԴՈՒՆԵԼ

iptables -A INPUT -p tcp --dport 110 -j ԸՆԴՈՒՆԵԼ

iptables -A INPUT -p tcp --dport 143 -j ԸՆԴՈՒՆԵԼ

apt-get install iptables-persistent

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

* այս օրինակում մենք թույլատրել ենք SMTP (25), POP3 (110), IMAP (143):

NGINX-ի տեղադրում

Կախված օպերացիոն համակարգից, NGINX-ի տեղադրումը մի փոքր տարբերվում է:

կամ Linux centos:

այմ տեղադրել nginx

կամ Linux ubuntu:

apt տեղադրել nginx

Մենք թույլ ենք տալիս ծառայության ավտոմատ մեկնարկը և այն սկսում ենք.

systemctl միացնել nginx-ը

systemctl start nginx

Եթե ​​NGINX-ն արդեն տեղադրված է համակարգում, ստուգեք, թե որ մոդուլներով է այն աշխատում.

Մենք կստանանք ընտրանքների ցանկ, որոնցով կառուցված է վեբ սերվերը, որոնց թվում մենք պետք է տեսնենք ---փոստով. Եթե ​​անհրաժեշտ մոդուլը գոյություն չունի, դուք պետք է թարմացնեք nginx-ը

NGINX-ի կարգավորում

Բացեք nginx կազմաձևման ֆայլը և ավելացրեք տարբերակը փոստ:

vi /etc/nginx/nginx.conf

փոստ (

auth_http localhost:80/auth.php;

Սերվեր (
լսել 25;
արձանագրություն smtp;
smtp_auth մուտք պարզ cram-md5;
}

Սերվեր (
լսել 110;
արձանագրություն pop3;

}

Սերվեր (
լսել 143;
արձանագրության քարտեզ;
}
}

* որտեղ:

  • սերվերի_անուն— փոստի սերվերի անունը, որը կցուցադրվի SMTP ողջույնի ժամանակ:
  • auth_http— վեբ սերվեր և URL նույնականացման հարցում:
  • proxy_pass_error_message— թույլ է տալիս կամ մերժում է հաղորդագրության ցուցադրումը անհաջող նույնականացման դեպքում:
  • լսել— նավահանգիստ, որի վրա լսվում են հարցումները:
  • արձանագրությունհավելվածի արձանագրությունն է, որի համար լսում է համապատասխան պորտը:
  • smtp_auth— SMTP-ի համար նույնականացման մատչելի մեթոդներ:
  • pop3_auth— POP3-ի նույնականացման մատչելի մեթոդներ:

http - սերվերի բաժնում ավելացրեք.

Սերվեր (
լսել 80 default_server;
լսել [::]:80 default_server;
...

Գտնվելու վայրը ~ \.php$ (
սահմանել $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;
ներառել fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
...

Վերագործարկեք nginx սերվերը.

systemctl վերագործարկեք nginx-ը

PHP-ի տեղադրում և կարգավորում

PHP-ի միջոցով նույնականացում կատարելու համար համակարգում պետք է տեղադրվեն հետևյալ փաթեթները.

Եթե CentOS:

yum տեղադրել php php-fpm

Եթե ubuntu:

apt-get տեղադրել php php-fpm

Սկսեք PHP-FPM.

systemctl միացնել php-fpm

systemctl սկսել php-fpm

Նույնականացում

Մուտքն ու գաղտնաբառը ստուգվում են սկրիպտով, որի ուղին սահմանվում է auth_http տարբերակով։ Մեր օրինակում սա PHP սկրիպտ է:

Մուտքի և գաղտնաբառի հաստատման սցենարի պաշտոնական ձևանմուշի օրինակ.

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

* այս սկրիպտը ընդունում է ցանկացած մուտքի և գաղտնաբառ և վերահղում է հարցումները սերվերներին 192.168.1.22 և 192.168.1.33 . Նույնականացման ալգորիթմը սահմանելու համար մենք խմբագրում ենք 61 - 64 տողերը: 73 - 77 տողերը պատասխանատու են այն սերվերները վերադարձնելու համար, որոնց վերահղումն ընթացքի մեջ է, այս օրինակում, եթե մուտքը սկսվում է նիշերով։ «ա», «գ», «զ», «գ»,ապա վերահղումը կլինի դեպի սերվեր mailhost01, հակառակ դեպքում, վրա mailhost02. Սերվերների անունների քարտեզագրումը IP հասցեներին կարող է սահմանվել 31, 32 տողերում, հակառակ դեպքում զանգը կկատարվի տիրույթի անունով:

Փոստի սերվերի կարգավորում

NGINX վստահված անձի և փոստային սերվերի միջև տվյալների փոխանակումը պարզ է: Բացառությանը անհրաժեշտ է ավելացնել նույնականացման հնարավորությունը PLAIN մեխանիզմով։ Օրինակ, աղավնանոցը կարգավորելու համար կատարեք հետևյալը.

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

Ավելացնել տողեր.

հեռավոր 192.168.1.11 (
disable_plaintext_auth = ոչ
}

* այս օրինակում մենք թույլ տվեցինք սերվերից նույնականացման PLAIN հարցումներ 192.168.1.11 .

Մենք նաև ստուգում ենք.

* եթե sslնշանակություն կունենա պահանջվում է, ստուգումը չի աշխատի, քանի որ պարզվում է, որ մի կողմից սերվերը թույլ է տալիս հարցումները պարզ, բայց պահանջում է ssl կոդավորում:

Վերագործարկեք Dovecot ծառայությունը.

systemctl վերագործարկել dovecot

Հաճախորդի կարգավորում

Դուք կարող եք շարունակել ստուգել մեր վստահված անձի կարգավորումները: Դա անելու համար հաճախորդի կարգավորումներում նշեք nginx սերվերի հասցեն կամ անունը որպես IMAP/POP2/SMTP, օրինակ.

* այս օրինակում փոստային հաճախորդը կազմաձևված է սերվերին միանալու համար 192.168.1.11 բաց նավահանգիստներով 143 (IMAP) և 25 (SMTP):

Կոդավորումը

Այժմ եկեք ստեղծենք SSL կապ: Nginx-ը պետք է կառուցվի մոդուլով mail_ssl_module- ստուգեք հրամանով.

Պահանջվող մոդուլի բացակայության դեպքում մենք վերակառուցում ենք nginx-ը:

Մեր կազմաձևման ֆայլը խմբագրելուց հետո.

vi /etc/nginx/nginx.conf

փոստ (
server_name mail.domain.local;
auth_http localhost/auth.php;

proxy_pass_error_message-ը միացված է;

SSL միացված;
ssl_certificate /etc/ssl/nginx/public.crt;
ssl_certificate_key /etc/ssl/nginx/private.key;
ssl_ciphers HIGH:!a NULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10 մ;

Սերվեր (
լսել 110;
արձանագրություն pop3;
pop3_auth պարզ apop cram-md5;
}

Սերվեր (
լսել 143;
արձանագրության քարտեզ;
}

Պատճառը՝ SELinux անվտանգության համակարգը գործարկվել է:

Լուծում. անջատել կամ կարգավորել SELinux-ը: