Nginx Load Balancing with SSL Termination

Round Robin Nginx Load Balancing

 

آموزش نصب و تنظیم تقسیم بار رمز نگاری شده در Nginx

Nginx Load Balancing with SSL Termination

 

معرفی

در این آموزش راه اندازی تقسیم بار ( Load Balancing ) همراه با تنظیمات SSL آورده شده که فقط از یک گواهی نامه SSL در تقسیم کننده بار استفاده شده است. در بیشتر موارد، مدیریت به روز رسانی ها و کلید ها و گواهی نامه های SSL در تقسیم کننده های بار (  Load Balancer ) باعث سربار و بروز مشکلات می شوند که شما با این سربار را با مدیریت آن کاهش دهید.

 

درباره SSL Termination

Nginx را می توان به عنوان یک تقسیم کننده بار ترافیک ورودی با چندین سرور پشتیبان ( backend ) تنظیم کرد. SSL Termination یک فرآیندی است که هنگام رمز نگاری و رمز گشایی SSL در تقسیم کننده بار اتفاق می افتد و ترافیک بین تقسیم کننده بار و سرور های پشتیبان به صورت HTTP و رمز نشده تبادل می شود. سرور های پشتیبان باید با محدود کردن دسترسی به آدرس آی پی تقسیم کننده بار ، امن شود ، که در این مقاله به توضیح این مطلب می پردازیم.

nginx_ssl

 

پیش نیاز ها

برای اجرای دستوراتی که در این آموزش مطرح شده ، باید دسترسی ریشه root داشته باشید یا کاربر با مجوز sudo رو داشته باشید.

در ادامه این آموزش شما می توانید از این منابع نیز استفاده کنید :

  • راه اندازی LAMP سرور در Ubnutu 14.04
  • راه اندازی SSL بر روی Nginx
  • راه اندازی تقسیم بار ( Load Balancing ) بر روی Nginx

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

 

 

راه اندازی

در این آموزش از سه سرور مجازی با مشخصات زیر استفاده شده :

سرور اول :

سیستم عامل : Ubnutu 14.04

نام میزبانی : loadbalancer

آدرس اختصاصی : ۱۰٫۱۳۰٫۲۲۷٫۳۳

 

سرور دوم :

سیستم عامل : Ubnutu 14.04

نام میزبانی : web1

آدرس اختصاصی : ۱۰٫۱۳۰٫۲۲۷٫۱۱

 

سرور سوم :

سیستم عامل : Ubnutu 14.04

نام میزبانی : web2

آدرس اختصاصی : ۱۰٫۱۳۰٫۲۲۷٫۲۲

 

 

تمامی این سرور ها باید در شبکه اختصاصی به یکدیگر متصل باشند و سیستم عامل و نرم افزارها به روز رسانی شوند :

 

بعد از به روز رسانی سرور ها را مجددا راه اندازی کنید ، این کار مهم هست و به این خاطر هست که برخی برنامه ها مانند OpenSSL باید برای امنیت بیشتر در آخرین ورژن خود باشند.

در ادامه باید تنظیمات Nginx را با ماژول تقسیم بار Upstream و با نام دامنه ( example.com ) بر روی سرور انجام دهیم. قبل از انجام تنظیمات تقسیم بار باید Nginx بر روی سرور شما نصب باشد ، که در غیر این صورت با دستو زیر به راحتی نصب می شود :

 

بر روی یکی از دو سرور پشتیبان ( backend )  ، وب سرور Apache را بعد از به روز رسانی سرور نصب کنید :

 

بر روی هر دو سرور پشتیبان PHP را نصب کنید :

 

تولید کلید ها و گواهی SSL

دستورات لازم برای ساخت گواهی SSL را به صورت مرحله به مرحله اجرا کنید. جزئیات و مراحل گفته شده برای ساخت گواهی SSL در Nginx می باشد.

ایجاد یک دایرکتوری برای قرار داده گواهی SSL :

 

ایجاد کلید خصوصی :

 

حذف گذر واژه :

 

ساخت CSR (Certificate Signing Request) :

 

از این CSR برای بدست آوردن یک گواهی معتبر از یک CA می توانید استفاده کنید یا اینکه یک گواهی self-signed با دستورات زیر ایجاد کنید.

 

در نهایت شما باید در دایرکتوری که ایجاد کردید فایل های زیر را داشته باشید :

  • Private Key – کلید خصوصی
  • cert.pem – مجموعه ای از گواهی های سطح ریشه و متوسط شما که فقط برای دریافت گواهی معتبر ارائه می شود
  • crt – گواهی برای دامنه شما

 

فایل Virtual Host و ماژول Upstream

یک فایل برابر میزانی هاست در مسیر دایرکتور Nginx ایجاد کنید :

nano /etc/nginx/sites-available/example.com

 

اطلاعات ماژول Upstream شامل آدرسهای IP خصوصی سرور های backend را وارد کنید :

 

بعد از این قسمت، بلاک تنظیمات سرور را وارد کنید. تنظیمات این قسمت شامل نام دامنه ، منابع ماژول Upstream و سرآیندهایی ( headers ) که باید به سرور های backend ارسال شوند را شامل می شود.

server {

 

قسمت proxy_set_header برای ارسال اطلاعات مهم درخواست ها به سرور های backend استفاده می شود. این فایل را ذخیره کنید و یک لینک Symbolic به این دایرکتوری ایجاد کنید.

 

یک تست برای بررسی خطا در تنظیمات انجام می دهیم :

 

اگر خطایی مشاهده نشد ، سرور Nginx را مجددا راه اندازی می کنیم :

تا الان تنظیمات تقسیم بار برای ترافیک HTTP انجام شد.

 

فعال کردن SSL

دستورات زیر را به فایل Virtual Host ( در مسیر /etc/nginx/sites-available/example.com ) در قسمت تنظیمات سرور اضافه کنید.

 

دقت کنید که اگر از گواهی نامه self-signed استفاده می کنید قسمت ssl_trusted_certificate را در تنظیمات نادیده بگیرید. اکنون قسمت تنظیمات سرور باید شبیه به این باشد :

 

مجددا تنظیمات را برای وجود خطا بررسی کنید و سرویس Nginx را راه اندازی مجدد کنید :

 

امن کردن سرور های backend

اکنون ، وب سایت هایی که در سرور های backend قرار دارند ، در دسترس تمام کسانی که یک آدرس IP شناخته داشته باشند ، قرار دارد. در حالیکه سرور های backend فقط باید با تقسیم کننده بار Load Balancer ارتباط داشته باشند. تنظیمات باید به شکلی تغییر کند که وب سرور های backend فقط به درخواست های شبکه اختصاصی توجه کنند.

این مراحل را برای وب سرور Apache می باشد :

 

فایل ports.conf را ویرایش کنید :

 

خط زیر را پیدا کنید :

 

با آدرس IP خصوصی سرورهای backend جایگزین کنید :

 

این تغییرات را در تمام سرور های backend انجام دهید و وب سرو را مجددا راه اندازی کنید :

 

در مرحله بعد دسترسی HTTP را به IP خصوصی تقسیم کننده بار محدود می کنیم. رول فایروال زیر این کار را انجام می دهد.

در این مثال ، آدرس IP سرور تقسیم کننده بار را جایگزین کنید و این رول را در سرور های backend اجرا کنید.

 

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

یک فایل PHP در سرور های backend ( برای مثال سرور های web1 و web2 ) ایجاد کنید. این فایل برای تست می باشد و بعد از اتمام کار می توانید آن را حذف کنید.

 

این فایل باید مشخصات نام دامنه ، آدرس IP سرور ، آدرس IP کاربر ، و پورت مورد استفاده سرور را نمایش دهد.

 

این فایل را از طریق مرورگر یا curl چندین بار بررسی کنید. برای تنظیمات گواهی self-signed از استفاده curl –k کنید تا خطای SSL را نادیده بگیرد.

 

خروجی باید شبیه زیر باشد :

نکته ای باید به آن توجه کنید این است که در هر درخواست آدرس سرور تغییر می کند ، این یعنی اینکه سرور دیگری به درخواستی شما پاسخ می دهد.

 

امن کردن تنظیمات SSL

در این قسمت به توضیح بهترین حالت تنظیمات SSL برای از بین بردن آسیب پذیری ها در رمز نگاری ها و پروتکل های قدیمی می پردازیم.

فعال کردن کش نشست ها در SSL کارایی وب سایت های HTTPS را بهتر می کند. دستورات زیر باید بعد از ssl_trusted_certificate قرار گیرد. این دستورات کش اشتراکی را به اندازی ۲۰MB با مدت زمان ۱۰ دقیقه فعال می کند.

 

در این قسمت رمز نگاری های نا امنی مانند MD5 و DSS را غیر فعال و SSLv2 را حذف می کنیم و پروتکل و رمزنگاری مناسبتری را مشخص می کنیم.

 

مکانیزم HTTP Strict Transport Security (HSTS) باعث می شود تا فقط HTTPS استفاده شود که از حملات Man in the Middle جلوگیریی می کند که به صورت زیر می توانید این پروتکل رو فعال کنید :

 

تنظیمات رو تست کنید و وب سرور رو مجددا راه اندازی کنید :

 

بعد از انجام همه تنظیمات و امن کردن SSL Termination ، شکل کلی فایل تنظمیات باید به صورت زیر باشد :

 

بررسی SSL Server Test رو انجام بدید و باید بتونید رتبه A+ رو دریافت کنید. در انتها مجددا با دستور curl وب سایت رو تست کنید تا مطمئن بشید که هم چیز درست کار می کنه.

 

Leave a Reply