Блокировка стран по GeoIP на OpenWrt

Блокировка стран по GeoIP на OpenWrt

Боты непрерывно бороздят просторы интернета и ищут уязвимые роутеры, IP-камеры без пароля и прочие «дырявые» устройства. Даже если у вас надежные пароли и вы регулярно устанавливаете новые версии софта с устранением уязвимостей, то боты все равно раздражают и засоряют логи примерно вот такими сообщениями:

sshd[6851]: Invalid user hadoopuser from 96.*.*.*
sshd[6851]: input_userauth_request: invalid user hadoopuser [preauth]
sshd[6851]: Received disconnect from 96.*.*.*: 11: Bye Bye [preauth]

Бороться со сканерами можно разными способами. Надежнее всего выдернуть провайдерский кабель 🙂 Но все-таки иногда нужно иметь удаленный доступ к домашней сети или к тому же Home Assistant.

Забанить всех негодяев сложно, но зато фаерволом можно заблокировать запросы с зарубежных IP и тем самым отсечь львиную долю ботов. От таргетированной атаки такая блокировка вас не спасет, но оградит от большого количества автоматических сканеров и скрипт-кидди.

Предыстория

На днях я решил накатить последнюю версию OpenWrt. Давно не обновлялся — было лень 🙂

На старой системе у меня уже была настроена блокировка по странам через iptables-mod-geoip, но в OpenWrt постепенно избавляются от iptables в пользу nftables и старый способ уже не работает.

На замену я нашел проект под названием geoip-shell — это набор скриптов для простой и быстрой настройки блокировок по странам. Причем помимо OpenWrt поддерживаются практически любые линуксы.

geoip-shell

Из официальных репозиториев установить geoip-shell не получится — проект молодой и в стабильную ветку OpenWrt пока не попал. Но зато готовый пакет можно скачать на GitHub.

ℹ️
23.05.3 — последняя стабильная версия OpenWrt на момент написания статьи.

Установка

Для установки подключитесь к роутеру по SSH и выполните:

cd /tmp
uclient-fetch -O geoip-shell.ipk https://github.com/friendly-bits/geoip-shell/releases/download/v0.5.6/geoip-shell_0.5.6-r1.ipk
opkg install geoip-shell.ipk
rm geoip-shell.ipk

Только не забудьте подставить актуальную версию вместо 0.5.6.

Настройка geoip-shell

Для запуска мастера настройки выполните geoip-shell configure. Если знаете английский, то в целом все должно быть понятно, но на всякий случай я записал пошаговый скринкаст с субтитрами:

Субтитры на русском доступны на временной шкале.

В скринкасте показан самый простой пример — бан всех стран кроме тех, что в белом списке. При этом блокируются:

  • Любые запросы к самому роутеру. Если, например, на роутере открыт порт SSH (22/tcp), то с зарубежных IP по SSH подключиться не получится.
  • Так же блокируются проброшенные порты. Например, если у вас есть домашний сервер с Home Assistant и порт сервера (8123/tcp) проброшен наружу (в WAN), то Home Assistant будет доступен только внутри страны.
  • ICMP-трафик тоже блокируется — пинги не пройдут.

Это не все возможности geoip-shell. С остальными настройками можно ознакомиться в документации.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.