/ #linux #web 

Блокування трафіку з окремих країн за допомогою Nginx та GeoIP

Блокуємо паразитний трафік до сайту з певних країн безкоштовно, без реєстрацій та sms ;)

  1. Зібрати nginx з опцією –with-http_geoip_module. Як це зробити написано тут

  2. Встановити бази GeoIP

    apt-get install geoip-database libgeoip1
    
  3. Оновити бази до останньої версії

    mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.bak
    wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
    gunzip maxmind.dat.gz
    mv maxmind.dat /usr/share/GeoIP/GeoIP.dat
    
  4. В /etc/nginx/nginx.conf в секції http блокуємо наприклад роісію та Пакистан

    http {
        ...
        geoip_country /usr/share/GeoIP/GeoIP.dat;
        map $geoip_country_code $allowed_country_mysite {
            default yes;
            RU no;
            PK no;
        }
        ...
    }
    

    Можно навпаки заблокувати всіх, залишити тільки Неньку

    http {
        ...
        geoip_country /usr/share/GeoIP/GeoIP.dat;
        map $geoip_country_code $allowed_country_mysite {
            default no;
            UA yes;
        }
        ...
    }
    

    Коди країн тут.

  5. Для потрібного сайту блокуємо доступ із заборонених країн

    server {
        ...
        location / {
            if ($allowed_country_mysite = no) {
                    return 444;
            }
        }
        ...
    }
    
  6. Перевіряємо конфіги та перезавантажуємо конфігурацію

    nginx -t
    nginx -s reload
    

Посилання

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.