كيف تؤمّن خادم ويب NGINX على أوبنتو 16.04


أسامه دمراني

ما هي Let’s Encrypt

هي هيئة شهادات مجانية تابعة لمجموعة أبحاث أمن الإنترنت-Internet Security Research Group (ISRG)، وتقدم هذه الهيئة طريقة سهلة ومؤتمتة للحصول على شهادات SSL/TLS مجانية لجعل الزيارات على خادم الويب مشفرة وعبر بروتوكول HTTPS. ومعظم خطوات الحصول على الشهادة وتثبيتها يمكن جعلها تتم تلقائيًا باستخدام أداة Certbot.
وهذه الأداة يمكن استخدامها حين يتسنى الاتصال بالخادم عبر SSH، أي حين يوجد دخول من الصدفة “Shell” على الخادم.
وسنرى في هذا المقال كيف نستخدم Certbot للحصول على شهادة SSL مجانية ومن ثم استخدامها مع NGINX على خادم أوبنتو 16.04

تثبيت Certbot

سنضيف مستودع Certbot أولًا، لماذا؟ لأن مطوريه يقومون على صيانة وتحديث هذا المستودع بآخر إصدار من Certbot أولًا بأول، بشكل أسرع مما تفعله أوبنتو بالبرنامج في مستودعاتها، فأوبنتو تحتاج وقتًا لمراجعة كل برنامج يدخل مستودعاتها، خاصة إن كان في إصدار LTS مثل 16.04، وبالتالي فمن الطبيعي أن يتأخر كل برنامج قليلًا حتى يدخل تلك المستودعات.
والآن، لإضافة مستودع Certbot:

# add-apt-repository ppa:certbot/certbot

ثم نحدّث قائمة APT

# apt-get update

ونثبّت البرنامج

# apt-get install certbot

الحصول على الشهادة

هناك العديد من إضافات Certbot التي يمكن الحصول على شهادة SSL من خلالها، ويقوم مدير الخادم بتثبيتها وتهيئة الخادم بعد ذلك بنفسه. وسنستخدم إضافة Webroot في هذا المقال، وهي إضافة تصلح للحالات التي يمكن فيها تعديل المحتوى، ولسنا في حاجة لإيقاف الخادم أثناء عملية تصدير الشهادة.

تهيئة NGINX

تنشئ Webroot ملفًا مؤقتًا لكل نطاق في مجلد مخفي اسمه well-known، موجود في المجلد الجذر لـweb، وفي حالتنا فإن مجلد web موجود في var/www/html/.
تأكد أن Let’s Encrypt لديها صلاحية الوصول لهذا المجلد، من خلال تعديل تهيئة NGINX. ولفعل ذلك، نفذ هذا الأمر لفتح الملف الذي سنعدّل فيه (استبدل $EDITOR بمحرر نصي من تفضيلك):

# $EDITOR /etc/nginx/sites-available/default

ضع هذه الأسطر في قسم server داخل الملف:

 location ~ /.well-known {
    allow all;
 }

احفظ الملف واخرج، ثم تفقد تهيئة NGINX عبر الأمر التالي:

# nginx -t

ويجب أن ترى هذين السطرين -بفرض نجاح الأمر-:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

والآن أعد تشغيل NGINX:

# systemctl restart nginx

الحصول على الشهادة باستخدام Certbot
الخطوة التالية هي الحصول على شهادة جديدة باستخدام Certbot مع إضافة Webroot. وسنؤمّن في هذا الشرح (كمثال) نطاق www.example.com عبر الأمر التالي: (لا تنسى أنك يجب أن تحدد كل نطاق تريد تأمينه بهذه الشهادة).

# certbot certonly --webroot --webroot-path=/var/www/html -d www.example.com

سيسألك Certbot خلال العملية عن بريد إلكتروني صالح من أجل الإشعارات، وسيطلب منك مشاركته مع EFF، غير أن ذلك غير ضروري، وسيكون لديك الشهادةبعد الموافقة على شروط الخدمة.
وبعد انتهاء العملية، سيحتوى مجلد etc/letsencrypt/archive/ على الملفات التالية:

  • chain.pem: شهادة السلسلة-Chain Certificate الخاصة بـLet’s Encrypt.
  • cert.pem: شهادة النطاق.
  • fullchain.pem: دمج للشهادتين السابقتين.
  • privkey.pem: المفتاح الخاص للشهادة.

كما سينشئ Certbot روابط رمزية لآخر ملفات الشهادة في etc/letsencrypt/live/domain_name/، وهو المسار الذي سنستخدمه في تهيئة الخادم.

تهيئة SSL/TLS على NGINX

الخطوة التالية هي تهيئة الخادم، أنشئ قصاصة-snippet جديدة في etc/nginx/snippets، تلك القصاصة هي جزء من ملف تهيئة يمكن إدراجه في ملفات تهيئة المضيف الوهمي-virtual host.
أنشئ ملف جديد (استخدم محررك النصي بدلًا من $EDITOR)

# $EDITOR /etc/nginx/snippets/secure-example.conf

محتويات هذا الملف ستكون الموجّهات التي تحدد مواقع الشهادة والمفتاح، الصق المحتوى التالي في الملف:

ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;

في مثالنا الذي نشرحه، سيكون domain_name هو example.com.

تعديل تهيئة NGINX

افتح الملف الافتراضي للمضيف الوهمي:

# $EDITOR /etc/nginx/sites-available/default

عدل محتواه كما يلي:

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name www.example.com
 return 301 https://$server_name$request_uri;

 # SSL configuration
 #
 listen 443 ssl default_server;
 listen [::]:443 ssl default_server;
 include snippets/secure-example.conf
 #
 # Note: You should disable gzip for SSL traffic.
 # See: https://bugs.debian.org/773332
…

كان هذا الكود من أجل تفعيل التشفير في NGINX، احفظ الملف واخرج ثم تأكد من ملف تهيئة NGINX:

# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
أعد تشغيل NGINX:
# systemctl restart nginx

خاتمة


إن اتبعت الخطوات السابقة فيجب أن يكون لديك الآن خادم آمن مبني على NGINX، مع تشفير من Certbot وLet’s Encrypt. وهذه إعدادات أساسية قطعًا، فيمكنك استخدام معاملات-parameters كثيرة في NGINX لتعديل تهيئته وتخصيصه، حسب حاجة خادم الويب.

ترجمة -بتصرف- لمقال Encryption: How To Secure an NGINX web server on Ubuntu 16.04 لصاحبه Giuseppe Molica





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن