الدرس الخامس:تأمين السيرفر

Spread the love

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

سنبدأ بالعمل على جدار النار و ذلك ﻹغلاق المنافذ الغير مستخدمة،جميع نسخ لينكس تأني مع جدار نار افتراضي و هو يعتبر الأفضل يسمي iptables الآن طبق الأمر التالي

iptables -L

الآن سنقوم بإغلاق جميع المنافذ و بعدها نقوم بفتح المنافذ التي نحتاجها و ستكون21,80,110.للقيام بذلك سننشأ ملف شل(shell script) عن طريق الأمر التالي:

vi firewall

و ضع فيه التالي:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Firewall maison
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:
# Default-Stop:
# X-Interactive:     false
# Short-Description: Firewall maison
### END INIT INFO
iptables -t filter -F
iptables -t filter -X
echo “Mise à 0”
# all blocked
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
echo “Interdiction”
# Do not break established connections
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
# Allow loopback (127.0.0.1)
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo “Loopback”
# ICMP (the ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo “Ping ok”
# SSH IN/OUT
iptables -t filter -A INPUT -p tcp –dport 1337 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 1337 -j ACCEPT
echo “SSH ok”
# DNS In/Out
iptables -t filter -A OUTPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp –dport 53 -j ACCEPT
echo “dns ok”
# NTP Out
iptables -t filter -A OUTPUT -p udp –dport 123 -j ACCEPT
echo “ntp ok”
# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp –dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 443 -j ACCEPT
# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 8443 -j ACCEPT
echo “http ok”
# FTP Out
iptables -t filter -A OUTPUT -p tcp –dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 20 -j ACCEPT
# FTP In
# imodprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
iptables -t filter -A INPUT -p tcp –dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
echo “ftp ok”
# Mail SMTP:25
iptables -t filter -A INPUT -p tcp –dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 25 -j ACCEPT
# Mail POP3:110
iptables -t filter -A INPUT -p tcp –dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 110 -j ACCEPT
# Mail IMAP:143
iptables -t filter -A INPUT -p tcp –dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 143 -j ACCEPT
# Mail POP3S:995
iptables -t filter -A INPUT -p tcp –dport 995 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp –dport 995 -j ACCEPT
echo “mail ok”
# Monit
iptables -t filter -A INPUT -p tcp –dport 4598 -j ACCEPT
# Webmin
iptables -t filter -A INPUT -p tcp –dport 10000 -j ACCEPT
echo “monitoring ok”

الآن سنمنح الملف الصلاحيات اللازمة عن طريق الأمر التالي:

chmod +x firewall

بعدها سنقوم بإضافة ملف آخر هو iptables_flush.sh خاص بالإقلاع التلقائي لجدار النار و سيحوي على التالي:

#!/bin/sh
echo “Flushing iptables rules…”
sleep 1
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

ببساطة هو مسؤول عن تنفيذ بعض الأوامر الخاصة بالجدار الناري،الآن قم بتنفيذ أوامر الملف عن طريق iptables_flush.sh/. و بعدها قم بتنفيذ ملف firewall عن طريق firewall/.(ﻻ تنسى النقطة في أول كل سطر).
عند تنفيذك للأمر الأخير و المتعلق بإقلاع الجدار الناري،و بعد إنتهاء التنتفيذ لن تسطيع الإتصال بالسيرفر ﻷنه يحتاج إلى إعادة التشغيل يدوبا،و لهذا عليك مراسلة شركة الإستضافة للقيام بهذا العمل.
الآن نحتاج إلى نقل ملف firewall إلى init.d و ذلك سيكون عن طريق الأمر التالي:

cp firewall /etc/init.d/

الآن سنقوم بإعداد الجدار الناري حتى يشتغل مع كل إقلاع للسيرفر و ذلك عن طريق الأمر التالي:

update-rc.d firewall defaults

الآن قد انتهينا من إعدادات الجدار الناري بنجاح و لله الحمد،و لذلك سسنتقل إلى الخطوة الموالية.
سنقوم الآن بتثبيت fail2ban و هو المسؤول عن منح هجمات Brute Force و التي تسمح باستخدام عدد كبير من كلمات السر من أجل تخمين كلمة السر الصحيحة،التثبيت سيكون عن طريق الأمر التالي:

apt-get install fail2ban

الآن توجه إلى مجلد البرنامج عن طريق

cd /etc/fail2ban

قم بعرض المحتويات عن طريق الأمر ls،اﻵن قم بتعديل الملف jail.conf و لكن قبل التعديل و كخطوة احترازية سنقوم بنسخ الملف و ذلك عن طريق الأمر التالي:

cp jail.conf jail.conf.local

اﻵن سنقوم بالتعديل على الملف الجديد jail.conf.local ،الآن ابحث عن destemail(عادة ما تكون في السطر 34) و هي خاصة بالبريد الإلكتروني الذي تود أن تتلقى عليه الإخطارات،الآن قم بالبحث عن[ssh] و في الخاصية port ستجد ssh قم بحذفها و اسبتدالها برقم المنفذ الذي حددناه سابقا للخدمة و كنت قد اخترت المنفذ 1337 ،الآن ابحث عن [ssh-ddos] و قم بتغيير enabled =false إلى enabled = true و قم بتغيير المنفذ إلى المنفذ الذي اخترته(1337) أيضا قم بنفس العمليةل  [apache] و لكن هنا ﻻ تغير رقم المنفذ(أتركها http,https) في [apache-multiports] و [apache-noscript] و [apache-overflows] و [proftpd] و [postfix] و [couriersmtp] و [courierauth] قم بتغيير الخاصية enabled من false إلى true و هذا من أجل تفعيل خواص برنامج fail2ban على تلك الخدمات.
الآن سنضيف بعض الأسطر الخاصة بأخطاء 404،الآن ابحث عن [apache-overflows] و في نهاية أسطرها( تحت maxretry = 2) قم باضافة الأسطر التالية:

[apache-404]
enabled = true
port = http
filter = apache-404
logpath = /var/log/apache*/error*.log
maxretry = 10
[apache-admin]
enabled = true
port = http
filter = apache-admin
logpath = /var/log/apache*/error*.log
maxretry = 6
[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1

الآن قم بحفظ الملف،و بعد ذلك سنقوم بإنشاء ثلاث ملفات جديدة داخل المسار التالي etc/fail.ban/conf.d/ الملف الأول هو apache-404.conf و سيحوي على التالي:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#
[Definition]
# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

الملف الثاني هو apache-admin.conf و سيحوي على التالي:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#
[Definition]
# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*admin|PMA|mysql
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

الملف الثالث هو  apache-w00tw00t.conf و سيحوي التالي:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#
[Definition]
# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*admin|PMA|mysql
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
root@ks367082:/etc/fail2ban/filter.d# cat apache-w00tw00t.conf
[Definition]
failregex = ^ -.*”GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*”.*
ignoreregex =

الآن بعد أن تقوم بحفظ الملفات الثلاثة قم بإعادة تشغيل fail2ban عن طريق الأمر التالي:

/etc/init.d/fail2ban resrtart

الآن سنقوم بتثبيت فاحص لملفات الباك دوور(أو بمعنى أصح أحصنة طروادة-الأبواب الخلفية)،البرنامج هو rkhunter و ذلك عن طريق السطر التالي:

apt-get install rkhunter

الآن توجه إلى home/abdelmadjid/ مع تغيير abdelmadjid  إلى اسم المستخدم الخاص بك،ثم قم بفتح الملف bashrc. و في آخر الملف أضف السطر التالي:

echo ‘Acces SheLL Root’ `who` `date` | mail -s `hostname` Shell Root email@domaine.com

مع تغيير email@domaine.com بالإيميل الذي تود أن تصلك إليه الإخطارات.
وصلنا بحمد الله إلى نهاية درس اليوم،و إن شاء الله يوفقنا إلى ما فيه الخير ﻹكمال هته الدورة بإذنه تعالى.

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة