دليل المبتدئين إلى 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