Як заблокувати трафік на сайті з певного регіону
Нещодавно зіткнувся з проблемою: на сайт у величезній кількості повалив китайський трафік. Виявилося, що одна з розміщених на моєму хості картинок потрапила в китайські блоги. Провайдер, у якого я орендую сервер, тут же забив на сполох про невідповідність співвідношень (три до двох) українського і зарубіжного трафіків.
Спектр застосування досить широкий: геотаргетинг в електронній комерції, боротьба з фродом, фішингом, спамом і шахрайством, захист серверів від різних видів атак по геопрізнаку. Власне, останнє і є наше завдання.
2. Для того щоб обмежити трафік з якоїсь певної країни, є різні рішення. Ми ж скористаємося стандартної можливістю iptables, що дозволяє проводити фільтрацію по геопрізнаку. До речі, це може застосовуватися не тільки для блокування небажаних підключень, а й для балансування запитів на різні бекенди, кожен з яких обробляє свій регіон. Нам допоможе модуль geoip з пакета розширень xtables-addons для iptables, у нього свій формат геолокаційні бази, але на щастя WorldIP-база від WIPmania тепер є і в цьому форматі. Порядок дій такий:
- Встановлюємо xtables-addons (xtablesaddons.sourceforge.net).
- Підключаємо базу для модуля geoip. Актуальна версія бази завжди доступна по URL - static.wipmania.com/static/worldip.iptables.tar.gz. Щоб база оновлювалася, її можна оновлювати за крону (скажімо, раз на місяць).
- Далі можна налаштувати правила.
Блокуємо доступ до http-серверу для всіх клієнтів з Китаю:
iptables -A INPUT -p tcp --dport 80
-m geoip --src-cc CN -j DROP
iptables -A INPUT -p tcp --dport 80
-j ACCEPT
Можна вчинити більш радикально і дозволити доступ для клієнтів з якихось конкретних країн (наприклад, Укаїни, України і Білорусії):
iptables -A INPUT -p tcp --dport 80
-m geoip --src-cc RU, UA, BY -j ACCEPT
iptables -A INPUT -p tcp --dport 80
-j DROP
Завдання можна було також вирішити через nginx за допомогою модуля ngx_http_geo_module, налаштувавши кілька простих правил (докладніше - bit.ly/jIHTaA).
Покажи цю статтю друзям: