سرور ایمیل nginx. نصب iRedMail

Nginx به سرعت در حال افزایش محبوبیت است و از یک شتاب دهنده سرویس ایستا برای آپاچی به یک وب سرور با امکانات کامل و پیشرفته که به طور فزاینده ای به طور جداگانه استفاده می شود، حرکت می کند. در این مقاله در مورد سناریوهای جالب و غیر استاندارد برای استفاده از nginx صحبت خواهیم کرد که به شما امکان می دهد حداکثر استفاده را از وب سرور ببرید.

پروکسی ایمیل

بیایید با واضح ترین کار شروع کنیم - توانایی nginx برای عمل به عنوان یک پروکسی نامه. این تابع در ابتدا در nginx است، اما به دلایلی در تولید بسیار نادر استفاده می شود، برخی حتی از وجود آن اطلاعی ندارند. به هر حال، nginx از پروکسی پروتکل های POP3، IMAP و SMTP با روش های مختلف احراز هویت، از جمله SSL و StartTLS، پشتیبانی می کند و این کار را بسیار سریع انجام می دهد.

چرا این مورد نیاز است؟ حداقل دو کاربرد برای این قابلیت وجود دارد. ابتدا از nginx به عنوان سپری در مقابل هرزنامه‌های مزاحم که سعی در ارسال نامه‌های ناخواسته از طریق سرور SMTP ما دارند، استفاده کنید. معمولاً هرزنامه‌ها مشکلات زیادی ایجاد نمی‌کنند، زیرا به سرعت در مرحله احراز هویت از بین می‌روند، با این حال، وقتی تعداد آنها واقعاً زیاد باشد، nginx به صرفه‌جویی در منابع CPU کمک می‌کند. دوم، از nginx برای هدایت کاربران به چندین سرور ایمیل POP3/IMAP استفاده کنید. البته، یک پروکسی ایمیل دیگر می‌تواند این کار را انجام دهد، اما چرا برای مثال، اگر nginx از قبل در فرانت‌اند نصب شده است، به سرورها زحمت بدهیم تا از طریق HTTP از طریق 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: پورت سرور

یکی از ویژگی های قابل توجه این رویکرد این است که می توان از آن به هیچ عنوان برای احراز هویت استفاده نکرد، بلکه می تواند برای پراکنده کردن کاربران در سرورهای داخلی مختلف، بسته به نام کاربری، داده های بارگذاری فعلی در سرورهای ایمیل یا حتی سازماندهی ساده ترین متعادل سازی بار با استفاده از دور مورد استفاده قرار گیرد. -رابین با این حال، اگر فقط نیاز به انتقال کاربران به یک سرور ایمیل داخلی دارید، می توانید به جای یک اسکریپت واقعی از یک خرد پیاده سازی شده توسط خود nginx استفاده کنید. به عنوان مثال، ساده ترین پروکسی 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؛ مکان / اعتبار (ad_header "Auth-Status" "OK"; add_header "Auth-Server" " 192.168.0.1"؛ add_header "Auth-Port" $mailport؛ بازگشت 200؛ ) ))

این همه است. این پیکربندی به شما این امکان را می دهد که کاربران را به طور شفاف به سرور ایمیل داخلی بدون ایجاد سربار به شکل اسکریپتی که در این مورد غیر ضروری است هدایت کنید. با استفاده از یک اسکریپت، این پیکربندی را می توان به طور قابل توجهی گسترش داد: تعادل بار را تنظیم کنید، کاربران را در برابر پایگاه داده LDAP بررسی کنید، و عملیات های دیگر را انجام دهید. نوشتن یک اسکریپت خارج از محدوده این مقاله است، اما پیاده سازی آن حتی با دانش ابتدایی PHP و Python بسیار آسان است.

پخش ویدئو

راه اندازی یک هاست ویدیوی معمولی مبتنی بر nginx آسان است. تنها کاری که باید انجام دهید این است که ویدیوی رمزگذاری شده را در دایرکتوری قابل دسترسی به سرور آپلود کنید، آن را به پیکربندی اضافه کنید و فلش یا پخش کننده HTML5 را به گونه ای پیکربندی کنید که از این دایرکتوری فیلم بگیرد. با این حال، اگر می خواهید پخش مداوم ویدیو را از منبع خارجی یا وب کم تنظیم کنید، این طرح کار نخواهد کرد و باید به دنبال پروتکل های پخش ویژه باشید.

چندین پروتکل وجود دارد که این مشکل را حل می کند که کارآمدترین و پشتیبانی شده ترین آنها RTMP است. تنها مشکل این است که تقریباً تمام پیاده سازی های سرور RTMP از مشکلاتی رنج می برند. سرور رسمی Adobe Flash Media پرداخت می شود. Red5 و Wowza در جاوا نوشته شده اند و بنابراین عملکرد مطلوبی را ارائه نمی دهند، پیاده سازی دیگری به نام 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 $ make $ sudo make install

اکنون ماژول باید پیکربندی شود. این کار طبق معمول از طریق پیکربندی nginx انجام می شود:

Rtmp (# سرور پخش را در پورت 1935 در سرور سایت/rtmp فعال کنید (گوش دادن 1935؛ برنامه rtmp (روشن زنده؛ )))

ماژول RTMP نمی تواند در یک پیکربندی چند رشته ای کار کند، بنابراین تعداد فرآیندهای nginx worker باید به یک کاهش یابد (بعداً به شما خواهم گفت که چگونه این مشکل را حل کنید):

worker_processes 1;

حالا می‌توانیم فایل را ذخیره کنیم و nginx پیکربندی را دوباره بخوانیم. راه‌اندازی nginx کامل است، اما ما هنوز خود پخش ویدیو را نداریم، بنابراین باید آن را از جایی دریافت کنیم. به عنوان مثال، اجازه دهید فایل video.avi از دایرکتوری فعلی باشد. برای تبدیل آن به یک جریان و قرار دادن آن در پخش کننده RTMP ما، بیایید از FFmpeg خوب قدیمی استفاده کنیم:

# ffmpeg -re -i ~/video.avi -c copy -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 را نشان می دهد، و "streamer: "rtmp://localhost/rtmp"، که آدرس پخش کننده RTMP را مشخص می کند. برای اکثر وظایف، این تنظیمات کافی خواهد بود. چندین جریان مختلف را می توان در یک آدرس راه اندازی کرد و nginx به طور موثر آنها را بین مشتریان مالتیپلکس می کند. اما این تمام چیزی نیست که ماژول RTMP قادر به انجام آن است. به عنوان مثال، با کمک آن می توانید ارسال مجدد یک جریان ویدیویی را از سرور دیگری سازماندهی کنید. سرور FFmpeg برای این کار اصلاً مورد نیاز نیست، فقط خطوط زیر را به پیکربندی اضافه کنید:

# vi /etc/nginx/nginx.conf برنامه rtmp ( زنده، rtmp://rtmp.example.com را بکشید؛ )

اگر نیاز به ایجاد چندین جریان با کیفیت های مختلف دارید، می توانید به طور مستقیم از nginx ترانسکودر FFmpeg را فراخوانی کنید:

# 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"| sort -R|head -n 1`" -vn -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/rtmp/stream; انجام شده

پروکسی git

سیستم کنترل نسخه Git قادر است نه تنها از طریق پروتکل های Git و SSH، بلکه از طریق HTTP نیز به مخازن دسترسی داشته باشد. روزی روزگاری، اجرای دسترسی HTTP بدوی بود و قادر به ارائه کار کامل با مخزن نبود. از نسخه 1.6.6، وضعیت تغییر کرده است و امروزه می توان از این پروتکل برای دور زدن محدودیت های فایروال در هر دو طرف اتصال یا ایجاد هاست Git خود با رابط وب استفاده کرد.

متأسفانه، اسناد رسمی فقط در مورد سازماندهی دسترسی به Git با استفاده از وب سرور آپاچی صحبت می کنند، اما از آنجایی که پیاده سازی خود یک برنامه کاربردی خارجی با یک رابط استاندارد CGI است، تقریباً می توان آن را به هر سرور دیگری از جمله lighttpd و البته، متصل کرد. nginx این به هیچ چیز دیگری غیر از خود سرور، نصب شده توسط Git و یک سرور کوچک FastCGI fcgiwrap نیاز ندارد، که به دلیل اینکه nginx نمی داند چگونه مستقیماً با CGI کار کند، لازم است، اما می تواند اسکریپت ها را با استفاده از پروتکل FastCGI فراخوانی کند.

کل طرح کار به این صورت خواهد بود. سرور fcgiwrap در پس‌زمینه آویزان می‌شود و منتظر درخواستی برای اجرای یک برنامه CGI می‌ماند. Nginx به نوبه خود به گونه ای پیکربندی می شود که هر بار که به آدرسی که ما مشخص کرده ایم دسترسی پیدا می کند، درخواست اجرای باینری Git-http-backend CGI را از طریق رابط FastCGI کند. پس از دریافت درخواست، fcgiwrap git-http-backend را با آرگومان های مشخص شده CGI که ​​توسط کلاینت GIT ارسال شده است اجرا می کند و نتیجه را برمی گرداند.

برای پیاده سازی چنین طرحی، ابتدا fcgiwrap را نصب می کنیم:

$ sudo apt-get نصب fcgiwrap

شما نیازی به پیکربندی آن ندارید، تمام پارامترها از طریق پروتکل FastCGI منتقل می شوند. همچنین به طور خودکار شروع خواهد شد. بنابراین، تنها پیکربندی nginx باقی می ماند. برای انجام این کار، فایل /etc/nginx/sites-enabled/git را ایجاد کنید (اگر چنین دایرکتوری وجود ندارد، می توانید در کانفیگ اصلی بنویسید) و موارد زیر را در آن بنویسید:

# vi /etc/nginx/sites-enabled/git server ( # 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 دسترسی برای آدرس آدرس ~/private(/.*)$ ( # مجوزهای کاربر auth_basic "git anonymous-only read-only, authenticated write"؛ # احراز هویت 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 را مجدداً راه اندازی کنید:

میکرو کش

بیایید وضعیتی را با یک سایت پویا و اغلب به روز شده تصور کنیم که ناگهان شروع به دریافت بارهای بسیار بزرگ می کند (خب، در صفحه یکی از بزرگترین سایت های خبری قرار گرفت) و دیگر با بازگشت محتوا کنار می آید. بهینه سازی مناسب و اجرای طرح ذخیره سازی صحیح زمان زیادی طول می کشد و مشکلات باید اکنون برطرف شوند. چه می توانیم انجام دهیم؟

راه های مختلفی برای خروج از این وضعیت با حداقل ضرر وجود دارد، اما جالب ترین ایده از Fenn Bailey (fennb.com) بود. ایده این است که به سادگی nginx را در مقابل سرور قرار دهید و آن را مجبور کنید که تمام محتوای ارسال شده را کش کند، اما نه فقط کش، بلکه فقط برای یک ثانیه. نکته قابل توجه در اینجا این است که صدها و هزاران بازدید کننده سایت در هر ثانیه، در واقع، تنها یک تماس به باطن ایجاد می کنند، که بیشتر آنها یک صفحه کش دریافت می کنند. در عین حال، به ندرت کسی متوجه تفاوت خواهد شد، زیرا حتی در یک سایت پویا، یک ثانیه معمولاً هیچ معنایی ندارد.

پیکربندی با اجرای این ایده چندان پیچیده به نظر نمی رسد:

# vi /etc/nginx/sites-enabled/cache-proxy # پیکربندی cache proxy_cache_path /var/cache/nginx level=1:2 keys_zone=microcache:5m max_size=1000m; سرور ( گوش دادن 80؛ server_name example.com؛ # مکان آدرس کش / ( # حافظه پنهان به طور پیش فرض فعال است $no_cache ""؛ # غیرفعال کردن حافظه پنهان برای همه روش ها به جز GET و HEAD اگر ($request_method !~ ^(GET|HEAD) $ ) ( set $no_cache "1"; ) # اگر کلاینت محتوا را در سایت آپلود کند (no_cache = 1)، مطمئن می شویم که داده های داده شده به او به مدت دو ثانیه کش نیست و او می تواند نتیجه دانلود را ببیند اگر ($no_cache = "1") (ad_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; ) if ($http_cookie ~* "_mcnc") ( مجموعه $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؛ # محافظت در برابر مشکل گله Thundering در حال به روز رسانی proxy_cache_use_stale؛ # افزودن هدرهای استاندارد proxy_set_h هدر میزبان $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;" اشغال شده است، که بدون آن به دلیل درخواست هایی که در حین به روز رسانی کش آمده بود، بارگذاری های دوره ای را در سرور باطن دریافت می کردیم. در غیر این صورت، همه چیز استاندارد است و باید بدون توضیح بیشتر مشخص شود.

تقریب پروکسی به مخاطب هدف

علیرغم افزایش گسترده جهانی در سرعت اینترنت، فاصله فیزیکی سرور از مخاطبان هدف همچنان به ایفای نقش خود ادامه می دهد. این بدان معناست که اگر یک سایت روسی بر روی سروری واقع در آمریکا اجرا شود، سرعت دسترسی به آن به طور پیشینی کمتر از سرور روسی با همان پهنای باند خواهد بود (البته، اگر چشمان خود را روی همه عوامل دیگر ببندید. ). نکته دیگر این است که اغلب میزبانی سرورهای خارج از کشور از جمله از نظر تعمیر و نگهداری سود بیشتری دارد. بنابراین برای کسب سود در قالب نرخ بازدهی بالاتر، باید به سراغ ترفندی بروید.

یکی از گزینه های ممکن: قرار دادن سرور مولد اصلی در غرب، و استقرار front-end، که چندان نیاز به منابع ندارد و استاتیک می دهد، در روسیه است. این به شما امکان می دهد تا بدون هزینه های جدی برنده شوید. پیکربندی nginx برای frontend در این مورد یک اجرای پروکسی ساده است که برای همه ما آشناست:

# 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_forwarded; proxy_cache_valid 30d؛ proxy_ignore_headers "Cache-Control" "Expires"؛ 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 (از قبل شامل ماژول های Mail لازم برای ترافیک ایمیل پراکسی است) یا NGINX Open Source ماژول های Mail را با استفاده از پارامتر --with-mail برای عملکرد پراکسی ایمیل و پارامتر --with-mail_ssl_module برای پشتیبانی از SSL/TLS کامپایل کرده است:

    $ ./configure --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 را با بلوک های سرور پیکربندی کنید. برای هر سرور، مشخص کنید:

    • را شماره پورتکه با پروتکل مشخص شده با دستورالعمل listen مطابقت دارد
    • را پروتکلبا دستورالعمل پروتکل (اگر مشخص نشده باشد، به طور خودکار از پورت مشخص شده در دستورالعمل گوش شناسایی می شود)
    • مجاز است روش های احراز هویتبا دستورات imap_auth، pop3_auth، و smtp_auth:

    سرور ( listen 25 ; پروتکل smtp ; smtp_auth ورود به سیستم cram-md5 ; ) سرور ( listen 110 ؛ پروتکل pop3 ; pop3_auth plain apop cram-md5 ; ) سرور ( listen 143 ; protocol imap ; )

تنظیم احراز هویت برای یک پروکسی ایمیل

هر درخواست POP3/IMAP/SMTP از مشتری ابتدا در یک سرور احراز هویت HTTP خارجی یا توسط یک اسکریپت احراز هویت احراز هویت می شود. داشتن سرور احراز هویت برای پروکسی سرور پست الکترونیکی NGINX الزامی است. سرور را می توانید توسط خودتان مطابق با پروتکل احراز هویت NGINX که بر اساس پروتکل HTTP است ایجاد کنید.

اگر احراز هویت موفقیت آمیز باشد، سرور احراز هویت یک سرور بالادستی را انتخاب کرده و درخواست را تغییر مسیر می دهد. در این حالت، پاسخ سرور شامل خطوط زیر خواهد بود:

HTTP/1.0 200 OK Auth-Status: OK Auth-Server: # نام سرور یا آدرس IP سرور بالادستی که برای پردازش نامه استفاده می شودپورت احراز هویت: # پورت سرور بالادست

اگر احراز هویت ناموفق باشد، سرور احراز هویت یک پیام خطا برمی‌گرداند. در این حالت، پاسخ سرور شامل خطوط زیر خواهد بود:

HTTP/1.0 200 OK Auth-Status: # یک پیام خطایی که باید به مشتری بازگردانده شود، به عنوان مثال "ورود یا رمز عبور نامعتبر"تایید-منتظر: # تعداد تلاش‌های باقی مانده برای احراز هویت تا زمانی که اتصال بسته شود

توجه داشته باشید که در هر دو مورد پاسخ شامل خواهد شد HTTP/1.0 200 OKکه ممکن است گیج کننده باشد

برای نمونه‌های بیشتر درخواست‌ها و پاسخ‌ها از سرور احراز هویت، به ngx_mail_auth_http_module در مستندات مرجع NGINX مراجعه کنید.

راه اندازی SSL/TLS برای Mail Proxy

با استفاده از POP3/SMTP/IMAP از طریق SSL/TLS، مطمئن می شوید که داده های ارسال شده بین یک کلاینت و یک سرور ایمیل ایمن هستند.

برای فعال کردن SSL/TLS برای پراکسی ایمیل:

    اطمینان حاصل کنید که NGINX شما با پشتیبانی از SSL/TLS پیکربندی شده است، با تایپ کردن دستور nginx -V در خط فرمان و سپس جستجوی خط با --mail_ssl_module در خروجی:

    $ nginx -V آرگومان‌های پیکربندی: ... با--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 برای Mail Proxy

این نکات به شما کمک می کند تا پروکسی ایمیل NGINX خود را سریعتر و ایمن تر کنید:

    با دستور worker_processes در همان سطح با زمینه نامه، تعداد پردازش های کارگر را برابر با تعداد پردازنده ها تنظیم کنید:

    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 رم 1 متر ; ; پروتکل pop3 ; pop3_auth plain apop cram-md5 ; ) سرور ( گوش دادن 143 ; پروتکل imap ; ))

    در این مثال، سه سرور پروکسی ایمیل وجود دارد: SMTP، POP3 و IMAP. هر یک از سرورها با پشتیبانی SSL و STARTTLS پیکربندی شده اند. پارامترهای جلسه SSL ذخیره می شوند.

    سرور پروکسی از سرور احراز هویت HTTP استفاده می کند - پیکربندی آن فراتر از محدوده این مقاله است. تمام پیام های خطا از سرور به مشتریان بازگردانده می شود.

