Для школы критично вести журнал DNS-запросов — это требование 436-ФЗ. Pi-hole логирует каждый запрос с указанием IP клиента:
# FTLDNS конфигурация для расширенного логирования
# /etc/pihole/pihole-FTL.conf
PRIVACYLEVEL=0 # Логировать всё (IP + домен + тип)
DBIMPORT=yes # Импортировать логи в SQLite
MAXDBDAYS=90 # Хранить 90 дней
DBINTERVAL=1.0 # Записывать в БД раз в минуту
RESOLVE_IPV6=no
BLOCK_ICLOUD_PR=true # Блокируем iCloud Private Relay (обход DNS)
REFRESH_HOSTNAMES=IPV4 # Резолвить hostname клиентов
RATE_LIMIT=0/0 # Без ограничения логирования
Скрипт для генерации еженедельного отчёта директору школы:
#!/bin/bash
# pihole_weekly_report.sh — отчёт для администрации школы
DB="/etc/pihole/pihole-FTL.db"
DATE_FROM=$(date -d '7 days ago' +%s)
DATE_TO=$(date +%s)
# Общая статистика
TOTAL=$(sqlite3 "$DB" "SELECT COUNT(*) FROM queries WHERE timestamp BETWEEN $DATE_FROM AND $DATE_TO;")
BLOCKED=$(sqlite3 "$DB" "SELECT COUNT(*) FROM queries WHERE status IN (1,4,5,6,7,8,9,10,11) AND timestamp BETWEEN $DATE_FROM AND $DATE_TO;")
PERCENT=$(echo "scale=1; $BLOCKED * 100 / $TOTAL" | bc)
# Топ-10 заблокированных доменов
TOP_BLOCKED=$(sqlite3 "$DB" "SELECT domain, COUNT(*) as cnt FROM queries WHERE status IN (1,4,5,6,7,8,9,10,11) AND timestamp BETWEEN $DATE_FROM AND $DATE_TO GROUP BY domain ORDER BY cnt DESC LIMIT 10;")
# Топ-5 клиентов по количеству заблокированных запросов
TOP_CLIENTS=$(sqlite3 "$DB" "SELECT client, COUNT(*) as cnt FROM queries WHERE status IN (1,4,5,6,7,8,9,10,11) AND timestamp BETWEEN $DATE_FROM AND $DATE_TO GROUP BY client ORDER BY cnt DESC LIMIT 5;")
# Отправляем в Telegram
MSG="📊 *DNS-отчёт за неделю*
Всего запросов: ${TOTAL}
Заблокировано: ${BLOCKED} (${PERCENT}%)
*Топ заблокированных доменов:*
${TOP_BLOCKED}
*Топ клиентов (blocked):*
${TOP_CLIENTS}"
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}&text=${MSG}&parse_mode=Markdown" >/dev/null
Результат внедрения за первый месяц:
| Метрика | Значение |
| DNS-запросов/день | ~180 000 |
| Заблокировано/день | ~32 000 (18%) |
| Доменов в blocklist | 847 293 |
| Среднее время ответа DNS | 4 мс (кэш) / 85 мс (рекурсия) |
| VPN-подключений учителей | 22 из 30 активно |
| Ложных блокировок/неделю | 3-5 (добавляются в whitelist) |
Pi-hole + WireGuard + Unbound — полностью бесплатное решение, которое обеспечивает школе контентную фильтрацию на уровне DNS, приватность запросов и VPN-доступ для удалённых учителей. Если вашей организации нужна DNS-фильтрация — обращайтесь к нам в itfresh.ru.
Оставить комментарий