يُعدّ جدار الحماية خط الدفاع الأول لأي خادم متصل بالإنترنت. على نظام لينكس، يوفّر firewalld واجهة سهلة قائمة على المناطق (zones) فوق محرّك النواة nftables/iptables، مما يتيح لك تغيير القواعد أثناء التشغيل دون قطع الاتصالات القائمة. يوضّح هذا الدليل كيفية تثبيت وإعداد firewalld على أوبونتو 22.04 أو 24.04 LTS، وهو مثالي عند تأمين خادم VPS أو خادم سحابي مُدار قبل تعريضه للإنترنت العام.
المتطلبات المسبقة
- خادم أوبونتو 22.04/24.04 مع مستخدم غير الجذر (root) يملك صلاحيات
sudo. - وصول عبر SSH. أبقِ جلسة SSH الحالية مفتوحة أثناء إعداد جدار الحماية، حتى تتمكن من الاستعادة في حال أغلقت الوصول على نفسك بالخطأ.
الخطوة 1 — تثبيت وتشغيل firewalld
يأتي أوبونتو افتراضيًا بـ ufw وليس firewalld. إذا كان ufw نشطًا، عطّله أولًا لتجنّب تنازع مديرَين على المحرّك نفسه:
sudo systemctl disable --now ufw
ثم ثبّت firewalld وفعّله:
sudo apt update
sudo apt install firewalld -y
sudo systemctl enable --now firewalld
تأكّد من أنه يعمل:
sudo firewall-cmd --state
ينبغي أن ترى running.
الخطوة 2 — فهم المناطق (Zones)
يجمّع firewalld القواعد ضمن مناطق (zones)، تمثّل كل واحدة مستوى ثقة لاتصال شبكي. تحدّد منطقتك النشطة أي حركة مرور مسموح بها. أكثر المناطق شيوعًا هي:
| المنطقة | الاستخدام النموذجي |
|---|---|
drop |
إسقاط كل الحركة الواردة دون أي رد (الأكثر تقييدًا) |
block |
رفض الوارد مع رسالة ICMP |
public |
الافتراضي للشبكات غير الموثوقة؛ الخدمات المختارة فقط مسموح بها |
internal |
الشبكات الداخلية الموثوقة |
trusted |
السماح بكل الحركة (الأقل تقييدًا) |
تحقّق من المنطقة الافتراضية والمناطق النشطة:
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
على خادم جديد تكون المنطقة الافتراضية عادةً public، وهو الخيار الصحيح لـ VPS متصل بالإنترنت. اعرض كل ما هو مسموح به فيها حاليًا:
sudo firewall-cmd --zone=public --list-all
الخطوة 3 — التشغيل اللحظي مقابل الدائم: المفهوم الأساسي
يُطبَّق كل تغيير افتراضيًا على الإعداد اللحظي (runtime)، الذي يُفقَد عند إعادة التحميل أو إعادة التشغيل. لجعل التغيير دائمًا، أضِف --permanent. والتغييرات الدائمة لا تسري حتى تعيد التحميل.
سير العمل الآمن هو: الاختبار في الوضع اللحظي ثم التثبيت الدائم. وأنظف طريقة لتثبيت إعداد لحظي يعمل بنجاح هي:
sudo firewall-cmd --runtime-to-permanent
أو أضِف --permanent لكل قاعدة ثم أعِد التحميل:
sudo firewall-cmd --reload
يعيد --reload قراءة القواعد الدائمة دون قطع الاتصالات القائمة — تبقى جلسة SSH لديك حيّة.
الخطوة 4 — السماح بـ SSH قبل أي شيء آخر
قبل إحكام جدار الحماية، تأكّد من السماح بـ SSH، وإلا فسيفشل اتصالك التالي. تغطّي خدمة ssh المنفذ الافتراضي 22:
sudo firewall-cmd --permanent --zone=public --add-service=ssh
إذا كنت تشغّل SSH على منفذ مخصّص (مثلًا 2222)، افتح ذلك المنفذ بدلًا من ذلك:
sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp
طبّق التغيير:
sudo firewall-cmd --reload
الخطوة 5 — فتح الخدمات لتطبيقاتك
يعرف firewalld مئات الخدمات المعرَّفة مسبقًا بالاسم. اعرضها بـ firewall-cmd --get-services. لخادم ويب نموذجي، اسمح بـ HTTP و HTTPS:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
إذا كنت تستضيف بريد الأعمال على الجهاز نفسه، افتح منافذ التسليم (submission) و IMAP ذات الصلة:
sudo firewall-cmd --permanent --zone=public --add-service=smtp-submission
sudo firewall-cmd --permanent --zone=public --add-service=imaps
sudo firewall-cmd --reload
لفتح منفذ اعتباطي لا تغطّيه خدمة مسمّاة، استخدم --add-port مع البروتوكول:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
الخطوة 6 — إزالة القواعد
لإغلاق خدمة أو منفذ، استبدل add بـ remove ثم أعِد التحميل:
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --permanent --zone=public --remove-port=8080/tcp
sudo firewall-cmd --reload
الخطوة 7 — القواعد الغنية (Rich Rules) للتحكّم الدقيق
تتيح لك القواعد الغنية التعبير عن شروط لا تستطيع الخدمات البسيطة تحقيقها — مثل تقييد الوصول حسب عنوان IP المصدر. للسماح بـ SSH من شبكة مكتبك فقط ورفضه في كل مكان آخر، أزِل أولًا خدمة ssh العامة، ثم أضِف قاعدة غنية:
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
sudo firewall-cmd --reload
اختبر القاعدة الجديدة في الوضع اللحظي أولًا (دون --permanent) وتأكّد من أنك ما زلت قادرًا على الاتصال من عنوان IP المسموح به قبل تثبيتها دائمًا. يمكنك أيضًا تحديد معدّل للخدمة لإبطاء محاولات التخمين العنيف (brute-force):
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule service name="ssh" limit value="5/m" accept'
الخطوة 8 — التحقّق والتدقيق
اعرض الحالة النهائية لمنطقتك للتأكّد من أن كل شيء كما هو مقصود:
sudo firewall-cmd --zone=public --list-all
تحقّق من الإعداد الدائم بحثًا عن أخطاء في الصياغة:
sudo firewall-cmd --check-config
الاستعادة من الإغلاق الذاتي للوصول
إذا قطع تغييرٌ ما وصولك، فإن التغيير اللحظي يختفي عند إعادة التشغيل — لذا فإن إعادة تشغيل قسري من وحدة تحكّم مزوّدك تعيد الحالة الدائمة السابقة. والأفضل من ذلك، اعمل عبر جلسة وحدة تحكّم يوفّرها لك مزوّدك، أو جهّز تراجعًا مؤقتًا (rollback) قبل التغييرات المحفوفة بالمخاطر. وهنا تحديدًا يساعد التشغيل على منصّة سحابية مُدارة: تحتفظ بوصول وحدة تحكّم خارج النطاق (out-of-band) ولقطات (snapshots) بحيث لا تتحوّل قاعدة سيّئة الإعداد إلى خادم معطّل.
الخاتمة
لديك الآن إعداد firewalld يعمل: مناطق لمستويات الثقة، وخدمات ومنافذ مسمّاة لتطبيقاتك، وقواعد غنية للتقييد حسب المصدر، وسير عمل آمن من اللحظي إلى الدائم. أبقِ مجموعة القواعد في حدّها الأدنى — افتح فقط ما تحتاجه — وأعِد تدقيقها كلما أضفت خدمة جديدة.
هل تريد هذا التأمين على بنية تحتية تبقى داخل المملكة، مع إقامة بيانات متوافقة مع PDPL/NCA ودعم عربي محلي؟ أنشئ خادم VPS أو خادمًا سحابيًا مع Skyline Cloud وطبّق هذه الخطوات في دقائق. أنشئ حسابك وابدأ الآن.
Comments
0 total · 0 threads