Привет! Новый параметр “output=user” открыл новые возможности для скриптинга, которые я решил полностью использовать. Скрипт не требует сторонних серверов, так как списки адресов загружаются напрямую из источника и обрабатываются непосредственно на маршрутизаторе. Скрипт НЕ сохраняет загруженные файлы на диск (тем самым предотвращая преждевременный износ и поломку диска). Скрипт можно адаптировать для загрузки и обработки любого количества списков адресов аналогичного формата (максимальный размер файла — 63 KiB (64512 байт). Это лучше, чем 4 KiB). На данный момент скрипт может загружать и обновлять следующие списки: DShield Spamhaus DROP Spamhaus EDROP Abuse.ch SSLBL Вариант 1: ip firewall address-list :local update do={ :do { :local data ([:tool fetch url=$url output=user as-value]->"data") remove [find list=blacklist comment=$description] :while ([:len $data]!=0) do={ :if ([:pick $data 0 [:find $data "\n"]]~"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}") do={ :do {add list=blacklist address=([:pick $data 0 [:find $data $delimiter]].$cidr) comment=$description timeout=1d} on-error={} } :set data [:pick $data ([:find $data "\n"]+1) [:len $data]] } } on-error={:log warning "Обновление списка адресов <$description> не удалось"} } $update url=https://www.dshield.org/block.txt description=DShield delimiter=("\t") cidr=/24 $update url=https://www.spamhaus.org/drop/drop.txt description="Spamhaus DROP" delimiter=("\_") $update url=https://www.spamhaus.org/drop/edrop.txt description="Spamhaus EDROP" delimiter=("\_") $update url=https://sslbl.abuse.ch/blacklist/sslipblacklist.txt description="Abuse.ch SSLBL" delimiter=("\r") Скрипт удаляет все адреса, соответствующие условию “list=blacklist comment=$description”, после чего заполняет списки адресов с нуля. Это проще и быстрее. Вариант 2: ip firewall address-list :local update do={ :do { :local data ([:tool fetch url=$url output=user as-value]->"data") :local array [find dynamic list=blacklist] :foreach value in=$array do={:set array (array,[get $value address])} :while ([:len $data]!=0) do={ :if ([:pick $data 0 [:find $data "\n"]]~"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}") do={ :local ip ([:pick $data 0 [:find $data $delimiter]].$cidr) :do {add list=blacklist address=$ip comment=$description timeout=1d} on-error={ :do {set ($array->([:find $array $ip]-[:len $array]/2)) timeout=1d} on-error={} } } :set data [:pick $data ([:find $data "\n"]+1) [:len $data]] } } on-error={:log warning "Обновление списка адресов <$description> не удалось"} } $update url=https://www.dshield.org/block.txt description=DShield delimiter=("\t") cidr=/24 $update url=https://www.spamhaus.org/drop/drop.txt description="Spamhaus DROP" delimiter=("\_") $update url=https://www.spamhaus.org/drop/edrop.txt description="Spamhaus EDROP" delimiter=("\_") $update url=https://sslbl.abuse.ch/blacklist/sslipblacklist.txt description="Abuse.ch SSLBL" delimiter=("\r") Скрипт НЕ удаляет актуальные адреса, а продлевает их таймаут. Адреса, которых нет в загружаемом списке, автоматически удаляются системой после истечения их таймаута. Это сложнее и медленнее, но позволяет отслеживать дату/время добавления адресов в черный список. Почему скрипт использует “array”? Потому что стандартная функция “find” очень медленная. Использование дополнительного массива позволяет ускорить скрипт в несколько раз, так как операции выполняются напрямую с индексами, минуя стандартную функцию “find”. Требуемая политика: чтение, запись, тестирование. Возможно, этот скрипт будет полезен кому-то. P.S. Извините за мой английский.
Скачиватель списков адресов (DShield, Spamhaus DROP/EDROP и др.)
Скачиватель списков адресов (DShield, Spamhaus DROP/EDROP и др.), RouterOS
|
01.10.2019 20:00:00
|
|
|
|
|
|
17.10.2019 21:12:00
Хорошая работа! Я добавил FireHOL Level2 в скрипт, на случай если тебе интересно. Просто добавил эту строку: $update url= description=“FireHOL Level2” delimiter=(“\n”) -zeb
|
|
|
|
|
|
03.11.2019 15:42:00
К сожалению, я не могу перевести этот текст.
|
|
|
|
|
|
03.11.2019 17:50:00
Это правильный синтаксис $update url=https://raw.githubusercontent.com/ktsaou/blocklist-ipsets/master/firehol_level2.netset description="FireHOL Level2" delimiter=("\n")
|
|
|
|
|
|
03.11.2019 18:00:00
Этот список Level2 огромный… пытаюсь классифицировать разные уровни, которые там есть. Есть идеи? Также, будешь это делать ежедневно?
|
|
|
|
|
|
03.11.2019 20:53:00
Ах, это логично. Вы совершенно правы. Спасибо за объяснение по поводу удаления. Есть ли какие-нибудь другие списки, которые вы бы рассмотрели, или хороший источник?
|
|
|
|
|
|
04.11.2019 00:56:00
malc0de $update url=http://malc0de.com/bl/IP_Blacklist.txt description=“Malc0de” delimiter=(“\n”)
|
|
|
|
|
|
04.11.2019 12:29:00
Это абсолютно логично. Ещё раз спасибо за это.
|
|
|
|
|
|
04.11.2019 14:00:00
Есть ли способ проверить размер файла и при превышении максимального размера файла активировать инструмент отправки электронной почты?
|
|
|
|
|
|
07.11.2019 12:13:00
Спасибо за это. У вас есть отдельная ссылка на статью о fullbogons? Я не могу найти прямой URL для нее?
|
||||
|
|
|
|||
Читают тему
