Skip to content

Instantly share code, notes, and snippets.

@uablacklist
Last active January 20, 2024 15:04
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save uablacklist/b0e73deb75f2a1c43f035c59e5401e8c to your computer and use it in GitHub Desktop.
Save uablacklist/b0e73deb75f2a1c43f035c59e5401e8c to your computer and use it in GitHub Desktop.
Добавляет IP подсети, заблокированные украинским правительством, из https://uablacklist.net в список адресов вашего Mikrotik
:local apiPrefix "https://uablacklist.net/subnets_mikrotik_"
:local tempFile "uablacklist.txt"
:local listName "uablacklist"
/log info "removing existing '$listName'..."
:put "removing existing '$listName'..."
/ip firewall address-list remove [/ip firewall address-list find list=$listName]
# mikrotik can't load >4KB file inside a variable, so backend contains file pieces which we download and parse one by one
:local i 0
:local isEnd false
:do {
:local apiPath "$apiPrefix$i.txt"
/log info "fetching UA blacklist registry piece ($apiPath)..."
:put "fetching UA blacklist registry piece ($apiPath)..."
:local contentLen 0
:local content ""
:do {
/tool fetch url=$apiPath dst-path=$tempFile
:set content [/file get [/file find name=$tempFile] contents]
:set contentLen [:len $content]
} on-error={
/log info "no more pieces";
:put "no more pieces"
:set isEnd true
}
:local lineEnd 0
:local line ""
:local lastEnd 0
:local company ""
:while ($lastEnd < $contentLen) do {
:set lineEnd [:find $content "\n" $lastEnd ]
:set line [:pick $content $lastEnd $lineEnd]
:set lastEnd ($lineEnd+1)
:local entry [:pick $line 0 ($lineEnd-1)]
:if ([:pick $line 0 1] != "#") do={
:if ([:len $entry ] > 0) do={
/log info "add '$entry' subnet of '$company' to list '$listName'...";
:put "add '$entry' subnet of '$company' to list '$listName'...";
:do {
/ip firewall address-list add list=$listName address=$entry comment=$company
} on-error={
/log info "failed to add '$entry' subnet of '$company' to list '$listName', probably, it's duplication error.";
:put "failed to add '$entry' subnet of '$company' to list '$listName', probably, it's duplication error."
}
}
} else={
:set company [:pick $line 2 ($lineEnd) ]
}
}
:set i (i+1)
} while (!$isEnd)
@lbrdev
Copy link

lbrdev commented Oct 5, 2022

@A-I-Demidov проверил оба скрипта:
первый скрипт, после запуска список не обновляется:

fetching UA blacklist registry piece (https://uablacklist.net/subnets_mikrotik_0.txt)...
removing existing 'uablacklist'...
started to loading
no more pieces

второй скрипт:

Starting import of address-list: uablacklist

я подозреваю что /tool fetch выпадает с таймаутом, хотя открыть врчную адрес https://uablacklist.net/subnets.txt я могу

@A-I-Demidov
Copy link

A-I-Demidov commented Oct 5, 2022

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

Проверьте на всякий случай, а есть ли от вас вообще возможность его скачать, так как я видел где-то обсуждения, что сам https://uablacklist.net может блокировать провайдер и тогда надо скачивание пускать сразу через используемый вами VPN.

Как вариант могу предложить не использовать скрипт, а использовать BGP с помощью ребят с https://antifilter.network
У них основное предназначение это обход блокировок в РФ, но и наш лист они тоже подтянули, можно пользоваться или им или вообще пускать весь российский сегмент через VPN, с оглядкой что никто не балуется в сети не балуется с торрентами, а то можно забить канал.

P.S. Свой скрипт именно в этом варианте проверил, все работает.
P.P.S. Проверьте права у скрипта, все-таки он должен иметь возможность читать и записывать переменные.

@neoskynet89
Copy link

Что случилоась с uablacklist.net не работает сайт, соответственно и скрипт...

@A-I-Demidov
Copy link

Что происходит с uablacklist.net не работает сайт, соответственно и скрипт...

Сайт работает.

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

Но вообще рекомендую не список, а перейти на BGP https://antifilter.network/bgp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment