ما هو جدار الحماية ferm المستند إلى iptables على نظام Linux وكيفية تكوينه

In لينكس- أنظمة التشغيل المستندة إلى جدار الحماية بامتياز الذي تستخدمه هو iptables ، ومع ذلك ، فمن الممكن أيضًا أن تستخدم nftables ، وهو تطور iptables ، أكثر فاعلية وبتراكيب "بشرية" أكثر بكثير ، ومع ذلك ، لا يزال العالم يستخدم nftables. سنشرح اليوم كيفية تكوين جدار حماية على خوادم Linux باستخدام Ferm (For Easy Rule Making) ، واجهة iptables التي ستسمح لنا بإضافة قواعد إلى جدار الحماية بسهولة شديدة وبسرعة وبساطة ، دون الحاجة إلى تعلم بناء الجملة iptables.

ما هو جدار الحماية Ferm وما الغرض منه؟

ما هو جدار الحماية ferm المستند إلى iptables على نظام Linux

Ferm (For Easy Rule Making) هو واجهة iptables ، وهذا يعني أنه في الواقع يستخدم iptables للسماح أو رفض حركة المرور ، ولكنه يسمح لنا بتكوين جدار الحماية بطريقة متقدمة جدًا دون الحاجة إلى تعلم بناء جملة iptables أو اصنع نصوصًا مختلفة باستخدام iptables ، لكننا سنفعل ذلك مباشرةً مع Ferm. هذه الأداة قادرة على قراءة القواعد من ملف التكوين الذي سنقوم بتعريفه ، وبعد ذلك سوف "تستدعي" iptables لإضافة القواعد المختلفة واحدة تلو الأخرى ، وإدراجها في الوقت الفعلي في النواة.

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

لا يزال Ferm هو الواجهة الأمامية لـ iptables ، لذلك عندما نستخدم هذه الأداة ، سنكون دائمًا قادرين على تعديل وتهيئة جدار الحماية مباشرةً باستخدام أوامر iptables. في الواقع ، يستطيع Ferm استيراد قواعد iptables الحالية ووضعها تلقائيًا في ملف التكوين لتعديلها أو توسيعها لاحقًا.

يعد ufw أحد أشهر واجهات iptables ، ويستخدم على نطاق واسع من قبل مسؤولي النظام والشبكات لتهيئة جدران الحماية الخاصة بهم بسهولة وسرعة.

تركيب وتشغيل Ferm

تثبيت Ferm بسيط للغاية ، فهو موجود حاليًا في معظم مستودعات التوزيعات المختلفة المستندة إلى Linux ، وفي حالتنا هذه ، استخدمنا أحدث إصدار من Debian لإجراء جميع الاختبارات التي سنعلمك إياها. لتثبيت هذا البرنامج ، وهو iptables frontend ، يجب علينا تنفيذ الأمر التالي:

sudo apt install ferm

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

سيخبرنا مُثبِّت Ferm أنه سيُحمِّل قواعد جدار الحماية أثناء بدء التشغيل من المسار /etc/ferm/ferm.conf ، أي أن كل شيء في هذا الملف سيتم تمريره تلقائيًا إلى iptables للسماح بشبكة المرور أو رفضها. يسمح لنا التكوين الافتراضي لجدار الحماية هذا بالوصول إلى SSH عن بُعد عبر المنفذ 22 ، إذا لم يكن لديك SSH مهيأ على هذا المنفذ ، فسيتعين عليك تحرير القيم الافتراضية والنقر فوق "لا" حتى لا يبدأ ، وإلا ستفقد الاتصال.

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

بمجرد التثبيت ، يمكننا الانتقال إلى / etc / ferm / path وسنرى كل من ملف التكوين المسمى ferm.conf ، بالإضافة إلى دليل يسمى ferm.d حيث يمكننا دمج ملفات تكوين ferm الخاصة بنا لاستيرادها ، وهذا يسمح لدينا نمطية أكبر.

يأتي Ferm بالفعل افتراضيًا بقائمة من القواعد التي يمكننا إزالتها في أي وقت ، ولكن هذا سيساعدنا في التعامل مع بناء جملة iptables frontend ، وبالتالي ، سيكون مفيدًا للغاية. إذا نظرنا إلى بناء الجملة ، فسنرى أنه مشابه لـ nftables ، لكنه مبني على iptables.

في لقطة الشاشة التالية ، يمكنك أن ترى كيف يتم الإعلان عن المجالات التي سيتم تهيئتها (iptables أو ip6tables) والجداول والسلاسل ، بالإضافة إلى القواعد التي لدينا داخل السلاسل المختلفة.

يمكننا أيضًا أن نرى أن لدينا عدة قواعد بشكل افتراضي:

  • في سلسلة INPUT ، السياسة هي DROP ، ويسمح بحركة مرور المضيف المحلي ، وحركة مرور ICMP ويسمح بالاتصال عبر IPsec وأيضًا عبر SSH مع المنافذ الافتراضية. فيما يتعلق بحالة الاتصالات ، يتم إسقاط الاتصالات غير الصالحة ، ويسمح بالاتصالات القائمة والمرتبطة ، ولكن لا يُسمح بالاتصالات الجديدة ، باستثناء تلك المحددة على وجه التحديد.

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

بعد ذلك ، يمكنك رؤية ملف التكوين هذا بتنسيق نصي:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# تتبع الاتصال
حالة وزارة الدفاع غير صالح DROP ؛
حالة وزارة الدفاع (أنشئت ذات الصلة) قبول ؛

# السماح بالحزمة المحلية
واجهة ما تقبل ؛

# الرد على ping
بروتو icmp قبول ؛

# تسمح IPsec
بروتو udp dport 500 قبول ؛
ifeq ($ DOMAIN، ip) {
بروتو (خاصة آه) قبول ؛
} @آخر {
بروتو (إسب) قبول ؛
}

# السماح باتصالات SSH
بروتو tcp dport ssh قبول ؛
}
سلسلة OUTPUT {
قبول السياسة ؛

# تتبع الاتصال
#mod state state غير صالح DROP؛
حالة وزارة الدفاع (أنشئت ذات الصلة) قبول ؛
}
سلسلة FORWARD {
سياسة DROP ؛

# تتبع الاتصال
حالة وزارة الدفاع غير صالح DROP ؛
حالة وزارة الدفاع (أنشئت ذات الصلة) قبول ؛
}
}
}

تضمين ferm.d / ؛

الجزء الأكثر إثارة للاهتمام هو "تضمين ferm.d /" الموجود في الجزء الأخير ، وهذا يعني أنه سيستورد جميع ملفات التكوين التي لدينا في هذا الدليل المعني.

يستخدم جدار الحماية Ferm أدناه iptables ، لذلك إذا قمنا بتنفيذ الأمر التالي:

iptables -L

يمكننا أن نرى الحالة الحالية لـ iptables مع جميع القواعد التي أدرجتها في جدار الحماية:

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

التكوين الأساسي لـ Ferm

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

أول شيء يجب مراعاته هو أن جميع قواعد Ferm تبدأ وتنتهي بأقواس ، وتنتهي القواعد بفاصلة منقوطة ، لذلك فهي بناء جملة معروفة في البرمجة. الميزات الأخرى المثيرة للاهتمام هي تجاهل فواصل الأسطر ، ويمكنك وضع التعليقات في أي مكان بوضع "#" في نهاية السطر.

فيما يتعلق بصيغة iptables و ferm ، لدينا بعض الاختلافات:

  • لتحديد واجهة الإدخال: الواجهة (إذا)
  • لتحديد واجهة الخروج: الواجهة الخارجية (من)
  • لتعريف الأصل: saddr
  • لتحديد الوجهة: daddr
  • لتعريف بروتوكول: proto
  • ميناء المنشأ: رياضة
  • ميناء الوجهة: dport
  • تحميل وحدة: mod
  • انتقل إلى قاعدة مخصصة: قفزة

في Ferm لا توجد أوامر مثل -A أو -I أو -C أو -R أو -D ، نظرًا لأن كل شيء مكتوب في ملف تكوين ، يحدث نفس الشيء مع أوامر إضافة سلسلة جديدة أو إعادة تسميتها أو حذفها ، الآن هنا يختفي تماما. الميزات الأخرى هي أن ferm يسمح لك بوراثة قواعد مختلفة لاستخدامها ضمن قواعد أخرى ، متداخلة في ملف التكوين.

بمجرد أن نعرف ما هو شكل بناء الجملة تقريبًا ، سنرى بعض الأمثلة التي تقارنها مع iptables ، سنعمل في كل منها على جدول "filter" في سلسلة "INPUT".

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

في ferm ، سيتم كتابة هذا على النحو التالي (إضافة سياسة سلسلة الإخراج والأمام من جدول التصفية):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

يسمح لنا Ferm بتعريف نفس القواعد في INPUT و OUTPUT بسهولة وسرعة ، دون الحاجة إلى تكرار القواعد مرارًا وتكرارًا. على سبيل المثال ، لنتخيل أننا نريد الآن قبول بروتوكول TCP في كل من سلسلة INPUT وسلسلة OUTPUT ، سيكون هذا في iptables على النحو التالي:

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

مع Ferm يكون الأمر بسيطًا مثل القيام بما يلي:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

كما ترى ، من الأسرع والأسهل تطبيق نفس القاعدة على كل من INPUT و OUTPUT.

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

يتيح لك Ferm أيضًا "تحميل" وحدات iptables لاستخدامها ، وتهيئة جدار الحماية بطريقة متقدمة ، على سبيل المثال ، لدينا ما يلي:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

يمكننا أن نضع في كامل ملف التكوين.

لتطبيق القواعد المقدمة في Ferm ، سيتعين علينا تنفيذ الأمر التالي:

ferm -i -t 10 /etc/ferm/ferm.conf

استيراد قواعد iptables إلى Ferm

يسمح لنا Ferm باستيراد قواعد iptables التي لدينا حاليًا قيد التنفيذ بسهولة وسرعة ، في ملف Ferm لتعديلها لاحقًا. لكي نتمكن من القيام بذلك ، سيتعين علينا ببساطة تحميل قواعد iptables في الذاكرة (قيد الاستخدام حاليًا) وتنفيذ هذا الأمر:

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

عندما نقوم بتشغيله ، يمكننا رؤية قواعد iptables مباشرة في صيغة Ferm.

إذا كنت تريد تحويل قواعد iptables التي لديك في ملف نصي إلى Ferm ، يمكنك تنفيذ الأمر التالي:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

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