Апр 25

Это не мое. Использовались python и php скрипты c

http://forum.nag.ru/forum/index.php?showtopic=80677

https://www.evernote.com/shard/s185/sh/ceb0b021-47e7-4c61-ab43-bc6db27fe919/c535b6e5047ec69d304519fe81c2c9ac?noteKey=c535b6e5047ec69d304519fe81c2c9ac&noteGuid=ceb0b021-47e7-4c61-ab43-bc6db27fe919

Для корректной работы их пришлось немного модифицировать.

Задачи:

  1. Получить с сайта реестра запрещенных ресурсов выгрузку в формате xml
  2. Сделать парсинг — извлечь ip и url адреса из файла выгрузки
  3. Закинуть это на маршрутизатор mikrotik

1. Для получения будем использовать python-скрипты от автора Pavel Yegorov

zapretinfo.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__version__ = «0.0.4»
__author__ = «Pavel Yegorov»

import suds
from base64 import b64encode

#API_URL = «http://www.zapret-info.gov.ru/services/OperatorRequest/?wsdl»
API_URL = «http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl»

В нем мы изменили api_url на новый и версию на 2.2 в 39 строке

result=client.service.sendRequest(xml,sert,»2.2″)

zapret_checker.py

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
# yegorov-p.ru
from xml.etree.ElementTree import ElementTree
from datetime import datetime,timedelta
from zapretinfo import ZapretInfo
import time
import zipfile
from base64 import b64decode

XML_FILE_NAME = «/data/reestr/request.xml»
P7S_FILE_NAME = «/data/reestr/request.xml.sig»

VER = «2.2»

Где XML_FILE_NAME и P7S_FILE_NAME файл запроса и файл запроса, подписанный цифровой подписью. Последний может иметь расширения sign, sig, p7s.

Файл запроса должен быть в формате cp1251.

<?xml version=»1.0″ encoding=»windows-1251″?>
<request>
    <requestTime>2012-10-01T01:01:01.000+04:00</requestTime>
    <operatorName>имя оператора</operatorName>
    <inn>ИНН оператора</inn>
    <ogrn>ОГРН оператора</ogrn>
    <email>обратная связь</email>
</request>

Как пишут на http://habrahabr.ru/sandbox/51575/ реально проверяются только ИНН и ОГРН. Я убедился, что можно сколь угодно раз посылать эти два файла и получать выгрузку. Хотя по идее, они должны сверять дату.

Файл провайдер подписывал в Крипто-ПРО. Ее можно установить в пробном режиме на 30 дней. Можно каждый раз создавать новый файл запроса (в вышеуказанных ссылках в скриптах он генерируется) и подписывать через openssl, как, например, здесьhttp://blog.timba.org.ua/post/1896.

Чтобы скрипт работал, должен быть установлен python2.6 или 2.7 (в версии 3 скрипт не работает. Я тестировал на 2.7) и модуль suds

Python2.7 ставим из портов

cd /usr/ports/lang/python27

make install clean

Модуль suds тоже из портов

cd /usr/ports/net/py-suds

make install clean

или вручную http://www.py-my.ru/post/4e818bd81d41c821a9000003#!

wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.4.tar.gz 
tar -xzf python-suds-0.4.tar.gz 
cd python-suds-0.4/ 
python setup.py build 
sudo python setup.py install


Присвоим скрипту права на выполнение и запускаем скрипт chmod +x zapret_checker.py ./zapret_checker.py В итоге сразу же отобразится идентификатор запроса, через некоторое время (7-10 минут) после фраз «Try it now…» появится фраза «Got in!«, что означает, что дамп реестра получен. Этот файл называется dump.xml.

2. Теперь перейдем к парсингу и закидыванию адресов в mikrotik. В прошлой версии статьи мы закидывали каждый адрес отдельным ssh запросом, что вызывало большое количество соединений по ssh и долгую загрузку всего листа с запрещенными адресами, который постоянно растет. Сейчас мы будем бросать список по протоколу ftp

2.1. Установим xml и lftp. Они необходимы для работы нового скрипта

cd /usr/ports/*/xml make install clean cd /usr/ports/*/lftp make install clean

2.2. Создадим в каталоге со скриптом каталог tmp

mkdir tmp

2.3. Создадим новый скрипт с расширением sh

ee new_script.sh

2.4. Добавим в него (по статье http://forum.nag.ru/forum/index.php?showtopic=79836&st=926 ) следующее

#!/bin/sh
cd /data/reestr
rm /data/reestr/tmp/mt_zapretip.auto.rsc
echo -e "/ip firewall address-list remove numbers=[find list=blocklist]" > /data/reestr/tmp/mt_zapretip.auto.rsc
echo -e "/ip firewall address-list\r" >> /data/reestr/tmp/mt_zapretip.auto.rsc
/usr/local/bin/xml pyx /data/reestr/dump.xml | sort | uniq | grep ^- | sed 's,-,add list=blocklist address=,g;s,$,,g' >> /data/reestr/tmp/mt_zapretip.auto.rsc
/usr/local/bin/lftp -u utm, -e "put /data/reestr/tmp/mt_zapretip.auto.rsc ; bye" IPадрес_микротика

Присвоим скрипту права на выполнение. Перед запуском заходим на микротик через winbox, в раздел IP-Services, включаем ftp и добавляем IP сервера со скриптом в список разрешенных. Возвращаемся на сервер, запускаем скрипт. В каталоге Files микротика должен появиться файл mt_zapretip.auto.rsc , который выполнится автоматически.

chmod +x new_script.sh

./new_script.sh

3.  Закидываем скрипты в cron.

crontab -e

Добавляем

45      9       *       *       *       root    cd /data/reestr/; /data/reestr/zapret_checker.py
0       10      *       *       *       root    cd /data/reestr/; /data/reestr/new_script.sh

Между скриптами 15 минутный перерыв, так как между запросом и выгрузкой необходимо подождать несколько минут.

Все скрипты в архиве…reestr_mikrotik, кроме new_script.sh

От автора: не знаю, как будет дальше, но надзор который роском все ужесточает и ужесточает требования к реестру запрещенных ресурсов. Следующим шагом, как мне кажется, станет блокировка сайтов по url и по словам в url. Для создания этой блокировки можно почитать следующую статью https://habrahabr.ru/post/187574/

1 комментарий на “Выгрузка реестра запрещенных ресурсов на Mikrotik через сервер с FreeBSD. Версия 2”

  1. Донат высказал:

    У меня изучение этих скриптов все равно закончилось переходом на страницу автора
    https://github.com/yegorov-p/python-zapret-info

Комментировать