Боты непрерывно бороздят просторы интернета и ищут уязвимые роутеры, 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.
Установка
Для установки подключитесь к роутеру по SSH и выполните:
Настройка geoip-shell
Для запуска мастера настройки выполните geoip-shell configure
. Если знаете английский, то в целом все должно быть понятно, но на всякий случай я записал пошаговый скринкаст с субтитрами:
В скринкасте показан самый простой пример — бан всех стран кроме тех, что в белом списке. При этом блокируются:
- Любые запросы к самому роутеру. Если, например, на роутере открыт порт SSH (22/tcp), то с зарубежных IP по SSH подключиться не получится.
- Так же блокируются проброшенные порты. Например, если у вас есть домашний сервер с Home Assistant и порт сервера (8123/tcp) проброшен наружу (в WAN), то Home Assistant будет доступен только внутри страны.
- ICMP-трафик тоже блокируется — пинги не пройдут.
Это не все возможности geoip-shell. С остальными настройками можно ознакомиться в документации.