Перейти к содержимому


Фото
* * * * * 2 Голосов

Lua помощь


  • Please log in to reply
97 ответов в этой теме

#61 Hedgehog_57

Hedgehog_57

    Newbie

  • Posters
  • 46 Сообщений:

Отправлено 09 Январь 2020 - 18:42

Спасибо, попробую. Но оно не ругается на эту регулярку. Она работает нормально и почта ходит без пробем. Оно так ругается, когда приходит почта с адресов вида

 

870-LBG-312.0.932907.0.0.217968.9.56903619@mktomail.veeam.com

OLSRV.PART.EU.00.RU.TPR.LIS.CS.T01.MPS.SD.WB@css.one.microsoft.com  

338-EJP-431.0.244443.0.0.113867.9.5025945@eu-lon-188.mktomail.com

021-WLD-815.0.36948.0.0.18209.9.1329028-127-324@bounce.tmforum.org

564-VFR-008.0.360042.0.0.33067.9.46998550@bounce.s.solarwinds.com

 

Скорее всего ругается на эту регулярку:

(.*\.)*ibm\.com

Я бы попробовал переписать её как-нибудь так:

@([a-z0-9-]+\.)*ibm\.com$

Не проверял, ничего не гарантирую.



#62 Dmitry Mikhirev

Dmitry Mikhirev

    Advanced Member

  • Dr.Web Staff
  • 591 Сообщений:

Отправлено 09 Январь 2020 - 18:45

оно не ругается на эту регулярку

Как это? Вот же:

Cannot call regex function: The complexity of matching the regular expression exceeded predefined bounds.

Если Вы показали не всё содержимое white-from.regex, возможно, проблема в другой строке. Или в нескольких.


Сообщение было изменено Dmitry Mikhirev: 09 Январь 2020 - 18:47


#63 Hedgehog_57

Hedgehog_57

    Newbie

  • Posters
  • 46 Сообщений:

Отправлено 09 Январь 2020 - 18:57

Я изменил на ваш вариант и оно заработало. Спасибо.

В качестве примера я привел все три варианта записей, что есть у меня в файле. Адрес, домен и поддомены. У меня было 4-ре записи вида поддомены. Похоже, что оно упиралось именно в них. Но в явном виде, какая именно строка не устраивает regex не говорится.

 

Я не понял до конца. Через эту регулярку отлично проходит почта. Упиралась только та, что имела такие странные длинные адреса. 

 

 

 

оно не ругается на эту регулярку

Как это? Вот же:

Cannot call regex function: The complexity of matching the regular expression exceeded predefined bounds.

Если Вы показали не всё содержимое white-from.regex, возможно, проблема в другой строке. Или в нескольких.

 



#64 Dmitry Mikhirev

Dmitry Mikhirev

    Advanced Member

  • Dr.Web Staff
  • 591 Сообщений:

Отправлено 09 Январь 2020 - 19:13

В этих адресах много фрагментов, разделённых точками. Выражение (.*\.)* очень долго ходит по ним взад-вперёд, пытаясь найти совпадение. В том выражении, которое предложил я, во-первых, ищется совпадение только непосредственно после @ (а эти куски с точками как раз до @), во-вторых, исключаются символы, невалидные для имён доменов, и в-третьих, дополнительный якорь $ фиксирует конец совпадения концом строки. В принципе, для указанных Вами адресов хватило бы просто добавления @ в начало, но проблема могла бы возникнуть снова с адресами другого вида. Зафиксировать начало (@) и конец ($) совпадения — более оптимальный вариант, не говоря о том, что под Вашу регулярку мог подойти адрес вида something.ibm.com123@example.com или anything@ibm.common.example.org.

P. S. Главное — проверьте, проходят ли письма, для которых эта регулярка изначально писалась. У меня нет уверенности, что совпадение проверяется для извлечённого из заголовка  From адреса, а не для всего его содержимого.


Сообщение было изменено Dmitry Mikhirev: 09 Январь 2020 - 19:22


#65 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 12 Ноябрь 2021 - 11:20

День добрый!

Есть необходимость получать список для whitelist / blacklist из запроса в MySQL, как это можно реализовать если такое предусмотренно!?

package.cpath = package.cpath .. ";/usr/lib/i386-linux-gnu/lua/5.1/?.so"
 

local dw = require "drweb"

local regex = require "drweb.regex"
-- и подключем

local luasql = require "luasql.mysql"
local mysql = assert (luasql.mysql())
 
-- данные для подключения к базе MySQL
local DB_HOST = "localhost"
local DB_NAME = "db_name"
local DB_USER = "db_user"
local DB_PASSWORD = "db_passwod"

local con = assert (env:connect(DB_NAME,DB_USER,DB_PASSWORD))
local blacklist = assert (con:execute("SELECT * FROM blacklist ;"))
local 
whitelist = assert (con:execute("SELECT * FROM whitelist ;"))

cur:close()

con:close()

Скажем как-то так, будет работать!?
 


Сообщение было изменено MaxSimba: 12 Ноябрь 2021 - 11:21


#66 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 12 Ноябрь 2021 - 17:29

У нас для этого есть специальный компонент LookupD.
Задаёте источник:
$ sudo drweb-ctl cfset LookupD.Mysql -a Whitelist
$ sudo drweb-ctl cfset LookupD.Mysql.Whitelist.Conn "tcp://db_user:db_password@localhost/db_name"
$ sudo drweb-ctl cfset LookupD.Mysql.Whitelist.Request "select * from whitelist"
И далее в хуке можно использовать:
local dwl = require "drweb.lookup"
.........
local whitelist = dwl.lookup("Mysql@Whitelist")

Сообщение было изменено amorozov: 12 Ноябрь 2021 - 17:30


#67 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 17 Ноябрь 2021 - 17:05

У нас для этого есть специальный компонент LookupD.
Задаёте источник:

$ sudo drweb-ctl cfset LookupD.Mysql -a Whitelist
$ sudo drweb-ctl cfset LookupD.Mysql.Whitelist.Conn "tcp://db_user:db_password@localhost/db_name"
$ sudo drweb-ctl cfset LookupD.Mysql.Whitelist.Request "select * from whitelist"
И далее в хуке можно использовать:
local dwl = require "drweb.lookup"
.........
local whitelist = dwl.lookup("Mysql@Whitelist")

Большое спасибо за помощь.

Простите за уточнение!

Создание источника компонентой LookupD необходимо производить на каждом экземпляре сервера или это необходимо делать через esuite server.

И второй момен, при использовании списков из данных MySQL в частности, используется исключительно Regexp или есть выбор как при работе с файловым источником Wildcard, CIDR, Regexp?
Если Regexp, то на сколько осуществляется поддержка PCRE, к примеру одна строка должна содержать один шаблон или возможно группрование нескольких шаблонов с использованием или (".*@domen\.com" и ".*_group@domen\.ru|manager-.?.?@domen\.ru")!?

Благодарю за ответ!



#68 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 17 Ноябрь 2021 - 20:57

При подключении к ES источник можно задать в редакторе ini (Агент Dr.Web -> Конфигурация):
[LookupD.Mysql.Whitelist]
Conn = "tcp://db_user:db_password@localhost/db_name"
Request = "select * from whitelist"
В Lua получается просто массив строк. В коде их можно интерпретировать как угодно, в том числе работать как с регулярными выражениями с помощью drweb.regex. Правила из Perl оно умеет

#69 Afalin

Afalin

    Guru

  • Dr.Web Staff
  • 5 852 Сообщений:

Отправлено 18 Ноябрь 2021 - 09:35

Только учтите, если будете задавать настройки любого компонента в "редакторе" – все остальные настройки этого компонента, сделанные в интерфейсе, превратятся в тыкву.


Семь раз отрежь – один раз проверь

#70 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 18 Ноябрь 2021 - 10:50

Только учтите, если будете задавать настройки любого компонента в "редакторе" – все остальные настройки этого компонента, сделанные в интерфейсе, превратятся в тыкву.

Именно поэтому, и возникает много вопросов, если править то править все через ES, удобно и распространять на существующие сервера и возможное их изменение по количеству в будущем!

 

 

Еще подскажите при изменении в БД (добавление/удаление) записей, необходимо ли какое-то дополнительное действие, как например при изменении в текстовом файле сделать релоад конфигурации?

 

Спасибо!



#71 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 18 Ноябрь 2021 - 16:28

Зависит от компонента. ICAPD кеширует на минуту. Чтобы перечитал сразу, надо послать ему SIGHUP. MailD запрашивает LookupD каждый раз. А тот результаты запросов к MySQL не кеширует.

#72 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 17 Декабрь 2021 - 11:32

День добрый!

У меня такая проблема

в MilterHook есть строка

-- local test = dwl.lookup(""Mysql@Whitelist"") 

​пока она закомментирована, все работает, стоит раскомментировать начинает ругаться
Error: Cannot parse drweb.ini: ini-file syntax error: line 46
Error: drweb.ini rejected

где 46 это строка вида MilterHook = " ... local dwl = require ""drweb.lookup"" ....  local test = dwl.lookup(""Mysql@Whitelist"")  ..."

при этом ранее есть 
[LookupD.Mysql.Whitelist]
Conn = "tcp://db_user:db_password@localhost/db_name"
Request = "select * from whitelist"

где все корректно и не раз проверенно!

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

Буду очень благодарен если укажите в какую сторону копать.


Сообщение было изменено MaxSimba: 17 Декабрь 2021 - 11:33


#73 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 17 Декабрь 2021 - 13:43

Тут надо смотреть на значение параметра целиком или даже ini-файл, на котором воспроизводится проблема. И желательно знать версию ConfigD. И в ini-файле это должна быть не одна строка, а что-то вроде:

[MailD]
MilterHook = "
local dw = require ""drweb""
local dwl = require ""drweb.lookup""

function milter_hook(ctx)
    .............
end
"

Ещё, если вы редактируете ini-файл напрямую, не через веб-интерфейс, то, возможно, будет удобнее хук в отдельном файле держать:

$ sudo /bin/sh -c "drweb-ctl cfshow --value MailD.MilterHook >/etc/opt/drweb.com/milter.lua"
$ sudo drweb-ctl cfset MailD.MilterHook /etc/opt/drweb.com/milter.lua

Тогда не нужно будет удваивать кавычки.


Сообщение было изменено amorozov: 17 Декабрь 2021 - 13:51


#74 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 17 Декабрь 2021 - 20:19

немного разобрался, но теперь другая проблема

переместил я вызов  local test = dwl.lookup(""Mysql@Whitelist"")  во внутрь функции
[LookupD.Mysql.Whitelist]
Conn = "tcp://db_user:db_password@localhost/db_name"
Request = "select * from whitelist"

[MailD]
MilterHook = " ...
 

function milter_hook(ctx)
 ........
     local test = dwl.lookup(""Mysql@Whitelist"") 
.....
and

"
но теперь вот такая ошибка

 Error while executing milter hook: Lookup: read failed: End of file



#75 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 20 Декабрь 2021 - 17:01

Чтобы тут понять, в чём дело, нужны логи (желательно debug от всех компонентов) и полный конфиг

#76 MaxSimba

MaxSimba

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 28 Май 2022 - 17:53

Подскажите как можно в запрос передать параметр, к примеру домен из FROM:
 

[LookupD.Mysql.Whitelist]
Conn = "tcp://db_user:db_password@localhost/db_name"
Request = "SELECT value FROM whitelist WHERE value LIKE '%\$d';"

 

[MailD]
MilterHook = " ...
 

function milter_hook(ctx)
 ........
     local test = dwl.lookup(""Mysql@Whitelist"",
ctx.from()) 

.....
and

"
где domain будет передаваться при вызове dwl.lookup(""Mysql@Whitelist"",ctx.from()) 

 



#77 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 30 Май 2022 - 17:07

Вот так:
local test = dwl.lookup(""Mysql@Whitelist"", {domain = ctx.from()})


#78 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 30 Май 2022 - 17:29

В ctx.from(), как я понимаю, почтовый адрес. Тогда надо ещё извлечь из него домен:
local test = dwl.lookup('Mysql@Whitelist', {domain = string.match(ctx.from(), '[^@]*$')})


#79 Ivan Kuznetsov

Ivan Kuznetsov

    Member

  • Posters
  • 346 Сообщений:

Отправлено 10 Июнь 2022 - 23:08

Здравствуйте!

 

Вопрос по работе функции IpAddress.belongs(). В MailD пытаюсь настроить поведение в зависимости от ip-адреса отправителя, конструкция примерно такая:

-- Список сетей, которые могут отправлять почту только локально 
-- и список исключений
local local_only = drweb.load_array ("/etc/drweb/local-only.list")
local local_exclude = drweb.load_array ("/etc/drweb/local-exclude.list")

-- Список локальных почтовых адресов (регулярные выражения)
local mail_domains = drweb.load_array ("/etc/drweb/local-mail.list")

function milter_hook(ctx)
...
  drweb.info ("sender type=" .. ctx.sender.family .. " address=" .. ctx.sender.ip)

-- Только локальная почта
  if not ctx.to.all_match (mail_domains) and
     ctx.sender.ip.belongs (local_only) and
     not ctx.sender.ip.belongs (local_exclude) then
    drweb.notice ("Host " .. ctx.sender.ip .. " is local-only mail sender")
    return {action = "reject", message = "Sending to non-local addresses from this host is prohibited. Please contact system administrator"}
  end
...
end

Периодически ловлю подобные ошибки

2022-Jun-10 20:18:01 [368973] Info: Milter client a1b9-dd8e-258d: Accepted (TCP 127.0.0.1:47952)
2022-Jun-10 20:18:01 [368973] Info: Milter client a1b9-dd8e-258d: Scan /
2022-Jun-10 20:18:01 [368973] Info: Milter client a1b9-dd8e-258d: Scan /: clean
2022-Jun-10 20:18:01 [368973] Info: Milter client a1b9-dd8e-258d: Lua: sender type=6 address=::1
2022-Jun-10 20:18:01 [368973] Error: Milter client a1b9-dd8e-258d: Error while executing milter hook for message ID <mailman.21.1654877618.365559.mai
lman@solvo.ru>; scanned 1/1 part (1 clean): [string "local drweb = require "drweb"..."]:62: bad argument #1 to 'belongs' (Invalid subnet:  172.24.96.
0/19))
2022-Jun-10 20:18:01 [368973] Info: Milter client a1b9-dd8e-258d: client quit; closing connection

Если коннкект SMTP не локальный, то проверка отрабатывает коррекетно. Причина в IPv6 адресе ::1 ?

 

Postfix+MailD через milter, Linux.

 


С уважением, Иван Кузнецов
ООО "СОЛВО"

#80 amorozov

amorozov

    Member

  • Members
  • 163 Сообщений:

Отправлено 11 Июнь 2022 - 01:05

Причина в IPv6 адресе ::1 ?

Причина в том, что belongs хочет адрес и маску одного типа. Либо оба v4, либо оба v6.


Читают тему: 0

0 пользователей, 0 гостей, 0 скрытых