Страница 1 из 1

Скрипт для блокировки IP из банлиста

Добавлено: 17 мар 2022, 19:27
iiwanc
Здравствуйте!
Простите, если не сюда пишу.

С Микротик знаком несколько лет, но скрипты не писал. Таких задач передо мной не было.
Читал информацию в интернете. Но в программировании не силен.
Буду рад, если поправите мои скрипты и, возможно, мое понимание, как это работает.

Мне необходимо составить банлист из IP и заблокировать эти адреса на Микротике.
MIKROTIK RB4011IGS+5HACQ2HND-IN с RouterOS v6.45.9 (long-term)

Делаю скриптом на FTP сервере:

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

@echo off
powershell -executionpolicy bypass -command "(Invoke-WebRequest https://www.spamhaus.org/drop/drop.txt).content.split() | foreach -begin {" ^
    "@(':log info "torlist.rsc import started."', '/system logging disable 0', '/ip firewall address-list remove [find where list="""torlist"""]','/ip firewall address-list') | Out-File '.\torlist.rsc' -Append -Encoding utf8" ^
        "} -Process {" ^
            """"/do {ip firewall address-list add address=$($_) list=talos timeout=2d} on-error={}""" | Out-File '.\torlist.rsc' -Append -Encoding utf8" ^
        "} -end {" ^
            """"/system logging enable 0""", """:log info "torlist.rsc import complete."""" | Out-File '.\torlist.rsc' -Append -Encoding utf8" ^
        "}"
exit
Список получается вида:

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

:log info torlist.rsc import started.
/system logging disable 0
/ip firewall address-list remove [find where list="torlist"]
/ip firewall address-list
/do {ip firewall address-list add address=221.132.192.0 list=talos timeout=2d} on-error={}
/do {ip firewall address-list add address=223.169.0.0 list=talos timeout=2d} on-error={}
/do {ip firewall address-list add address=223.173.0.0 list=talos timeout=2d} on-error={}
/do {ip firewall address-list add address=223.254.0.0 list=talos timeout=2d} on-error={}
/system logging enable 0
:log info torlist.rsc import complete.
Теперь, понимаю, что нужно загрузить этот список на Микротик.
Для этого идем в /system/scripts и пишем там скрипт:

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

#Загружаем банлист
/system script add name="ZagruzkaTorlist" source={
/tool fetch url="http://домен.ру/torlict.rsc" mode=http;
:log info "Zagruzili Torlist";
}
# Скрипт, который удалит старый список Torlist и добавит новый
/system script add name="ZamenitTorlist" source={
/ip firewall address-list remove [find where list="torlist"]
/import file-name=torlist.rsc;
:log info "Удалены старые записи Torlist и импортирован новый список";
}
Создаем правило, чтобы блокировать IP из нашего банлиста. Пишем в терминале:

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

add chain=input action=drop comment="Blokiruem IP iz torlist.rsc" \
    connection-state=new src-address-list=blacklist in-interface=ether1-Internet
Идем в Тарминал и создаем правило scheduler, пишем:

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

# Расписание загрузки и применения списка Torlist
/system scheduler add comment="Skachivaem Banlist" interval=3d \
  name="SkachivaemBanlist" on-event=ZagruzkaTorlist \
  start-date=jan/01/1970 start-time=02:00:00
/system scheduler add comment="Primenit banlist" interval=3d \
  name="UstanovitBanlist" on-event=ReplaceTorlist \
  start-date=jan/01/1970 start-time=02:10:00
Очень хотелось бы разобраться в этом.
Буду благодарен советам и ссылкам на источники.

Re: Скрипт для блокировки IP из банлиста

Добавлено: 18 мар 2022, 12:29
iiwanc
Не уже ли я все делаю правильно? :)
Кто подскажет?

Re: Скрипт для блокировки IP из банлиста

Добавлено: 19 мар 2022, 10:22
hardrockbaby
iiwanc писал(а): 18 мар 2022, 12:29 Мне необходимо составить банлист из IP и заблокировать эти адреса на Микротике.
...
Не уже ли я все делаю правильно? :)
Кто подскажет?
torlist.rsc я бы облегчил, т.к. циклы do здесь ни к чему:
 1

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

:log info "torlist.rsc import started."
/system logging disable 0
/ip firewall address-list
remove [find where list="torlist"]
add address=221.132.192.0 list=talos timeout=2d
add address=223.169.0.0 list=talos timeout=2d
add address=223.173.0.0 list=talos timeout=2d
add address=223.254.0.0 list=talos timeout=2d
/system logging enable 0
:log info "torlist.rsc import complete."
Или в такой, смотря как удобней его генерировать в powershell
 2

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

:log info "torlist.rsc import started."
/system logging disable 0
/ip firewall address-list remove [find where list="torlist"]
/ip firewall address-list add address=221.132.192.0 list=talos timeout=2d
/ip firewall address-list add address=223.169.0.0 list=talos timeout=2d
/ip firewall address-list add address=223.173.0.0 list=talos timeout=2d
/ip firewall address-list add address=223.254.0.0 list=talos timeout=2d
/system logging enable 0
:log info "torlist.rsc import complete."
iiwanc писал(а): 18 мар 2022, 12:29Теперь, понимаю, что нужно загрузить этот список на Микротик.
Для этого идем в /system/scripts и пишем там скрипт:
При его запуске ты очищаешь torlist затем повторяешь аналогичную очистку списка в torlict.rsc
Код поправил в такой вид:

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

#Загружаем банлист
/tool fetch url="http://домен.ру/torlict.rsc" mode=http;
:log info "Zagruzili Torlist";
/import file-name=torlist.rsc;

Re: Скрипт для блокировки IP из банлиста

Добавлено: 20 мар 2022, 21:01
iiwanc
Для эксперимента ввожу в терминале:

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

/tool fetch address=192.168.0.99 user=ftp mode=ftp password=123 src-path=/ftp/tor
list.rsc port=21 host="" keep-result=yes
Появляется сообщение:

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

 status: finished
 downloaded: 761KiBz pause]
 duration: 1s
Потом ввожу:

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

/import file-name=torlist.rsc;
ругается и пишет:

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

expected command name (line 1 column 1)

Re: Скрипт для блокировки IP из банлиста

Добавлено: 20 мар 2022, 22:17
iiwanc
В Files вижу свой файл torlist.rsc.
Но не получается импортировать.
Помогите, пожалуйста.

Re: Скрипт для блокировки IP из банлиста

Добавлено: 20 мар 2022, 23:31
hardrockbaby
iiwanc писал(а): 20 мар 2022, 21:01 ругается и пишет:
expected command name (line 1 column 1)
Сообщение в лог взято в кавычки?
 неправильно
:log info torlist.rsc import started.
 правильно
:log info "torlist.rsc import started."

Re: Скрипт для блокировки IP из банлиста

Добавлено: 21 мар 2022, 06:57
iiwanc
Я эти строки вообще пока удалил.
Для формирования банлиста использую скрипт, в котором прописана кодировка:

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

-Encoding utf8
Может ли быть проблема в этом?

Re: Скрипт для блокировки IP из банлиста

Добавлено: 21 мар 2022, 07:37
iiwanc
В конце файла torlist.rsc есть строка:

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

add address= list=torlist timeout=2d
Понятное дело, в этой строке не создается адрес лист. Выдает ошибку.
Может ли быть это причиной неудавшегося импорта?

Re: Скрипт для блокировки IP из банлиста

Добавлено: 21 мар 2022, 09:14
iiwanc
Если вручную в терминале вносить импортируемый список, то работает.
Но команда не работает:

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

/import file-name=torlist.rsc;

Re: Скрипт для блокировки IP из банлиста

Добавлено: 23 мар 2022, 02:28
hardrockbaby
Для формирования банлиста использую скрипт, в котором прописана кодировка:
-Encoding utf8
Может ли быть проблема в этом?
Пока используются символы ASCII проблем не должно возникать, т.е. разницы между ascii и utf8 не будет. Но желательно использовать -Encoding ascii дабы потом не гадать где сломался скрипт. Причём сама ROS делает экспорт в ascii кодировке.
Если вручную в терминале вносить импортируемый список, то работает.
Но команда не работает:
/import file-name=torlist.rsc;
Покажи этот нерабочий torlist.rsc полностью
В конце файла torlist.rsc есть строка:
add address= list=torlist timeout=2d
Может ли быть это причиной неудавшегося импорта?
Может