ذكري المظهر

تأمين nginx مع دعونا تشفير على أوبونتو 18.04

الدورة العربية لادارة السيرفرات لينوكس VPS Linux Nginx PHP Mysql

الدورة العربية لادارة السيرفرات لينوكس VPS Linux Nginx PHP Mysql

جدول المحتويات:

Anonim

Let's Encrypt هي مرجع شهادات مجاني ومفتوح تم تطويره بواسطة مجموعة أبحاث أمان الإنترنت (ISRG). الشهادات التي تصدرها Let's Encrypt موثوقة من قِبل جميع المتصفحات تقريبًا اليوم.

في هذا البرنامج التعليمي ، سنقدم إرشادات خطوة بخطوة حول كيفية تأمين Nginx باستخدام Let's Encrypt باستخدام أداة certbot على Ubuntu 18.04.

المتطلبات الأساسية

تأكد من أنك استوفيت الشروط التالية قبل المتابعة مع هذا البرنامج التعليمي:

  • لديك اسم مجال يشير إلى خادم IP العام الخاص بك. في هذا البرنامج التعليمي ، سنستخدم example.com . لديك Nginx مثبتًا باتباع هذه التعليمات ، ولديك كتلة خادم لنطاقك. يمكنك اتباع هذه التعليمات للحصول على تفاصيل حول كيفية إنشاء واحد.

تثبيت Certbot

Certbot هي أداة مميزة وسهلة الاستخدام يمكنها أتمتة المهام للحصول على وتجديد شهادات دعونا تشفير SSL وتكوين خوادم الويب لاستخدام الشهادات. يتم تضمين حزمة certbot في مستودعات Ubuntu الافتراضية.

قم بتحديث قائمة الحزم وتثبيت حزمة certbot:

sudo apt update sudo apt install certbot

إنشاء مجموعة قوية Dh (ديفي هيلمان)

يعد Diffie – Hellman key exchange (DH) طريقة لتبادل آمن لمفاتيح التشفير عبر قناة اتصال غير آمنة. سنقوم بإنشاء مجموعة جديدة من معلمات DH 2048 بت لتعزيز الأمن:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 إذا أردت ، يمكنك تغيير الحجم إلى 4096 بت ، لكن في هذه الحالة ، قد يستغرق الجيل أكثر من 30 دقيقة اعتمادًا على إنتروبيا النظام.

الحصول على شهادة دعونا تشفير SSL

للحصول على شهادة طبقة المقابس الآمنة لنطاقنا ، سنستخدم مكوّن Webroot الإضافي الذي يعمل عن طريق إنشاء ملف مؤقت للتحقق من صحة النطاق المطلوب في دليل ${webroot-path}/.well-known/acme-challenge . يقوم خادم Let's Encrypt بإرسال طلبات HTTP إلى الملف المؤقت للتحقق من أن المجال المطلوب يحل إلى الخادم حيث يتم تشغيل certbot.

ولجعل الأمر أكثر بساطة ، سنقوم بتعيين جميع طلبات HTTP الخاصة بـ .well-known/acme-challenge إلى دليل واحد ، /var/lib/letsencrypt .

ستنشئ الأوامر التالية الدليل وتجعله قابلاً للكتابة لخادم Nginx.

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

لتجنب تكرار الشفرة ، قم بإنشاء المقترضين التاليين اللذين سنقوم بإدراجهما في جميع ملفات كتلة خادم Nginx.

افتح محرر النص الخاص بك وقم بإنشاء المقتطف الأول ، letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

قم ssl.conf المقتطف الثاني ssl.conf الذي يتضمن ssl.conf التي أوصت بها Mozilla ، وتمكين OCSP Stapling و HTTP Strict Transport Security (HSTS) وفرض عدد قليل من رؤوس HTTP التي تركز على الأمان.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

بمجرد إنشاء المقتطفات ، افتح كتلة خادم المجال وقم بتضمين مقتطف letsencrypt.conf كما هو موضح أدناه:

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

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

لتمكين ملف كتلة الخادم الجديد ، نحتاج إلى إنشاء رابط رمزي من الملف إلى الدليل الذي sites-enabled ، والذي تتم قراءته بواسطة Nginx أثناء بدء التشغيل:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

أعد تشغيل خدمة Nginx لتصبح التغييرات نافذة المفعول:

sudo systemctl restart nginx

يمكنك الآن تشغيل Certbot باستخدام المكون الإضافي webroot والحصول على ملفات شهادة SSL عن طريق إصدار:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

إذا تم الحصول على شهادة SSL بنجاح ، فسوف يقوم certbot بطباعة الرسالة التالية:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

الآن بعد أن حصلت على ملفات الشهادة ، يمكنك تعديل كتلة خادم المجال كما يلي:

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

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

باستخدام التكوين أعلاه ، فإننا نلزم HTTPS وإعادة التوجيه من www إلى إصدار www.

أعد تحميل خدمة Nginx لتصبح التغييرات نافذة المفعول:

sudo systemctl reload nginx

التجديد التلقائي دعونا تشفير شهادة SSL

شهادات تشفير دعونا صالحة لمدة 90 يوما. لتجديد الشهادات تلقائيًا قبل انتهاء صلاحيتها ، تنشئ حزمة certbot cronjob الذي يعمل مرتين يوميًا وسيجدد تلقائيًا أي شهادة قبل 30 يومًا من انتهاء صلاحيتها.

نظرًا لأننا نستخدم البرنامج المساعد certbot webroot بمجرد تجديد الشهادة ، يتعين علينا أيضًا إعادة تحميل خدمة nginx. إلحاق - --renew-hook "systemctl reload nginx" بملف /etc/cron.d/certbot بحيث يبدو كما يلي:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

لاختبار عملية التجديد ، يمكنك استخدام مفتاح --dry-run :

sudo certbot renew --dry-run

إذا لم تكن هناك أخطاء ، فهذا يعني أن عملية التجديد كانت ناجحة.

استنتاج

في هذا البرنامج التعليمي ، استخدمت عميل Let's Encrypt ، certbot لتنزيل شهادات SSL لنطاقك. لقد أنشأت أيضًا مقتطفات Nginx لتجنب تكرار التعليمات البرمجية وتكوين Nginx لاستخدام الشهادات. في نهاية البرنامج التعليمي ، قمت بإعداد cronjob لتجديد الشهادة تلقائيًا.

دعونا نحقق nginx ubuntu certbot ssl

هذا المنشور جزء من سلسلة كيفية التثبيت lemp-stack-on-ubuntu-18-04.

وظائف أخرى في هذه السلسلة:

• كيفية تثبيت Nginx على Ubuntu 18.04 • كيفية إعداد Nginx Server Blocks على Ubuntu 18.04 • تأمين Nginx مع Let's Encrypt على Ubuntu 18.04 • كيفية تثبيت MySQL على Ubuntu 18.04 • كيفية تثبيت PHP على Ubuntu 18.04