Lua помощь
#21
Отправлено 20 Март 2019 - 14:03
#22
Отправлено 20 Март 2019 - 20:57
а можете поотлаживать, например выводить ctx.from?
в логах есть что-нибудь?
if regex.search(blacklist, ctx.message.header.value('from').decoded, regex.ignore_case) then
или вот так попробовать. возможно от milter что-то не так прилетает в from
telegram: @bsavelev
#23
Отправлено 21 Март 2019 - 09:59
Если я добавлю в начале процедуры код dw.notice(ctx.from)
то в логе буду видеть это поле, такое будет считаться отладкой?
Прошу не смеяться, я не программист.
#24
Отправлено 21 Март 2019 - 10:15
Вот вывод лога, есть какието не понятные адреса (я выделил шрифт) -
#25
Отправлено 21 Март 2019 - 13:02
Судя по наличию bounce это автоответ от почтового сервера. Такое возможно, например, если было отправлено письмо по несуществующему адресу. (Подробнее тут: https://en.wikipedia.org/wiki/Bounce_message)
Чтобы понять, что не работает, нужно посмотреть на лог, при таком хуке:
local dw = require 'drweb' local rx = require 'drweb.regex' local whitelist = dw.load_array('/opt/drweb.com/lists/whitemails.txt') local blacklist = dw.load_array('/opt/drweb.com/lists/blackmails.txt') function milter_hook(ctx) if regex.search(blacklist, ctx.from, regex.ignore_case) then dw.notice("'" .. ctx.from .. "'" .. ' is in blacklist') return {action='reject', code='541', text='blacklist'} else dw.notice("'" .. ctx.from .. "'" .. ' is NOT in blacklist') end return {action = 'accept'} end
И указать на места, где неправильно происходит обработка from и соответствующие паттерны из blacklist.
Кстати, вот такая строка ".*\.sidex\.ru" в blacklist будет покрывать только поддомены sidex.ru и не будет работать для писем c sidex.ru, для этого нужно было бы указать просто "sidex\.ru"
#26
Отправлено 21 Март 2019 - 15:52
Последний комментарий понятен, я просто пробовал разные варианты.
#27
Отправлено 21 Март 2019 - 18:16
Получается вот такая штука,
#28
Отправлено 22 Март 2019 - 09:45
Вот так клиент принял сообщение -
#29
Отправлено 22 Март 2019 - 14:40
Приветствую.
Приложите хук сюда, на котором проверялась блокировка по домену?
Пробовали рекомендацию из https://forum.drweb.com/index.php?showtopic=331517&page=2#entry866248 :
if regex.search(blacklist, ctx.message.header.value('from').decoded, regex.ignore_case) then
#30
Отправлено 27 Март 2019 - 10:02
local dw = require "drweb" local regex = require "drweb.regex" local whitelist = dw.load_array('/opt/drweb.com/lists/whitemails.txt') local blacklist = dw.load_array('/opt/drweb.com/lists/blackmails.txt') function milter_hook(ctx) -- Stop checks BLACKLIST if regex.search(blacklist, ctx.from, regex.ignore_case) then dw.notice("'" .. ctx.from .. "'" .. ' is in blacklist') return {action='reject'} end -- Check if the message contains threats from specified categories, reject it if so if ctx.message.has_threat({category = {"known_virus", "virus_modification", "unknown_virus", "adware", "dialer", "joke", "riskware", "hacktool"}}) then dw.notice("Virus inside") return {action = 'reject'} else dw.notice("'" .. ctx.from .. "'" .. ' is NOT in blacklist') end -- Stop checks WHITELIST if regex.match(whitelist, ctx.from, regex.ignore_case) then dw.notice("Whitelist") return {action='accept'} end -- Reject the message if it is likely spam if ctx.message.spam.score >= 100 then dw.notice("Spam score: " .. ctx.message.spam.score) return {action = "reject"} else -- Check if the message contains URL threats from specified categories, reject it if so if ctx.message.has_url({category = {"infection_source", "cryptocurrency_mining_pools"}}) then dw.notice("URL threats") return {action = 'reject'} end -- Assign X-Drweb-Spam headers in accordance with spam report ctx.modifier.add_header_field("X-DrWeb-SpamScore", ctx.message.spam.score) ctx.modifier.add_header_field("X-DrWeb-SpamState", ctx.message.spam.type) ctx.modifier.add_header_field("X-DrWeb-SpamDetail", ctx.message.spam.reason) ctx.modifier.add_header_field("X-DrWeb-SpamVersion", ctx.message.spam.version) end -- Assign X-AntiVirus header ctx.modifier.add_header_field("X-AntiVirus", "Checked by Dr.Web [MailD version: ]") -- Accept the message with all scheduled transformations applied return {action = 'accept'} end
Сообщение было изменено Konstantin Yudin: 27 Март 2019 - 13:43
#31
Отправлено 27 Март 2019 - 10:08
Скажите пожалуйста, если не затруднит, как написать такой вариант -
если письмо идет с определенного IP то accept.
Спасибо!
#32
Отправлено 27 Март 2019 - 13:03
Например так:
-- вернуть accept, если ip равен 192.168.123.123 if ctx.sender.ip == dw.ip('192.168.123.123') then return {action='accept'} end
Где то сверху должна быть строчка local dw = require 'drweb', для того чтобы это работало.
Сообщение было изменено Denis G.: 27 Март 2019 - 13:05
#33
Отправлено 28 Март 2019 - 10:00
Спасибо!
#34
Отправлено 08 Апрель 2019 - 09:11
Вопрос появился на счет хидеров. Хотела добавить...
-- Assign X-AntiVirus header ctx.modifier.add_header_field("X-AntiVirus", "Checked by Dr.Web [MailD version: ]")
А откуда он возьмет версию?
#35
Отправлено 08 Апрель 2019 - 10:02
да, пока ее взять неоткуда. в хуке по умолчанию версия подставляется, но в измененном ее пока взять негде. Добавим в будущих версиях.
Сообщение было изменено Boris Savelev: 08 Апрель 2019 - 10:02
telegram: @bsavelev
#36
Отправлено 24 Апрель 2019 - 15:30
Умные люди, в процессе эксплуатации возник еще вопрос. очень буду благодарен если дадите совет как написать конструкцию для следующих целей -
необходимо проверять поле ctx.to на наличие адреса в белом списке, если там есть - пропускаем.
Сейчас есть конструкция для поля ctx.from но разница насколько я понимаю в типе полей, to - это array.
Вот такое сейчас рабоатет
#37
Отправлено 24 Апрель 2019 - 15:47
Два почтовых сервера, сложные конструкции и обвязки это зло. Настройте нормально postfix, большая часть проблем просто отпадет.Умные люди, в процессе эксплуатации возник еще вопрос. очень буду благодарен если дадите совет как написать конструкцию для следующих целей -
необходимо проверять поле ctx.to на наличие адреса в белом списке, если там есть - пропускаем.
Сейчас есть конструкция для поля ctx.from но разница насколько я понимаю в типе полей, to - это array.
#38
Отправлено 24 Апрель 2019 - 16:22
Умные люди, в процессе эксплуатации возник еще вопрос. очень буду благодарен если дадите совет как написать конструкцию для следующих целей -
необходимо проверять поле ctx.to на наличие адреса в белом списке, если там есть - пропускаем.
Сейчас есть конструкция для поля ctx.from но разница насколько я понимаю в типе полей, to - это array.
Вот такое сейчас рабоатет
-- Stop checks WHITELISTif regex.search(whitelist, ctx.from, regex.ignore_case) thendw.notice("Whitelist")return {action='accept'}endВот как тоже самое написать для ctx.to, в лоб если подменить не работает.
обойти циклом массив
for _, to in ipairs(ctx.to) do
if regex.search(whitelist, to, regex.ignore_case) then
dw.notice("Whitelist")
return {action='accept'}
end
end
Сообщение было изменено Alexander.M: 24 Апрель 2019 - 16:22
#39
Отправлено 25 Апрель 2019 - 10:07
Два почтовых сервера, сложные конструкции и обвязки это зло. Настройте нормально postfix, большая часть проблем просто отпадет.Умные люди, в процессе эксплуатации возник еще вопрос. очень буду благодарен если дадите совет как написать конструкцию для следующих целей -
необходимо проверять поле ctx.to на наличие адреса в белом списке, если там есть - пропускаем.
Сейчас есть конструкция для поля ctx.from но разница насколько я понимаю в типе полей, to - это array.
не пойму причем здесь настройка постфикса и антиспам? Если письмо режет антиспам дрвеба как на него повлиять постфиксом?
#40
Отправлено 25 Апрель 2019 - 10:55
Умные люди, в процессе эксплуатации возник еще вопрос. очень буду благодарен если дадите совет как написать конструкцию для следующих целей -
необходимо проверять поле ctx.to на наличие адреса в белом списке, если там есть - пропускаем.
Сейчас есть конструкция для поля ctx.from но разница насколько я понимаю в типе полей, to - это array.
Вот такое сейчас рабоатет
-- Stop checks WHITELISTif regex.search(whitelist, ctx.from, regex.ignore_case) thendw.notice("Whitelist")return {action='accept'}endВот как тоже самое написать для ctx.to, в лоб если подменить не работает.
обойти циклом массив
for _, to in ipairs(ctx.to) do
if regex.search(whitelist, to, regex.ignore_case) then
dw.notice("Whitelist")
return {action='accept'}
end
end
Спасибо! Применил на боевой конфигурации, тестируем, на первый взгляд все работает!
Читают тему: 1
0 пользователей, 1 гостей, 0 скрытых