Вопрос по микротик api php

Обсуждение ПО и его настройки
Ответить
Tem
Сообщения: 11
Зарегистрирован: 20 авг 2012, 10:17

13 июн 2013, 09:15

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

Код: Выделить всё

<?php
require('routeros_api.class.php');
$lines = file('addresses.txt');
$API = new routeros_api();
$API->debug = false;
if ($API->connect('1.2.4.3', 'admin', 'admin')) {
foreach ($lines as $line_num => $line) {
$line = str_replace("\n",'',$line);
$API->comm("/ip/firewall/address-list/add", array (
"address" => $line,
"list" => "zapret",
));
}
$API->disconnect();
}
?>


Все работает отлично, но столкнулся с одной проблемой, перед тем как залить новый список, надо очищать старый, по ssh делал это следующей командой
/ip firewall address-list remove numbers=[find list=zapret]
Попытался тут сделать

Код: Выделить всё

$API->comm("/ip/firewall/address-list/remove", array ( 
"numbers" => "[find list=zapret]" ,))

Но не работает, ошибок никаких не выдает, просто не отрабатывается.


Аватара пользователя
simpl3x
Модератор
Сообщения: 1532
Зарегистрирован: 19 апр 2012, 14:03

13 июн 2013, 15:23

к сожалению не подскажу что тут не так с api, никогда не работал с ним.
у нас эти грабли работают немного по другому. на сервере формируется файл с управляющими командами, потом на ftp заливается по шлюзам, где автоматом отрабатывается после заливки. работает как часы.

автор не я, к сожалению не помню его, нашёл на nag'e, в любом случае большое ему спасибо:

Код: Выделить всё

#!/bin/bash
cd /home/simpl3x/zapret-gov.ru2/rezult

# Заранее удаляю старье, чтоб Dropbox успел их синхронизировать -- моя специфика, далеко не всем надо
#rm dump.csv
rm mt_zapret*.rsc

# Это мне для последующего анализа, глазками -- в электронной таблице или текстом
xmlstarlet sel -T -t -m "reg:register/content/ip" -v "concat(parent::content/@id,';',self::ip,';',parent::content/child::domain,';',parent::content/child::url)" -n dump.xml > dump.csv
# СПАСИБО знатоку XML-парсинга за доработку вывода множественных IP. Но они похоже все равно в РАЗНЫХ строчках идут, решения под разными id

# Формирование скрипта-конфига для роутера Mikrotik, обновление списка IP zapretip.
# \r в конце строк понадобилось, так как признает лишь Win/DOS-концы строк, а мы под Linux
###echo -e "/ip firewall filter remove numbers=[find comment=zapret-info.gov.ru]\r" > mt_zapret.rsc
echo -e "/ip firewall address-list remove numbers=[find comment=zapret-info.gov.ru]\r" > mt_zapret_ip.rsc
## echo -e "/ip firewall filter\r" >> mt_zapretip.rsc
xmlstarlet pyx dump.xml | sort | uniq | grep ^- | sed 's,-,/ip firewall address-list add comment=zapret-info.gov.ru list=zapret-info.gov.ru address=,g;s,$,\r,g' >> mt_zapret_ip.rsc
# Поскольку решения с разными id, вылезают ПОВТОРЫ IP -- приходится сортировать и удалять дубликаты

# Формируем список запретов для Proxy с перенаправлением на сами знаете куда :)
echo -e "/ip proxy access remove numbers=[find redirect-to=2.2.2.2:82]\r" > mt_zapret_url.rsc
## echo -e "/ip proxy access\r" >> mt_zapreturl.rsc

# Следующее правило позволяет У МЕНЯ, будучи ПЕРВЫМ, перенаправлять ВСЕ запросы по списку IP, без анализа доменов. Пока убрал.
## echo "add action=deny redirect-to=zapret-info.gov.ru\r" >> mt_zapreturl.rsc

# Собственно, фильтр по доменам (чтоб не глушить весь IP). Планируется дополнить уточнением URL, когда тема немного устаканится.
xmlstarlet sel -T -t -m "//content" -o "/ip proxy access add action=deny dst-host=:" -v "domain" -o " redirect-to=2.2.2.2:82 path=" -v "url" -n dump.xml | sort | uniq | sed -r 's,path=rcsyn.com,path=http://rcsyn.com,g' |sed -r 's,https?://?[^/]+/?,\"\/,g' | sed 's,$,\*\"\r,g'  >> mt_zapret_url.rsc
xmlstarlet sel -T -t -m "//content" -o " " -v "domain" -o " " -n dump.xml | sort | uniq | sed 's,$,\r,g' >> mt_zapreturl_info.txt

# Сливаем оба списка в один файл, который АВТОМАТОМ исполнится на Mikrotik, будучи залитым по FTP
cat mt_zapret_ip.rsc mt_zapret_url.rsc > mt_zapret.auto.rsc
lftp -u login,password -p 10021 -e "put mt_zapret.auto.rsc ; bye" 1.1.1.1

в двух словах скрипт формирует два списка, mt_zapret_ip.rsc и mt_zapret_url.rsc, первый список содержит в себе ip адреса по списку забаненых доменов, но мы не режем доступ к этим адресами, а редиректим на внутренний прокси микротика, и там анализируем по второму списку, который содержит в себе сам домен и адрес страницы.
есть еще скрипт который дергает сам список по фз.


Tem
Сообщения: 11
Зарегистрирован: 20 авг 2012, 10:17

13 июн 2013, 15:32

на одном тике у меня тоже работает с фтп, но на другом почемуто не могу ничего писать на диск, хотя с правами все отлично.


Ответить