بلوکه کردن IP کشورها در nginx

در این مطلب به آموزش بلوکه کردن IP کشورها جهت عدم دسترسی مخاطبان آن کشور به مطالب وب سایت شما می پردازیم.

NGINX_logo

شما میتوانید برای خواندن آموزش نصب nginx در centos و Debian به لینک آنها مراجعه کنید.

بعد از اینکه nginx را نصب کردیم باید بررسی کنمی که آیا ماژول http_geoip بر روی آن نصب است یا خیر. 

برای این منظور دستور زیر را اجرا میکنیم . 

nginx -V

اگر خروجی مانند زیر دیدم و عبارت –with-http_geoip_module در آن بود پس میتوانیم به مرحله بعد برویم و شروع به تنظیمات nginx کنیم.

nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: –prefix=/etc/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-client-body-temp-path=/var/lib/nginx/body –http-fastcgi-temp-path=/var/lib/nginx/fastcgi –http-log-path=/var/log/nginx/access.log –http-proxy-temp-path=/var/lib/nginx/proxy –http-scgi-temp-path=/var/lib/nginx/scgi –http-uwsgi-temp-path=/var/lib/nginx/uwsgi –lock-path=/var/lock/nginx.lock –pid-path=/var/run/nginx.pid –with-pcre-jit –with-debug –with-http_addition_module –with-http_dav_module –with-http_geoip_module –with-http_gzip_static_module –with-http_image_filter_module –with-http_realip_module –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module –with-http_xslt_module –with-ipv6 –with-sha1=/usr/include/openssl –with-md5=/usr/include/openssl –with-mail –with-mail_ssl_module –add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-auth-pam –add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-echo –add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-upstream-fair –add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-dav-ext-module

بعد از اطمینان از ساپورت geoip در nginx نوبت به نصب دیتابیس geoip برای استفاده از آن میشود. برای این منظور دستور زیر را اجرا میکنیم .

apt-get install geoip-database libgeoip1

محل قرار گیری دیتابیس geoip در مسیر زیر است .

/usr/share/GeoIP/GeoIP.dat

اما نکته ای که باید به اآن دقت کنیم این است که این دیتابیس نسخه بروز شده نمیباشد، پس ما باید نسخه بروز شده آن را طبق روال زیر دانلود و جایگزین کنیم.

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

بعد از اینکه نسخه جدید دیتابیس geoip را جایگزین کردیم نوبت به تنظیمات خود nginx میرسد.

برای این منظور ابتدا فایل nginx.conf را باز میکنیم .

vi /etc/nginx/nginx.conf

سپس در سکشن {}http قبل از هر خطی که به دایرکتیو include اشاره کند تنظیماتی که در زیر آورده شده است را اضافه میکنیم .

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
    US no;
    FM no;
    EH no;

توضیح اینکه در تنظیمات فوق به nginx میگوییم که در خط اول از آدرسی که به آن گفتیم دیتابیس geoip را بخواند و در خط بعدی کد کشورها را با مقدار کشورایی که اجازه دسترسی دارند به اصطلاحی map کند. در این تنظیمی که ما قرار دادیم به صورت پیشفرض همه کشورها باز هستند بجز آنهایی که جلوی کد آن کشور عبارت no آورده شده است.

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

نکته: شما میتوانید مقالات مربوط به امن سازی nginx را در اینجا و اینجا بخوانید.

حال برای اینکه تنظیمات برای شما واضح تر شود، تنظیماتی که در آن همه کشورها بطور پیشفرض بسته هستند و فقط تعداد کمی اجازه دسترسی دارند را برای شما قرار میدهیم.

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
    IR yes;
    AZ yes;
    EH yes;

بعد از انجام تنظیمات بالا نوبت به آن میرسد که به nginx بگوییم کشورهایی که شرط no برای آنها بوقع پیوسته است چه صفحه یا کد خطایی را دریافت کنند. (کشورهایی که اجازه دسترسی ندارند)

برای این منظور خطوط زیر را در فایل تنظیمات nginx قرار میدهیم.

if ($allowed_country = no) {
    return 444;
}

در آخر هم برای اینکه تنظیمات انجام شده در nginx اعمال شود سرویس آن را ریستارت میکنیم.

systemctl restart nginx

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *