Проект esp32-c3-adblock — это блокировщик рекламы стоимостью около $2, который помещается на микроконтроллер размером с флешку. За время развития он научился обрабатывать 537 тыс. доменов, получил удобную локальную панель управления и укреплённую защиту от несанкционированного доступа.
Фильтр работает на уровне DNS. Вместо хранения полного списка доменов в оперативной памяти контроллер записывает во флеш-память 40-битные хеши FNV-1a и ищет совпадения бинарным поиском. Примерно 140 тыс. доменов занимают 0,7 МБ, используют около 50 КБ ОЗУ, а проверка одного запроса занимает примерно 10 миллисекунд. Когда домен в чёрном списке, плата отвечает адресом 0.0.0.0, остальные запросы идут на обычный DNS-сервер.
В последних версиях добавили Wi-Fi настройку через локальный веб-портал, обновление блокировочных списков и прошивки по воздуху, отображение статистики по клиентам. Управляющие функции требуют HTTP Basic Auth и отдельный пароль для OTA-обновлений. Разработчик закрыл уязвимость хранимого XSS и добавил защиту от CSRF-атак, поскольку раньше в локальной сети было возможно менять список блокировки и перепрошивать устройство без пароля.
Исходный код распространяется под лицензией MIT. Веб-интерфейс по-прежнему использует обычный HTTP, поэтому Basic Auth не защищает от атакующего, который может перехватывать трафик в локальной сети.
По механизму работы устройство похоже на Pi-hole. DNS-фильтрация блокирует рекламные и трекинговые домены для всех устройств в сети, включая телевизоры и IoT-гаджеты, но не удаляет рекламу, если контент и реклама приходят с одного домена.