Nginx- اندازه کوچک، بسیار سریع، وب سرور و سرور پروکسی ایمیل کاملاً کاربردی، توسعه دهنده ایگور سیسوف (rambler.ru). با توجه به مصرف بسیار کم منابع و سرعت سیستم و همچنین انعطاف پذیری پیکربندی، وب سرور nginxاغلب به عنوان جلویی برای سرورهای سنگین تر مانند آپاچی، در پروژه های پر بار. گزینه کلاسیک یک دسته است، Nginx - آپاچی - FastCGI. کار در چنین طرحی، سرور nginx، تمام درخواست های ارسال شده از طریق HTTP را می پذیرد و بسته به پیکربندی و خود درخواست، تصمیم می گیرد که آیا خود درخواست را پردازش کند و به مشتری پاسخ آماده بدهد یا یک درخواست برای پردازش به یکی از باطن ها ارسال کند ( آپاچییا FastCGI).

همانطور که می دانید، سرور آپاچی هر درخواست را در یک فرآیند (رشته) جداگانه پردازش می کند، که، باید بگویم، مقدار کمی از منابع سیستم را می خورد، اگر 10-20 چنین فرآیندی وجود داشته باشد، مزخرف است، و اگر وجود داشته باشد. 100-500 یا بیشتر از آنها هستند، سیستم سرگرم کننده نمی شود.

بیایید سعی کنیم چنین وضعیتی را تصور کنیم. فرض کنید در آپاچی 300 درخواست HTTP از مشتریان می‌آیند، 150 مشتری روی خطوط اختصاصی سریع می‌نشینند و 150 مشتری دیگر روی کانال‌های اینترنتی نسبتاً کند، حتی اگر روی مودم‌ها نباشند. در این شرایط چه اتفاقی می افتد؟ و موارد زیر رخ می دهد، وب سرور آپاچی برای پردازش این 300 اتصال، برای هر فرآیند (رشته) ایجاد می کند، به سرعت محتوا تولید می کند و 150 مشتری سریع بلافاصله نتیجه درخواست های خود را می گیرند، فرآیندهایی که به آنها سرویس داده است. کشته می شود و منابع آزاد می شوند و 150 مورد کند هستند و به دلیل یک کانال اینترنتی باریک نتایج پرس و جوهای آنها را کند می کند و در نتیجه 150 فرآیند در سیستم معلق می شود. آپاچی، منتظر می ماند تا مشتریان محتوای تولید شده توسط وب سرور را بگیرند و بسیاری از منابع سیستم را می بلعند. طبیعتاً شرایط فرضی است، اما من فکر می کنم اصل موضوع روشن است. برای رفع وضعیت فوق و بسته نرم افزاری کمک می کند. پس از خواندن کل درخواست مشتری، آن را برای پردازش ارسال می کند آپاچی، که به نوبه خود محتوا تولید می کند و پاسخ آماده را در سریع ترین زمان ممکن به Nginx برمی گرداند و پس از آن می تواند با وجدان راحت روند را از بین ببرد و منابع سیستمی را که اشغال کرده است آزاد کند. وب سرور Nginx، نتیجه درخواست را از آپاچی، آن را روی یک بافر یا حتی روی یک فایل روی دیسک می نویسد و می تواند آن را برای مدت زمان دلخواه خودسرانه در اختیار کلاینت های کند قرار دهد، در حالی که فرآیندهای کارگر آن منابع کمی را مصرف می کنند که .. "حتی صحبت کردن در مورد آن مضحک است" ©. :) چنین طرحی به طور قابل توجهی در منابع سیستم صرفه جویی می کند، تکرار می کنم، اما فرآیندهای کارگر Nginx مقدار کمی از منابع را مصرف می کنند، این برای پروژه های بزرگ بیشتر مرتبط است.

و این تنها بخش کوچکی از کاری است که سرور Nginx می تواند انجام دهد، امکان ذخیره داده ها و کار با آن را فراموش نکنید. memcached. در اینجا لیستی از ویژگی های اصلی وب سرور Nginx آمده است.

عملکرد سرور Nginx به عنوان یک سرور HTTP

  • مدیریت محتوای ایستا، فایل های فهرست، فهرست دایرکتوری، کش توصیفگر فایل باز.
  • پروکسی تسریع شده با حافظه پنهان، تعادل بار و خطا.
  • پشتیبانی تسریع شده FastCGIسرورهایی با کش، تعادل بار و تحمل خطا.
  • ساختار مدولار، پشتیبانی از فیلترهای مختلف (SSI، XSLT، GZIP، رزومه، پاسخ های تکه تکه شده)؛
  • پشتیبانی از پسوندهای SSL و TLS SNI؛
  • مبتنی بر ipیا بر اساس نامسرورهای مجازی؛
  • کار با KeepAlive و اتصالات خط لوله؛
  • امکان پیکربندی هر زمان‌بندی و همچنین تعداد و اندازه بافرها در سطح سرور آپاچی;
  • انجام اقدامات مختلف بسته به آدرس مشتری؛
  • تغییر 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 - LOGIN، AUTH LOGIN/PLAIN/CRAM-MD5؛
    • SMTP - AUTH LOGI / PLAIN / CRAM-MD5؛
  • پشتیبانی از SSL؛
  • پشتیبانی از STARTTLS و STLS؛

سیستم عامل ها و پلتفرم های پشتیبانی شده توسط وب سرور Nginx

  • FreeBSD، پلتفرم های 3 تا 8، i386 و amd64.
  • لینوکس، از 2.2 تا 2.6 - پلت فرم i386. لینوکس 2.6 - amd64;
  • سولاریس 9 - پلت فرم i386 و sun4u؛ سولاریس 10 - پلتفرم های i386، amd64 و sun4v؛
  • سیستم عامل MacOS X ppc, i386;
  • ویندوز XP، ویندوز سرور 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 با پردازنده دوگانه استفاده می شود، می تواند باعث وحشت هسته شود.
    • epollیک روش کارآمد است که در لینوکس 2.6+ استفاده می شود. برخی از توزیع ها، مانند SuSE 8.2، دارای وصله هایی برای پشتیبانی از epoll در هسته 2.4 هستند.
    • rtsig - سیگنال های زمان واقعی، یک روش کارآمد مورد استفاده در لینوکس 2.2.19+. به طور پیش فرض، نمی تواند بیش از 1024 سیگنال در صف برای کل سیستم وجود داشته باشد. این برای سرورهایی با بار زیاد کافی نیست، اندازه صف باید با استفاده از پارامتر هسته /proc/sys/kernel/rtsig-max افزایش یابد. با این حال، از Linux 2.6.6-mm2، این گزینه حذف شده است، در عوض هر فرآیند دارای یک صف سیگنال جداگانه است که اندازه آن توسط RLIMIT_SIGPENDING تعیین می شود.
    • وقتی صف پر شد، سرور nginxآن را بازنشانی می کند و اتصالات را با روش نظرسنجی مدیریت می کند تا زمانی که وضعیت به حالت عادی بازگردد.
    • /dev/poll- روش موثر، پشتیبانی شده در سیستم عامل های Solaris 7 11/99+، HP/UX 11.22+ (Eventport)، IRIX 6.5.15+ و Tru64 UNIX 5.1A+.
    • رویداد پورت - درگاه های رویداد، یک روش موثر مورد استفاده در 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+)؛
  • 10000 اتصال فعال HTTP بیکار تقریباً 2.5 میلیون حافظه مصرف می کنند.
  • حداقل تعداد عملیات کپی داده ها؛

iRedMail یک ساخت سرور ایمیل منبع باز است. مونتاژ بر اساس سرور SMTP Postfix (نماینده انتقال نامه، به اختصار MTA) است. این مجموعه همچنین شامل: Dovecot، SpamAssassin، Greylist، ClamAV، SOGo Roundcube، NetData و NGINX است.

کبوترخانه- سرور IMAP/POP3.

Spamassassin- ابزار فیلتر هرزنامه

فهرست خاکستری- ابزار ضد هرزنامه بر اساس لیست های خاکستری.

ClamAV- آنتی ویروس

مکعب گردو SOGo- مشتریان وب برای کار با ایمیل.

NetData- برنامه ای برای نظارت بر عملکرد سرور در زمان واقعی.

Nginx- وب سرور

پشتیبانی از سیستم عامل: CentOS 7, دبیان 9, اوبونتو 16.04/18.04, FreeBSD 11/12و OpenBSD 6.4.

iRedMail دارای نسخه های پولی و رایگان است که با عملکرد رابط وب خود iRedAdmin در اسمبلی نامه با یکدیگر تفاوت دارند. در نسخه رایگان، فقط می توانید دامنه، صندوق پستی کاربر و مدیر ایجاد کنید. اگر نیاز به ایجاد نام مستعار دارید، نمی توانید آن را در نسخه رایگان از طریق iRedAdmin انجام دهید. خوشبختانه، یک راه حل رایگان به نام PostfixAdmin وجود دارد که به شما این امکان را می دهد. PostfixAdmin به راحتی با iRedMail ادغام می شود و با آن عالی کار می کند.

نصب و راه اندازی

برای نصب به یکی از سیستم عامل های ذکر شده در بالا نیاز داریم. من از سرور اوبونتو 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

باز کردن آرشیو

و به پوشه ایجاد شده بروید.

# سی دی iRedMail-0.9.9

پوشه با نصب کننده iRedMail

بررسی محتویات یک پوشه

محتوای پوشه

و اسکریپت نصب iRedMail را اجرا کنید.

# bash iRedMail.sh

نصب سیستم پستی شروع می شود. در طول مراحل نصب، باید به تعدادی سوال پاسخ دهید. ما موافقت می کنیم که نصب را شروع کنیم.

شروع نصب

انتخاب دایرکتوری نصب

اکنون باید یک وب سرور را انتخاب کنید. انتخاب عالی نیست، بنابراین ما NGINX را انتخاب می کنیم.

انتخاب یک وب سرور

اکنون باید سرور پایگاه داده ای را انتخاب کنید که برای کار با سیستم پستی نصب و پیکربندی می شود. MariaDB را انتخاب کنید.

انتخاب سرور پایگاه داده

رمز عبور ریشه را برای پایگاه داده تنظیم کنید.

ایجاد رمز عبور ریشه پایگاه داده

حالا دامنه ایمیل خود را مشخص می کنیم.

ایجاد دامنه ایمیل

سپس یک رمز عبور برای کادر مدیریت ایجاد کنید [ایمیل محافظت شده] domain.ru.

یک رمز عبور مدیر ایمیل ایجاد کنید

انتخاب اجزای وب

تنظیمات مشخص شده را تایید می کنیم.

تایید تنظیمات

نصب شروع شد.

نصب و راه اندازی

پس از اتمام نصب، ایجاد قانون را تأیید کنید iptablesبرای SSHو فایروال را مجددا راه اندازی کنید. iRedMail با آن کار می کند iptables. در اوبونتو، پرکاربردترین ابزار مدیریت فایروال است UVW. اگر به هر دلیلی چنین نیازی دارید، نصب کنید UVW (apt نصب ufw) و قوانین را به آن اضافه کنید UVW(مثال: ufw اجازه می دهد "nginx full"یا ufw اجازه می دهد Postfix) سرور ایمیل را مسدود نکرد. با اجرای دستور می توانید لیست قوانین موجود را مشاهده کنید: لیست برنامه های ufw. سپس روشن کنید UVW: ufw را فعال کنید.

یک قانون iptables ایجاد کنید

فایروال راه اندازی مجدد

این کار نصب 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 پشتیبانی نمی شود. لطفاً هنگام راه اندازی مجدد Dovecot آن را از ssl_protocols حذف کنید" دریافت خواهید کرد.

# 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.
MariaDB > امتیازات FLUSH;

ایجاد یک کاربر MySQL

همه چیز درست است، شما وارد شده اید. PHPMyAdmin آماده کار است.

نصب PostfixAdmin

در اصل، PostfixAdmin، مانند PHPMyAdmin، قابل نصب نیست. سرور ایمیل بدون این اجزا به خوبی کار خواهد کرد. اما پس از آن شما نمی توانید نام مستعار ایمیل ایجاد کنید. اگر به این نیاز ندارید، از این بخش ها صرف نظر کنید. اگر همچنان به نام مستعار نیاز دارید، دو گزینه دارید: خرید نسخه پولی iReaAdmin یا نصب PostfixAdmin. البته، می توانید این کار را بدون نرم افزار اضافی با نوشتن دستی نام مستعار در پایگاه داده انجام دهید، اما این همیشه راحت نیست و برای همه مناسب نیست. من استفاده از PostfixAdmin را توصیه می کنم، اکنون نصب و ادغام آن با iRedMail را در نظر خواهیم گرفت. ما نصب را شروع می کنیم:

# apt 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 بروید. در پنجره وارد کنید:

دامنه INDEX را در صندوق پست رها کنید.
دامنه DROP INDEX روی نام مستعار.
ALTER TABLE مستعار اضافه کردن ستون «goto» متن NOT NULL.

پرس و جو پایگاه داده

و "Forward" را فشار دهید. اکنون همه چیز آماده است، می توانید به رابط وب PostfixAdmin بروید و نصب را کامل کنید. برای انجام این کار، در مرورگر باید تایپ کنید: https://domain/postfixadmin/setup.php.

موارد زیر باید ظاهر شود:

نصب PostfixAdmin

اگر همه چیز طبق دستورالعمل انجام شود، پس نباید هیچ خطایی وجود داشته باشد. اگر هنوز هستند، پس به آنها خیانت می شود تا حذف شوند، در غیر این صورت سیستم به شما اجازه ادامه راه را نمی دهد. رمز نصب را تنظیم کنید و روی "کلیک کنید" ایجاد هش رمز عبور". سیستم یک هش رمز عبور ایجاد می کند که باید در پارامتر درج شود $CONF["setup_password"].

تکمیل نصب PostfixAdmin

تغییر تنظیمات فایل پیکربندی

اکنون رمز عبوری را که ایجاد کرده ایم وارد کرده و administrator 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

بررسی کنید که کاربران ایجاد شده اند.

اگر به ستون "To" در لیست صندوق های پستی PostfixAdmin دقت کنید، می توانید تفاوت صندوق های پستی ایجاد شده در iRedAdmin و PostfixAdmin را مشاهده کنید. صندوق‌های پستی ایجاد شده در iRedAdmin با علامت " فقط به جلو"، و آنهایی که در PostfixAdmin ایجاد شده اند به عنوان - " صندوق پستی". ابتدا برای مدت طولانی نمی توانستم بفهمم چرا این اتفاق می افتد و تفاوت آنها چیست و در نهایت متوجه یک چیز شدم. صندوق های پستی در iRedAdmin بدون نام مستعار ایجاد می شوند و صندوق های پستی در PostfixAdmin با نام مستعار به خودش.

و اگر این نام‌های مستعار حذف شوند، صندوق‌های پستی به‌عنوان آنهایی که در iRedAdmin ایجاد شده‌اند نمایش داده می‌شوند. فقط به جلو".

حذف نام مستعار

نام مستعار حذف شده است. PostfixAdmin را بررسی کنید.

همانطور که می بینید، تمام جعبه ها به "فقط به جلو" تبدیل شده اند. به همین ترتیب، اگر در صندوق پستی ایجاد شده در iRedAdmin برای خود یک نام مستعار ایجاد کنید، به "Mailbox" تبدیل می شود. در اصل، این بر عملکرد نامه تأثیر نمی گذارد. تنها چیزی که وجود دارد این است که نمی توانید یک نام مستعار در صندوق پستی ایجاد شده در PostfixAdmin ایجاد کنید. به جای ایجاد نام مستعار، باید نام مستعار موجود را ویرایش کنید. صحبت از نام مستعار شد، در نسخه جدید iRedMail، باید تغییری در یکی از کارت های Postfix که مسئول نام های مستعار است، ایجاد کنید. و اگر این کار را انجام ندهید، نام مستعار ایجاد شده کار نخواهند کرد. برای این در پرونده لازم است /etc/postfix/mysql/virtual_alias_maps.cfبرای اصلاح:

ما انجام می دهیم:

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

و آن را درست می کنیم.

راه اندازی نام مستعار

Restart Postfix:

# سرویس پسوند راه اندازی مجدد

پس از آن همه چیز باید کار کند.

و بنابراین، بیایید شروع به بررسی ایمیل کنیم. در یک جعبه کاربر 1ما از طریق Roundcube عبور کرده و وارد جعبه خواهیم شد user2- از طریق SOGo و ارسال نامه از صندوق پستی کاربر 1بر روی user2و برگشت.

ارسال ایمیل با Roundcube

دریافت ایمیل در SOGo

ارسال یک ایمیل به SOGo

دریافت ایمیل در Roundcube

همه چیز بدون هیچ مشکلی کار می کند. تحویل نامه بین دو تا پنج ثانیه طول می کشد. به همین ترتیب، نامه ها کاملاً به سرورهای Yandex و mail.ru تحویل داده می شوند (بررسی شده).

حالا بیایید نام مستعار را بررسی کنیم. بیایید یک جعبه ایجاد کنیم user3و یک نام مستعار از صندوق پست ایجاد کنید کاربر 1روی جعبه user2. و نامه ای از جعبه بفرستید user3روی جعبه کاربر 1. در این صورت، نامه باید به صندوق بیاید user2.

یک نام مستعار ایجاد کنید

ارسال یک ایمیل از صندوق پستی user3 به صندوق پستی user1

دریافت نامه در صندوق پستی user2

با کار نام مستعار هم همه چیز مرتب است.

بیایید کار سرور ایمیل را از طریق سرویس گیرنده ایمیل محلی آزمایش کنیم. به عنوان مثال، موزیلا تاندربرد را در نظر بگیرید. بیایید دو کاربر دیگر ایجاد کنیم: مشتری 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 گیگابایت حافظه، آنتی ویروس به خطای پایگاه داده اشاره می کند. در همان زمان، در سیستم عامل های دبیان و اوبونتو، آنتی ویروس به سادگی نامه های عبوری از سرور را اسکن نمی کرد، در غیر این صورت همه چیز به خوبی کار می کرد. در CentOS، وضعیت تا حدودی متفاوت بود. سرویس clamd به طور کامل سیستم را قطع کرد و در نتیجه کارکرد عادی سرور را غیرممکن کرد. هنگام تلاش برای ورود به رابط های وب، NGINX به طور دوره ای خطاهای 502 و 504 را می دهد. نامه نیز در طول زمان ارسال شد. در عین حال، اگر تا 2 گیگابایت رم اضافه کنید، در همه موارد هیچ مشکلی در عملکرد آنتی ویروس و سرور به طور کلی وجود ندارد. ClamAV نامه‌هایی را که از سرور ایمیل عبور می‌کردند اسکن کرد و در مورد آن در گزارش‌ها نوشت. هنگام تلاش برای ارسال ویروس در پیوست، ارسال مسدود شد. مصرف حافظه تقریباً 1.2 - 1.7 گیگابایت بود.

NGINX را می توان نه تنها به عنوان یک وب سرور یا http-proxy، بلکه برای پروکسی نامه از طریق پروتکل های SMTP، IMAP، POP3 نیز استفاده کرد. این راه اندازی خواهد شد:

  • یک نقطه ورودی واحد برای یک سیستم پست مقیاس پذیر.
  • تعادل بار بین تمام سرورهای ایمیل.

این مقاله بر روی سیستم عامل لینوکس نصب می شود. به عنوان یک سرویس پستی که درخواست ها به آن ارسال می شود، می توانید از postfix، exim، dovecot، exchange، iredmail assembly و غیره استفاده کنید.

اصل عملیات

NGINX درخواست ها را می پذیرد و به وب سرور احراز هویت می کند. بسته به نتیجه تأیید ورود و رمز عبور، پروکسی یک پاسخ با چندین سربرگ را برمی‌گرداند.

در صورت موفقیت:

بنابراین، ما سرور و پورت سرور ایمیل را بر اساس احراز هویت تعیین می کنیم. این فرصت های زیادی را با دانش مناسب زبان های برنامه نویسی می دهد.

در صورت شکست:

بسته به نتیجه احراز هویت و هدر، کلاینت به سرور ایمیلی که ما نیاز داریم هدایت می شود.

آماده سازی سرور

بیایید تغییراتی در تنظیمات امنیتی سرور ایجاد کنیم.

SELinux

در صورت استفاده از CentOS یا در صورت استفاده از این سیستم امنیتی در اوبونتو، SELinux را غیرفعال کنید:

vi /etc/selinux/config

SELINUX=غیرفعال است

دیواره آتش

اگر از فایروال استفاده کنیم(پیش فرض در CentOS):

فایروال-cmd -- دائمی --add-port=25/tcp --add-port=110/tcp --add-port=143/tcp

فایروال-cmd -- بارگذاری مجدد

اگر از iptables استفاده کنیم(پیش فرض در اوبونتو):

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -p tcp --dport 110 -j ACCEPT

iptables -A INPUT -p tcp --dport 143 -j ACCEPT

apt-get install iptables-persistent

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

* در این مثال، ما به SMTP (25)، POP3 (110)، IMAP (143) اجازه دادیم.

در حال نصب NGINX

بسته به سیستم عامل، نصب NGINX کمی متفاوت است.

یا لینوکس سنتو:

یام nginx را نصب کنید

یا لینوکس اوبونتو:

apt نصب nginx

ما اجازه شروع خودکار سرویس را می دهیم و آن را شروع می کنیم:

systemctl nginx را فعال کنید

systemctl 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 - server اضافه کنید:

سرور(
listen 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 را نصب کنید

اگر یک اوبونتو:

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 کبوترخانه را راه اندازی مجدد کنید

راه اندازی مشتری

می توانید به بررسی تنظیمات پروکسی ما ادامه دهید. برای انجام این کار، در تنظیمات مشتری، آدرس یا نام سرور 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 on;

SSL روشن؛
ssl_certificate /etc/ssl/nginx/public.crt;
ssl_certificate_key /etc/ssl/nginx/private.key;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache به اشتراک گذاشته شده:SSL:10m;
ssl_session_timeout 10m;

سرور(
گوش کن 110;
پروتکل pop3;
pop3_auth ساده apop cram-md5;
}

سرور(
گوش کن 143;
پروتکلیمپ
}

دلیل: سیستم امنیتی SELinux فعال شده است.

راه حل: SELinux را غیرفعال یا پیکربندی کنید.