منبع اصلی نوشتار زیر در این لینک قرار دارد

بستن ترافیک کشورهای مزاحم توسط Linux

واقعیت
تلخی است که بخش زیادی از ترافیک وب سایت های ما دارای منشا کشورهای خارجی است.
اگر سایت پر ترافیکی دارید معمولا دسترسی کاربران خارجی یا حتی
attack افرادی از کشورهای خارجی باعث می شوند
کاربران کشور خودتان به درستی نتوانند از مزایای وب سایت شما استفاده کنند (بدلیل
شلوغی ترافیک سرورها و همچنین احتمال وقوع حملات
DoS و DDos)

در اینجا
راهی برای
block کردن کلیه IPهای
کشورهایی که مدنظرتان است( مخصوصا کشورهایی که منبع اصلی حملات شناخته شده در
اینترنت هستند یا کشورهایی که با کشور شما خصومت داشته و در صدد از کار انداختن
سرویس های شما یا سرقت اطلاعاتتان هستند) به شما نشان خواهیم داد:

مرحله
اول:

مرحله
اول مشخص کردن این است که
IP‌های
کدام کشور(ها) را می خواهید
block کنید. این کار را می
توانید با آنالیز کردن
log file های سرور خود و انجام
پروسه
GeoIP lookup برای IP هایی که بیشترین ترافیک مزاحم را برای شما
ایجاد می کنند انجام دهید. این اطلاعات را معمولا می توانید از
access log file های مربوط به Apache و Nginx‌ برای
ترافیک وب و
syslog برای سرویس ssh بدست آورید که البته کاریست دشوار، زمان بر
و با احتمال خطا در حین بررسی
log file ها. ابزاری مشهور و مجانی
برای این کار
AWStats است. اگر از  WordPress استفاده می کنید می
توانید
plugin هایی که در این زمینه برای تشخیص بییننده
های آنلاین به همراه کشور مبداشان وجود دارد استفاده کرده و بهره ببرید.

مرحله
دوم:

وقتی
مشخص کردید
IP های چه کشورهایی را می خواهید block‌کنید، مرحله بعدی بدست آوردن لیست IP های آن کشورهاست.
متاسفانه تهیه این لیست می تواند بسیار سخت باشد. اولین استاندارد این کار که سایت
ipdeny.com بود لیست های خود را از سپتامبر 2013  به
بعد کامل و به روز نکرده است و دیگر از آن نمی توان بعنوان سعی ای در بستن
IP ها استفاده کرد. پیشنهاد من استفاده از
ابزار
IP2location visitor blocker tool برای بدست آوردن این
اطلاعات است.

 


با
انتخاب نام کشور و فرمت خروجی فایل
IP های مورد نظر، به راحتی
می توانید لیست تمامی
IP های کشور دلخواه را
دانلود کنید.

مرحله
سوم:

حال که
فایل لیست
IP ها را برای block کردن در اختیار دارید آن
را روی سرور خود آپلود کنید. روی سرور خود پکیج
IPSet را توسط yum یا aptitude نصب کنید:

# apt-get install ipset

مرحله
چهارم:

در انتها
نیاز داریم که لیست
IP هایی که در اختیار داریم
توسط
ipset‌پردازش شده و بصورت یک rule set در IPTables تعریف گردند تا connection های ورودی از آن IP ها اصطلاحا drop‌ گردد. در ادامه یک bash script موجود است تا این کار را
بسادگی برایتان انجام دهد. این اسکریپت در نظر می گیرد که
ip
range
ها برای block شدن، درون یک فایل متنی
به نام
blocklist.txt قرار دارند. به دلخواه
خود می توانید نام این فایل را تغییر دهید. ضمنا اگر در نظر دارید
ip range های چند کشور مختلف را توامان block‌ کنید ابتدا باید text فایل مربوط به آنها را با
هم ادغام نمایید و سپس از اسکریپت استفاده کنید.

12345
#!/bin/bash
#Script to process ip ranges to ban using IPSet and IPTables
ipset create countryblock hash:net
while read line; do ipset add countryblock $line; done < blocklist.txt
iptables -I INPUT -m set --match-set countryblock src -j DROP

countryblock.sh
 hosted with ❤ by GitHub

با یک
بار اجرای این اسکریپت،
ip range های موجود در فایل blocklist.txt بصورت یک Drop rule
set
در IPTables تعریف شده و از این پی
اصطلاحا
ban می گردند. برای غیر فعال کردن Drop rule set‌کافیست آن را از لیست rule های IPTables‌حذف نمایید.

 



برچسب ها : ,

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

به اين صفحه امتياز دهيد