iptables: كيفية تكوين جدار حماية Linux لحماية خادمك

iptables: كيفية تكوين جدار حماية Linux

iptables هو ملف جدار الحماية يستخدم على لينكس- أنظمة التشغيل المستندة. على الرغم من أنه تم تثبيت nftables افتراضيًا في السنوات الأخيرة ، فلا يزال بإمكانك استخدام بناء جملة iptables لتهيئة جدار الحماية في نظام التشغيل لدينا ، مثل Debian ، أوبونتو وحتى جدار الحماية لجهاز التوجيه إذا كان يعتمد على Linux. إن معرفة iptables مهم جدًا للحفاظ على شبكتنا المحلية محمية من الاختراقات ، وذلك لأن iptables ستمنحنا إمكانية السماح أو رفض حركة المرور التي نريدها. سنشرح اليوم في هذه المقالة كيفية عمل iptables وأمثلة على الاستخدام المتقدم.

الميزات الرئيسية لـ iptables

iptables هو برنامج مسؤول عن العمل كجدار حماية أو جدار حماية على شبكتنا. إنه جزء مهم جدًا من أنظمة التشغيل ، وهو مصمم خصيصًا للسماح بالوصول المصرح به وحظر الوصول غير المصرح به. يُنشئ جدار الحماية نقطة تحكم ، الحزم الواردة والصادرة. بالإضافة إلى ذلك ، من المهم جدًا الإشارة إلى أن جدار الحماية يحمي من حركة المرور التي تعبر شبكات مختلفة ، ولكنه لا يحمي الشبكة المحلية من الهجمات التي تحدث داخل نفس الشبكة الفرعية. .

iptables هو جدار الحماية المضمن في أنظمة Linux منذ الإصدار 2.4 ، لذلك فهو مدمج افتراضيًا في أنظمة مثل Debian و Ubuntu و Linux Mint والعديد من الأنظمة الأخرى ، على الرغم من استخدام nftables حاليًا داخليًا ، لأن iptables يعتبر قديمًا ، على الرغم من أن iptables اليوم هو لا يزال مستخدمًا على نطاق واسع في عالم إدارة نظام Linux وأيضًا في عالم إدارة الشبكات.

يحتوي جدار الحماية هذا على العديد من الجداول التي تم إنشاؤها افتراضيًا ، بهدف تسهيل إمكانية إضافة سلاسل وقواعد مختلفة إلى حد كبير. أحد التفاصيل المهمة للغاية هو أنه افتراضيًا لدينا كل شيء مضبوطًا على "قبول" ، أي أن جميع حركات المرور مسموح بها ، ولا توجد قاعدة لرفض حركة المرور ، وبالتالي ، في البداية ، يكون جدار الحماية هذا مسموحًا به ، ولكن يمكننا تغيير السياسة الافتراضية تمامًا بسهولة وبسرعة.

بمجرد أن نعرف الخصائص الرئيسية ، سوف نعرض لك طريقة عمل جدار الحماية هذا وبنيته.

العملية والهندسة المعمارية

يعتمد جدار الحماية هذا على القواعد التي سنقدمها واحدة تلو الأخرى ، وتستند عملياتها إلى تطبيق القواعد التي يكون جدار الحماية نفسه مسؤولاً عن تنفيذها. على الرغم من أن iptables قد يبدو سهل الاستخدام في البداية ، إلا أنه إذا كنت تريد القيام بذلك بطريقة متقدمة ، فهو أكثر تعقيدًا. بعد ذلك ، يمكنك رؤية مخطط موجز لكيفية عمل iptables.

تستند بنية iptables إلى جداول ، تم إنشاء العديد منها بالفعل افتراضيًا. داخل الجداول لدينا السلاسل ، والتي أنشأنا بعضها بشكل افتراضي. أخيرًا ، داخل السلاسل لدينا القواعد المختلفة التي يمكننا تكوينها. في الصورة التالية ، يمكنك رؤية مخطط صغير لما ستبدو عليه بنية جدار الحماية:

بشكل افتراضي لدينا ما مجموعه أربعة جداول:

  • جدول التصفية : هو الجدول الافتراضي ، إذا لم نحدد جدولًا لإضافة قاعدة ، فسيذهب دائمًا إلى جدول التصفية. في هذا الجدول ، لدينا ما مجموعه ثلاث سلاسل افتراضية ، اعتمادًا على ما يهمنا ، سيتعين علينا استخدام سلسلة أو أخرى: INPUT (هذه هي الحزم في الاتجاه الوارد ، إلى جدار الحماية نفسه) ، الإخراج (هم الحزم الصادرة ، من الخادم الخارج) ، و FORWARD (تستخدم لتصفية الحزم التي تنتقل من واجهة شبكة إلى أخرى).
  • نات الجدول: هذا الجدول مسؤول عن إجراء NAT ، وتحويل IP الخاص إلى عام والعكس صحيح. داخل NAT لدينا ثلاث سلاسل: PREROUTING (يغير الحزم قبل توجيهها ، هنا يتم DNAT أو إعادة توجيه المنفذ) ، POSTROUTING (يغير الحزم بعد توجيهها ، هنا يتم إجراء SNAT أو MASQUERADE) والإخراج (الحزم التي تم إنشاؤها بواسطة جدار الحماية الذي تم تكوينه سوف NAT اجتياز).
  • فسد الجدول: هذا الجدول مسؤول عن تغيير الحزم ، حيث يتم تكوين QoS لجودة الخدمة ، وتغيير رؤوس TCP ، وما إلى ذلك. لدينا في هذا الجدول السلاسل الخمس: PREROUTING ، INPUT ، FORWARD ، OUTPUT ، POSTROUTING.
  • الخام الجدول - لا يتم استخدام هذا الجدول غالبًا لأن الحزم تنتقل بدون حالة الاتصال. لدينا سلسلة PREROUTING والإخراج.

في الصورة التالية يمكنك رؤية ملخص صغير للسلاسل التي لدينا في الجداول المختلفة:

تكون العملية عند إضافة قاعدة كما يلي:

  • القواعد التي نضيفها إلى السلاسل لها هدف دائمًا (-j في القاعدة).
  • عندما يتلقى جدار الحماية حزمة ، فإنه يتحقق مما إذا كانت الحزمة تتطابق مع قاعدة قمنا بتجنيدها. إذا تطابقت ، يتم تنفيذ الأمر target ، وإلا فإنه ينتقل إلى القاعدة التالية حتى نهاية السلسلة.
  • يتم فحص القواعد بترتيب تسلسلي ، من القاعدة الأولى إلى القاعدة الأخيرة. الترتيب مهم جدًا ، إذا حظرنا كل شيء أولاً ثم سمحنا بشيء أكثر تحديدًا ، فسنحظر كل حركة المرور ولن يتم التحقق من القاعدة الأكثر تحديدًا.
  • في حالة عدم وجود قاعدة تفي بالحزمة ، فسيتم استخدام سياسة السلسلة التي لدينا (القاعدة العالمية).

أهداف القواعد المختلفة هي كما يلي:

  • قبول: يقبل الحزمة ويمررها إلى المستوى التالي ، خادم الويب ، SSH ، FTP ، إلخ.
  • DROP: يحظر الحزمة ولا يمررها إلى المستوى التالي.
  • QUEUE: هو هدف خاص يمرر الحزمة في قائمة انتظار مخصصة لمعالجة مساحة المستخدم. يمكن استخدام هذا لتشغيل برامج خارجية أخرى.
  • RETURN: لها نفس التأثير كما لو كنا قد وصلنا إلى نهاية السلسلة. إذا كانت القاعدة في إحدى السلاسل الافتراضية ، فسيتم تنفيذ سياسة السلسلة. بالنسبة للقاعدة الموجودة في سلسلة محددة بواسطة المستخدم ، يتم الخروج منها ، والاستمرار في السلسلة قبل القفزة ، بعد القاعدة التي تم القفز بها مباشرةً.

بمجرد أن نعرف كيف يعمل وبنيته ، سنرى أوامر مختلفة لتنفيذ إجراءات مختلفة.

 

أوامر أساسية لاستخدام iptables

أول شيء يجب أن نأخذه في الاعتبار عند تكوين جدار الحماية هذا هو أننا نحتاج إلى أذونات المستخدم المتميز لتنفيذ الطلبات المختلفة. من الضروري للغاية أن يركضوا وإلا فلن ينجح الأمر. الأوامر التالية لا تحتوي على "sudo" لأننا نفترض أنك مستخدم خارق بالفعل (sudo su).

في أحدث إصدارات Linux ، لا يمكن إيقاف خدمة iptables ، من أجل السماح لجميع حركات مرور الشبكة وترك جدار الحماية مع المعلمات الافتراضية ، يتعين علينا تنفيذ الأوامر التالية:

  • سودو iptables -F
  • سودو iptables -X
  • sudo iptables -t nat -f
  • sudo iptables -t nat -x
  • sudo iptables -t mangle -f
  • سودو iptables -t mangle -x
  • sudo iptables -P قبول الإدخال
  • sudo iptables -P قبول للأمام
  • sudo iptables -P الإخراج قبول

بمجرد القيام بذلك ، سيكون لدينا جدار الحماية "إعادة تعيين" والسماح لكل شيء. الآن بعد أن عرفنا كيفية إعادة تعيينه ، دعنا نرى الأوامر المختلفة.

 

عرض الجداول الحالية

إذا كنت تريد أن ترى محتوى السلاسل والقواعد المختلفة التي لدينا في جدول معين ، فيمكنك أن ترى كيف ستبدو:

  • iptables -t مرشح -قائمة
  • iptables -t mangle -list
  • iptables -t nat -list
  • iptables -t raw – list

 

الحجج الرئيسية ولماذا هم

  • -t، –table table حدد الجدول الذي نريده
  • -A، –Aend chain rule-specification نضيف قاعدة جديدة في سلسلة معينة
  • -C، –التحقق من مواصفات قاعدة السلسلة نتحقق من وجود قاعدة معينة في سلسلة معينة
  • -D، –delete chain rule-specification نحذف القاعدة التي وضعناها في سلسلة معينة
  • -D، –delete chain rulenum نحذف القاعدة رقم X في سلسلة معينة
  • -I، –Inert chain [rulenum] مواصفات القاعدة نقوم بإدخال سلسلة جديدة برقم في جدول معين
  • -R، –replace chain rulenum rule-specification يستبدل سلسلة معينة في الجدول ، تُستخدم لتحريك الرقم.
  • -L، –list [chain] اعرض قائمة قواعد السلسلة
  • -F، –flush [سلسلة] مسح جميع القواعد من سلسلة معينة.
  • -Z، –zero [chain [rulenum]] يضبط عدادات قاعدة معينة على 0.
  • -N، –new-chain chain نقوم بإنشاء سلسلة جديدة في جدول معين
  • -X، –delete-chain [chain] نحذف سلسلة معينة (فارغة) في جدول معين
  • -P، –policy chain target نطبق السياسة الافتراضية ، ويتم الوفاء بها عندما لا يتم استيفاء أي قاعدة من السلاسل.
  • -E ، –إعادة تسمية السلسلة الجديدة للسلسلة القديمة إعادة تسمية سلسلة مضافة مسبقًا
  • -ح ، أظهر المساعدة
  • -v ، –verbose Output تستخدم بالاقتران مع –L ، لعرض معلومات أكثر مما يوفره الأمر –L.
  • -n، –ستظهر عناوين IP الرقمية وأرقام المنافذ كأرقام. على سبيل المثال ، إذا قمنا بتصفية المنفذ 80 ، فسيظهر مع –L www النموذجي ، وليس 80.
  • -x، –exact إظهار القيمة الدقيقة لعداد الحزمة والبايت ، بدلاً من استخدام K أو M أو G للقيم.
  • - أرقام الأسطر عند إظهار قائمة القواعد ، ستظهر الرقم الدقيق للقاعدة. مثالي لاستخدام –D والرقم (حذف) أو –I لتقديم قبل أو بعد القاعدة المذكورة.

 

الشروط الرئيسية

  • -p بروتوكول البروتوكول. قم بتصفية الحزمة حسب البروتوكول ، يمكن أن يكون البروتوكول المحدد: tcp ، udp ، Idplite ، icmp ، esp ، ah ، sctp.
  • -s ، - عنوان المصدر [/ قناع] [، ...] عنوان IP المصدر للحزمة. يمكن أن يكون لدينا IP أو شبكة فرعية (تشير إلى القناع بتنسيق CIDR). يمكننا أيضًا وضع أسماء المضيف (المجالات ، مواقع الويب ، إلخ) ، لكنها فكرة سيئة لأنها غير فعالة. يمكن تحديد عناوين مصادر متعددة ، (192.168.1.1,192.168.1.2 ، XNUMX) ولكنها ستنشئ قواعد مختلفة لتلبية هذه العناوين.
  • -d ، - عنوان الوجهة [/ قناع] [،…] عنوان IP الوجهة للحزمة. يتصرف تمامًا مثل -s.
  • -m ، مباراة مباراة. يحدّد ما إذا كنا نريد استدعاء الوحدات الموسّعة في iptables ، لتنفيذ إجراءات معينة مثل:
    • ضع عدة منافذ مصدر ووجهة (وحدة متعددة المنافذ).
    • اتصالات التحكم (وحدة conntrack).
    • تجنب القوة الغاشمة (وحدة حديثة ، مثالية لـ SSH).
    • تحديد عدد الاتصالات (modulo Limit and connlimit).
    • نطاق عنوان IP (iprange).
  • -j ، - القفز على الهدف. يحدد الهدف من القاعدة ، إذا أردنا قبول الحزمة ورفضها وحتى إعادة توجيهها إلى سلسلة أخرى لمزيد من المعالجة. دائمًا في أي قاعدة ، سيكون لدينا a -j لنخبرها بما نريد القيام به. إذا لم نقم بإضافة –j ، فستتم إضافة القاعدة وستقوم بحساب الحزم ، لكنها لن تفعل شيئًا. إذا استخدمنا -j لإعادة التوجيه إلى سلسلة أخرى ، فبمجرد انتهاء السلسلة الأخرى ، ستعود إلى السلسلة الأصلية.
  • -g ، –انتقل إلى سلسلة. يتم استخدامه لإعادة توجيه حركة المرور إلى سلسلة أخرى ، ولكن على عكس القفز ، فلن تعود إلى السلسلة الأصلية حيث جاءت.
  • -i ، في اسم الواجهة. اسم الواجهة التي يتم من خلالها استلام الحزمة. إنه يعمل فقط لسلاسل الإدخال مثل INPUT و FORWARD و PREROUTING. إذا وضعناها يعني الكل ما عدا تلك الواجهة. إذا وضعنا علامة + في نهاية الاسم ، فستحصل على أي واجهة بها بداية الاسم للتحقق منها. لنتخيل eth0 و eth1 و eth2. إذا أردنا وضع الثلاثة ، ببساطة يكفي وضع eth +.
  • -o ، اسم خارج الواجهة. اسم الواجهة التي تغادر الحزمة من خلالها. وهي صالحة فقط لسلاسل الإخراج مثل OUTPUT و FORWARD و POSTROUTING.

 

الشروط فقط إذا كنت تستخدم TCP أو UDP

إذا كنت تستخدم بروتوكول TCP أو UDP ، فقد ترغب في التصفية حسب المصدر و / أو رقم المنفذ الوجهة ، ثم لديك الوسيطتان اللتان يمكنك استخدامهما:

  • - الرياضة - المصدر - المنفذ. حدد منافذ المصدر للسماح أو الرفض. إذا استخدمنا! يستبعد.
  • - ميناء - ميناء - الوجهة. حدد منافذ الوجهة للسماح أو الرفض. إذا استخدمنا! يستبعد.

هناك العديد من الشروط للتهيئة المتقدمة لجدار الحماية ، لكننا أدرجنا بالفعل العناصر الأولية.

 

قم بتعيين السياسة الافتراضية

يتم استخدام السياسات بحيث يتم تنفيذ السياسة الافتراضية في حالة عدم العثور على قاعدة داخل السلسلة. السياسة الافتراضية لجميع السلاسل هي "قبول" ، ولكن هناك خياران: "قبول" أو "إسقاط"

-P ، - هدف سلسلة السياسة

أمثلة:

  • iptables -P INPUT DROP
  • iptables -P إسقاط للأمام
  • iptables -P انخفاض الإخراج

مع هذا سوف ينفد الإنترنت ، لذا يجب أن نبدأ بعد ذلك في إنشاء قواعد متساهلة.

أدناه ، يمكنك مشاهدة جميع السياسات التي لدينا في الجداول المختلفة:

  • iptables -t filter -P (INPUT | OUTPUT | FORWARD) (قبول | إسقاط)
  • iptables -P (الإدخال | الإخراج | إعادة التوجيه) (قبول | إسقاط)
  • iptables -t mangle -P (الإدخال | الإخراج | إعادة التوجيه | التمهيدي | النشر) (قبول | إسقاط)

 

عرض حالة جدار الحماية

تُظهر المعلمة -L القواعد التي قمنا بتكوينها. يتيح لك V تلقي مزيد من المعلومات حول الاتصالات ويقوم N بإرجاع عناوين IP والمنافذ المقابلة لها دون المرور عبر ملف DNS الخادم.

  • iptables -L -n -v. إيبتبلس -L -n -v

يعد هذا أحد أهم الأوامر لمعرفة حالة جدار الحماية.

 

وحدات (-m match) من iptables

 

متعدد المنافذ

إنه امتداد لـ iptables يمنحنا إمكانية تجميع قواعد متشابهة بمنافذ TCP و UDP مختلفة في واحد. يتيح لك Multiport وضع العديد من المنافذ التي تم تخطيها ، وكذلك العديد من المنافذ المتتالية ، والحد الأقصى هو 15 منفذًا. مثال:

  • iptables –A INPUT –p tcp –m Multort –dports 80,81,1000،1200،XNUMX: XNUMX –j ACCEPT

بفضل هذه الوحدة ، لدينا إمكانية استخدام عدة منافذ في نفس القاعدة.

 

مجموعة الملكية الفكرية

يسمح لنا iprange بوضع عدة عناوين IP للمصدر أو الوجهة في وقت واحد ، دون الحاجة إلى وضع عشرات القواعد. كما يسمح لك بوضع كل من عنوان IP المصدر والوجهة ، ويكون بناء الجملة على النحو التالي:

  • [!] - src-range ip-ip
  • [!] - dst-range ip-ip

إن تشغيل هذه القاعدة بسيط للغاية ، فنحن ببساطة نضع عنوان IP للبداية وعنوان IP النهائي.

 

قصر

تعتبر وحدة connlimit مسؤولة عن تقييد عدد الاتصالات المتزامنة التي يتم إجراؤها بواسطة عنوان IP ، وهي مثالية للحد من عدد الاتصالات لتجنب DoS.

  • –connlimit-upto n. نتحقق مما إذا كان عدد الاتصالات يساوي أو أقل من N (ثم يمكننا السماح أو الرفض).
  • –connlimit- فوق n. نتحقق مما إذا كان عدد الاتصالات أكبر من N (ثم يمكننا السماح أو الرفض).
  • - طول بادئة القناع المحدود. نحدد حسب نطاق الشبكة الفرعية (هو نفس مضيف يقوم بإجراء اتصالين ، مضيفان على نفس الشبكة الفرعية يقومان باتصال واحد لكل منهما).
  • - حد - صدر. قم بتطبيق القيد على مجموعة المصدر ، فهو الافتراضي إذا لم يتم تحديد أي شيء.
  • –connlimit-daddr. يطبق القيد على المجموعة المستهدفة.

على سبيل المثال ، لنفترض أننا نريد السماح باتصالين SSH فقط لكل عميل:

  • iptables -A INPUT -p tcp –dport 22 -m connlimit -connlimit-above 2 -j DROP

ومع ذلك ، يمكننا عمل القاعدة التكميلية ، بوضع قبول يصل إلى وصلتين.

 

conntrack

تستخدم هذه الوحدة لتتبع التوصيلات ، وتستخدم لإدارة المدخلات والمخرجات للحزم قبل وبعد إنشاء الاتصال. يوجد ضمن هذه الوحدة عدة خيارات ، ولكن أهمها هو الحالة -ctstate التي تسمح لنا بقبول أو رفض أنواع مختلفة من الحزم. داخل الدولة لدينا عدة ولايات ، يبرز ما يلي:

  • غير صالح: الحزمة المتلقاة غير صالحة ولا تنتمي إلى أي اتصال.
  • جديد: اتصالات جديدة تم إجراؤها أو مرتبطة باتصال ليس ثنائي الاتجاه بعد.
  • تأسست: الاتصالات القائمة ، تمر عبر NEW أولاً نظرًا لتلقيها ردًا
  • ذات صلة: حزمة مرتبطة باتصال حالي ، مثل FTP الخامل ، ولكنها ليست جزءًا منه.

دعنا نتخيل أننا نريد الوصول إلى أي موقع ، ومع ذلك ، لا نريد مطلقًا أن يصل أحد إلينا.

  • iptables -P انخفاض الإدخال
  • iptables -A INPUT -m conntrack-ctstate ESTABLISHED، ذات الصلة -j ACCEPT

 

قصر

تتيح لنا وحدة الحد تقييد حركة المرور وعدد السجلات التي نكتبها في سجل النظام كمحاولات اتصال. لها حجتان رئيسيتان:

  • - حد ن. تحدد هذه الوسيطة الحد الأقصى لعدد المطابقات المتوسطة في الثانية (N / s) ، أو الدقيقة (N / m) ، أو الساعة (N / h) ، أو اليوم (N / d) المسموح به. تحدد N الرقم
  • - انفجر حد N. يشير إلى أطول انفجار يمكن أن يحدث قبل فحص الحد الأقصى.

القيمة الافتراضية إذا لم يتم تحديد أي شيء هي 3 مطابقات في الساعة ، في رشقات نارية من 5. تخيل القاعدة التالية: "iptables -A INPUT -m Limit -j LOG" ، تكون العملية كما يلي:

  • في المرة الأولى التي يتم فيها الوصول إلى هذه القاعدة ، يتم تسجيل الحزم الخمس الأولى.
  • بعد ذلك ، سوف يستغرق الأمر عشرين دقيقة قبل إعادة تسجيل الحزمة بهذه القاعدة (3 مباريات بين 60 دقيقة تساوي 20 دقيقة ، نظرًا لأنها AVERAGE).
  • أيضًا ، كل عشرين دقيقة تمر دون وصول الحزمة إلى القاعدة ، ستستعيد الدفعة حزمة.
  • إذا لم يحدث شيء لمدة 100 دقيقة ، فسيتم إعادة شحن الدفعة بالكامل ؛ ثم يعود إلى الوضع الأولي.

 

الأخيرة

يتم استخدام الوحدة الحديثة للحد من عدد الاتصالات في الثانية على مستوى IP ، وهذا مثالي لحمايتنا من الهجمات على منفذ SSH لأن المهاجم سيحاول استخدام كلمات مرور متعددة. على سبيل المثال ، إذا أردنا حماية SSH الخاص بنا ، فيمكننا تشغيل القاعدة التالية:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m recent –set –name ssh-rsource
  • iptables -A INPUT -p tcp -dport 22 -m state-state NEW -m مؤخرًا- تحقق- ثانية 60- عدد 4 -اسم ssh -rsource -j DROP

تسمح هذه القاعدة بأربع محاولات اتصال فقط في غضون 60 ثانية ، وهي نافذة "منزلقة".

 

NAT

جدار الحماية هذا مسؤول أيضًا عن ترجمة اتصالنا. لجعل NAT الخاص بـ IP العام الخاص بنا (أو الواجهة التي تحتوي على عنوان IP العام هذا) ، يجب أن نضع:

  • ثابت SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • SNAT الديناميكي: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

الشيء الطبيعي هو استخدام MASQUERADE لعمل NAT بغض النظر عن عنوان IP الذي تمتلكه الواجهة الفعلية أو المنطقية.

لفتح المنافذ ، يتعين علينا إضافة قاعدة في سلسلة PREROUTING لجدول NAT.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT- to-destination 192.168.1.1

يسمح لنا جدول PREROUTING أيضًا بتعديل المنافذ أثناء التنقل ، بحيث إذا تلقينا حزمًا على المنفذ 2121 ، فيمكننا تحويلها إلى 21.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT - to-destination 192.168.1.1:21

بمجرد أن نعرف جدار الحماية هذا بالتفصيل ، سنرى الأمثلة الأساسية للاستخدام وأيضًا الأمثلة الأكثر تقدمًا.

 

أمثلة الاستخدام الأساسية

جدار الحماية هذا مكتمل للغاية ولدينا مئات الأوامر التي يمكننا تنفيذها لأداء إجراءات مختلفة. في هذه المقالة سنقدم لك بعض الأمثلة سهلة الفهم لأول نهج لجدار الحماية هذا.

منع عنوان IP 192.168.1.10 من إجراء أي اتصال بخادمنا:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

حظر عناوين IP 192.168.1.20 و 192.168.1.30 و 192.168.1.40 و 192.168.1.50 من إجراء أي اتصال بخادمنا:

  • iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

قم بحظر الشبكة الفرعية 192.168.2.0/24 بالكامل من إجراء أي اتصال بخادمنا ، باستثناء عنوان IP 192.168.2.20 ، والذي سيكون مسموحًا به:

  • iptables –A INPUT –s 192.168.2.20 –j قبول
  • iptables –A INPUT –s 192.168.2.0/24 –j DROP

قم بحظر عنوان IP 192.168.4.50 حتى لا نتمكن من إجراء أي اتصال:

  • iptables –الإخراج –d 192.168.4.50 –j DROP

قم بحظر عناوين IP 192.168.4.51 و 192.168.4.52 حتى لا نتمكن من إجراء أي اتصال:

  • iptables –الإخراج –d 192.168.4.51,192.168.4.52 –j DROP

حظر الوصول إلى www.google.es من iptables:

  • iptables –A OUTPUT –d www.google.es –j DROP

نريد منع الوصول إلى خادمنا من MAC 00: 01: 02: 03: 04: 05 ، والباقي يسمح بكل شيء:

  • iptables -A INPUT -m mac -mac-source 00: 01: 02: 03: 04: 05 -j DROP

نريد السماح بالوصول إلى خادمنا إلى عنوان MAC 00: 01: 02: 03: 04: 06 ، والباقي يرفض كل شيء:

  • iptables -A INPUT -m mac -mac-source 00: 01: 02: 03: 04: 05 -j قبول
    iptables -A المدخلات -j DROP

قم بحظر عنوان IP 192.168.1.10 لإجراء اختبار ping من خادمنا:

  • iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP

حظر عناوين IP 192.168.1.20 و 192.168.1.30 و 192.168.1.40 و 192.168.1.50 من PINGing خادمنا (في قاعدة واحدة):

  • iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

قم بحظر الشبكة الفرعية 192.168.2.0/24 بالكامل حتى لا يتم اختبار اتصال خادمنا ، باستثناء عنوان IP 192.168.2.20 ، والذي سيكون مسموحًا به:

  • iptables -A INPUT -s 192.168.2.20 -p icmp -j قبول
    iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP

قم بحظر عنوان IP الخاص بـ 192.168.4.50 حتى لا نتمكن من اختبار اتصاله.

  • iptables -A الإخراج -d 192.168.4.50 -p icmp -j DROP

قم بحظر عناوين IP 192.168.4.51 و 192.168.4.52 حتى لا نتمكن من اختبار اتصالهم.

  • iptables -A الإخراج -d 192.168.4.51,192.168.4.52 -p icmp -j DROP

حظر الوصول إلى www.google.es من iptables.

  • iptables -A الإخراج -d www.google.es -p icmp -j DROP

كما ترى ، فإن العملية بسيطة للغاية مع القواعد المستندة إلى IP مع الأصل والوجهة. يمكننا أيضًا استخدام وحدة iprange لتكوين مجموعة من عناوين IP:

قم بحظر مجموعة من عناوين IP من 192.168.5.1 إلى 192.168.5.50 من القدرة على إجراء اختبار ping من خادمنا.

  • iptables -A الإخراج -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP

يمكننا أيضًا تصفية بروتوكول ICMP بطريقة أكثر تقدمًا. لنتخيل أن لدينا مستخدمًا يريد أن يكون قادرًا على اختبار اتصال أي مضيف ، لكنه لا يريد أن يتمكن أي شخص من إرساله. كيف يمكننا فعل ذلك مع iptables إذا كان PING نفسه يحتوي على اتصال ثنائي الاتجاه؟

  • iptables -A INPUT -s IP -p icmp –icmp-type echo-request -j DROP

قم بحظر أي وصول وارد من خلال واجهة eth0 (فقط) ، مما يسمح بالوصول إلى eth1.

  • iptables -A المدخلات -i eth0 -j DROP
  • iptables -A INPUT -i eth1 -j قبول

قم بحظر حركة المرور الصادرة على واجهة eth0 (فقط) ، مما يسمح بالوصول إلى eth1.

  • iptables -A الإخراج -o eth0 -j DROP
  • iptables -A الإخراج -o eth1 -j قبول

اسمح بأي حركة مرور واردة وصادرة على eth0 ، وارفض أي حركة مرور واردة أو صادرة على eth1.

  • iptables -A INPUT -i eth0 -j قبول
  • iptables -A الإخراج -o eth0 -j قبول
  • iptables -A المدخلات -i eth1 -j DROP
  • iptables -A الإخراج -o eth1 -j DROP

إذا كنت تريد أن تبدأ في رؤية كيفية عمل بروتوكول TCP و UDP ، فإليك بعض الأمثلة:

حظر الوصول إلى الويب إلى www.google.es والسماح لكل شيء آخر (ping) على سبيل المثال.

  • iptables -A الإخراج -d www.google.es -p tcp –dport 80 -j DROP

احظر وصول FTP إلى أي عنوان IP أو مجال ، واسمح لكل شيء آخر.

  • iptables -A الإخراج -p tcp –dport 21 -j DROP

امنع وصول SSH إلى IP 192.168.1.50 ، واسمح لكل شيء آخر.

  • iptables -A OUTPUT -d 192.168.1.50 -p tcp -dport 22 -j DROP

احظر وصول Telnet إلى الشبكة الفرعية 192.168.2.0 ، واسمح لكل شيء آخر.

  • iptables -A OUTPUT -d 192.168.2.0/24 -p tcp -dport 23 -j DROP

منع الوصول 192.168.1.50 إلى خادم الويب الخاص بنا.

  • iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP

منع وصول 192.168.1.150 و 192.168.1.151 إلى خادم SSH الخاص بنا.

  • iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

حظر الوصول للشبكة الفرعية 192.168.2.0/24 بالكامل إلى خدمة telnet الخاصة بنا

  • iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

حظر وصول الجميع إلى خادم OpenVPN ، باستثناء عنوان IP 77.77.77.77 المسموح به.

  • iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j قبول
  • iptables -A INPUT -p tcp –dport 1194 -j DROP

قم بحظر وصول DNS إلى 8.8.8.8 والسماح لكل شيء آخر (ping) على سبيل المثال.

  • iptables -A OUTPUT -d 8.8.8.8 -p tcp -dport 53 -j DROP
  • iptables -A OUTPUT -d 8.8.8.8 -p udp -port 53 -j DROP

امنع الوصول إلى المنفذ 1194 لأي IP أو مجال ، واسمح لكل شيء آخر.

  • iptables -A INPUT -p udp –dport 1194 -j DROP

لدينا خادم DNS على خادمنا. نريد فقط أجهزة الكمبيوتر الموجودة على الشبكة الفرعية 192.168.1.0/24 لتكون قادرة على الاتصال بها ، وحظر أي وصول آخر.

  • iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j قبول
  • iptables -A INPUT -s 192.168.1.0/24 -p udp udp –dport 53 -j ACCEPT
  • iptables -A INPUT -p tcp –dport 53 -j DROP
  • iptables -A INPUT -p udp –dport 53 -j DROP

حظر الوصول إلى خادم الويب الخاص بنا ، من نطاق IP 192.168.100.0/24 ، القادم من واجهة eth0.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –port 80 -j DROP

حظر الوصول إلى خادم ssh الخاص بنا ، من نطاق IP 192.168.100.0/24 ، القادم من واجهة eth1.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –port 22 -j DROP

 

أمثلة على الاستخدام المتقدم

إذا كنت تريد معرفة المزيد عن iptables ، فإليك بعض الأمثلة التي نستخدم فيها وحدة connlimit.

السماح بـ 10 اتصالات Telnet فقط لكل عميل.

  • iptables -A INPUT -p tcp –dport 23 -m connlimit -connlimit-above 10 –connlimit-mask 32 -j DROP

رفض الاتصال رقم 5 على الويب بواسطة العميل (ليس له معنى ولكنه مثال).

  • iptables -A INPUT -p tcp –dport 80 -m connlimit -connlimit-upto 5 -connlimit-mask 32 -j DROP

اسمح فقط بـ 10 اتصالات Telnet لكل عميل (قم بذلك بشكل مختلف عما ورد أعلاه).

  • iptables -A INPUT -p tcp –dport 23 -m connlimit -connlimit-upto 10 –connlimit-mask 32 -j ACCEPT
  • iptables -A INPUT -p tcp –dport 23 -j DROP

اسمح فقط بـ 10 اتصالات ويب في نطاق IP 10.0.0.0/8 ، وقم برفضه إذا كان يتجاوز هذا الرقم.

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit -connlimit-above 10 –connlimit-mask 8 -j DROP

اسمح فقط بـ 20 اتصال HTTP لكل عميل ، بمجرد تجاوزه ، نرسل إعادة تعيين TCP.

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-فوق 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

أو بهذه الطريقة:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-فوق 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

كما ترى ، فإن جدار الحماية هذا مكتمل حقًا ويمكننا القيام بالكثير من التكوين المتقدم للغاية ، للتحكم في جميع الاتصالات الواردة والصادرة بالتفصيل.