دليل المبتدئين إلى iptables ، جدار حماية Linux
Iptables هي أداة جدار حماية مرنة للغاية مصممة لأنظمة تشغيل Linux. سواء كنت مبتدئًا في نظام Linux أو مسؤول نظام ، فمن المحتمل أن تكون هناك طريقة ما يمكن من خلالها أن يكون iptables مفيدًا لك. اقرأ كما نوضح لك كيفية تكوين جدار حماية Linux الأكثر تنوعًا.
الصورة بواسطة ezioman .
حول iptables
iptables هي أداة مساعدة لجدار حماية سطر الأوامر تستخدم سلاسل السياسة للسماح بحركة المرور أو حظرها. عندما يحاول اتصال تأسيس نفسه على نظامك ، يبحث iptables عن قاعدة في قائمته لمطابقتها معها. إذا لم يتم العثور على واحد ، فإنه يلجأ إلى الإجراء الافتراضي.
يأتي iptables دائمًا مثبتًا مسبقًا على أي توزيعة Linux. لتحديثه / تثبيته ، ما عليك سوى استرداد حزمة iptables:
sudo apt-get install iptables
هناك بدائل واجهة المستخدم الرسومية لـ iptables مثل Firestarter ، لكن iptables ليس بهذه الصعوبة بمجرد أن يكون لديك بعض الأوامر. يجب أن تكون حذرًا للغاية عند تكوين قواعد iptables ، خاصةً إذا كنت تستخدم SSH في خادم ، لأن أمرًا واحدًا خاطئًا يمكن أن يقفلك نهائيًا حتى يتم إصلاحه يدويًا على الجهاز الفعلي.
أنواع السلاسل
يستخدم iptables ثلاث سلاسل مختلفة: الإدخال ، وإعادة التوجيه ، والإخراج.
الإدخال - تُستخدم هذه السلسلة للتحكم في سلوك الاتصالات الواردة. على سبيل المثال ، إذا حاول المستخدم إدخال SSH في جهاز الكمبيوتر / الخادم ، سيحاول iptables مطابقة عنوان IP والمنفذ مع قاعدة في سلسلة الإدخال.
إلى الأمام - تُستخدم هذه السلسلة للاتصالات الواردة التي لا يتم تسليمها محليًا بالفعل. فكر في جهاز توجيه - يتم دائمًا إرسال البيانات إليه ولكن نادرًا ما يتم توجيهها بالفعل إلى جهاز التوجيه نفسه ؛ يتم إعادة توجيه البيانات فقط إلى هدفها. ما لم تكن تقوم بنوع من التوجيه أو NAT أو أي شيء آخر على نظامك يتطلب إعادة توجيه ، فلن تستخدم هذه السلسلة.
هناك طريقة واحدة مؤكدة للتحقق مما إذا كان نظامك يستخدم / يحتاج إلى السلسلة الأمامية أم لا.
iptables -L -v
لقطة الشاشة أعلاه لخادم تم تشغيله لبضعة أسابيع وليس له قيود على الاتصالات الواردة أو الصادرة. كما ترى ، عالجت سلسلة الإدخال 11 جيجا بايت من الحزم وسلسلة الإخراج عالجت 17 جيجا بايت. من ناحية أخرى ، لا تحتاج السلسلة الأمامية إلى معالجة حزمة واحدة. هذا لأن الخادم لا يقوم بأي نوع من إعادة التوجيه أو يتم استخدامه كجهاز تمريري.
الإخراج - تُستخدم هذه السلسلة للاتصالات الصادرة. على سبيل المثال ، إذا حاولت اختبار ping howtogeek.com ، فسوف يتحقق iptables من سلسلة الإخراج الخاصة به لمعرفة القواعد المتعلقة بـ ping و howtogeek.com قبل اتخاذ قرار بالسماح أو رفض محاولة الاتصال.
التحذير
على الرغم من أن اختبار ping لمضيف خارجي يبدو وكأنه شيء يحتاج فقط إلى اجتياز سلسلة الإخراج ، ضع في اعتبارك أنه لإرجاع البيانات ، سيتم استخدام سلسلة الإدخال أيضًا. عند استخدام iptables لتأمين النظام الخاص بك ، تذكر أن الكثير من البروتوكولات تتطلب اتصالًا ثنائي الاتجاه ، لذلك ستحتاج كل من سلسلتي الإدخال والإخراج إلى التهيئة بشكل صحيح. SSH هو بروتوكول شائع ينسى الناس السماح به على كلا السلسلتين.
السلوك الافتراضي لسلسلة السياسة
قبل الدخول في قواعد معينة وتكوينها ، سترغب في تحديد ما تريد أن يكون عليه السلوك الافتراضي للسلاسل الثلاث. بعبارة أخرى ، ماذا تريد أن يفعل iptables إذا كان الاتصال لا يتطابق مع أي قواعد موجودة؟
لمعرفة ما يتم تكوين سلاسل السياسة الخاصة بك حاليًا للقيام به مع حركة المرور غير المتطابقة ، قم بتشغيل iptables -L
الأمر.
كما ترى ، استخدمنا أيضًا الأمر grep لمنحنا إخراجًا أنظف. في لقطة الشاشة هذه ، تم تصميم سلاسلنا حاليًا لقبول حركة المرور.
في كثير من الأحيان ، سترغب في أن يقبل نظامك الاتصالات افتراضيًا. ما لم تكن قد قمت بتغيير قواعد سلسلة السياسة مسبقًا ، يجب تكوين هذا الإعداد بالفعل. في كلتا الحالتين ، إليك أمر قبول الاتصالات افتراضيًا:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
بالتعيين الافتراضي لقاعدة القبول ، يمكنك بعد ذلك استخدام iptables لرفض عناوين IP أو أرقام منافذ محددة ، مع الاستمرار في قبول جميع الاتصالات الأخرى. سنصل إلى هذه الأوامر في غضون دقيقة.
إذا كنت تفضل رفض جميع الاتصالات وتحديد الاتصالات التي تريد السماح بالاتصال بها يدويًا ، فيجب عليك تغيير السياسة الافتراضية للسلاسل الخاصة بك لإسقاطها. قد يكون القيام بذلك مفيدًا فقط للخوادم التي تحتوي على معلومات حساسة ولا تتصل بها إلا عناوين IP نفسها.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
الاستجابات الخاصة بالاتصال
من خلال تكوين سياسات السلسلة الافتراضية ، يمكنك البدء في إضافة قواعد إلى iptables حتى يعرف ما يجب فعله عندما يواجه اتصالاً من أو إلى عنوان IP أو منفذ معين. في هذا الدليل ، سنستعرض "الردود" الثلاثة الأكثر شيوعًا والأساسية.
قبول - اسمح بالاتصال.
إسقاط - قم بإسقاط الاتصال ، وتصرف وكأنه لم يحدث أبدًا. هذا هو الأفضل إذا كنت لا تريد أن يدرك المصدر أن نظامك موجود.
رفض - لا تسمح بالاتصال ، ولكن أرسل خطأً. هذا هو الأفضل إذا كنت لا تريد أن يتصل مصدر معين بنظامك ، لكنك تريد منهم أن يعرفوا أن جدار الحماية الخاص بك قد حظرهم.
أفضل طريقة لإظهار الاختلاف بين هذه القواعد الثلاث هي إظهار الشكل الذي يبدو عليه عندما يحاول الكمبيوتر اختبار اتصال جهاز Linux باستخدام iptables المهيأ لكل واحد من هذه الإعدادات.
السماح بالاتصال:
قطع الاتصال:
رفض الاتصال:
السماح باتصالات معينة أو منعها
مع تكوين سلاسل السياسة الخاصة بك ، يمكنك الآن تكوين iptables للسماح بعناوين ونطاقات عناوين ومنافذ معينة أو حظرها. في هذه الأمثلة ، سنقوم بتعيين الاتصالات على DROP
، ولكن يمكنك تبديلها إلى ACCEPT
أو REJECT
، بناءً على احتياجاتك وكيفية تكوين سلاسل السياسة الخاصة بك.
ملاحظة: في هذه الأمثلة ، سنستخدم iptables -A
لإلحاق القواعد بالسلسلة الحالية. يبدأ iptables في أعلى قائمته ويمر عبر كل قاعدة حتى يعثر على قاعدة تطابقها. إذا كنت بحاجة إلى إدراج قاعدة فوق أخرى ، فيمكنك استخدامها iptables -I [chain] [number]
لتحديد الرقم الذي يجب أن يكون في القائمة.
اتصالات من عنوان IP واحد
يوضح هذا المثال كيفية حظر جميع الاتصالات من عنوان IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
اتصالات من مجموعة من عناوين IP
يوضح هذا المثال كيفية حظر كافة عناوين IP في نطاق الشبكة 10.10.10.0/24. يمكنك استخدام قناع شبكة أو علامة مائلة قياسية لتحديد نطاق عناوين IP.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
أو
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
اتصالات بمنفذ معين
يوضح هذا المثال كيفية منع اتصالات SSH من 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
يمكنك استبدال "ssh" بأي بروتوكول أو رقم منفذ. و -p tcp
جزء من قانون يقول إيبتبلس أي نوع من الاتصال الاستخدامات البروتوكول. إذا كنت تحظر بروتوكولًا يستخدم UDP بدلاً من TCP ، -p udp
فسيكون ذلك ضروريًا بدلاً من ذلك.
يوضح هذا المثال كيفية منع اتصالات SSH من أي عنوان IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
دول الاتصال
كما ذكرنا سابقًا ، ستتطلب الكثير من البروتوكولات اتصالًا ثنائي الاتجاه. على سبيل المثال ، إذا كنت تريد السماح باتصالات SSH بنظامك ، فستحتاج سلاسل الإدخال والإخراج إلى قاعدة مضافة إليها. ولكن ، ماذا لو كنت تريد فقط السماح بدخول SSH إلى نظامك؟ ألن تسمح إضافة قاعدة إلى سلسلة الإخراج أيضًا بمحاولات SSH الصادرة؟
هذا هو المكان الذي تأتي فيه حالات الاتصال ، والتي تمنحك القدرة التي تحتاجها للسماح بالاتصال ثنائي الاتجاه ولكن تسمح فقط بإنشاء اتصالات أحادية الاتجاه. ألقِ نظرة على هذا المثال ، حيث يُسمح باتصالات SSH من 10.10.10.10 ، لكن اتصالات SSH حتى 10.10.10.10 غير مسموح بها. ومع ذلك ، يُسمح للنظام بإعادة إرسال المعلومات عبر SSH طالما تم إنشاء الجلسة بالفعل ، مما يجعل اتصال SSH ممكنًا بين هذين المضيفين.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
حفظ التغييرات
سيتم إلغاء التغييرات التي تجريها على قواعد iptables في المرة التالية التي يتم فيها إعادة تشغيل خدمة iptables إلا إذا نفذت أمرًا لحفظ التغييرات. يمكن أن يختلف هذا الأمر اعتمادًا على التوزيع الخاص بك:
أوبونتو:
sudo /sbin/iptables-save
ريد هات / CentOS:
/sbin/service iptables save
أو
/etc/init.d/iptables save
أوامر أخرى
سرد قواعد iptables المكونة حاليًا:
iptables -L
-v
ستمنحك إضافة الخيار معلومات عن الحزمة والبايت ، -n
وستؤدي الإضافة إلى سرد كل شيء رقميًا. بمعنى آخر - يتم سرد أسماء المضيف والبروتوكولات والشبكات كأرقام.
لمسح جميع القواعد المكونة حاليًا ، يمكنك إصدار أمر flush.
iptables -F