تاريخ إنشاء سحابة منزلية. الجزء 2. إنشاء خادم - إعداد LAMP في دبيان

في طريقنا لإنشاء الخدمة السحابية الخاصة بنا ، اعتدنا للتو على نظام دبيان . الآن حان الوقت للخطوة التالية - إنشاء وتكوين خادم ويب ، على أساسه يمكن تشغيل Nextcloud.


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


الجزء 1. إعداد بيئة دبيان الخاصة بك للاستخدام اليومي
الجزء 2. إنشاء خادم - إعداد LAMP في دبيان
الجزء 3. إنشاء سحابة شخصية - تثبيت وتكوين Nextcloud
الجزء 4. تحديث 2018 - Debian 9 و Nextcloud 13
الجزء 5. تحديث 2019 - PHP 7.2 و MariaDB 10.4 و Nextcloud 17



التنقل السريع في الفصل


مقدمة
تثبيت البرنامج
تكوين خادم الويب Apache2 والوصول إليه عبر بروتوكولات HTTP و HTTPS
توليف SQL
إعداد PHP
إعدادات الوصول إلى SSH
حماية الوصول
مرجع خادم الويب
مرجع MySQL
المواد المرجعية Fail2ban



مقدمة


أظهر الجزء الأول من هذه القصة أحد الخيارات الممكنة لإعداد Debian GUI للاستخدام المألوف والمألوف (وجهة نظر ذاتية للمؤلف بشكل حصري) من قبل شخص جاء إلى Linux من Windows. وإذا كنت قد استخدمت النظام المضيف فقط لتهيئة الجهاز الظاهري مع دبيان ، فعندئذ عملت فقط على وجه التحديد في هذا الجهاز الافتراضي ، وأبحث عن معلومات على الإنترنت ، وأقوم بتدوين الملاحظات في Notepadqq أو gedit ، والاستماع إلى الموسيقى من خلال Audacious ، وفتح الملفات من خلال LibreOffice وما شابه ذلك. وبهذه الطريقة ، يمكنك التعود على نظام التشغيل وبيئته والشعور به بشكل أعمق وتقديره ، وهو ممتلئ جدًا وفعال في حزمة دبيان القياسية.

في الوقت الحالي ، تمت تهيئة نظامنا بطريقة تجعلك في المستقبل لا تستخدم سوى سطر الأوامر مع محرر نصوص وحدة التحكم ، على سبيل المثال ، nano أو استخدام مدير الملفات Double Commander مع محرر Notepadqq المدمج. من الممكن دمج هاتين الطريقتين ، على سبيل المثال ، من خلال التنقل في النظام وتحرير ملفات التكوين من خلال مدير الملفات ، وجميع الأوامر الأخرى من خلال وحدة التحكم. جميع الطرق متكافئة لتحقيق النتيجة النهائية.

الهدف الحالي هو إنشاء خادم ، سيتم تخصيص هذا الجزء له. يمكن تكوين الخادم مع تثبيت واستخدام الواجهة الرسومية ، وبدونها. في الحالة الثانية ، من الجزء السابق ، يمكنك ببساطة تخطي الأقسام المتعلقة بتثبيت وتكوين البرامج للواجهة الرسومية وإعداداتها ، وتثبيت حزم برامج الرسومات وأدوات vmware.

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

من الناحية المثالية ، بمجرد تكوينه ، سيتعين على النظام العمل دون تدخلنا لفترة طويلة جدًا. تم تكوين الخادم الخاص بي في إصدار "النهاية" في يومين ، وعمل دون تدخل لمدة عام تقريبًا. وهذا يعني أنه تم استخدام الواجهة الرسومية بنسبة 0.05٪ من وجود الخادم النشط (يعمل الكمبيوتر لمدة نصف يوم فقط) وفي الوقت نفسه استهلك موارد: ذاكرة الوصول العشوائي ومساحة القرص ووقت المعالج. يتم إنفاق جميع هذه الموارد بشكل أفضل على ضمان عمل الخادم نفسه: على سبيل المثال ، ارفع ذاكرة الذاكرة لـ PHP أو قم بتخزين المزيد من بيانات المستخدم على القرص الصلب. بالإضافة إلى ذلك ، في حالة حدوث مشكلات وأعطال عند العمل مع خادم بعيد حقيقي ، غالبًا ما يكون استخدام وصول SSH أسهل كثيرًا. في هذا السياق ، فإن وجود واجهة رسومية غير مرغوب فيه ، ولهذا السبب كان الخادم الثاني على شبكتي بالفعل جهازًا افتراضيًا بدون بيئة رسومية تم تثبيت قائد Midnight عليه فقط من البرنامج الرسومي ، الذي استخدمته للتنقل في نظام الملفات وتحرير ملفات التكوين من خلال محرر mcedit الخاص به . لذلك ، يعد ما يلي تعليمات عالمية: أوامر معينة مع التركيز على استخدام سطر الأوامر ، ومع ذلك ، فمن المفهوم أنه لأول مرة يقوم المستخدم بتكوين الجهاز مع بيئة رسومية ، وهو ما يرجع إلى استخدام متصفح للتحقق محليًا من توفر المواقع التي تم إنشاؤها وبعض ميزات إعداد برنامج البريد.

في عملية إنشاء الخادم وعند إضافة مواقع جديدة إليه ، جمعت بعض معلومات الخلفية التي قد تكون مفيدة لمستخدم مبتدئ. لقد أوجزته بعد المادة المتعلقة بتثبيت وتكوين الخادم.

ملاحظة
بعد مزيد من القراءة في إنشاءات النموذج http: // 127.0.0.1 (https: // 127.0.0.1) ، يجب إزالة المساحة بعد http: // (https: //) عند الدخول إلى شريط عنوان المتصفح. تم إدراج مسافة عند نشر هذه المقالة لمنع المحرك من تحويل النص تلقائيًا إلى روابط.



تثبيت البرنامج


Apache و Nginx هما زوجان من خوادم الويب مفتوحة المصدر التي تم بناء حوالي 55٪ من الخوادم حول العالم عليها. أباتشي هو خادم الويب الأكثر شعبية منذ عام 1995 واخترته على أمل الحصول على توثيق جيد وشعبية ، وإذا جاز التعبير ، أردت أن أبدأ من البداية. هذا لا يعني أن Nginx أسوأ: Nginx أكثر كفاءة في استهلاك الموارد والعمل تحت الحمل. في الجزء الروسي من الإنترنت ، يشغل خادم Nginx حوالي 65٪ ، بينما يشغل خادم Apache حوالي 18٪. يتم نشر مقال مقارن جيد لخادمين على المحور

تثبيت خادم الويب Apache2:

# apt-get تثبيت apache2 apache2-doc

وهذا كل شيء. تم بالفعل تثبيت عشرين ميغابايت وخادم ويب. لا حاجة لإعادة التشغيل أو الإعدادات - يعرف الخادم بالفعل كيفية فتح صفحات HTML . ومع ذلك ، فإن موقع الويب الحديث على الإنترنت ليس مجرد مجموعة من الملفات الثابتة والأنماط والخطوط وما شابه ذلك منذ عشرين عامًا. يحتوي الموقع الحديث على نصوص مكتوبة بلغة PHP ، ولا تتم كتابة المعلومات الديناميكية (على سبيل المثال ، محتوى النص والتعليقات وملفات تعريف المستخدم) إلى الملفات المجاورة لملفات PHP ، ولكن إلى قاعدة بيانات SQL خاصة. بالنسبة للخادم الكامل ، يجب عليك تقديم الدعم لهذه التقنيات. علاوة على ذلك ، ليس من الصعب:

# apt-get تثبيت mysql-server mysql-client phpmyadmin
# apt-get تثبيت php5 php5-mysql libapache2-mod-php5

أثناء تثبيت MySQL ، سيُطلب منك تعيين كلمة مرور mysql superuser وستحتاج إلى تحديد خادم apache2 لتكوين العمل تلقائيًا مع mysql. عند تثبيت حزمة phpmyadmin ، وافقت على تكوين الحزمة تلقائيًا وأدخلت في كل مكان كلمة مرور الجذر mysql. يحدث تثبيت PHP دون أي طلبات.

لم أستخدم PHP7 أسرع أو MariaDB مجانًا كبديل بديل مفتوح لـ SQL وقررت بناء خادمي على LAMP "canonical" LAMP = Linux + Apache + MySQL + PHP ، باستخدام حلول قديمة ومثبتة ، في حالة المشاكل التي يمكنني بسرعة والعثور على المعلومات بسهولة على الإنترنت.

ثلاث فرق (والتي يمكن تخفيضها إلى فريق واحد) وقمنا محليًا بتثبيت خادم كامل وعصري. انها بسيطة جدا!

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



تكوين خادم الويب Apache2


تحتاج أولاً إلى التأكد من أن خادم الويب يعمل. للقيام بذلك ، افتح متصفحًا واطلب العنوان http: // 127.0.0.1 ( localhost ). يجب فتح نقش مشجع: "صفحة Apache2 Debian الافتراضية. إنها تعمل! " يعمل الخادم حقا. إذا كان لديك مجموعة من ملفات الموقع لعام 2000 ، فيمكنك وضعها في الدليل / var / www / html ومن المحتمل أن يتم فتحها على خادمنا.



يتم تخزين جميع إعدادات خادم الويب الأساسية في المسار / etc / apache2. إذا قمت بفتح هذا الدليل ، يمكنك رؤية ملف التكوين الرئيسي apache2.conf والأدلة conf-available و mod-available و site-available. تحتوي هذه الأدلة على ملفات تمت تهيئتها مسبقًا بإعدادات (ما يسمى بالمقتطفات) ، والتي يمكنك ببساطة استخدامها افتراضيًا ، مع تعديلاتك الخاصة ، أو أخذها كقالب لإنشاء التكوينات الخاصة بك. على سبيل المثال ، في الدليل المتاح للمواقع هو ملف تكوين المضيف الافتراضي 000-default.conf. إذا فتحته ودرسته ، اتضح أن هذا الملف يحدد المسار الذي يفتح على موقعنا على العنوان http: // 127.0.0.1: “DocumentRoot / var / www / html”. علاوة على ذلك ، يعني السطر "<VirtualHost *: 80>" أنه إذا قمت بتحرير جهازي على شبكة محلية وقمت بالوصول إليه على المنفذ 80 (منفذ HTTP ) ، فسوف أفتح موقعًا موجودًا على المسار / var / www / html. كيفية التحقق من ذلك؟

تحتاج أولاً إلى معرفة عنوان IP الذي تم تعيينه للجهاز الظاهري بعد تحميله. لعرض تكوين محولات الشبكة ، نفّذ ما يلي:

# ifconfig

في المعلومات المعروضة على وحدة التحكم ، من السهل تحديد أنه تم تعيين العنوان التالي لمحول eth0:

inet addr:192.168.233.138

الآن على الجهاز المضيف ، أفتح عنوان المتصفح http: // 192.168.233.138 في المتصفح وأتوقع فتح صفحة مألوفة. لكن ... لم تفتح. بعد مرور بعض الوقت ، يكتب متصفحي: "انتهت مهلة الاتصال". ويكتب بشكل صحيح. في الواقع ، قمت في الجزء الأول بتشغيل جدار الحماية ، ولكن المنفذ 80 لم يفتح! لنصلح هذا:

# ufw تسمح 80

مرة أخرى ، حاول فتح العنوان http: // 192.168.233.138 وتأكد من فتح الصفحة المتوقعة. افتتح المضيف الظاهري في الجهاز الظاهري من خارج كل هذه الافتراضية. لقد اتخذنا خطوة صغيرة في بناء الإنترنت الافتراضي الصغير الخاص بنا.

بالإضافة إلى الدلائل المتاحة ، هناك أيضًا أدلة ممكّنة تحتوي على ما هو "مضمّن" حاليًا. إذا نظرت إليها ، يمكنك أن ترى أن هذه الدلائل تحتوي على روابط للملفات الموجودة في الدلائل المتاحة. يوجد حاليًا رابط واحد فقط في الدليل الممكّن للمواقع - الملف /etc/apache2/sites-available/000-default.conf. هذا أمر مريح للغاية - يمكننا التحكم في الاختصارات في المضيفين أو إيقاف تشغيلهم دون تحرير ملفات التكوين الخاصة بهم. بالإضافة إلى ذلك ، فإن مصدر التكوين هو ما إذا كان أحد ملفات التكوين مضمّنًا بشكل مستقل أم لا الآن ، وهذا يمنع الأخطاء عندما يتم تصحيح شيء في ملف ويتم نسيانه في ملف آخر. لتعطيل مضيفنا ، تحتاج إلى حذف الاختصار المطلوب ولتمكينه ، قم بإنشائه. لكي لا تحذف أو تنشئ اختصارات يدويًا ، من الأسهل والأكثر موثوقية استخدام أدوات مساعدة خاصة.

تعطيل المضيف الظاهري:

# a2dissite 000-default

قم بتشغيل المضيف الظاهري:

# a2enssite 000-default

بعد كل تغيير ، تحتاج إلى إعادة تشغيل تكوينات المضيف أو إعادة تشغيل الخادم:

# خدمة apache2 إعادة تحميل

أو

# خدمة apache2 إعادة التشغيل

لذلك ، يتوفر الآن فهم أساسي لكيفية تكوين المضيفين المنتظمين في apache ، ثم سأعرض مثالًا لكيفية تكوين الخادم الخاص بي للعمل عبر بروتوكولات HTTP و HTTPS .

تحتاج إلى البدء بحقيقة أنه عند فصل المضيف الافتراضي الافتراضي 000000 ، لا يحدث قطع الاتصال على هذا النحو. أي أن الموقع مفتوح من داخل الجهاز الظاهري وخارجه - وسيفتح بغض النظر عما إذا كان تكوينه موجودًا في المجلد الممكّن للمواقع. كان هذا غير متوقع وقضيت وقتًا طويلًا نسبيًا لفهم ما إذا كنت قد فعلت كل شيء بشكل صحيح أو فهمته. حتى النهاية ، ما زلت لم أفهم هذا ، على ما يبدو يرجع ذلك إلى حقيقة أن المسار / var / www / html تم تعيينه عالميًا كدليل افتراضي لـ DocumentRoot. نظرًا لأنني لم أكن أرغب في تضمين شيء غير ضروري وإمكانية الوصول إليه ، فقد قررت التخلص من دليل html نفسه ، ولكل متداخل / var / www ، رفض الوصول افتراضيًا.

لتهيئة المضيف الافتراضي الافتراضي ، قمت بتحرير ملف التكوين الخاص به:

# nano /etc/apache2/sites-available/000-default.conf

محتويات ملف التكوين هي كما يلي:

 <VirtualHost *:80> ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

باستخدام هذا التكوين ، أعدت تعيين الدليل الافتراضي إلى / var / www ، وسمحت للخادم باتباع الروابط الرمزية في هذا الدليل ، وسمح للخادم بتنفيذ جميع التوجيهات المعلنة في ملفات htaccess التي تم العثور عليها ، ورفض الوصول إلى هذا الدليل. منطق هذه الإجراءات هو أنه يمكنني التحكم في الوصول إلى هذا الدليل دون الوصول إلى إعدادات خادم الويب على الإطلاق ودون إعادة تشغيله. الآن أنت بحاجة للتحقق من هذا الحل.
انقل الملف:

# mv /var/www/html/index.html /var/www/index.html

وحذف الدليل:

# rm / var / www / html

نعيد تشغيل الخادم لتصبح الإعدادات الافتراضية للمضيف الظاهري الجديد نافذة المفعول:

# خدمة apache2 إعادة التشغيل

قم بإنشاء ملف:

# nano /var/www/.htaccess

نكتب فيه سطرًا واحدًا (بدون علامات اقتباس): "تتطلب جميع الممنوحة".

لتلخيص. الآن لا يوجد مسار / var / www / html ، ولكن تتم إعادة تهيئة المضيف افتراضيًا إلى المسار / var / www ، حيث يوجد ملف index.html ، وبشكل افتراضي ، على مستوى خادم الويب ، تم رفض الوصول إلى هذا الدليل ، ولكن المحتوى مسموح به محليًا ملف htaccess الموجود هناك.

افتح المتصفح http: // 127.0.0.1 وشاهد الصفحة المألوفة بالفعل "Apache2 Debian Default Page. إنها تعمل ". الآن دعونا نتحقق من قابلية تشغيل التحكم في الوصول "المحلي":
احذف ملف htaccess.

# rm /var/www/.htaccess

ونقوم بتحديث الصفحة المفتوحة في المتصفح - يجب فتح الصفحة التي تحتوي على إشعار تقييد الوصول (محظور). نعم ، كل هذا يعمل ، لذلك كل شيء يتم بشكل صحيح.

من حيث المبدأ ، هذه الإعدادات البسيطة كافية تمامًا لمزيد من التشغيل الخالي من المتاعب لخادم الويب. لكن بدا لي أنه لا يكفي. الآن يمكن لخادم الويب لدينا العمل فقط باستخدام بروتوكول HTTP. ولكن ماذا عن بروتوكول HTTPS؟ بعد كل شيء ، إذا كان في المستقبل لجلب المشاريع القائمة على خادم الويب هذا إلى الإنترنت ، فإن القدرة على العمل على هذا البروتوكول أمر مرغوب فيه على الأقل. وقررت تنظيم دعم HTTPS بناءً على إنشاء شهادة SSL موقعة ذاتيًا.

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

إنتباه! تفترض الإرشادات أدناه أن الخادم مثبت على جهاز بدون اسم. إذا كان هناك عنوان IP حقيقي أو اسم مجال ، فيجب تحديدها في ثلاثة أماكن: <Common Name IP / Domain>؛ <ServerName IP / المجال> ؛ <Redirect "/" "https: // IP / Domain /"> - في الإنشاءات المناسبة ، استبدل IP / Domain بعنوان IP أو اسم المجال. في النص أدناه ، يتم استخدام localhost بدلاً من IP / المجال.

إنشاء شهادة SSL:

# openssl req -x509 -Nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

سينشئ هذا الأمر شهادة موقعة ذاتيًا لمعيار X.509 على الفور لمدة 10 سنوات مع تخطي خيار حماية الشهادة بعبارة مرور - وهذا ضروري حتى عند بدء تشغيل خادم Apache يمكنه قراءة الملف بدون تدخل المستخدم ، نظرًا لأن تعيين كلمة مرور ، سيتعين عليك إدخاله بعد كل تمهيد أو إعادة تشغيل الخادم. جنبا إلى جنب مع الشهادة ، سيتم إنشاء مفتاح RSA جديد لـ 2048 بت ، سيتم توقيع الشهادة معه. يشير الخياران -keyout و –out إلى المسارات التي يجب أن يقوم OpenSSL من خلالها بإنشاء المفتاح والشهادة.

في عملية إنشاء الشهادة ، سيتم طرح الأسئلة التي أشرت إليها البيانات التالية:

اسم الدولة = ميغاواط
اسم الولاية أو المقاطعة = نظام الشمس
اسم المنطقة = Lunar
اسم المنظمة = Hellium Inc.
اسم الوحدة التنظيمية = 2
الاسم الشائع = localhost
عنوان البريد الإلكتروني = user @ localhost

بعد ذلك ، أنشئ مفاتيح Diffie-Hellman لتوفير دعم PFS :

# opensl dhparam -out /etc/ssl/certs/dhparam.pem 2048

سيتم تشغيل النقاط والإيجابيات في النهاية الطرفية وبعد نهاية الرسوم المتحركة ، يمكنك إنشاء ملف ssl-params.conf الذي سيتم فيه تحديد معلمات SSL للخادم:

# nano /etc/apache2/conf-available/ssl-params.conf

لإعداد آمن ومحدث ، استخدمت الرمز الذي تم إنشاؤه في المولد لتكوين SSL على mozilla.imtqy.com . في المولد ، حددت خادم Apache2 ، وملف التعريف الحديث وقمت بتعيين إصدارات الخادم و OpenSSL بشكل صحيح ، والتي يمكن التعرف عليها من خلال الأوامر التالية:

# أباتشي 2 -v
# نسخة opensl

ونتيجة لذلك ، حصلت على النص التالي:

 # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) -SHA384: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) 

الآن قم بتكوين المضيف الظاهري بدعم SSL:

# nano /etc/apache2/sites-available/default-ssl.conf

لقد أحضرت نص هذا الملف إلى النموذج التالي:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

ويترتب على ما سبق أن لدينا أيضًا / var / www معرف على أنه دليل DocumentRoot ، والذي تم تكوين الوصول إليه بشكل مشابه للإعدادات السابقة. تم تمكين آلية HSTS ، مما يساعد على فرض الاتصال من خلال بروتوكول HTTPS. يتم تضمين دعم SSL مع الشهادة والمفتاح المستخدم ، بالإضافة إلى دعم معالجة بيانات الشهادة في البرامج النصية PHP و CGI . تم تصميم القسم الأخير لتوفير التوافق مع الإصدارات السابقة من Internet Explorer ، وبشكل عام ، ليس ضروريًا.

الآن دعونا نفعل اللمسات الأخيرة.

دعونا نفتح منفذ SSL:

# ufw تسمح 443

تمكين وحدات أباتشي لدعم SSL و HSTS:

# a2enmod ssl
# رؤوس a2enmod

تمكين تكوين SSL:

# a2enconf ssl-params

تمكين المضيف الظاهري الممكّن لـ SSL:

# a2ensite default-ssl

أعد تشغيل الخادم لقبول جميع الإعدادات الجديدة:

# خدمة apache2 إعادة التشغيل

لقد حان الوقت المثير للاهتمام - التحقق من قابلية تشغيل الوظائف الجديدة للنظام المكون.

قم بإنشاء ملف:

# nano /var/www/.htaccess

الذي يصف فيه سطر واحد: "يتطلب كل الممنوحة".

افتح في المتصفح https: // 127.0.0.1. يجب فتح صفحة حول شهادة غير معروفة ، بعد قبولها (إذن فردي أو دائم) ، سيتم فتح صفحة مألوفة تحتوي على إشعار حول خادم ويب قيد التشغيل.

احذف ملف htaccess.

# rm /var/www/.htaccess

ونقوم بتحديث الصفحة المفتوحة في المتصفح - يجب فتح الصفحة التي تحتوي على إشعار تقييد الوصول (محظور). كل شيء يعمل بشكل صحيح. الآن يمكن الوصول إلى مواقعنا عبر HTTP و HTTPS.

يمكن ترك وصول HTTP مفعلاً أو تعطيله أو إجباره على إعادة التوجيه إلى HTTPS.

للوصول إلى HTTP الممكّن ، لا يلزم فعل أي شيء ، لأن الخادم يعالج طلبات المنفذين 80 و 443 بشكل فردي وسيتم فتح موقعنا في المجلد / var / www من خلال HTTP ومن خلال HTTPS.

لتعطيل وصول HTTP ، ما عليك سوى تعطيل المضيف الظاهري المقابل وإعادة تشغيل خادم الويب:

# a2dissite 000-default
# خدمة apache2 إعادة التشغيل

الآن ، إذا فتحت http: // 127.0.0.1 في مستعرض ، فيجب فتح صفحة تحتوي على إشعار حول عدم وجود صفحة (لم يتم العثور عليها).

الخيار الثالث الأكثر إثارة للاهتمام. في هذه الحالة ، يظل HTTP ممكّنًا رسميًا ، ولكن سيتم إعادة توجيه معالجة البيانات بالقوة عبر HTTPS.

للقيام بذلك ، قم أولاً بتمكين وحدة إعادة التوجيه:

# a2enmod إعادة الكتابة

افتح الآن ملف 000-default.conf:

# nano /etc/apache2/sites-available/000-default.conf

وقبل علامة الإغلاق ، أضف النص التالي:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

أعد تشغيل الخادم:

# خدمة apache2 إعادة التشغيل

قم بإنشاء ملف:

# nano /var/www/.htaccess

الذي يصف فيه سطر واحد: "يتطلب كل الممنوحة".

الآن ، إذا فتحت عنوان http: // 127.0.0.1 في متصفح ، فسيتم إعادة توجيهنا تلقائيًا إلى https: // 127.0.0.1 مع تحذير حول شهادة غير معروفة (إذا لم تتم إضافتها مسبقًا إلى قائمة الاستبعاد في المتصفح) ، بعد قبولها ، سيتم فتح واحدة مألوفة بالفعل صفحة إعلام خادم الويب.



توليف SQL


للإعداد الأولي لـ mysql ، فقط قم بتشغيل الأمر التالي:

# mysql_secure_installation

بعد إدخال كلمة مرور mysql superuser ، أجبت على الأسئلة المطروحة بالترتيب التالي:

  • رفض تغيير كلمة المرور الجذرية ؛
  • أكد إزالة مستخدمين مجهولين من قاعدة البيانات ؛
  • تم تأكيد حظر الاتصال عن بعد لجذر (لأسباب أمنية ، يتم توصيل الجذر محليًا فقط) ؛
  • أكد إزالة قواعد بيانات الاختبار ؛
  • وافق على إعادة تحميل جداول الامتيازات.

للتحقق من صحة الخلية ، يمكنك تشغيل الأمر التالي:

# الخلية - الجذر - ع

بعد إدخال كلمة مرور mysql superuser ، نرى مطالبة mysql - وهذا يعني أن الخدمة قيد التشغيل. يمكنك الخروج من محطة mysql بإدخال الأمر exit.

للتحقق من أداء phpmyadmin ، افتح العنوان http: // 127.0.0.1/phpmyadmin في المتصفح. إذا تم فتح صفحة بدعوة لإدخال phpmyadmin ، فإن الخدمة جاهزة.



إعداد PHP


بعد تثبيت PHP ، فتحت ملف الإعدادات الخاص به:

# nano /etc/php5/apache2/php.ini

وأحضر بعض المعلمات إلى الشكل التالي:

  • حد الذاكرة = 1024 م
  • default_charset = "UTF-8"
  • upload_max_filesize = 256 مليونًا
  • sendmail_path = /usr/bin/fake_sendmail.sh

باستخدام وحدة PHP ، يمكنك توفير تخزين مؤقت للبيانات في الذاكرة. يُعد التخزين المؤقت مفيدًا في حالة ارتفاع تحميل الخادم للبيانات ، حيث يتطلب توليدها قدرًا كبيرًا من الموارد ، على سبيل المثال ، نتائج الاستعلامات إلى قاعدة البيانات أو معالجة الأجزاء "الثقيلة" من قالب الموقع. كخادم التخزين المؤقت ، اخترت وحدة memcached .

تثبيت memcache:

[ تمت كتابة هذا النص خصيصًا للموقع geektimes.ru بواسطة AlexanderS .
يعد الرابط إلى المصدر اختياريًا ، ولكن مرجعه مرغوب فيه للغاية! ]

# apt-get تثبيت memcached php5-memcached

دعونا نلقي نظرة على إعدادات تكوين الخدمة:

# nano /etc/memcached.conf

في الإعدادات ، قمت بزيادة حجم الذاكرة المستخدمة للتخزين المؤقت: -m 64 -> -m 256. وتحققت من توفر وضع التشغيل فقط في المنطقة المحلية: -l 127.0.0.1.

نعيد تشغيل خدمة التخزين المؤقت وخادم الويب:

# خدمة memcached إعادة التشغيل
# خدمة apache2 إعادة التشغيل

الآن أنت بحاجة للتأكد من أن الخدمة تعمل. للقيام بذلك ، قم بإنشاء ملف:

# nano /var/www/info.php

وأضف النص التالي إليها:

 <?php phpinfo (); ?> 

لا تنسى التحقق من وجود ملف htaccess في الدليل / var / www مع المحتوى المسموح به المقابل ، إذا لم يكن موجودًا ، قم بإنشائه.

الآن يمكنك فتح في متصفحك http: // 127.0.0.1/info.php - يجب فتح صفحة تحتوي على معلومات حول PHP ، والتي تحتاج فيها للتحقق من قسم memcached فيه. إذا ظهر الجدول - PHP يعمل.

يمكنك التحقق من تشغيل خدمة memcached مثل هذا:

$ ps -aux | grep memcached

يجب أن يعرض الجهاز سلسلة تحتوي على إعدادات memcached.

إنشاء كعب البريد ل PHP

في إعدادات PHP ، تم تحديد نص برمجي كمعلمة sendmail_path. وظيفة هذا البرنامج النصي هي حفظ الرسائل المرسلة من خلال وظيفة php mail () القياسية على الجهاز المحلي ، في مجلد مناسب ، وعدم إرسالها في مكان ما.

قم بإنشاء ملف:

# nano /usr/bin/fake_semdmail.sh

مع المحتويات التالية:

 #!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true 

اجعل هذا الملف قابلاً للتنفيذ:

# chmod + x /usr/bin/fake_semdmail.sh

قم بإنشاء الدلائل الضرورية التي قد تحتاجها إذا قمت بتكوين مجموعة الحروف بواسطة برنامج البريد:

# mkdir / var / mail / sendmail / var / mail / sendmail / cur / var / mail / sendmail / new / var / mail / sendmail / tmp

ونعين الحقوق حتى يتمكن الخادم من كتابة الملفات في هذا المجلد:

# chmod 777 -R / var / mail / sendmail

الآن سيتم إضافة كل البريد الصادر إلى / var / mail / sendmail. يمكن عرضها باستخدام محرر نصوص ، أو يمكن جمعها عن طريق برنامج البريد. يأتي برنامج دبيان المثبت مسبقًا مع عميل Evolution للبريد الإلكتروني. عند إعداد الحساب ، حدد "دلائل البريد بتنسيق Maildir" كنوع الخادم وحدد المسار إلى دليل البريد (/ var / mail / sendmail) ، وحدد "Sendmail" كخادم.

هذا كل شيء. بشكل عام ، لقد انتهينا من الخادم - يتم الحصول على جهاز افتراضي عالمي ، يمكنك على أساسه بناء خدمات الشبكة الخاصة بك. تركت كل من وصول HTTP و HTTPS. ومع ذلك ، بعد اكتساب الخبرة في إنشاء وتكوين خادم ، بالإضافة إلى إضافة مواقع (انظر أدناه) إليه ، أوصي بإنشاء جهاز افتراضي جديد مع خادم بدون واجهة رسومية كأفضل استهلاك للموارد.



إعدادات الوصول إلى SSH


لن يكون الخادم خادمًا كاملاً بدون الوصول من خلال SSH. يتيح لك ما يسمى "shell" الاتصال بخادم بعيد بسرعة وأمان ، باستخدام ، على سبيل المثال ، برنامج معجون صغير - على الكمبيوتر المحلي نحصل على وصول مباشر إلى محطة الخادم البعيد.

تركيب الخدمة:

# apt-get تثبيت ssh

دعنا نفتح المنفذ لـ SSH (في الواقع ، يجب أن يكون المنفذ الافتراضي عند الرقم 22 ، ولكن أدناه قمت بإعادة تعريف المنفذ في تكوين SSH):

# ufw تسمح 106

لترتيب الوصول لمستخدمنا ، افتح الملف:

# nano / etc / ssh / sshd_config

وأضف التوجيه في نهاية الملف:

مستخدم AllowUsers

بالإضافة إلى ذلك ، لأسباب أمنية ، أجريت التغييرات التالية على هذا الملف:

  • تم تغيير المنفذ من 22 إلى بعض ( قائمة المنافذ ) الأخرى: المنفذ 22 -> المنفذ 106
  • تعطيل البروتوكول القديم: البروتوكول 2.1 -> البروتوكول 2
  • تعطيل الوصول عن بُعد للجذر: PermitRootLogin نعم (أو PermitRootLogin بدون كلمة مرور) -> PermitRootLogin no

ثم أعد تشغيل الخدمة:

# خدمة إعادة تشغيل sshd

يمكنني الآن تشغيل برنامج المعجون على الجهاز المضيف والاتصال بالخادم الخاص بي في وضع وحدة التحكم عن طريق إدخال عنوان الاتصال 192.168.233.138 ، المنفذ 106 ومستخدم اسم المستخدم.عند الاتصال ، يجب أن تجيب بالإيجاب لقبول المفاتيح وإدخال كلمة المرور للمستخدم. إذا كنت بحاجة إلى تنفيذ أوامر من المستخدم الفائق ، فيمكنك استخدام الأمر su المعروف بالفعل.



حماية الوصول


- DDoS, , VPS/VDS, , «» , . Slow HTTP DDoS , , IP .

DDoS - . , , . - SSH, , , SSH – .

, – , SSH. «» IP , , , SSH FTP. , -, , .

, fail2ban:

# apt-get install fail2ban

, . fail2ban – , , .

:

# nano /etc/fail2ban/jail.local

, . :

#
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
#
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# SSH
[ssh]
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

#
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

# php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

#
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

#
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2


يسمح لك الإعداد أعلاه بعدم التحكم في الوصول المحلي ، ومع ست محاولات غير صحيحة لتسجيل الدخول في غضون 12 ساعة ، سيتم حظر عنوان IP الخاص بالمهاجم باستخدام iptables لمدة 30 يومًا. فهو لا يتحكم فقط في الوصول إلى المنافذ لـ SSH ، ولكن أيضًا الإجراءات المشبوهة التي تهدف إلى زعزعة استقرار خادم الويب.



مرجع خادم الويب


, :

# service apache2 start
# service apache2 stop
# service apache2 restart


:

# service apache2 reload

test:

# a2ensite test
# a2dissite test


test:

# a2enconf test
# a2disconf test


( : «Syntax OK»):

# apache2ctl configtest

HTTP HTTPS

, , site.com, /home/user/www. , user .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/000-default.conf

HTTPS :

# nano /etc/apache2/sites-available/default-ssl.conf

وأضف المحتوى التالي إلى الملف المفتوح قبل علامة الإغلاق / VirtualHost:

 <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> 

-:

# service apache2 restart

http:// 127.0.0.1/site.com https:// 127.0.0.1/site.com ( — . ). , .htaccess, : «Require all granted».

HTTP HTTPS , IP

– , : , , site.com, /home/user/www. .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/site.com.conf

:

 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

HTTPS :

# nano /etc/apache2/sites-available/site.com-ssl.conf

:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

/etc/hosts «127.0.0.1 site.com»:

# echo >> /etc/hosts 127.0.0.1 site.com

HTTP :

# a2ensite site.com.conf

HTTPS :

# a2ensite site.com-ssl.conf

-:

# service apache2 restart

http:// site.com https:// site.com ( – . ). , .htaccess, : «Require all granted».

. «» . ليس صعبا.نحن نعرف اسم المجال وعنوان IP لجهاز الضيف. إذا كان النظام المضيف هو Windows ، فأنت بحاجة إلى فتح الملف c: \ Windows \ System32 \ drivers \ etc \ hosts وإضافة السطر التالي في النهاية:

192.168.233.138 site.com

. , site.com . , .

, HTTPS, HTTP :

— /etc/apache2/sites-available/site.com.conf ,
— /etc/apache2/sites-available/site.com.conf RewriteEngine/RewriteCond/RewriteRule
— site.com.conf,
— : # service apache2 restart



— index.html - .

index.html:

$ nano /home/user/www/site.com/index.html

:

 <html> <head> <title>TEST OK</title> </head> <body> <h1>TEST OK</h1> </body> </html> 

http:// 127.0.0.1/site.com (https:// 127.0.0.1/site.com) http:// site.com (https:// site.com) — «TEST OK».



MySQL


user123 pass123 db123 .

mysql, mysql :

# mysql -u root -p

( «mysql>» , ):

mysql> CREATE DATABASE `db123`;

user123 pass123:

mysql> CREATE USER 'user123'@'localhost' IDENTIFIED BY 'pass123';

:

mysql> GRANT ALL PRIVILEGES ON `db123`.* TO 'user123'@'localhost';

:

mysql> FLUSH PRIVILEGES;

mysql:

mysql> exit

http:// 127.0.0.1/phpmyadmin user123/ pass123. db123.

root mysql c pass123 pass456:

# mysqladmin -uroot -ppass123 password pass456

user123 c pass123 pass456:

# mysqladmin -uuser123 -ppass123 password pass456

user123:

mysql> DROP USER 'user123'@'localhost';

db123:

mysql> DROP DATABASE `db123`;



fail2ban


إعادة تشغيل الخدمة:

# service fail2ban reset

التحقق من قواعد التشغيل:

# fail2ban-client status

إحصائيات تفصيلية حول قاعدة sshd:

# fail2ban-client status ssh

Unbanning:

# fail2ban-client set ssh bananip Banned_IP



ارجع إلى البداية ، إلى جدول المحتويات .



تاريخ إنشاء سحابة منزلية.الجزء 2. إنشاء خادم - إعداد LAMP في دبيان.
نسخة النص: 1.0.1.
تاريخ أول نشر: 30/1/2018.
آخر تعديل: 01/15/2020.

سجل التحديث
1.0.1 [15-01-2020]
.

1.0.0 [30-01-2018]
.
LAMP Debian 8.7.x.

Source: https://habr.com/ru/post/ar409915/


All Articles