Update 28.11.2022
24 лютого 2022 року, на мою країну, вже другий раз за 10 років, напали війська сусідньої фашистської козломордої країни.
Якщо прагнете зачистити свій інфопростір від таких сусідів —
нижче коротка інструкція, за схемою якої обмеження вже працюють на моєму сайті.
Отже, для застосування обмежень буде конфігуруватись web-сервер nginx,
та буде потрібен пакет geoipupdate, використовується Linux Ubuntu 18.04.6 LTS.
Встановлення пакету geoipupdate:
# apt install geoipupdate
Далі треба подивитись версію пакета, від цього буде залежить конфігурація та тип ключа:
# dpkg --list | grep -w geoipupdate
ii geoipupdate 2.5.0-1 amd64 MaxMind GeoIP/GeoIP2 database updates
Я маю стару версію 2.5.0-1, тому і ключ генерував старого типу.
Далі треба зареєструватись на сайті MaxMind,
і потім сгенерувати ключ.
Сконфігурувати geoipupdate, впишіть свої дані замість нулів у файл /etc/GeoIP.conf:
AccountID 0
LicenseKey 000000000000
Перевірити роботу пакету:
# geoipupdate -v
geoipupdate 2.5.0
Opened License file /etc/GeoIP.conf
AccountID ******
LicenseKey ************
Insert edition_id GeoLite2-Country
Insert edition_id GeoLite2-City
Read in license key /etc/GeoIP.conf
Number of edition IDs 2
url: https://updates.maxmind.com/app/update_getfilename?product_id=GeoLite2-Country
md5hex_digest: 49af9db2ef1bfb6460677d61627a4c60
url: https://updates.maxmind.com/app/update_getipaddr
Client IP address: 2a07:c801:0:1::1
md5hex_digest2 (challenge): 7a71a07932841410edacea515b8a5a63
url: https://updates.maxmind.com/app/update_secure?db_md5=49af9db2ef1bfb6460677d61627a4c60&challenge_md5=7a71a07932841410edacea515b8a5a63&user_id=******&edition_id=GeoLite2-Country
No new updates available
url: https://updates.maxmind.com/app/update_getfilename?product_id=GeoLite2-City
md5hex_digest: 3150397e922344df10a1a0db35f376d9
url: https://updates.maxmind.com/app/update_getipaddr
Client IP address: 2a07:c801:0:1::1
md5hex_digest2 (challenge): 7a71a07932841410edacea515b8a5a63
url: https://updates.maxmind.com/app/update_secure?db_md5=3150397e922344df10a1a0db35f376d9&challenge_md5=7a71a07932841410edacea515b8a5a63&user_id=******&edition_id=GeoLite2-City
No new updates available
Все працює, оновлень немає, перший раз відповідь буде дещо відрізняться. Можливо, треба буде трохи зачекати, поки активується ключ. Типово, оновлення баз GeoIP виконується завдяки скрипту /etc/cron.d/geoipupdate, він виглядає так:
# Regular cron job for the geoipupdate package, used to update GeoIP databases
#
# According to MaxMind: "The GeoIP2 and GeoIP Legacy Country and City databases
# are updated every Tuesday. The GeoIP2 ISP, GeoIP Legacy ISP and Organization
# databases are updated every one to two weeks. All other databases are updated
# on the first Tuesday of each month."
# m h dom mon dow user command
47 6 * * 3 root test -x /usr/bin/geoipupdate && /usr/bin/geoipupdate
Якщо його немає, можна автоматизувати оновлення за допомогою crontab, виконать команду:
# echo '0 7 * * 3 root /usr/bin/geoipupdate 2>&1' >> /etc/crontab
Тепер конфігурування nginx. Буде використовуватись помилка 405 для виводу кастомної сторінки відвідувачам.
У корені основного файла конфігурації /etc/nginx/nginx.conf, повинні підключатись плагіни:
include /etc/nginx/modules-enabled/*.conf;
Треба переконатись, що плагін mod-http-geoip2 (або стара версія mod-http-geoip) підключен, файл /etc/nginx/modules-enabled/50-mod-http-geoip2.conf має виглядати так:
load_module modules/ngx_http_geoip2_module.so;
Знову основний файл конфігурації, розділ http. Має містити директиву підключення файлу бази, обмеження, а також, підключення конфігурацій сайтів для GeoIP2:
geoip2 /var/lib/GeoIP/GeoLite2-Country.mmdb {
auto_reload 1d;
$geoip2_data_country_iso_code country iso_code;
}
map $geoip2_data_country_iso_code $allowed_country {
default yes;
RU no;
BY no;
}
include /etc/nginx/sites-enabled/*.conf;
Для старої версії GeoIP:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
RU no;
BY no;
}
include /etc/nginx/sites-enabled/*.conf;
Останні налаштування у файлі сайту /etc/nginx/sites-enabled/domain.conf, розділ server, на початку кожного блоку location — додати строку:
if ($allowed_country = no) { return 405; }
Додати ще один блок location, який буде віддавати кастомну сторінку з помилкою:
location = /405.html {
internal;
allow all;
root /home/user/www/domain;
}
Сторінку помилки треба розмістити у корені сайту, якщо сподобається мій варіант, можна його отримати з мого сайту:
cd /home/user/www/domain
wget https://rudenko.net.ua/pub/files/405.html
Все готово, залишилось лише перезапустити web-сервер nginx:
# /etc/init.d/nginx restart
Тепер кожен кацап та білорус буде знати напрямок, за яким йому треба йти, замість отримання інформації з сайту.
Слава Україні!
GeoIP Legacy Databases (DAT) —
Why? Because of Nginx, Piwik2 and ModSecurity2. To use GeoIP2, Nginx has to be built from source.
Рашизм —
англ. Ruscism від англ. «Russia, Russian», — вимовляється раша, — та італ. «fascismo» — фашизм,
від якого взято закінчення -изм, Ruscism in english.