A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.
A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.
الخادم الويب المتوفر في RHEL 7 هو الإصدار 2.4 من خادم Apache HTTP. أما بالنسبة لخادم FTP، فسنستخدم برنامج Very Secure Ftp Daemon (المعروف أيضًا باسم vsftpd) لإنشاء اتصالات مؤمنة بواسطة TLS.

في هذه المقالة سنشرح كيفية تثبيت وتكوين وتأمين خادم ويب وخادم FTP في RHEL 7.
تثبيت خادم Apache وخادم FTP
في هذا الدليل سنستخدم خادم RHEL 7 بعنوان IP ثابت هو 192.168.0.18/24. لتثبيت Apache و VSFTPD، قم بتشغيل الأمر التالي:
# yum update && yum install httpd vsftpd
عند اكتمال التثبيت، سيتم تعطيل كلا الخدمتين في البداية، لذا نحتاج إلى تشغيلهما يدويًا في الوقت الحالي وتمكينهما للبدء تلقائيًا ابتداءً من الإقلاع التالي:
# systemctl start httpd # systemctl enable httpd # systemctl start vsftpd # systemctl enable vsftpd
بالإضافة إلى ذلك، يجب علينا فتح المنافذ 80 و 21، حيث يكون خوادم الويب والـ FTP مستمعين على التوالي، للسماح بالوصول إلى تلك الخدمات من الخارج:
# firewall-cmd --zone=public --add-port=80/tcp --permanent # firewall-cmd --zone=public --add-service=ftp --permanent # firewall-cmd --reload
للتحقق من أن الخادم الويب يعمل بشكل صحيح، قم بفتح متصفحك وأدخل عنوان IP للخادم. يجب أن ترى الصفحة الاختبارية:

أما بالنسبة لخادم FTP، فيجب علينا تكوينه بشكل إضافي، وهو ما سنفعله في لحظة، قبل التحقق من أنه يعمل كما هو متوقع.
تكوين وتأمين خادم Apache الويب
الملف الرئيسي لتكوين Apache موجود في /etc/httpd/conf/httpd.conf
، ولكن قد يعتمد على ملفات أخرى موجودة داخل /etc/httpd/conf.d
.
على الرغم من أن التكوين الافتراضي يجب أن يكون كافيًا في معظم الحالات، إلا أنه من الجيد أن تتعرف على جميع الخيارات المتاحة كما هو موضح في الوثائق الرسمية.
كما هو الحال دائمًا، قم بعمل نسخة احتياطية من ملف التكوين الرئيسي قبل تحريره:
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
ثم قم بفتحه باستخدام محرر النص المفضل لديك وابحث عن المتغيرات التالية:
- ServerRoot: المجلد الذي تُحفظ فيه ملفات التكوين والأخطاء والسجلات للخادم.
- Listen: توجيه أباتشي للاستماع على عنوان IP محدد و / أو منافذ.
- Include: يسمح بتضمين ملفات التكوين الأخرى، والتي يجب أن تكون موجودة. خلاف ذلك، سيفشل الخادم، على عكس التوجيه IncludeOptional، الذي يتم تجاهله بصورة صامتة إذا لم تكن ملفات التكوين المحددة موجودة.
- User و Group: اسم المستخدم / المجموعة التي يتم تشغيل خدمة httpd بها.
- DocumentRoot: المجلد الذي سيخدم منه أباتشي مستنداتك. بشكل افتراضي، يتم استلام جميع الطلبات من هذا المجلد، ولكن يمكن استخدام الروابط الرمزية والأسماء المستعارة للإشارة إلى مواقع أخرى.
- ServerName: هذا التوجيه يحدد اسم المضيف (أو عنوان IP) والمنفذ الذي يستخدمه الخادم لتحديد هويته.
الإجراء الأمني الأول سيتكون من إنشاء مستخدم ومجموعة مخصصة (مثل tecmint/tecmint) لتشغيل خادم الويب، وتغيير المنفذ الافتراضي إلى منفذ أعلى (مثل 9000 في هذه الحالة):
ServerRoot "/etc/httpd" Listen 192.168.0.18:9000 User tecmint Group tecmint DocumentRoot "/var/www/html" ServerName 192.168.0.18:9000
يمكنك اختبار ملف التكوين باستخدام
# apachectl configtest
وإذا كان كل شيء ممتاز، فقم بإعادة تشغيل خادم الويب.
# systemctl restart httpd
ولا تنسى تمكين المنفذ الجديد (وتعطيل القديم) في جدار الحماية:
# firewall-cmd --zone=public --remove-port=80/tcp --permanent # firewall-cmd --zone=public --add-port=9000/tcp --permanent # firewall-cmd --reload
يرجى ملاحظة أنه نظرًا لسياسات SELinux، يمكنك استخدام الأنفاق المرتجعة بواسطة
# semanage port -l | grep -w '^http_port_t'
لخادم الويب.
إذا كنت ترغب في استخدام منفذ آخر (مثل منفذ TCP 8100)، يجب عليك إضافته إلى سياق المنفذ SELinux لخدمة httpd:
# semanage port -a -t http_port_t -p tcp 8100

لتأمين تثبيت Apache الخاص بك بشكل أكبر، اتبع هذه الخطوات:
1. يجب ألا يكون لمستخدم تشغيل Apache وصول إلى القشرة:
# usermod -s /sbin/nologin tecmint
2. قم بتعطيل قائمة الدلائل لمنع المتصفح من عرض محتويات الدليل في حالة عدم وجود ملف index.html في ذلك الدليل.
عدل على /etc/httpd/conf/httpd.conf
(وملفات التكوين للخوادم الافتراضية، إن وجدت) وتأكد من أن التوجيه Options، في كل من الأعلى ومستويات كتلة الدليل، مضبوط على None:
Options None
3. قم بإخفاء معلومات حول خادم الويب ونظام التشغيل في ردود HTTP. عدل على /etc/httpd/conf/httpd.conf
على النحو التالي:
ServerTokens Prod ServerSignature Off
الآن أنت مستعد لبدء عرض المحتوى من دليلك /var/www/html.
تكوين وتأمين خادم FTP
كما هو الحال مع أباتشي، ملف التكوين الرئيسي لـ Vsftpd (/etc/vsftpd/vsftpd.conf)
معلق جيدًا وفي حين أن التكوين الافتراضي يكفي لمعظم التطبيقات، يجب أن تصبح على دراية بالوثائق وصفحة الرجوع (man vsftpd.conf)
من أجل تشغيل خادم الـ ftp بفعالية أكبر (لا يمكن أن أؤكد ذلك بما فيه الكفاية!).
في حالتنا، هذه هي التوجيهات المستخدمة:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES allow_writeable_chroot=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
باستخدام chroot_local_user=YES
، سيتم وضع المستخدمين المحليين (بشكل افتراضي) في سجن chroot في دليل منزلهم مباشرة بعد تسجيل الدخول. وهذا يعني أن المستخدمين المحليين لن يتمكنوا من الوصول إلى أي ملفات خارج الدلائل المقابلة لمنزلهم.
أخيرًا، للسماح لـ ftp بقراءة الملفات في دليل المستخدم، اضبط الموازنة SELinux التالية:
# setsebool -P ftp_home_dir on
يمكنك الآن الاتصال بخادم الـ ftp باستخدام عميل مثل Filezilla:

لاحظ أن سجل /var/log/xferlog
يسجل التنزيلات والرفعات، والتي تتفق مع قائمة المجلدات أعلاه:

اقرأ أيضًا: تقييد سعة الشبكة المستخدمة من قبل تطبيقات في نظام لينكس باستخدام Trickle
ملخص
في هذا البرنامج التعليمي قمنا بشرح كيفية إعداد خادم ويب وخادم FTP. نظرًا لواسعة الموضوع، لا يمكن تغطية جميع جوانب هذه المواضيع (أي الخوادم الويب الافتراضية). لذا، أوصيك أيضًا بالتحقق من مقالات أخرى ممتازة في هذا الموقع حول Apache.
Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/