🛡️
إعداد iptables على Linux 2026: دليل الجدار الناري الشامل من الصفر
من قواعد بسيطة إلى استراتيجيات حماية متقدمة، احمِ سيرفرك من كل اتجاه
الجدار الناري هو خط الدفاع الأول عن أي سيرفر متصل بالإنترنت. على Linux، الأداة الأقوى والأكثر استخدامًا في هذا المجال هي iptables. رغم ظهور بدائل أحدث مثل nftables و firewalld، يبقى iptables المعيار الذهبي الذي يعرفه كل مهندس Linux محترف. في هذا الدليل الشامل، سنغطي كل ما يحتاجه مدير السيرفر عن إعداد iptables من الصفر، بأمثلة عملية، سكربتات حقيقية، واستراتيجيات حماية متقدمة لعام 2026.
محتويات المقال
- ما هو iptables ولماذا تحتاجه؟
- الفرق بين iptables و nftables و firewalld
- السلاسل الأساسية في إعداد iptables
- الجداول في إعداد iptables
- إعداد iptables: الأوامر الأساسية
- كيف تسمح وتمنع IP في إعداد iptables
- إعداد قواعد للمنافذ الشائعة
- حماية من هجمات DDoS عبر إعداد iptables
- إعداد iptables لـ Port Forwarding
- حفظ قواعد إعداد iptables بشكل دائم
- كتابة سكربت لـ إعداد iptables احترافي
- سجلات إعداد iptables وكيف تحللها
- أخطاء شائعة في إعداد iptables
- إعداد iptables vs UFW: متى تستخدم كل منهما
- الخلاصة
ما هو iptables ولماذا تحتاجه؟
iptables هو واجهة لإدارة قواعد الجدار الناري في kernel Linux. عندما تصل أي حزمة (packet) إلى سيرفرك، يقوم Netfilter (الموجود داخل kernel) بفحصها وفقًا للقواعد المحددة في iptables ويقرر: تمرير، رفض، تعديل، أو إعادة توجيه. كل هذا يحدث في زمن نانوثوانٍ على مستوى kernel، مما يجعل iptables من أسرع الجدران النارية في العالم.
بدون إعداد iptables صحيح، يكون سيرفرك مكشوفًا أمام كل أنواع الهجمات: محاولات الاختراق على SSH، فحوصات المنافذ (port scanning)، هجمات الـ DDoS، استغلال ثغرات معينة، تخمين كلمات المرور brute force. أي سيرفر يعرض على الإنترنت بدون جدار ناري سيتعرض لمحاولات اختراق خلال دقائق من تشغيله.
لاحظ أن iptables يعمل على المستوى الـ network/transport (الطبقات 3 و 4)، أي يفحص IPs والمنافذ والبروتوكولات. هذا مختلف عن WAF (مثل ModSecurity) الذي يعمل على مستوى التطبيق. الإعداد المثالي يجمع بين iptables للحماية الشبكية و WAF لحماية التطبيق.
- منع الاتصال غير المصرح به على المنافذ الحساسة.
- التصدي لهجمات الـ DDoS الصغيرة والمتوسطة.
- تنفيذ سياسات الـ NAT و Port Forwarding.
- تسجيل ومراقبة محاولات الاتصال المشبوهة.
- عزل الخدمات الداخلية عن الإنترنت العام.
الفرق بين iptables و nftables و firewalld
قبل الغوص في إعداد iptables، من الضروري فهم البدائل وعلاقتها به. nftables هو الخلف الرسمي لـ iptables، تم تصميمه ليحلّ محله تدريجيًا. يقدم بناء جملة أنظف، أداء أفضل في القواعد الكبيرة، وتوحيد لكل بروتوكولات IPv4 و IPv6 و ARP في إطار واحد. على Debian 12 و Ubuntu 22.04+ و RHEL 9، nftables هو الافتراضي، لكن أوامر iptables ما زالت تعمل عبر طبقة توافق.
firewalld هو خدمة عالية المستوى تعتمد على nftables (أو iptables) في الخلفية. يقدم مفهوم “الـ Zones” حيث تُجمع القواعد بحسب الثقة (public, internal, dmz, etc.). firewalld مفيد للأنظمة الديناميكية حيث تتغير الواجهات والقواعد بانتظام. لكنه يضيف طبقة من التجريد قد لا تحتاجها.
iptables يبقى الأقوى للتعلم، لأن فهمه يفتح الباب لفهم كل التقنيات الأخرى. كل قواعد nftables يمكن تحويلها إلى iptables والعكس. المفاهيم الأساسية واحدة: السلاسل، الجداول، المطابقة، الإجراءات. لذا التعلم على iptables استثمار آمن في كل الحالات.
السلاسل الأساسية في إعداد iptables (INPUT, OUTPUT, FORWARD)
iptables ينظّم القواعد في “سلاسل” (chains). كل سلسلة تمثّل لحظة معينة في رحلة الحزمة عبر النظام. السلاسل الثلاث الأساسية في جدول filter (الأكثر استخدامًا) هي: INPUT للحزم القادمة إلى السيرفر، OUTPUT للحزم الخارجة منه، FORWARD للحزم التي تمر عبره (في حالة عمله كموجّه).
- INPUT: الحزم المتجهة إلى عمليات على السيرفر نفسه.
- OUTPUT: الحزم الخارجة من السيرفر.
- FORWARD: الحزم التي يوجّهها السيرفر بين شبكات.
- PREROUTING: قبل قرار التوجيه (في جدول nat).
- POSTROUTING: بعد قرار التوجيه (في جدول nat).
كل سلسلة لها سياسة افتراضية (default policy) تطبَّق عند عدم مطابقة أي قاعدة. القيم الممكنة: ACCEPT، DROP، REJECT. الممارسة الأفضل في إعداد iptables: اجعل السياسة الافتراضية لـ INPUT و FORWARD هي DROP، ثم اسمح فقط بالاتصالات الضرورية. هذا ما يُعرف بـ “default deny” وهو الأكثر أمانًا.
# تعيين السياسات الافتراضية
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# عرض السياسات الحالية
iptables -L | grep policy
الجداول في إعداد iptables (filter, nat, mangle, raw)
iptables يستخدم خمسة جداول، كل واحد لغرض مختلف. الجدول filter هو الافتراضي، يُستخدم لاتخاذ قرار قبول أو رفض الحزم. جدول nat للتعديل على عناوين IP أو منافذ الحزمة (NAT, Port Forwarding, Masquerading). جدول mangle لتعديل خصائص خاصة في الحزم مثل TTL أو ToS. جدول raw للتحكم في وحدة connection tracking. وأخيرًا جدول security للسياسات المرتبطة بـ SELinux.
# عرض قواعد جدول معين
iptables -t filter -L -n -v # الافتراضي
iptables -t nat -L -n -v
iptables -t mangle -L -n -v
iptables -t raw -L -n -v
# عرض كل القواعد بتنسيق مفصل
iptables-save
في معظم الحالات اليومية، ستعمل فقط مع جدول filter. لكن إن كنت تحتاج إلى Port Forwarding أو NAT، فستستخدم nat. الجداول الأخرى لاستخدامات متقدمة جدًا في بنى الشبكة المعقدة.
إعداد iptables: الأوامر الأساسية
الآن لنبدأ بالأوامر العملية. لـ إعداد iptables بشكل صحيح، يجب فهم بنية الأمر الأساسية. كل أمر iptables يأخذ شكل: iptables -[action] [chain] [match] -j [target]. الـ action: A للإضافة، I للإدراج، D للحذف، L للعرض. الـ match: شروط مثل -p للبروتوكول، –dport للمنفذ، -s للمصدر، -d للوجهة.
# مسح كل القواعد الموجودة (احذر، يفقد الاتصال!)
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# السماح بحركة loopback (داخلية)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# السماح للاتصالات القائمة والمرتبطة
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# عرض القواعد بأرقام السطور
iptables -L -n -v --line-numbers
قاعدة “السماح للاتصالات القائمة والمرتبطة” أساسية وتأتي عادة في البداية. بدونها، يقطع iptables أي اتصال خارج (مثل تحديثات النظام أو طلبات DNS) فور انتهاء الإرسال. مع تتبع الحالة، iptables يفهم أن الحزم القادمة هي ردود لحزم خرجت من السيرفر فيمررها.
كيف تسمح وتمنع IP في إعداد iptables
أحد الاستخدامات الأكثر شيوعًا لـ iptables هو السماح أو منع IPs محددة. الصياغة بسيطة: استخدم -s لتحديد المصدر، و -j لتحديد الإجراء (ACCEPT أو DROP أو REJECT).
# منع IP محدد من الوصول للسيرفر
iptables -A INPUT -s 203.0.113.50 -j DROP
# منع نطاق كامل من IPs
iptables -A INPUT -s 198.51.100.0/24 -j DROP
# السماح فقط لـ IP محدد بالوصول لـ SSH
iptables -A INPUT -p tcp --dport 22 -s 192.0.2.10 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
# منع IP من بلد معين باستخدام ipset
ipset create blocked_country hash:net
ipset add blocked_country 1.2.3.0/24
ipset add blocked_country 5.6.7.0/24
iptables -A INPUT -m set --match-set blocked_country src -j DROP
الفرق بين DROP و REJECT: الأول يتجاهل الحزمة دون أي رد، فيظهر الـ IP وكأنه غير موجود. الثاني يرسل رسالة “ICMP unreachable” إلى المرسل. DROP أفضل أمنيًا لأنه يصعّب مهمة المسح (scanning)، لكنه قد يسبب تأخيرًا في بعض البروتوكولات لأن المرسل ينتظر timeout.
للتحكم في قوائم IP الكبيرة، استخدم ipset. هذه أداة مكمّلة لـ iptables تتيح لك إدارة آلاف IPs في “set” واحد، ثم الإشارة إليه من قاعدة iptables واحدة. هذا أسرع بكثير من إضافة آلاف القواعد المنفصلة.
سيرفرات VPS مع جدار ناري متقدم من مرام هوست
احصل على VPS مع iptables مُهيأ مسبقًا وحماية DDoS متقدمة. ابدأ من هنا.
إعداد قواعد للمنافذ الشائعة (SSH, HTTP, HTTPS)
المنافذ الأساسية التي يجب فتحها في معظم سيرفرات الويب: 22 لـ SSH، 80 لـ HTTP، 443 لـ HTTPS. أحيانًا تحتاج فتح 25، 465، 587 لـ SMTP، 993 لـ IMAPS، 21 لـ FTP. لكل منفذ، اكتب قاعدة محددة بدقة. تجنب فتح “كل المنافذ” أو ترك السياسة الافتراضية ACCEPT.
# السماح بـ SSH على المنفذ 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# السماح بـ HTTP و HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# السماح بـ SMTP و IMAPS
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
# السماح بـ DNS داخلي (لو السيرفر يقدم DNS)
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
# السماح بـ ping (ICMP)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
لتعزيز أمان SSH، احصر الوصول بـ IPs محددة. لو كان فريقك يعمل من مكاتب ثابتة، أضف فقط الـ IPs الخاصة بها. لو كنت تتنقل، استخدم VPN ثم اسمح فقط بـ IP الـ VPN. إن كان لا بد من فتح SSH للجميع، انقل المنفذ من 22 إلى منفذ غير قياسي مثل 2222 أو 22122، وفعّل fail2ban. للمزيد عن الأمان، اطّلع على دليل تأمين سيرفر Linux.
حماية من هجمات DDoS عبر إعداد iptables
iptables يقدّم وحدات قوية للتصدي لهجمات DDoS البسيطة والمتوسطة. الحماية الكاملة من DDoS الكبيرة تحتاج خدمات متخصصة (Cloudflare، Imperva)، لكن iptables يوقف 90% من الهجمات اليومية الصغيرة.
# تحديد عدد الاتصالات الجديدة من نفس IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 30 -j REJECT
# تحديد معدل الاتصالات الجديدة (rate limiting)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# منع SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# منع Ping Flood
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# منع Port Scanning
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
قاعدة connlimit تحد من عدد الاتصالات المتزامنة من نفس IP. 30 اتصال متزامن لـ HTTP/HTTPS رقم معقول لمعظم المتصفحات. تجاوز ذلك يدل على هجوم. الـ rate limiting بـ recent module ممتاز لـ SSH: لو حاول IP الاتصال أكثر من 4 مرات خلال 60 ثانية، يُمنع تلقائيًا.
SYN Flood من أشهر هجمات DDoS. الفكرة: المهاجم يرسل آلاف حزم SYN دون إكمال الـ handshake، فيستهلك موارد السيرفر. قاعدة limit/s تحدّ من معدل قبول SYN، فلا يستطيع المهاجم إغراق السيرفر.
إعداد iptables لـ Port Forwarding
Port Forwarding مفيد عندما تريد توجيه حركة من منفذ على السيرفر إلى منفذ على جهاز آخر. هذا شائع في إعدادات Docker، أو عند تشغيل خدمات داخلية خلف سيرفر بوابة.
# تفعيل IP forwarding في kernel
echo 1 > /proc/sys/net/ipv4/ip_forward
# لجعله دائمًا، عدّل /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# توجيه المنفذ 8080 الخارجي إلى 80 على جهاز داخلي
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
# Masquerading للسماح للأجهزة الداخلية بالوصول للإنترنت
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
DNAT (Destination NAT) يغيّر عنوان الوجهة في الحزمة قبل التوجيه. هذا يجعل الحزمة الموجهة في الأصل إلى السيرفر تصل إلى جهاز داخلي. MASQUERADE يغيّر عنوان المصدر إلى عنوان السيرفر العام، مما يتيح للأجهزة الداخلية الوصول للإنترنت بـ NAT.
حفظ قواعد إعداد iptables بشكل دائم
كل القواعد التي تضيفها بأمر iptables تكون مؤقتة في الذاكرة. عند إعادة تشغيل السيرفر، تُفقد. لجعل إعداد iptables دائمًا، يجب حفظ القواعد في ملف وإعادة تحميلها عند الإقلاع.
# على Debian/Ubuntu، تثبيت iptables-persistent
apt install iptables-persistent
# حفظ القواعد الحالية
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
# على CentOS/RHEL
service iptables save
# أو
iptables-save > /etc/sysconfig/iptables
# استعادة القواعد يدويًا من ملف
iptables-restore < /etc/iptables/rules.v4
# عرض القواعد المحفوظة
cat /etc/iptables/rules.v4
iptables-persistent على Debian/Ubuntu يقوم بحفظ القواعد تلقائيًا واستعادتها عند الإقلاع. على RHEL، الخدمة iptables أو ip6tables تتولى المهمة. تأكد من تفعيل الخدمة بـ systemctl enable iptables.
كتابة سكربت لـ إعداد iptables احترافي
للسيرفرات الإنتاجية، الأفضل أن تكتب سكربت يحوي كل قواعد iptables بترتيب منطقي. هذا يجعل المراجعة والتعديل سهلين، ويوفر سجلًا واضحًا لكل القرارات.
#!/bin/bash
# /usr/local/sbin/firewall.sh
# سكربت iptables احترافي
# مسح القواعد الحالية
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# السياسات الافتراضية
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# السماح بـ loopback
iptables -A INPUT -i lo -j ACCEPT
# السماح بالاتصالات القائمة
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# منع الحزم غير الصالحة
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# حماية من Port Scanning
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# Rate limiting لـ SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# المنافذ المفتوحة
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
# ICMP محدود
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/s -j ACCEPT
# Logging قبل DROP
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-drop: " --log-level 7
# حفظ القواعد
iptables-save > /etc/iptables/rules.v4
echo "Firewall rules applied successfully."
اجعل الملف قابلًا للتنفيذ بأمر chmod +x firewall.sh. شغّله مرة واحدة لتطبيق القواعد، وأضفه إلى systemd ليُشغَّل عند الإقلاع. للمزيد عن السكربتات، اطّلع على دليل Bash Scripting.
سجلات إعداد iptables وكيف تحللها
التسجيل (Logging) يكشف ما يحدث على بوابة سيرفرك. iptables يستخدم target اسمه LOG لتسجيل الحزم في syslog. كل حزمة تُطابق قاعدة LOG تظهر في /var/log/syslog أو /var/log/messages.
# إضافة قاعدة Logging قبل DROP
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-drop: " --log-level 7
# مراقبة سجلات إعداد iptables في الزمن الحقيقي
tail -f /var/log/syslog | grep iptables-drop
# تصفية ملف سجل لاستخراج محاولات الهجوم
grep "iptables-drop" /var/log/syslog | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
# توجيه سجلات إعداد iptables إلى ملف منفصل
echo ":msg, contains, \"iptables-drop:\" /var/log/iptables.log" > /etc/rsyslog.d/10-iptables.conf
echo "& stop" >> /etc/rsyslog.d/10-iptables.conf
systemctl restart rsyslog
قاعدة --limit 5/min مهمة جدًا. بدونها قد يمتلئ السجل بسرعة في حال هجوم ضخم، فيستهلك مساحة القرص ويبطئ النظام. مع limit، نحتفظ فقط بأول 5 محاولات في الدقيقة، ما يكفي لكشف الأنماط.
أخطاء شائعة في إعداد iptables
أكثر خطأ مدمر: مسح كل القواعد ثم تعيين السياسة الافتراضية إلى DROP قبل إضافة قاعدة لـ SSH. النتيجة: تفقد الاتصال فورًا ولا تستطيع العودة. الحل: قبل أي إعداد جذري، استخدم at أو cron لتنفيذ iptables -F بعد 10 دقائق، حتى لو فقدت الاتصال يعود الوصول تلقائيًا.
# جدولة "إنقاذ" قبل التعديل الخطر
echo "iptables -P INPUT ACCEPT && iptables -F" | at now + 10 minutes
# إن نجح إعدادك ولم تفقد الاتصال
atrm $(atq | tail -1 | awk '{print $1}')
- تعيين السياسة DROP قبل السماح بـ SSH.
- عدم السماح بـ loopback (يكسر تطبيقات داخلية).
- عدم السماح بـ ESTABLISHED,RELATED (يكسر التحديثات).
- عدم تفعيل ip_forward قبل NAT rules.
- نسيان حفظ القواعد بعد التعديل.
- ترتيب القواعد الخطأ (DROP قبل ACCEPT).
- عدم تطبيق نفس القواعد على ip6tables.
حماية شاملة لسيرفرك
مع حماية ووردبريس الكاملة و iptables المتقدم على VPS مرام. ابدأ من هنا.
إعداد iptables vs UFW: متى تستخدم كل منهما
UFW (Uncomplicated Firewall) هو واجهة بسيطة تعمل فوق iptables. صياغته أبسط بكثير: ufw allow 22 بدلًا من القاعدة الكاملة لـ iptables. هذا يجعله مناسبًا للمبتدئين والإعدادات البسيطة.
# أوامر UFW الأساسية
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose
# منع IP محدد بـ UFW
ufw deny from 203.0.113.50
# تطبيق rate limiting بـ UFW
ufw limit 22/tcp
UFW مناسب للسيرفرات البسيطة (Web Server بسيط، VPS شخصي). iptables أفضل للسيرفرات المعقدة التي تحتاج Port Forwarding، NAT متقدم، rate limiting دقيق، أو تكامل مع ipset. كثير من المحترفين يبدؤون بـ UFW ثم ينتقلون إلى iptables عند الحاجة لمزيد من المرونة.
الخلاصة
إعداد iptables بشكل احترافي مهارة لا غنى عنها لكل مدير سيرفر. تعلّمه يفتح الباب لفهم الشبكات على Linux بعمق، ويمنحك القدرة على بناء حلول حماية مخصصة لاحتياجاتك. ابدأ بفهم السلاسل والجداول، ثم انتقل إلى الأوامر الأساسية، ثم القواعد المتقدمة لـ DDoS و NAT. اكتب سكربتًا منظمًا، احفظ القواعد، فعّل التسجيل، وراقبه دوريًا. مع الممارسة، ستصبح قواعدك دفاعًا قويًا ضد كل أنواع التهديدات الشبكية. وتذكر دائمًا: قبل أي تغيير جذري، احم نفسك بـ at command حتى لا تفقد الاتصال بسيرفرك.