أساسيات Iptables: قواعد وأوامر جدار الحماية الشائعة

المقدمة

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

كيفية استخدام هذا الدليل

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

خذ في الاعتبار أن ترتيب القواعد لديك مهم. تستخدم جميع هذه الأوامر iptables الخيار -A لإضافة القاعدة الجديدة إلى نهاية السلسلة. إذا كنت تريد وضعه في مكان آخر في السلسلة، يمكنك استخدام الخيار -I الذي يتيح لك تحديد موضع القاعدة الجديدة (أو وضعها في بداية السلسلة بعدم تحديد رقم قاعدة).

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

تذكر أنه يمكنك التحقق من مجموعة قواعد iptables الحالية باستخدام sudo iptables -S و sudo iptables -L.

لنلقِ نظرة على أوامر iptables!

حفظ القواعد

قواعد iptables هي مؤقتة، مما يعني أنه يجب حفظها يدويًا لتحافظ على استمرارها بعد إعادة التشغيل.

على Ubuntu، أحد الطرق لحفظ قواعد iptables هو استخدام حزمة iptables-persistent. قم بتثبيتها باستخدام apt بهذه الطريقة:

  1. sudo apt install iptables-persistent

أثناء التثبيت، سيُطلَب منك حفظ قواعد جدار الحماية الحالية الخاصة بك.

إذا قمت بتحديث قواعد جدار الحماية الخاصة بك وترغب في حفظ التغييرات، قم بتشغيل هذا الأمر:

  1. sudo netfilter-persistent save

قد تحتوي توزيعات Linux الأخرى على طرق بديلة لجعل التغييرات الخاصة بك في iptables دائمة. يرجى الرجوع إلى الوثائق ذات الصلة للحصول على مزيد من المعلومات.

قائمة وحذف القواعد

إذا كنت ترغب في معرفة كيفية عرض وحذف قواعد iptables، تحقق من هذا البرنامج التعليمي: كيفية عرض وحذف قواعد جدار الحماية في Iptables.

قواعد مفيدة بشكل عام

تتضمن هذه القسم مجموعة متنوعة من أوامر iptables التي ستنشئ قواعد مفيدة بشكل عام على معظم الخوادم.

السماح بالاتصالات الداخلية

واجهة الـ الحلقية، المعروفة أيضًا باسم lo، هي ما يستخدمه الكمبيوتر لتوجيه اتصالات الشبكة إلى نفسه. على سبيل المثال، إذا قمت بتشغيل ping localhost أو ping 127.0.0.1، سيرد الخادم على نفسه باستخدام الحلقية. كما يتم استخدام واجهة الحلقية إذا قمت بتكوين خادم التطبيق للاتصال بخادم قاعدة البيانات باستخدام عنوان localhost. ولذلك، سترغب في التأكد من أن جدار الحماية الخاص بك يسمح بهذه الاتصالات.

لقبول كافة حركة المرور على واجهة الحلقية الخاصة بك، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A OUTPUT -o lo -j ACCEPT

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

  1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

السماح بالاتصالات الصادرة المُنشأة

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

  1. sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

السماح للشبكة الداخلية بالوصول إلى الشبكة الخارجية

بافتراض أن eth0 هو الشبكة الخارجية الخاصة بك، و eth1 هو الشبكة الداخلية الخاصة بك، سيتيح هذا لشبكتك الداخلية الوصول إلى الشبكة الخارجية:

  1. sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

إسقاط الحزم غير الصالحة

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

  1. sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

حظر عنوان IP

لحظر اتصالات الشبكة القادمة من عنوان IP محدد، مثل 203.0.113.51 على سبيل المثال، قم بتشغيل هذا الأمر:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j DROP

في هذا المثال، تحدد -s 203.0.113.51 عنوان IP المصدر كـ “203.0.113.51”. يمكن تحديد عنوان IP المصدر في أي قاعدة جدار نارية، بما في ذلك قاعدة السماح.

إذا كنت ترغب في رفض الاتصال بدلاً من ذلك، والذي سيستجيب لطلب الاتصال بخطأ “الاتصال مرفوض”، قم بتبديل “DROP” بـ “REJECT” بهذه الطريقة:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

حظر الاتصالات بواجهة الشبكة

لحظر الاتصالات من عنوان IP محدد، على سبيل المثال 203.0.113.51، إلى واجهة شبكة محددة، على سبيل المثال eth0، استخدم هذا الأمر:

  1. iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

هذا هو نفس المثال السابق، مع إضافة -i eth0. يمكن تحديد واجهة الشبكة في أي قاعدة جدار ناري، وهو طريقة رائعة لتحديد القاعدة لشبكة معينة.

الخدمة: SSH

إذا كنت تستخدم خادمًا بدون وحدة تحكم محلية، فمن المحتمل أنك ترغب في السماح باتصالات SSH الواردة (المنفذ 22) حتى تتمكن من الاتصال بخادمك وإدارته. تغطي هذه القسم كيفية تكوين جدار الحماية الخاص بك بقواعد مختلفة تتعلق بـ SSH.

السماح بجميع اتصالات SSH الواردة

للسماح بجميع اتصالات SSH الواردة، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات SSH المُنشأة، ليس ضروريًا إلا إذا لم يتم تعيين سياسة OUTPUT إلى ACCEPT.

السماح باتصالات SSH الواردة من عنوان IP أو شبكة فرعية محددة

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

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات SSH المُنشأة، ليس ضروريًا إلا إذا لم يتم تعيين سياسة OUTPUT إلى ACCEPT.

السماح باتصالات SSH الصادرة

إذا كانت سياسة الناتج من جدار الحماية الخاص بك غير مضبوطة على القبول، وترغب في السماح باتصالات SSH الصادرة – أي قيام خادمك ببدء اتصال SSH بخادم آخر – يمكنك تشغيل هذه الأوامر:

  1. sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

السماح بالدخول الوارد Rsync من عنوان IP أو الشبكة الفرعية المحددة

يمكن استخدام Rsync، الذي يعمل على المنفذ 873، لنقل الملفات من كمبيوتر إلى آخر.

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

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات rsync المنشأة، ليس ضروريًا إلا إذا كانت سياسة الناتج غير مضبوطة على القبول.

الخدمة: خادم الويب

خوادم الويب، مثل Apache و Nginx، عادة ما تستمع للطلبات على المنفذ 80 و 443 لاتصالات HTTP و HTTPS على التوالي. إذا كانت السياسة الافتراضية لحركة المرور الواردة مضبوطة على الإسقاط أو الرفض، سترغب في إنشاء قواعد تسمح لخادمك بالاستجابة لهذه الطلبات.

السماح بجميع طلبات HTTP الواردة

للسماح بجميع الاتصالات الواردة HTTP (المنفذ 80)، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات HTTP المنشأة، ضروري فقط إذا لم يتم ضبط سياسة OUTPUT على ACCEPT.

السماح بجميع طلبات HTTPS الواردة

للسماح بجميع الاتصالات الواردة HTTPS (المنفذ 443)، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات HTTP المنشأة، ضروري فقط إذا لم يتم ضبط سياسة OUTPUT على ACCEPT.

السماح بجميع طلبات HTTP و HTTPS الواردة

إذا كنت ترغب في السماح بكل من حركة مرور HTTP و HTTPS، يمكنك استخدام وحدة multiport لإنشاء قاعدة تسمح بكلا المنافذ. للسماح بجميع الاتصالات الواردة HTTP و HTTPS (المنفذ 443)، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات HTTP و HTTPS المُنشأة، ضروري فقط إذا لم يتم تعيين سياسة ACCEPT للـ OUTPUT.

الخدمة: MySQL

يستمع MySQL لاتصالات العميل على المنفذ 3306. إذا كانت قاعدة بيانات MySQL الخاصة بك تُستخدم من قبل عميل على خادم بعيد، فيجب التأكد من السماح لهذه المرور.

السماح بالوصول إلى MySQL من عنوان IP أو شبكة محددة

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

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات MySQL المُنشأة، ضروري فقط إذا لم يتم تعيين سياسة ACCEPT للـ OUTPUT.

السماح بالوصول إلى MySQL من واجهة الشبكة المحددة

للسماح باتصالات MySQL إلى واجهة شبكة محددة – على سبيل المثال، إذا كان لديك واجهة شبكة خاصة eth1، استخدم هذه الأوامر:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات MySQL المنشأة، ضروري فقط إذا لم يتم تعيين سياسة OUTPUT إلى ACCEPT.

الخدمة: PostgreSQL

تستمع PostgreSQL إلى اتصالات العميل على البورت 5432. إذا كانت خادم قاعدة بيانات PostgreSQL الخاص بك يتم استخدامه من قبل عميل على خادم بعيد، يجب عليك التأكد من السماح بهذا المرور.

PostgreSQL من عنوان IP محدد أو شبكة فرعية

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

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات PostgreSQL المنشأة، ضروري فقط إذا لم يتم تعيين سياسة OUTPUT إلى ACCEPT.

السماح ل PostgreSQL بواجهة الشبكة المحددة

للسماح باتصالات PostgreSQL إلى واجهة الشبكة المحددة – على سبيل المثال إذا كان لديك واجهة شبكة خاصة eth1، استخدم هذه الأوامر:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات PostgreSQL المنشأة، لا يلزم إذا لم يتم تعيين سياسة OUTPUT إلى ACCEPT.

الخدمة: البريد

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

حظر البريد الصادر SMTP

إذا كان الخادم الخاص بك لا يجب أن يرسل بريدًا صادرًا، قد ترغب في منع هذا النوع من المرور. لحظر البريد الصادر SMTP، الذي يستخدم المنفذ 25، قم بتشغيل هذا الأمر:

  1. sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

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

السماح بجميع حركة المرور الواردة لبروتوكول SMTP

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

  1. sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات SMTP المنشأة، ضروري فقط إذا لم يتم تعيين سياسة الـ OUTPUT على ACCEPT.

السماح بجميع حركة المرور الواردة لبروتوكول IMAP

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

  1. sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات IMAP المنشأة، ضروري فقط إذا لم يتم تعيين سياسة الـ OUTPUT على ACCEPT.

السماح بجميع حركة المرور الواردة لبروتوكول IMAPS

للسماح لخادمك بالرد على اتصالات IMAPS، المنفذ 993، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات IMAPS المُنشأة، ليس ضروريًا إلا إذا كانت سياسة OUTPUT لم تُعين على ACCEPT.

السماح بجميع اتصالات POP3 الواردة

للسماح لخادمك بالرد على اتصالات POP3، المنفذ 110، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات POP3 المُنشأة، ليس ضروريًا إلا إذا كانت سياسة OUTPUT لم تُعين على ACCEPT.

السماح بجميع اتصالات POP3S الواردة

للسماح لخادمك بالرد على اتصالات POP3S، المنفذ 995، قم بتشغيل هذه الأوامر:

  1. sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

الأمر الثاني، الذي يسمح بحركة المرور الصادرة لاتصالات POP3S المُنشأة، ليس ضروريًا إلا إذا كانت سياسة OUTPUT لم تُعين على ACCEPT.

الختام

تغطي ذلك العديد من الأوامر التي يتم استخدامها بشكل شائع عند تكوين جدار حماية iptables. بالطبع، iptables هي أداة مرنة للغاية، لذا لا تتردد في مزج الأوامر مع خيارات مختلفة لتتناسب مع احتياجاتك الخاصة إذا لم يتم تغطيتها هنا.

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

Source:
https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands