الحماية من هجمات DDoS باستخدام IPtables - الدليل الشامل

ADMIN

Administrator
طاقم الإدارة
توجد طرق مختلفة لإنشاء قواعد الحماية من هجمات DDoS الخاصة بك باستخدام iptables. سنتناول في هذا الدليل الشامل أكثر طرق الحماية فعاليةً باستخدام iptables.

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

ما هو iptables؟
iptables (الذي سيُستبدل قريبًا بـ nftables) هو أداة سطر أوامر تعمل في مساحة المستخدم لتكوين قواعد تصفية حزم البيانات في نواة النظام، وقد طُوِّر بواسطة netfilter.
وهو أداة إدارة جدار الحماية الافتراضية على أنظمة Linux، وينبغي على كل من يعمل مع أنظمة Linux أن يكون على دراية به أو على الأقل سمع عنه.

يمكن استخدام iptables لتصفية حزم بيانات معينة، وحظر منافذ المصدر أو الوجهة وعناوين IP، وتوجيه الحزم عبر NAT، والعديد من المهام الأخرى.
ويُستخدم عادةً لحظر منافذ الوجهة وعناوين IP المصدر.

ستجد أن معظم، إن لم تكن جميع، الأدلة حول كيفية حظر هجمات DDoS باستخدام iptables تعتمد على جدول التصفية وسلسلة INPUT لقواعد مكافحة DDoS.
تكمن مشكلة هذا الأسلوب في أن سلسلة INPUT لا تُعالج إلا بعد سلسلتي PREROUTING وFORWARD، وبالتالي لا تُطبق إلا إذا لم تتطابق الحزمة مع أي من هاتين السلسلتين.
يتسبب هذا في تأخير تصفية الحزمة، مما يستهلك موارد النظام. في الختام، لجعل قواعدنا أكثر فعالية، نحتاج إلى نقل قواعد مكافحة DDoS إلى أعلى السلاسل قدر الإمكان.

أول سلسلة يمكن تطبيقها على الحزمة هي سلسلة PREROUTING، لذا من الأفضل تصفية الحزم الضارة في هذه السلسلة مسبقًا.
مع ذلك، لا يدعم جدول التصفية سلسلة PREROUTING. للتغلب على هذه المشكلة، يمكننا ببساطة استخدام جدول التشويش (mangle table) بدلاً من جدول التصفية (filter table) لقواعد الحماية من هجمات DDoS في iptables.
يدعم جدول التشويش معظم القواعد التي يدعمها جدول التصفية، إن لم يكن جميعها، بالإضافة إلى دعمه لجميع سلاسل iptables.
إذن، هل تتساءل عن سبب ضعف قواعد الحماية من هجمات DDoS في iptables؟ السبب هو استخدامك لجدول التصفية وسلسلة INPUT لحظر الحزم الضارة!

قواعد الحماية الكاملة من هجمات DDoS في iptables:

كود:
#!/bin/sh
# Flush all iptables
iptables -F
iptables -X

### 1: Drop invalid packets ###
iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP

### 2: Drop TCP packets that are new and are not SYN ###
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

### 3: Drop SYN packets with suspicious MSS value ###
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

### 4: Block packets with bogus TCP flags ###
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP

### 5: Block spoofed packets ###
iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

### 6: Drop fragments in all chains ###
iptables -t mangle -A PREROUTING -f -j DROP

### 7: Limit connections per source IP ###
iptables -A INPUT -p tcp -m connlimit --connlimit-above 150 -j REJECT --reject-with tcp-reset

### 8: Limit new TCP connections per second per source IP ###
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 30 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

### 9: SSH brute-force protection ###
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

### Save All Rules ###
iptables-save




الآن سنقوم بإنشاء البرنامج النصي.
الخطوة 1:
أنشئ برنامجًا نصيًا بلغة Bash باسم iptables.sh.
vi /root/iptables.sh

الخطوة 2: الصق محتويات البرنامج النصي المذكورة أعلاه في ملف البرنامج النصي iptables.sh.

الخطوة 3: امنح البرنامج النصي صلاحيات القراءة والكتابة والتنفيذ.
chmod +x /root/iptables.sh

الخطوة 4: شغّل البرنامج النصي.
sh /root/iptables.sh

الخطوة 5: تحقق من قاعدة IPTABLES باستخدام الأمر التالي.
iptables -nLiptables -t mangle -nL
 
عودة
أعلى