السلام عليكم
الموضوع اليوم عن تخصيص الخدمات في لينوكس، أولاً يجب التذكير بأن تخصيص الخدمات في لينوكس له طرق عديدة..
اليوم سيكون محور الحديث عن طريقتين
1- Firewall (iptables)
2- TCP Wrappers
ذكرت في درس سابق شرحاً مبسطاً عن إستخدام الفايروول في لينوكس، و قد طلب بعض الزملاء الأفاضل المزيد من الأمثلة
لذا ستكون فرصة أيضاً للإستزادة حول الأي بي تيبلز.
لماذا نحتاج إلى تخصيص الخدمات.. وهل الأمر مفيد حقاً ؟
تخصيص الخدمات كان من أسباب التفكير في إنشاء الشبكات أصلاً، حيث كان الجميع قبل عام 1980 يستخدم أجهزة
كمبيوتر عملاقة يتم تخزين المعلومات عليها و يجب على أي شخص يريد التعديل أو معرفة تلك المعلومات
إستخدام الجهاز العملاق أو
Main frame
و كان لهذا الأمر عيوبه العديدة و أكبرها هو التكلفة المادية الباهظة لتلك الأجهزة، ثم عند ظهور الأجهزة الشخصية
PC , Mini Computer
تم تطوير ألشبكات بشكل أكبر بعد ذلك حيث أصبح الان من السهل تخصيص مجموعات معينة من الناس لإدارة مهام محددة
ولا يحتاجون للدخول على الجهاز العملاق، أو التكاليف المادية العالية له، و أصبح الأمر أكثر سهولة..
فالعملية تتم بوضع جهاز كخادم ثم ربط باقي الأجهزة به، و تخصيص و تحديد المهام التي ستقوم بها الأجهزة المتصلة به.
لقد ذكرت هذه النبذة البسيطة حتى يتسنى لك معرفة البداية للشبكات و أن التخصيص كان من الأولويات الأولى للشبكات
وهي محور موضوعنا..
التخصيص عن طريق إستخدام الفايروول IPtables
قبل الدخول لهذه النقطة أنصحك بقراءة المقال الخاص بالفايروول في لينوكس *
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.5 -j DROP
لقد أخبرنا الفايروول بأن الأي بي 10.0.0.5 غير مسموح له بالإتصال بالبورت 22 ، مما يعني أننا قمنا بتخصيص هذا البورت
لمستخدمي الشبكة جميعاً، دونا عن هذا الأي بي.
الأمر الأن تراه صعب ؟ فهل يجب علي أن أحجب كل شخص لا أريده و أن أسمح للباقين؟ هذا الأمر سيأخذ وقتا طويلاً..
هل تذكرون حديثي عن ذكاء الأي بي تيبلز و أنه يمكنك من إنشاء قواعد خاصة بك؟
iptables -N port22
iptables -A INPUT -p tcp --dport 22 -j port22
iptables -A port22 -s 10.0.0.8 -j ACCEPT
iptables -A port22 -j DROP
والأن نأتي لشرح ما كتب أعلاه، في الأمر الأول قمنا بإنشاء قاعدة جديدة و أسمها port22
في القاعدة الثانية قمنا بتحويل أي إتصال قادم إلى البورت 22 إلى القاعدة التي أنشأناها والتي أسمها port22
في الأمر الثالث قمنا بجعل القاعدة توافق على طلبات الدخول القادمة من الأي بي 10.0.0.8
في الأمر الرابع و الأخير قمنا بجعل القاعدة تمنع أي إتصال آخر .
تلخيص سريع :
كنا نحتاج إلى جعل البورت 22 متاح لأي بي واحد فقط، ولا يمكننا بالطبع حجب جميع أيبيهات العالم!، أو حتى الشبكة
لربما تكون كبيرة، و هنا قمنا بإستخدام الفايروول عن طريق إنشاء قاعدة جديدة خاصة بالبورت 22 فقط، و طلبنا من الفايروول
بتحويل أي إتصال قادم إلى البورت 22 للقاعدة التي أنشأناها وهي port22، ثم طلبنا من القاعدة port22 قبول الإتصالات
من الأي بي المحدد 10.0.0.8 ثم الحجب عن أي أي بي آخر،بالطبع لا نحتاج هنا إلى تحديد البورت
و أقصد بذلك تحديد البورت في القاعدة port22 لأنها تختص بالبورت 22 فقط لذا لا نحتاج لتحديد البورت .
الأن الأمر أكثر سهوله لتخصيص الدخول إلى الSSH أليس كذلك؟، الأن يمكنك تحديد أي بي معين لدخول خادمك صحيح؟
بذلك نكون إنتهينا من الجزء الأول اليوم وهو الفايروول، بالطبع لم أذكر سوى مثال يختص بالأي بي لأن الأي بي هو أفضل وسيلة
لتحديد ماهية المتصل،و المثال الذي ذكرته هو كفيل بجعلك تعرف كيفية التخصيص إن كنت قد قرأت الدرس السابق عن الفايرول.
الأن نأتي للجزء الثاني من الموضوع..
تخصيص الخدمات إعتمادا على TCP Wrappers
الإعتماد عليها في تخصيص الخدمات أو تحديدها لأشخاص معينين يعتبر أسهل من الأي بي تيبلز، و إن كنت بصفة شخصية
أفضل الأي بي تيبلز، الصيغة المستخدمة في التخصيص/التحديد
daemonname list/user
قبل أن أضع أمثلة يجب عليك أن تعرف أولاً الخصائص المتاحة لك،و كيفية إستخدامها
ذكرت أن الصيغة هي وضع أسم الخدمة ثم وضع اليوزر المتاح له الخدمة أو المحجوب عن الخدمة، لكنك لم تعرف إلى الأن
كيفية إستخدام تلك الصيغ وأين !
هناك ملفان يختصان بهذا الأمر و هما
/etc/hosts.allow
و
/etc/hosts.deny
و هذه الملفات هي المسؤولة عن الخدمة، وهي التي ستضع بها الصيغ الخاصة بالتحديد/التخصيص
مثال 1
/etc/hosts.allow
sshd : 10.0.0.8
/etc/hosts.deny
sshd : all
ماذا نستنتج مما بالأعلى؟، في الملف الأول الخاص بقبول الإتصالات وضعنا الأي بي المتاح له الدخول لخدمة SSH
و في الملف الثاني الخاص بالحجب وضعنا الصيغة ALL وهي تعني الجميع و السطر ككل يعني حجب كل الإتصالات.
الأن هناك نقطة هامة جداً؛ ألا وهي ان الملف الأول
/etc/hosts.allow
تقرأ محتوياته أولاً قبل الملف الثاني لذا أحذر من وضع صيغة حجب في ملف/etc/hosts.deny وهي متاحة في الملف الأول..
مثال رقم 2
/etc/hosts.deny
sshd : ALL EXCEPT 10.0.0.8
ماذا يعني ما سبق؟، يعني أنه سيتم حجب كل الإتصالات القادمة لخدمة SShماعدا القادمة من الأي بي المذكور أي
أنه يمكن إستخدام الملف /etc/hosts.deny وحده مع وضع إستثنائات، و هذه ميزة جيدة .
إذن المقياس EXCEPT يتيح لك وضع إستثنائات في ملف /etc/hosts.deny
مثال 3
/etc/hosts.allow
sshd : 10.0.0.8 127.0.0.1
/etc/hosts.deny
sshd : 10.0.0.8
ماذا يعني ما سبق؟، سيتم إتاحة الإتصال لخدمة SSH للأي بيهات المذكورة أعلاه،و الأن أنت في حيرة!
هل سيقبل الإتصال من الأي بي 10.0.0.8 أم لا؟ لأنك وضعته في قائمة الحجب، هل تذكر ما قلت من قليل؟
أن القراءة تكون من ملف /etc/hosts.allow أولاً قبل الملف الأخر؟ إذن بالطبع سيقبل الإتصال و سيتجاهل حجبك للأي بي
مثال 4
/etc/hosts.allow
httpd : LOCAL
/etc/hosts.deny
httpd : ALL
ماذا يعني ما سبق؟، سيتم إتاحة الإتصال للأباتشي فقط عن طريق الإتصالات الداخلية، أي القادمة من اللوكال هوست، و حجب
الباقين، ذلك يعني أنه يمكن إستخدام القيمة LOCAL لتحديد الإتصالات الداخلية فقط .
ملاحظة أخيرة، يجب وضع أسم الخدمة بالظبط أي
SSHD
httpd
in.tftpd
وهكذا..
إلى هنا و أعتقد أني قمت بتوضيح جزء كبير عن كيفية تخصيص الخدمات في لينوكس، بالطبع هناك طرق أخرى
مثل PAM " إذا كانت الخدمة تستخدمه"
أخيراً: أنصح بإستخدام الفايروول لأنه يعطيك إمتيازات أكبر خاصة و أنه يجعلك تحدد عدد الإتصالات في اليوم مثلاً، أو
تحديد يوم معين للإتصال لذا فأنصح بإستخدامه، و إن كنت بالطبع غير ملزم بنصيحتي و أستخدم ما يحلو لك فكل الطرق تؤدي
إلى التخصيص/التحديد..
بالطبع هذا ليس كل شيء و الان إذا كنت تبحث عن المزيد من المعلومات و لم تدرك كل شيء، إذن فلتستخدم الأوامر التالية
man iptables
man 5 hosts_access
بالطبع و كالعادة أتمنى أن أرى إستفسارات أو أسئلة أو إثراء ..
و السلام ختام
الموضوع اليوم عن تخصيص الخدمات في لينوكس، أولاً يجب التذكير بأن تخصيص الخدمات في لينوكس له طرق عديدة..
اليوم سيكون محور الحديث عن طريقتين
1- Firewall (iptables)
2- TCP Wrappers
ذكرت في درس سابق شرحاً مبسطاً عن إستخدام الفايروول في لينوكس، و قد طلب بعض الزملاء الأفاضل المزيد من الأمثلة
لذا ستكون فرصة أيضاً للإستزادة حول الأي بي تيبلز.
لماذا نحتاج إلى تخصيص الخدمات.. وهل الأمر مفيد حقاً ؟
تخصيص الخدمات كان من أسباب التفكير في إنشاء الشبكات أصلاً، حيث كان الجميع قبل عام 1980 يستخدم أجهزة
كمبيوتر عملاقة يتم تخزين المعلومات عليها و يجب على أي شخص يريد التعديل أو معرفة تلك المعلومات
إستخدام الجهاز العملاق أو
Main frame
و كان لهذا الأمر عيوبه العديدة و أكبرها هو التكلفة المادية الباهظة لتلك الأجهزة، ثم عند ظهور الأجهزة الشخصية
PC , Mini Computer
تم تطوير ألشبكات بشكل أكبر بعد ذلك حيث أصبح الان من السهل تخصيص مجموعات معينة من الناس لإدارة مهام محددة
ولا يحتاجون للدخول على الجهاز العملاق، أو التكاليف المادية العالية له، و أصبح الأمر أكثر سهولة..
فالعملية تتم بوضع جهاز كخادم ثم ربط باقي الأجهزة به، و تخصيص و تحديد المهام التي ستقوم بها الأجهزة المتصلة به.
لقد ذكرت هذه النبذة البسيطة حتى يتسنى لك معرفة البداية للشبكات و أن التخصيص كان من الأولويات الأولى للشبكات
وهي محور موضوعنا..
التخصيص عن طريق إستخدام الفايروول IPtables
قبل الدخول لهذه النقطة أنصحك بقراءة المقال الخاص بالفايروول في لينوكس *
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.5 -j DROP
لقد أخبرنا الفايروول بأن الأي بي 10.0.0.5 غير مسموح له بالإتصال بالبورت 22 ، مما يعني أننا قمنا بتخصيص هذا البورت
لمستخدمي الشبكة جميعاً، دونا عن هذا الأي بي.
الأمر الأن تراه صعب ؟ فهل يجب علي أن أحجب كل شخص لا أريده و أن أسمح للباقين؟ هذا الأمر سيأخذ وقتا طويلاً..
هل تذكرون حديثي عن ذكاء الأي بي تيبلز و أنه يمكنك من إنشاء قواعد خاصة بك؟
iptables -N port22
iptables -A INPUT -p tcp --dport 22 -j port22
iptables -A port22 -s 10.0.0.8 -j ACCEPT
iptables -A port22 -j DROP
والأن نأتي لشرح ما كتب أعلاه، في الأمر الأول قمنا بإنشاء قاعدة جديدة و أسمها port22
في القاعدة الثانية قمنا بتحويل أي إتصال قادم إلى البورت 22 إلى القاعدة التي أنشأناها والتي أسمها port22
في الأمر الثالث قمنا بجعل القاعدة توافق على طلبات الدخول القادمة من الأي بي 10.0.0.8
في الأمر الرابع و الأخير قمنا بجعل القاعدة تمنع أي إتصال آخر .
تلخيص سريع :
كنا نحتاج إلى جعل البورت 22 متاح لأي بي واحد فقط، ولا يمكننا بالطبع حجب جميع أيبيهات العالم!، أو حتى الشبكة
لربما تكون كبيرة، و هنا قمنا بإستخدام الفايروول عن طريق إنشاء قاعدة جديدة خاصة بالبورت 22 فقط، و طلبنا من الفايروول
بتحويل أي إتصال قادم إلى البورت 22 للقاعدة التي أنشأناها وهي port22، ثم طلبنا من القاعدة port22 قبول الإتصالات
من الأي بي المحدد 10.0.0.8 ثم الحجب عن أي أي بي آخر،بالطبع لا نحتاج هنا إلى تحديد البورت
و أقصد بذلك تحديد البورت في القاعدة port22 لأنها تختص بالبورت 22 فقط لذا لا نحتاج لتحديد البورت .
الأن الأمر أكثر سهوله لتخصيص الدخول إلى الSSH أليس كذلك؟، الأن يمكنك تحديد أي بي معين لدخول خادمك صحيح؟
بذلك نكون إنتهينا من الجزء الأول اليوم وهو الفايروول، بالطبع لم أذكر سوى مثال يختص بالأي بي لأن الأي بي هو أفضل وسيلة
لتحديد ماهية المتصل،و المثال الذي ذكرته هو كفيل بجعلك تعرف كيفية التخصيص إن كنت قد قرأت الدرس السابق عن الفايرول.
الأن نأتي للجزء الثاني من الموضوع..
تخصيص الخدمات إعتمادا على TCP Wrappers
الإعتماد عليها في تخصيص الخدمات أو تحديدها لأشخاص معينين يعتبر أسهل من الأي بي تيبلز، و إن كنت بصفة شخصية
أفضل الأي بي تيبلز، الصيغة المستخدمة في التخصيص/التحديد
daemonname list/user
قبل أن أضع أمثلة يجب عليك أن تعرف أولاً الخصائص المتاحة لك،و كيفية إستخدامها
ذكرت أن الصيغة هي وضع أسم الخدمة ثم وضع اليوزر المتاح له الخدمة أو المحجوب عن الخدمة، لكنك لم تعرف إلى الأن
كيفية إستخدام تلك الصيغ وأين !
هناك ملفان يختصان بهذا الأمر و هما
/etc/hosts.allow
و
/etc/hosts.deny
و هذه الملفات هي المسؤولة عن الخدمة، وهي التي ستضع بها الصيغ الخاصة بالتحديد/التخصيص
مثال 1
/etc/hosts.allow
sshd : 10.0.0.8
/etc/hosts.deny
sshd : all
ماذا نستنتج مما بالأعلى؟، في الملف الأول الخاص بقبول الإتصالات وضعنا الأي بي المتاح له الدخول لخدمة SSH
و في الملف الثاني الخاص بالحجب وضعنا الصيغة ALL وهي تعني الجميع و السطر ككل يعني حجب كل الإتصالات.
الأن هناك نقطة هامة جداً؛ ألا وهي ان الملف الأول
/etc/hosts.allow
تقرأ محتوياته أولاً قبل الملف الثاني لذا أحذر من وضع صيغة حجب في ملف/etc/hosts.deny وهي متاحة في الملف الأول..
مثال رقم 2
/etc/hosts.deny
sshd : ALL EXCEPT 10.0.0.8
ماذا يعني ما سبق؟، يعني أنه سيتم حجب كل الإتصالات القادمة لخدمة SShماعدا القادمة من الأي بي المذكور أي
أنه يمكن إستخدام الملف /etc/hosts.deny وحده مع وضع إستثنائات، و هذه ميزة جيدة .
إذن المقياس EXCEPT يتيح لك وضع إستثنائات في ملف /etc/hosts.deny
مثال 3
/etc/hosts.allow
sshd : 10.0.0.8 127.0.0.1
/etc/hosts.deny
sshd : 10.0.0.8
ماذا يعني ما سبق؟، سيتم إتاحة الإتصال لخدمة SSH للأي بيهات المذكورة أعلاه،و الأن أنت في حيرة!
هل سيقبل الإتصال من الأي بي 10.0.0.8 أم لا؟ لأنك وضعته في قائمة الحجب، هل تذكر ما قلت من قليل؟
أن القراءة تكون من ملف /etc/hosts.allow أولاً قبل الملف الأخر؟ إذن بالطبع سيقبل الإتصال و سيتجاهل حجبك للأي بي
مثال 4
/etc/hosts.allow
httpd : LOCAL
/etc/hosts.deny
httpd : ALL
ماذا يعني ما سبق؟، سيتم إتاحة الإتصال للأباتشي فقط عن طريق الإتصالات الداخلية، أي القادمة من اللوكال هوست، و حجب
الباقين، ذلك يعني أنه يمكن إستخدام القيمة LOCAL لتحديد الإتصالات الداخلية فقط .
ملاحظة أخيرة، يجب وضع أسم الخدمة بالظبط أي
SSHD
httpd
in.tftpd
وهكذا..
إلى هنا و أعتقد أني قمت بتوضيح جزء كبير عن كيفية تخصيص الخدمات في لينوكس، بالطبع هناك طرق أخرى
مثل PAM " إذا كانت الخدمة تستخدمه"
أخيراً: أنصح بإستخدام الفايروول لأنه يعطيك إمتيازات أكبر خاصة و أنه يجعلك تحدد عدد الإتصالات في اليوم مثلاً، أو
تحديد يوم معين للإتصال لذا فأنصح بإستخدامه، و إن كنت بالطبع غير ملزم بنصيحتي و أستخدم ما يحلو لك فكل الطرق تؤدي
إلى التخصيص/التحديد..
بالطبع هذا ليس كل شيء و الان إذا كنت تبحث عن المزيد من المعلومات و لم تدرك كل شيء، إذن فلتستخدم الأوامر التالية
man iptables
man 5 hosts_access
بالطبع و كالعادة أتمنى أن أرى إستفسارات أو أسئلة أو إثراء ..
و السلام ختام
تعليق