چگونه از طریق Iptables تعداد کانکشن‌های هر IP ای را محدود کنیم؟

1
887
چگونه از طریق Iptables تعداد کانکشن‌های یک IP را محدود کنیم؟

هنگامی که یک کاربر از وب‌سایت بازدید می‌کند، یک یا چند درخواست به پورت ۸۰ سرور فرستاده می‌شود. اگر کاربری در زمان کوتاه، تعداد درخواست‌های زیادی به سرور بفرستد، حالا از طریق پینگ کردن سایت و یا بازدید صفحات وب‌سایت و یا دیدگاه گذاشتن و غیره، بر حسب تنظیمات سرور ممکن است: هیچ اتفاقی نیافتد, زمان لود سرور بالا برود یا در بدترین حالت سرور down شود.

اما چه تنظیماتی روی سرور باید انجام دهیم تا به مشکل خاصی برخورد نکنیم؟ به زبان ساده باید تعداد درخواست‌های غیرمجاز IP را محدود کنیم. در این مطلب می‌خوانیم که چطور می‌توانیم تعداد درخواست‌های بیش از حد یک IP را از طریق Iptables محدود کنیم.

برای این کار نیاز دارید که ماژول connlimit را نصب کنید. این ماژول امکان محدود کردن چندین کانکشن‌ TCP به سرور از یک IP را می‌دهد.

سینتکس دستور به شکل زیر است :

/sbin/iptables -A INPUT -p tcp --syn --dport $port -m connlimit --connlimit-above N -j REJECT --reject-with tcp-reset

 

کانکشن SSH را برای هر IP محدود کنید.

در مثال زیر به هر کلاینت فقط ۳ درخواست می‌تواند به SSH ارسال کند.

/sbin/iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

 

 

کانکشن HTTP را برای هر IP محدود کنید.

در مثال زیر تعداد ۲۰ درخواست به HTTP برای هر IP امکان پذیر است.

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset

 

در نظر داشته باشید باید IP پراکسی سرور خودتان برای مثال 1.2.3.4 را از این محدودیت‌ها خارج کنید:

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -d ! 1.2.3.4 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset

 

 

محدودیت‌ IP‌های کلاس C

در مثال زیر می‌بینید که IP‌های کلاس C تنها مجازند ۲۰ درخواست به HTTP ارسال کنند.:

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset

 

 

محدودیت‌ بر اساس ثانیه

در مثال زیر می‌بینید اگر یک IP تعداد ۱۰ درخواست به HTTP را در زمان کمتر از ۱۰۰ ثانیه ارسال کند، دسترسی‌اش محدود می‌شود.

#!/bin/bash
IPT=/sbin/iptables 
# Max connection in seconds
SECONDS=100
# Max connections per IP
BLOCKCOUNT=10
# ....
# ..
# default action can be DROP or REJECT
DACTION="DROP"
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION}
# ....
# ..

 

فایروال را چگونه تست کنید:

اسکریپت زیر را اجرا کنید. فرض کنید IP سرور/ سرور مجازی شما 202.1.2.3 است. 

#!/bin/bash
ip="202.1.2.3"
port="80"
for i in {1..100} 
do
  # do nothing just connect and exit
  echo "exit" | nc ${ip} ${port};
done

منبع

مقاله قبلیچگونه اطلاعات مهم را از طریق اینترنت ارسال کنیم؟
مقاله بعدیکنترل اجرا شدن فایل فلش در مرورگرهای مختلف

1 نظر

نظر بدهید

لطفا نظر خود را بنویسید
لطفا نام خود را اینجا وارد کنید

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.