Перейти к содержимому
Калькуляторы

Работа с реестром запрещенных сайтов каталог решений

Оглавление

 

Набор sh-скриптов для получения и парсинга реестра.

Версия от 2016-12-30

Получение списков из дампа, версия от 2017-05-16

Версия от 2018-04-23

 

Загрузчик реестра на Perl.

Версия 2017-01-16

 

Извлечение из XML-выгрузки списка IP-адресов, доменов и URL.

Версия от 2017-01-15

 

Конвертор реестра в HTML.

Версия от 2017-01-16

 

Мониторинг клиентских DNS-запросов на ресурсы из реестра.

Версия от 2017-01-13

 

Заглушка и песочника на время профилактики системы блокировки.

Версия от 2017-05-17

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Набор sh-скриптом для получения и парсинга реестра.

Версия от 2016-12-30.

 

Скрипт при каждом запуске генерирует и подписывает XML-запрос, для работы скрипта нужен приватный ключ.

Чтобы использовать один заранее подписанный запрос, скрипт нужно немного доработать (закомментировать генерацию и подписывание запроса).

 

Архив распаковать в /srv/erdi.

Если используется другой путь, нужно подправить константы в файле lib-config.inc.

Файл readme немного устаревший, но содержит инструкцию по сборке OpenSSL с поддержкой шифрования ГОСТ.

Для работы скрипта нужны утилиты/пакеты: sed, curl, xmlstarlet.

 

Скрипт можно добавить в cron, он сам формирует запрос и повторяет обращение к сервису, пока не скачает дамп.

 

Содержание:

 

custom/

Формирование кастомных списков для СКАТ (текстовые файлы-заглушки и скрипт).

 

data/

Сюда складываются подробные протоколы работы скрипта: логи, XML-запросы с отсоединенной подписью, запросы, ответы, дампы.

Данные группируются по дате и времени запуска (подкаталог на каждый запуск).

 

dump/

Сюда складываются полученные дампы (дубликаты исключаются) и diff-файлы.

Дампы форматируются и приводятся к читабельному виду (с помощью xmllint).

Дампы сжимаются gz, за исключением последнего.

В файле dump_last.xml находится наиболее свежий дамп, отформатированный и перекодированный в UTF-8.

 

key/

В этом каталоге должны размещаться ЭЦП оператора в формате PKCS#12 (файлы с расширением pfx).

Для получения PEM-файла необходимо использовать скрипт erdi-key-update.sh, который автоматически использует наиболее свежую ЭЦП.

 

openssl/

В этом каталоге должны лежать бинарники OpenSSL.

Если используется другая версия OpenSSL, путь к ней нужно указать в lib-config.inc, в константе ERDI_SSL

 

run/

Вспомогательный каталог для счетчика и отслеживания статуса.

 

src/

Каталог с исходниками.

В него нужно распаковать openssl-1.0.1o и собрать в соответствии с инструкцией в readme.

Сами исходники в архив не включаются, чтобы размер архива не раздувать.

 

lib-config.inc

Константы с путями.

Если пути отличаются от /srv/erdi, константы нужно скорректировать.

 

lib-logging.inc

Вспомогательные функции для логгирования.

 

lib-onetime.inc

Обеспечивает активность только одного инстанса скриптов (одновременный запуск двух инстансов может поломать нормальную работу скриптов).

 

lib-websvc.inc

Пути к вспомогательным утилитам и вспомогательные константы (время таймаута, количество повторов и т.д.).

 

erdi-search.sh

Отслеживание появления или удаления ссылок в реестре по датам (используются дампы в подкаталоге dump/).

Поиск может осуществляться в обратном и в прямом направлении.

 

erdi-key-update.sh

Обновление закрытого ключа при перевыпуске ЭЦП.

 

erdi-clean.sh

Очистка устаревших данных из data/ и dump/.

По умолчанию протоколы хранятся в течении года, дампы в течении 5 лет.

 

erdi-request.sh

Основной скрипт, который выполняет все действия:

- проверяет срок действия ЭЦП

- проверяет необходимость получения реестра

- формирует XML-запрос

- получает реестр

- проверяет ЭЦП реестра

- форматирует дамп в читабельный вид

- получает сводку по дампу (количество записей, URL, доменов, IP-адресов в дампе)

 

При необходимости с помощью XPath-запросов из дампа можно извлечь любую нужную информацию и использовать ее в самодельных решениях по блокировке.

 

erdi-request.log

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

 

erdi-request.err

Важные ошибки в работе скриптов (неполучение выгрузки).

 

Пример содержимого каталога с протоколом работы:

# ls -l /srv/erdi/data/20170110-1001
total 12748
-rw-r--r--. 1 root root      552 Jan 10 10:01 dbg-getLastDumpDateEx-Response.xml
-rw-r--r--. 1 root root      502 Jan 10 10:01 dbg-getLastDumpDateEx.xml
-rw-r--r--. 1 root root      622 Jan 10 10:06 dbg-getResult-001-Response.xml
-rw-r--r--. 1 root root      583 Jan 10 10:06 dbg-getResult-001.xml
-rw-r--r--. 1 root root      436 Jan 10 10:01 dbg-sendRequest-Response.xml
-rw-r--r--. 1 root root     5356 Jan 10 10:01 dbg-sendRequest.xml
-rw-r--r--. 1 root root 13005129 Jan 10 10:06 dump.zip
-rw-r--r--. 1 root root     3237 Jan 10 10:01 request.sig
-rw-r--r--. 1 root root      247 Jan 10 10:01 request.xml
-rw-r--r--. 1 root root     4425 Jan 10 10:06 working.log

 

Содержимое протокола:

# cat working.log 
2017-01-10 10:01:01 [pid 5640]: - Срок действия ключа: 2017-06-15
2017-01-10 10:01:01 [pid 5640]: # Обработка запроса (каталог 20170110-1001)
2017-01-10 10:01:01 [pid 5640]:   - формирование запроса (файл /srv/erdi/data/20170110-1001/dbg-getLastDumpDateEx.xml)...
2017-01-10 10:01:01 [pid 5640]:   - отправка запроса getLastDumpDateEx на сервер (http://vigruzki.rkn.gov.ru/services/OperatorRequest/)...
2017-01-10 10:01:01 [pid 5640]: + Дата обновления ЕРДИ: 2017-01-10 09:26:01 (срочное)
2017-01-10 10:01:01 [pid 5640]: + Версия сервиса 3.1, версия дампа 2.2, версии модуля 2.2
2017-01-10 10:01:01 [pid 5640]: - Предыдущий запуск: 2017-01-10 08:01:01 (7200 секунд)
2017-01-10 10:01:01 [pid 5640]: # Выполняется срочное обновление
2017-01-10 10:01:01 [pid 5640]: # Запрос на получение выгрузки ЕРДИ (версия 2.2)
2017-01-10 10:01:01 [pid 5640]:   - формирование XML-запроса...
2017-01-10 10:01:01 [pid 5640]:   - подписание XML-запроса...
2017-01-10 10:01:01 [pid 5640]:   - формирование запроса (файл /srv/erdi/data/20170110-1001/dbg-sendRequest.xml)...
2017-01-10 10:01:01 [pid 5640]:   - отправка запроса sendRequest на сервер (http://vigruzki.rkn.gov.ru/services/OperatorRequest/)...
2017-01-10 10:01:01 [pid 5640]: + Идентификатор запроса: #66****8ed55338717cf3c20030****d7
2017-01-10 10:01:01 [pid 5640]: # Постановка запроса в очередь
2017-01-10 10:01:01 [pid 5640]: - Сохранение текущего статуса...
2017-01-10 10:01:01 [pid 5640]: - Пауза (300) перед повтором...
2017-01-10 10:06:01 [pid 5640]: # Обработка очереди (итерация 1)
2017-01-10 10:06:01 [pid 5640]:   - времени прошло: 300
2017-01-10 10:06:01 [pid 5640]: # Определение статуса запроса (версия 2.2)
2017-01-10 10:06:01 [pid 5640]:   - рабочий каталог: 20170110-1001
2017-01-10 10:06:01 [pid 5640]:   - идентификатор: 66****8ed55338717cf3c20030****d7
2017-01-10 10:06:01 [pid 5640]:   - формирование запроса (файл /srv/erdi/data/20170110-1001/dbg-getResult-001.xml)...
2017-01-10 10:06:01 [pid 5640]:   - отправка запроса getResult на сервер (http://vigruzki.rkn.gov.ru/services/OperatorRequest/)...
2017-01-10 10:06:07 [pid 5640]: - Суточный счетчик: 6
2017-01-10 10:06:07 [pid 5640]: + Файл /srv/erdi/data/20170110-1001/dump.zip
2017-01-10 10:06:07 [pid 5640]: + Формат: 2.2, получатель: *****
2017-01-10 10:06:07 [pid 5640]: # Обработка результатов запроса #66****8ed55338717cf3c20030****d7
2017-01-10 10:06:07 [pid 5640]: - Распаковка архива /srv/erdi/data/20170110-1001/dump.zip
2017-01-10 10:06:07 [pid 5640]: - Извлечение ЭЦП...
2017-01-10 10:06:09 [pid 5640]: + ЭЦП подтверждает подлинность реестра
2017-01-10 10:06:09 [pid 5640]: - Форматирование XML-файла...
2017-01-10 10:06:10 [pid 5640]: - Извлечение информации из реестра...
2017-01-10 10:06:11 [pid 5640]: - Сохранение реестра в /srv/erdi/dump/dump-20170110-092601.xml
2017-01-10 10:06:11 [pid 5640]: # Сводка по текущему реестру:
2017-01-10 10:06:13 [pid 5640]:   - количество IP-адресов: 126577 / 966
2017-01-10 10:06:14 [pid 5640]:   - количество доменов: 10043
2017-01-10 10:06:15 [pid 5640]:     - из них с маской: 114
2017-01-10 10:06:16 [pid 5640]:   - количество записей: 54842
2017-01-10 10:06:16 [pid 5640]: # Сравнение с предыдущей версией (dump-20170109-230000.xml)
2017-01-10 10:06:17 [pid 5640]: + Дамп от 20170110-092601 - изменения зафиксированы в /srv/erdi/dump/dump-20170110-092601.diff
2017-01-10 10:06:18 [pid 5640]: - Архивирую предыдущий дамп /srv/erdi/dump/dump-20170109-230000.xml

 

Сводный протокол ошибок:

# cat erdi-request.err
2016-10-03 22:02:36 [pid 21739]: getLastDumpDateEx: Сервер не отвечает
2016-10-04 15:07:29 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Сервер не отвечает
2016-10-04 15:14:36 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Сервер не отвечает
2016-10-04 15:21:11 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Сервер не отвечает
2016-10-04 15:26:38 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Сервер не отвечает
2016-10-04 15:33:22 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Сервер не отвечает
2016-10-04 15:33:22 [pid 13628]: getResult (#0ff1483229d93d2333c463334ce67bee): Таймаут (число попыток: 6)
2016-10-04 16:02:21 [pid 15028]: getLastDumpDateEx: Сервер не отвечает
2016-10-04 17:02:35 [pid 16309]: getLastDumpDateEx: Сервер не отвечает

erdi_redist.tar.gz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не хочу ни в чьи огороды кидать камни, но признаю, что в отличие от

https://github.com/yegorov-p/python-zapret-info

и

https://github.com/max197616/zapret

Ваш скрипт erdi-request.sh , уважаемый alibek работает очень чётко.

Особенно покоряет реализация SOAP-запросов на Curl.... :)

И да! Pure-Bash всегда греет душу!

 

Дабы поддержать столь полезный почин дерзну приложить скртиптик, который парсит получившийся dump.xml на:

1.ip-ы для блокировки фильтром или анонса на DPI.

2.domen-ы для блокировки по ДНС.

3.URL-ы для скармливания чудному extfilter от MAX1976.

dump_parser.sh.zip

Изменено пользователем OK-2004

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дабы поддержать столь полезный почин дерзну приложить скртиптик

Похоже, забыт @blockType="domain-mask"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да, кое-где пропущены циклы для повторной попытки получения выгрузок. Добавил и все поехало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, забыт @blockType="domain-mask"

Хм, и действительно.... Перезалил файл, заодно немного изменил логику.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, забыт @blockType="domain-mask"

Хм, и действительно.... Перезалил файл, заодно немного изменил логику.

 

./dump_parser.sh: line 105: syntax error near unexpected token `done'
./dump_parser.sh: line 105: `done < $r/doms/d7.txt'

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 ALKov: да всё правильно, начало цикла почему-то в комменты попало. Отредактировал, перезалил. Сорри....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Продолжаем...

Во время оно Некто поставил задачу: "А кто их ваших клиентов пытался сходить на некоторые "интересные" урлы из списка dump.xml"? (естественно мы ему это не дали).

У "взрослых" дядей с серьёзными системами DPI конечно есть крутые логи блокировок и эта задача для них тривиальна.

Но Россия (как известно) - родина слонов нестандартных подходов к стандартным вещам.

Попробуем сохранить традицию...

 

Помятуя о том ,что весь траффик ДНС-запросов клиентов принудительно замыкается на неком порту коммутатора, "отзеркалим" этот порт и в "зеркальный" порт включаем небольшой сервачок через eth0.

Далее про этот сервачок подробнее....

 

Признавая тот факт, что единственным нормальным "фоновым" сниффером с большими возможностями является https://github.com/vrtadmin/Daemonlogger - его и будем использовать.

(кстати он есть в стандартных репах большинства дистров)

 

Исходные данные :

1.файлы дампов daemonlogger-a будем складывать в /var/log/named

2.так как эти файлы по кольцу "ротейтятся" - будем архивировать их в /var/log/named/arch

3. содержимое файла bpf.txt : "udp and port 53"

4. url.list - список "интересных" доменов.

 

Начинаем:

1.запускаем сниффер: daemonlogger -d -f /root/bpf.txt -i eth0 -l /var/log/named -g 0 -u 0 -n e0 -P /var/run -p dlog -S 0 -t 1h -m 100 -r -F

2.Через crontab раз в сутки запускаем dns_log_arch.sh.

3.Через crontab в конце месяца запускаем dns_log_report.sh

4.Спасибо что дочитали до конца.

dns_log_report.sh.zip

dns_log_arch.sh.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А парсить лог днс не проще было?

1."category queries" у bind9 принципиально выставил в "none" (включу когда накопим денег на массив из SAS-винтов)

2.анализируется весь ДНС-трафик, а не только тот , который адресован конкрентному днс-серверу.

( у нас с помощью PBR весь клиентский ДНС-трафик отправляется в другой канал, где его либо встречают пачка наших рекурсивных резолверов, либо транзитом уходит в большой инет в зависимости от ситуации)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Новая версия dump_parser.sh (Добавлены подробные комменты)

Изменено пользователем OK-2004

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Простой конвертер реестра РКН в html:

rkn_2html.sh.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Загрузчик реестра с фиксированным, заранее подписанным запросом.

На перле.

 

Сделан для одного жадного провайдера. ))

rkn.tar.gz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автору большое спасибо, работает четко и что самое главное с комменатриями, в случае чего понятно в чем косяк и без знания bash или perl!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Премного благодарен за отличные и понятные скрипты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавил скрипт по получению из дампа списка объектов.

В архив пока не добавлял, проще скопировать вручную.

#!/bin/bash

### Работа с дампом - список объектов

source ./lib-config.inc
source ./lib-websvc.inc

DUMP="${ERDI_DUMP}/dump_last.xml"
echo "Дамп: $DUMP"

echo "Список доменов (list-domain.txt)"
"${ERDI_XML}" select -T -t -m "/reg:register/content[@blockType='domain']" \
-s A:N:- "string-length(domain)" -s A:T:- "domain" \
-v "domain" -n "$DUMP" \
| uniq \
> list-domain.txt

echo "Список доменов с маской (list-domain-mask.txt)"
"${ERDI_XML}" select -T -t -m "/reg:register/content[@blockType='domain-mask']" \
-s A:N:- "string-length(domain)" -s A:T:- "domain" \
-v "domain" -n "$DUMP" \
| uniq \
> list-domain-mask.txt

echo "Список IP-адресов (list-ip.txt)"
"${ERDI_XML}" select -T -t -m "/reg:register/content[@blockType='ip' and ip]" \
-v "ip" -n "$DUMP" \
| sort -V -u \
> list-ip.txt

echo "Список IP-подсетей (list-net.txt)"
"${ERDI_XML}" select -T -t -m "/reg:register/content[@blockType='ip' and ipSubnet]" \
-v "ipSubnet" -n "$DUMP" \
| sort -V -u \
> list-net.txt

echo "Список адресов (list-url.txt)"
"${ERDI_XML}" select -T -t -m "/reg:register/content[not(@blockType) and url]" \
-s A:N:- "string-length(url)" -s A:T:- "url" \
-v "url" -n "$DUMP" \
| uniq \
> list-url.txt

inc-файлы не обязательны, их можно вообще убрать, только нужно будет вручную прописать пути для переменных $DUMP (полный путь к XML-дампу) и $ERDI_XML (полный путь к xmlstarlet).

После выполнения скрипта формируется список из пяти текстовых файлов:

list-domain.txt - список доменов

list-domain-mask.txt - список доменов с маской

list-ip.txt - список отдельных IP-адресов

list-net.txt - список подсетей

list-url.txt - список URL для блокировки

 

Список доменов и URL сортируется по длине значения и по алфавиту, IP-адреса сортируются по значению, дубликаты исключаются.

Нормализация и валидация не производится, если нужно, то можно сделать примерно так:

"${ERDI_XML}" select -T -t -m "/reg:register/content[@blockType='domain']" \
-v "domain" -n "$DUMP" \
| idn --quiet | sed 's/\(.*\)/\L\1/' | sed 's/\.$//' | sort -u | awk '{ print length, $0 }' | sort -n | cut -d" " -f2- \
> list-domain.txt

(конкретный конвейер и параметры по своим потребностям и на свое усмотрение)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как всегда , прекрасная работа, за что Вам alibek - огромное спасибо.

А мы продолжим тоже...

 

Часто при сбое системы парсинга дампа реестра или системы блокировки ревизору "распахиваются" все двери ко всем ресурсам в таком опасном и грозном нонче инете.

Процесс востановления совсем не детерменирован во времени и на это время надо бы перевести всю сетку с клиентами и ревизором в "карантинный" режим,

в котором инет будет открыт тока по белым спискам а всё остальное заблочено.

Если у прова есть при этом свой кэширующий днс для клиентов - то дело сильно упрощается. У нас как раз есть такой ДНС и ниже приведена методика перевода его в карантинный режим :

 

1. Допустим у нас есть список белых урлов, которые точно никогда не попадут в реестр: ( его размер определяется тока фантазией прова и рекомендациями соотв.органов)

 

cat doms.allow:

mail.ru
yandex.ru
rkn.gov.ru
gov.ru
kremlin.ru
google.ru
rfc-revizor.ru
gosuslugi.ru
......

 

Скрипт find_ns.sh ищет ДНС-сервера , которым делегированы эти зоны и делает на их основе заготовки для forward-зон нашего карантинного ДНС-а :

 

#!/bin/bash
r=/dev/shm #set -vx
rx='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
rm -rf $r/dns ; mkdir $r/dns ; rm -f /etc/bind/my_zones ; rm -f /etc/bind/db.fake.middle
while read line ; do
dig -4 NS +noall +additional ${line}|awk '{print $5}' > $r/dns/${line}.0
if [ -s $r/dns/${line}.0 ] ; then
 while read line1 ; do
  if [[ ${line1} =~ ^$rx\.$rx\.$rx\.$rx$ ]] ; then echo "${line1}" >> $r/dns/${line} ; fi
 done < $r/dns/${line}.0
if [ -s $r/dns/${line} ] ; then
 string=
 delim="; "
 while read line2 ; do
  string="$string$line2$delim"
 done < $r/dns/${line}
  echo "zone \"${line}\" { type forward; forward only; forwarders { ${string} }; };" >> /etc/bind/my_zones
  echo "${line}. IN NS fakens." >> /etc/bind/db.fake.middle
 fi
else
 rm -f $r/dns/${line}.0
fi
sleep 5
done < /root/doms.allow #set +vx
cat /etc/bind/db.fake.head /etc/bind/db.fake.middle /etc/bind/db.fake.tail > /etc/bind/db.fake
rm -f $r/dns/*.0
exit 0

 

Файлы /etc/bind/db.fake.head и /etc/bind/db.fake.tail - "шапка" и "хвост" для создания файковой (aka sinkhole) корневой зоны

 

cat db.fake.head:

$ORIGIN .
$TTL 2
. IN SOA localhost. root.localhost. ( 2015082010   ; serial
                                       3600    ; refresh
                                       1       ; retry
                                       604800  ; expire
                                       86499   ; minimum
                                       )
                               NS fakens.
fakens.                         IN A            192.168.121.79

cat db.fake.tail:

*.ru.                          IN A           192.168.121.79
*.                              IN A            192.168.121.79

 

192.168.121.79 - ип-адресс нашего ДНС "изображающего" из себя всю систему корневых серверов Инета.

 

 

cat db.fake.middle:

mail.ru. IN NS fakens.
yandex.ru. IN NS fakens.
rkn.gov.ru. IN NS fakens.
gov.ru. IN NS fakens.
kremlin.ru. IN NS fakens.
google.ru. IN NS fakens.
rfc-revizor.ru. IN NS fakens.
gosuslugi.ru. IN NS fakens.

 

db.fake - корневая зона нашего ДНС-а:

 

cat db.fake:

$ORIGIN .
$TTL 2
. IN SOA localhost. root.localhost. ( 2015082010   ; serial
                                       3600    ; refresh
                                       1       ; retry
                                       604800  ; expire
                                       86499   ; minimum
                                       )
                               NS fakens.
fakens.                         IN A            192.168.121.79

mail.ru. IN NS fakens.
yandex.ru. IN NS fakens.
rkn.gov.ru. IN NS fakens.
gov.ru. IN NS fakens.
kremlin.ru. IN NS fakens.
google.ru. IN NS fakens.
rfc-revizor.ru. IN NS fakens.
gosuslugi.ru. IN NS fakens.
*.ru.                          IN A           192.168.121.79
*.                              IN A            192.168.121.79

/etc/bind/my_zones - псевдоделегация :

 

zone "mail.ru" { type forward; forward only; forwarders { 217.69.139.112; 94.100.180.138; 185.30.176.202;  }; };
zone "yandex.ru" { type forward; forward only; forwarders { 213.180.193.1; 93.158.134.1;  }; };
zone "rkn.gov.ru" { type forward; forward only; forwarders { 213.234.223.137; 217.106.225.146;  }; };
zone "gov.ru" { type forward; forward only; forwarders { 95.173.128.77; 194.226.65.9; 193.232.66.15; 194.85.84.15; 193.232.82.15; 194.226.80.79; 194.226.127.210;  }; };
zone "kremlin.ru" { type forward; forward only; forwarders { 95.173.128.77; 194.226.65.9; 193.232.66.15; 194.85.84.15; 193.232.82.15; 194.226.80.79; 194.226.127.210;  }; };
zone "google.ru" { type forward; forward only; forwarders { 216.239.32.10; 216.239.34.10; 216.239.36.10; 216.239.38.10;  }; };
zone "rfc-revizor.ru" { type forward; forward only; forwarders { 193.232.146.1; 91.217.20.1; 91.217.21.1; 185.119.138.10; 185.119.136.12;  }; };
zone "gosuslugi.ru" { type forward; forward only; forwarders { 109.207.2.218; 213.59.255.175; 91.217.20.1; 91.217.21.1;  }; };

 

Таперича пришла пора познакомиться с named.conf нашего псевдокорневого фейкового ДНС-а :

 

options {
       directory "/var/cache/bind";
       dump-file "/var/log/named/cache_dump.db";
       statistics-file "/var/log/named/named_stats.txt";
       auth-nxdomain no ;
       allow-recursion { none; };
       allow-query { none; };
       allow-transfer { none; };
       notify no;
       recursion no;
       version "REFUSED";
       query-source address 192.168.121.79;
       check-names master ignore;
       check-names slave ignore;
       recursive-clients 10000;
listen-on  {
192.168.121.79;
127.0.0.1;
};
       listen-on-v6 { none; };
};
include "/etc/bind/logging";
include "/etc/bind/rndc.key";
controls {
       inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
};
/////////////////////////////////////////////////////
acl local {
       127.0.0.1;
       192.168.121.79;
};
//////////////////////////// ипы наших клиентов, среди которых затерялся и ревизор
acl our_net {
       192.168.88.0/24;
       192.168.89.0/24;
       192.168.121.0/24;
};
///////////////////////////////////////////////////////
view "local" {
match-clients { "local"; };
allow-recursion { local; };
allow-query { local; };
include "/etc/bind/local_zones";
recursion yes;
};
/////////////////////////////////////////////////////
view "our_net" {
match-clients { "our_net"; };
allow-recursion { our_net; };
allow-query { our_net; };
include "/etc/bind/common_zones";
recursion yes;
};
///////////////////////////////////////////
view "all" {
match-clients { any ; };
allow-query { none ; };
recursion no;
allow-recursion { none; };
include "/etc/bind/common_zones";
};

 

В /etc/bind/local_zones лежат нормальные зоны для обычного днс:

 

zone "." in { type hint; file "/etc/bind/db.root.orig"; };
//
zone "localhost" {        type master;        file "/etc/bind/db.localhost" ; } ;
zone "local" {        type master;        file "/etc/bind/db.local" ; } ;
zone "127.in-addr.arpa" {        type master;        file "/etc/bind/db.127" ; } ;
zone "0.in-addr.arpa" {        type master;        file "/etc/bind/db.0" ; } ;
zone "255.in-addr.arpa" {        type master;        file "/etc/bind/db.255" ; } ;
//
zone "нашикорпоративныедомены.ru" {  type forward; forward only; forwarders { Ип.Нашего.Авторитативного.ДНС-сервера, которому ник.ру делегировал наши зоны; };          };
zone "другиеклиентскиедомены.ru" {   type forward; forward only;  forwarders { Ип.Нашего.Авторитативного.ДНС-сервера, которому ник.ру делегировал наши зоны; };         };
//

 

/etc/bind/db.root.orig - стандартная root-зона из поставки бинда

 

В /etc/bind/common_zones - "ДНС-песочница для наших клиентов":

 

zone "." in { type master; file "/etc/bind/db.fake"; };
zone "." in { type hint; file "/etc/bind/db.root"; };
//
zone "localhost" {        type master;        file "/etc/bind/db.localhost" ; } ;
zone "local" {        type master;        file "/etc/bind/db.local" ; } ;
zone "127.in-addr.arpa" {        type master;        file "/etc/bind/db.127" ; } ;
zone "0.in-addr.arpa" {        type master;        file "/etc/bind/db.0" ; } ;
zone "255.in-addr.arpa" {        type master;        file "/etc/bind/db.255" ; } ;
//
zone "нашикорпоративныедомены.ru" {  type forward; forward only; forwarders { Ип.Нашего.Авторитативного.ДНС-сервера, которому ник.ру делегировал наши зоны; };          };
zone "другиеклиентскиедомены.ru" {   type forward; forward only;  forwarders { Ип.Нашего.Авторитативного.ДНС-сервера, которому ник.ру делегировал наши зоны; };         };
//
include "/etc/bind/my_zones";

 

/etc/bind/db.fake и /etc/bind/db.root - "сладкая парочка" особенных рутовых зон:

 

cat db.root:

.       3600    IN NS fakens.
fakens. 3600    A       192.168.121.79

cat db.fake:

$ORIGIN .
$TTL 2
. IN SOA localhost. root.localhost. ( 2015082010   ; serial
                                       3600    ; refresh
                                       1       ; retry
                                       604800  ; expire
                                       86499   ; minimum
                                       )
                               NS fakens.
fakens.                         IN A            192.168.121.79

mail.ru. IN NS fakens.
yandex.ru. IN NS fakens.
rkn.gov.ru. IN NS fakens.
gov.ru. IN NS fakens.
kremlin.ru. IN NS fakens.
google.ru. IN NS fakens.
rfc-revizor.ru. IN NS fakens.
gosuslugi.ru. IN NS fakens.
*.ru.                          IN A           192.168.121.79
*.                              IN A            192.168.121.79

 

Вот вообщем-то и всё...

Следует отметить , что на 192.168.121.79 кроме фейкового корневого днс-а сидит еще и простой веб-сервер, выплёвывающий на любые обращения по порту tcp/80 статику в виде :"404-я ( на сайте ведутся регламентные профилактические работы, позвоните через 15 мин)"

 

В результете всего этого действа пользователи спокойно бродят по белым доменам, ждут , когда на других сайтах закончятся регламентные работы, а мы пока яростно чиним нашу систему блокировки.

 

P.S.

Есть ещё один способ введения "карантинго" режима, более мягкий..

Он может пригодиться , если парсинг дампа реестра прошёл удачно, а вот система dpi сломалась.

За основу его взят замечательный скрипт erdi-request.sh топик-стартера.

В результате урезания и упрощения этого скрипта( вырезал в основном то - что не смог понять :) ) и добавления "индусского" кода - родилась версия erdi-lite.

Исходный скрипт от alibek мне так полюбился, что я даже не стал менять имена основных переменных, в знак уважения и признательности к его труду.

Запуск - через start.sh

В результате работы этого скрипта мы имеем 2 списка : список доменов, упоминание которых встречается в реестре ( не важно где ) и список ип-ов , которые тока можно найти в реестре.

Далее список ип-ов ужимается агрегированием одиночных ип-ов в близкие по диапазону подсети , дабы у ipset-a не "снесло крышу".

Список доменов "скармливается" фейковому днс-у (сейчас таких зон на нём - 32507), а список ип-ов - ipset-у ( кол-во таких записей на сегодня - 24249 ).

В итоге тотально блочим все урлы и домены по домену и все ип-ы по iptables/ipset

erdi_lite.zip

Изменено пользователем OK-2004

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавил скрипт по получению из дампа списка объектов.

...

После выполнения скрипта формируется список из пяти текстовых файлов:

list-domain.txt - список доменов

list-domain-mask.txt - список доменов с маской

list-ip.txt - список отдельных IP-адресов

list-net.txt - список подсетей

list-url.txt - список URL для блокировки

Список доменов сейчас получается какой-то странный - см. прилагаемый файл

Например, в файле list-domain.txt есть записи вида

www450.xn--1-2017-bof6a3i1a.xn--p1ai

или

bet0122.xn--1--8kcaj9bd6cbk.xn--p1acf

list-domain.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

[Список доменов сейчас получается какой-то странный - см. прилагаемый файл

Например, в файле list-domain.txt есть записи вида

www450.xn--1-2017-bof6a3i1a.xn--p1ai

или

bet0122.xn--1--8kcaj9bd6cbk.xn--p1acf

Пуникод вы не усвоили ? Это российский глюк с кодировками. Никто его не заметил, особенно в url доменов .рф

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

[Список доменов сейчас получается какой-то странный - см. прилагаемый файл

Например, в файле list-domain.txt есть записи вида

www450.xn--1-2017-bof6a3i1a.xn--p1ai

или

bet0122.xn--1--8kcaj9bd6cbk.xn--p1acf

Пуникод вы не усвоили ? Это российский глюк с кодировками. Никто его не заметил, особенно в url доменов .рф

По-моему вы меня не поняли.

Если бы домен был вида www450.xn--1-2017-bof6a3i1a.xn--p1ai.ru, то нет проблем. Но тут-то какие-то огрызки от доменов. Посмотрите выложенный мной файл ближе к его концу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

www450.xn--1-2017-bof6a3i1a.xn--p1ai

Так в реестре именно так и записано.

 

 

 <content id="448354" includeTime="2017-02-12T12:34:07" entryType="1" blockType="domain" hash="E4E5577EB07F4966E06CA8E03A568850">
   <decision date="2016-06-24" number="2-6-27/     2016-06-22-18-АИ" org="ФНС"/>
   <domain><![CDATA[www450.xn--1-2017-bof6a3i1a.xn--p1ai]]></domain>
   <ip>91.201.202.204</ip>
   <ip>91.201.203.170</ip>
 </content>

 

 

Особой валидации в скрипте нет, он просто прогоняет домены через idn, приводит к одному регистру, убирает точку в конце, а затем убирает дубли и сортирует по длине.

Если нужна дополнительная валидация, ее нужно добавить в скрипт, под свои нужды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

alibek, большое спасибо за ваши пояснения и скрипты. :)

Что вы обычно делаете с такими доменами в плане блокировки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшой оффтопик: где бы взять непровайдеру этот самый реестр?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшой оффтопик: где бы взять непровайдеру этот самый реестр?

https://reestr.rublacklist.net/article/api

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.