دليل المبتدئين إلى iptables ، جدار حماية Linux
Iptables عبارة عن أداة جد مرنة لجدار الحماية مصممة لأنظمة تشغيل Linux. سواء كنت مبتدئًا أو مبتدئًا في نظام Linux ، فربما يكون هناك بعض الطرق التي يمكن أن تستخدم فيها iptables لك. اقرأ كيف نوضح لك كيفية تكوين جدار الحماية لينكس الأكثر تنوعا.
الصورة من تصوير ezioman.
حول iptables
iptables هو أداة جدولة جدار حماية لسطر الأوامر التي تستخدم سلاسل السياسة للسماح أو حظر حركة المرور. عندما يحاول الاتصال تأسيس نفسه على النظام الخاص بك ، تبحث iptables عن قاعدة في قائمتها لتتطابق معها. إذا لم يعثر على أحد ، فإنه يلجأ إلى الإجراء الافتراضي.
دائما ما تأتي iptables مثبتة مسبقا على أي توزيعة لينكس. لتحديث / تثبيته ، قم فقط باسترداد حزمة iptables:
sudo apt-get install iptables
هناك بدائل واجهة المستخدم الرسومية ل iptables مثل Firestarter ، ولكن iptables ليس حقا بهذه الصعوبة بمجرد أن يكون لديك بعض الأوامر إلى أسفل. أنت تريد أن تكون حذرا للغاية عند تكوين قواعد iptables ، خاصة إذا كنت SSH في خادم ، لأن أمر واحد خاطئ يمكن أن يقفل لك بشكل دائم حتى يتم إصلاحه يدويا في الجهاز المادي.
أنواع السلاسل
يستخدم iptables ثلاثة سلاسل مختلفة: الإدخال ، إلى الأمام ، والإخراج.
إدخال - يتم استخدام هذه السلسلة للتحكم في سلوك الاتصالات الواردة. على سبيل المثال ، إذا حاول أحد المستخدمين استخدام SSH في جهاز الكمبيوتر / الخادم ، فسوف يحاول iptables مطابقة عنوان IP والمنفذ بقاعدة في سلسلة الإدخال..
إلى الأمام - يتم استخدام هذه السلسلة للاتصالات الواردة التي لا يتم تسليمها محليًا. فكر في جهاز توجيه - يتم إرسال البيانات إليه دائمًا ولكن نادرًا ما يتم توجيهه بالفعل إلى الموجه نفسه ؛ يتم توجيه البيانات فقط إلى هدفها. ما لم تفعل نوعًا من التوجيه ، أو NATing ، أو أي شيء آخر على نظامك يتطلب إعادة التوجيه ، فلن تستخدم حتى هذه السلسلة.
هناك طريقة واحدة مضمونة للتحقق مما إذا كان نظامك يستخدم / يحتاج إلى السلسلة الأمامية أم لا.
iptables -L -v
لقطة الشاشة أعلاه هي خادم تم تشغيله لبضعة أسابيع وليس له أي قيود على الاتصالات الواردة أو الصادرة. كما ترى ، عالجت سلسلة الإدخال 11GB من الحزم وقد عالجت سلسلة الإخراج 17GB. من ناحية أخرى ، لم تكن السلسلة الأمامية بحاجة إلى معالجة حزمة واحدة. هذا لأن الخادم لا يقوم بأي نوع من إعادة التوجيه أو يتم استخدامه كجهاز تمريري.
انتاج | - يتم استخدام هذه السلسلة للاتصالات الصادرة. على سبيل المثال ، إذا حاولت استخدام 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 للسماح أو حظر عناوين ونطاقات عناوين ومنافذ معينة. في هذه الأمثلة ، سنقوم بتعيين الاتصالات قطرة
, ولكن يمكنك تبديلها قبول
أو رفض
, حسب احتياجاتك وكيفية تكوين سلاسل السياسة الخاصة بك.
ملاحظة: في هذه الأمثلة ، سنستخدمها iptables -A
لإلحاق القواعد بالسلسلة الحالية. تبدأ iptables في أعلى قائمتها وتدخل في كل قاعدة حتى تجد واحدة تتطابق معها. إذا كنت بحاجة إلى إدراج قاعدة فوق أخرى ، فيمكنك استخدامها iptables -I [سلسلة] [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" بأي بروتوكول أو رقم منفذ. ال -ف tcp
جزء من التعليمات البرمجية يخبر iptables نوع الاتصال الذي يستخدمه البروتوكول. إذا كنت تقوم بحظر بروتوكول يستخدم UDP بدلاً من TCP ، -ف 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
ريد هات / سينت أو إس:
/ sbin / خدمة iptables حفظ
أو
/etc/init.d/iptables حفظ
أوامر أخرى
قائمة قواعد iptables المكوّنة حاليًا:
iptables -L
مضيفا -الخامس
الخيار سوف يعطيك معلومات الحزمة والبايت ، وإضافة -ن
سوف قائمة كل شيء عدديا. بمعنى آخر - يتم سرد أسماء المضيفين والبروتوكولات والشبكات كأرقام.
لمسح كافة القواعد المكوّنة حاليًا ، يمكنك إصدار الأمر "تدفق".
iptables -F