Возможно ли с помощью модуля Ratelimit в rspamd настроить такое:1. Ограничить кол-во отсылаемых писем с одного IP до 2000 в час
2. При превышении этого лимита письма отклоняюся
> Возможно ли с помощью модуля Ratelimit в rspamd настроить такое:
> 1. Ограничить кол-во отсылаемых писем с одного IP до 2000 в час
> 2. При превышении этого лимита письма отклоняюсявозможна такая настройка на стороне rspamd, но вы уже письма получили своим MTA и передаете rspamd на дополнительную проверку. расход ресурсов ненужных.
такое ограничение нужно на стороне MTA делать, если хотите эффективно фильтровать
> возможна такая настройка на стороне rspamd, но вы уже письма получили своим
> MTA и передаете rspamd на дополнительную проверку. расход ресурсов ненужных.
> такое ограничение нужно на стороне MTA делать, если хотите эффективно фильтроватьА Exim умеет фильтровать количество писем по ip-адресу?
Умеетdrop message = High intensity of connections $sender_host_address $acl_c_clearsender
ratelimit = 2000 / 1h / strict / $sender_host_address
log_message = $sender_rate / $sender_rate_period High intensity of connections $acl_c_clearsender>> возможна такая настройка на стороне rspamd, но вы уже письма получили своим
>> MTA и передаете rspamd на дополнительную проверку. расход ресурсов ненужных.
>> такое ограничение нужно на стороне MTA делать, если хотите эффективно фильтровать
> А Exim умеет фильтровать количество писем по ip-адресу?
> Умеет
> drop message = High intensity of connections $sender_host_address $acl_c_clearsender
> ratelimit = 2000 / 1h /
> strict / $sender_host_address
> log_message = $sender_rate / $sender_rate_period High
> intensity of connections $acl_c_clearsenderда, попробовал, дейсвительно работает, спасибо.
Вообще хочется попробовать на реальной нагрузке оба варианта - и с rspamd и с Exim и выбрать из них оптимальное. В rspamd возможно ли поотключать саму проверку на спам, например отредактировав exim.conf и отключив ненужные дефолтные модули в rspamd просто для работоспособности модуля ratelimit? Или модуль ratelimit будет работоспособен только при включенной спамозащите от rspamd?
> Вообще хочется попробовать на реальной нагрузке оба варианта - и с rspamd
> и с Exim и выбрать из них оптимальное. В rspamd возможно
> ли поотключать саму проверку на спам, например отредактировав exim.conf и отключив
> ненужные дефолтные модули в rspamd просто для работоспособности модуля ratelimit? Или
> модуль ratelimit будет работоспособен только при включенной спамозащите от rspamd?По поводу настройки Rspamd без проверки спама, а только используя модуль ratelimit, насколько я понял из https://rspamd.com/doc/tutorials/scanning_outbound.html:
При сканировании исходящей почты с помощью rspamd при работающей интеграции с Exim, rspamd должен знать, была ли почта отправлена аутентифицированным пользователем (и каим именно), а также IP-адрес, по которому была получена почта. При этом если почта была получена от аутентифицированного пользователя или IP-адреса, указанного в local_addrs, следующие проверки не проводятся :
- DKIM: checking is disabled; signing is enabled
- DMARC: is disabled
- Greylist: is disabled
- Hfilter: only URL-checks are applied
- IP Score: is disabled
- MX Check: is disabled
- One Received header policy: is disabled
- RBL: RBLs are disabled according to exclude_users and exclude_local settings (all save for RAMBLER_EMAILBL)
- Replies: action is not forced
- SPF: is disabledТ.е. можно даже просто включить 1 модуль ratelimit в /etc/rspamd/override.d/options.inc и будут применяться только встроенные стандартные ммодули + ratelimit?
А как понять эту фразу:
- Ratelimit: only user ratelimit is applied (to authenticated users- does not deal with local_addrs)Т.е. в этом случае применяется только user ratelimit- лимит для аутентифицированного юзера (если юзер аутентифицирован, то не просматривать local_addrs map в /etc/rspamd/local.d/options.inc)?
Как теперь правильно интегрировать Exim с rspamd, если проверка на спам вообще не нужна?
Оставить в exim.conf только строкуspamd_address = 127.0.0.1 11333 variant=rspamd
и не указывать никакого ACL типа указанного на официальгой сайте rspamd :
acl_check_spam:
# do not scan messages submitted from our own hosts
# +relay_from_hosts is assumed to be a list of hosts in configuration
accept hosts = +relay_from_hosts# do not scan messages from submission port (or maybe you want to?)
accept condition = ${if eq{$interface_port}{587}}# skip scanning for authenticated users (if desired?)
accept authenticated = *# scan the message with rspamd
warn spam = nobody:true
# This will set variables as follows:
# $spam_action is the action recommended by rspamd
# $spam_score is the message score (we unlikely need it)
# $spam_score_int is spam score multiplied by 10
# $spam_report lists symbols matched & protocol messages
# $spam_bar is a visual indicator of spam/ham level# use greylisting available in rspamd v1.3+
defer message = Please try again later
condition = ${if eq{$spam_action}{soft reject}}deny message = Message discarded as high-probability spam
condition = ${if eq{$spam_action}{reject}}# Remove foreign headers
warn remove_header = x-spam-bar : x-spam-score : x-spam-report : x-spam-status# add spam-score and spam-report header when "add header" action is recommended by rspamd
warn
condition = ${if eq{$spam_action}{add header}}
add_header = X-Spam-Score: $spam_score ($spam_bar)
add_header = X-Spam-Report: $spam_report# add x-spam-status header if message is not ham
warn
! condition = ${if match{$spam_action}{^no action\$|^greylist\$}}
add_header = X-Spam-Status: Yes# add x-spam-bar header if score is positive
warn
condition = ${if >{$spam_score_int}{0}}
add_header = X-Spam-Bar: $spam_baraccept
Или все таки указывать этот ACL, но убрать строки, добавляющие X-Spam заголовки, greylisting и оставить только такое:
acl_check_spam:
# do not scan messages submitted from our own hosts
# +relay_from_hosts is assumed to be a list of hosts in configuration
accept hosts = +relay_from_hosts# do not scan messages from submission port (or maybe you want to?)
accept condition = ${if eq{$interface_port}{587}}# skip scanning for authenticated users (if desired?)
accept authenticated = *accept
?
> Вообще хочется попробовать на реальной нагрузке оба варианта - и с rspamd
> и с Exim и выбрать из них оптимальное. В rspamd возможно
> ли поотключать саму проверку на спам, например отредактировав exim.conf и отключив
> ненужные дефолтные модули в rspamd просто для работоспособности модуля ratelimit? Или
> модуль ratelimit будет работоспособен только при включенной спамозащите от rspamd?используйте инструменты по прямому назначению, можно и ножом вместо отвертки откручивать болтики.
>используйте инструменты по прямому назначению, можно и ножом вместо отвертки откручивать
> болтики.интересно разобраться с 2 вариантами и сравнить эмпирически так сказать...
> интересно разобраться с 2 вариантами и сравнить эмпирически так сказать...пожалуйста, никто не запрещает ;)
>> интересно разобраться с 2 вариантами и сравнить эмпирически так сказать...
> пожалуйста, никто не запрещает ;)Единственное, что меня в Opensource software не устраивает - местами невнятная документацию, дпускающая недопонимания или многовариантность некоторых моментов. Если полностьб разберусь с Rspamd - напишу альтернативную документацию, разжеванную по полочкам и скину Всеволоду Стахнову - создателю Rspamd...
> Единственное, что меня в Opensource software не устраивает - местами невнятная документацию,
> дпускающая недопонимания или многовариантность некоторых моментов.Не устраивает - переходите на Windows. А это философия Юникс - предоставлять инструменты отдельно от правил. Иными словами можно ещё выразиться "сделай это по-своему".
Теперь если я отправляю почту от postmaster@domain.tk наружу я вижу в логе параметр R_RATELIMIT(0.00), а когда я отправляю от адреса типа user@domain.tk этого параметра нет в логе.Как правильно временно исключить адрес postmaster@domain.tk из whitelisted_rcpts модуля ratelimit? Пробовал просто указать в /etc/rspamd/local.d/ratelimit.conf строку
whitelisted_rcpts = "mailer-daemon";
но тогда в логе rspamd:
2018-06-22 10:55:28 #19477(normal) <4856d6>; task; lua_metric_symbol_callback: call to (R_RATELIMIT) failed (2): /usr/share/rspamd/lua//ratelimit.lua:339: attempt to index field 'whitelisted_rcpts' (a nil value); trace: [1]:{/usr/share/rspamd/lua//ratelimit.lua:339 - fun [Lua]}; [2]:{/usr/share/rspamd/lib/fun.lua:30 - call_if_not_empty [Lua]}; [3]:{/usr/share/rspamd/lib/fun.lua:654 - any [Lua]}; [4]:{/usr/share/rspamd/lua//ratelimit.lua:339 - <unknown> [Lua]};
Аналогично если создать файл /etc/rspamd/override.d/ratelimit.conf с 1 параметром:whitelisted_rcpts = "mailer-daemon";
появляется та же ошибка call to (R_RATELIMIT) failed (2)...
при этом
$ rspamadm configdump
ratelimit {
whitelisted_rcpts = "mailer-daemon";
symbol = "R_RATELIMIT";
rates {
to_ip = "3 / 2min";
to = "2 / 1min";
bounce_to = "2 / 1h";
to_ip_from = "1 / 1min";
user = "1 / 1min";
bounce_to_ip = "1 / 1h";
}
max_rcpt = 5;
info_symbol = "R_RATELIMIT_INFO";
enabled = true;
}Т.е. если я не изменяю дефолтные
whitelisted_rcpts = "postmaster,mailer-daemon"то в логе rspamd присутствует нулевое значение
R_RATELIMIT(0.00), т.к. при отправке от postmaster@ модуль ratelimit не срабатывает. А если я отправляю письмо от обычного адреса R_RATELIMIT в логе вообще отсутствует...
> Т.е. если я не изменяю дефолтные
> whitelisted_rcpts = "postmaster,mailer-daemon"
> то в логе rspamd присутствует нулевое значение
> R_RATELIMIT(0.00), т.к. при отправке от postmaster@ модуль ratelimit не срабатывает. А
> если я отправляю письмо от обычного адреса R_RATELIMIT в логе вообще
> отсутствует...создавать тикет с ошибкой, возможно есть ошибка
> создавать тикет с ошибкой, возможно есть ошибкаТикет создал, особо не помогли. Теперь при отправке от root@centoz.tk вижу в логе rspamd:
2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only: ratelimit "to_ip_from(27:teztoid@vivaldi.net:192.168.42.1:root@centoz.tk)" exceeded, (1 / 3600): 15 (0:0 dyn)
2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only: ratelimit "to(27:teztoid@vivaldi.net)" exceeded, (2 / 3600): 15 (0:0 dyn)
2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only: ratelimit "to_ip(13:teztoid@vivaldi.net:192.168.42.1)" exceeded, (3 / 7200): 15 (0:0 dyn)Т.е. видно, что значение, указанные в ratelimit.conf превышены (to_ip_from, to и to_ip), но письма все равно отправляются, а по идее по дефолту должны отбрасываться при превышении лимита...
Текущие значения для ratelimit.conf:
$ rspamadm configdump
......................................................
ratelimit {
whitelisted_rcpts = "postmaster,mailer-daemon";
symbol = "R_RATELIMIT";
rates {
to_ip = "3 / 2h";
to = "2 / 1h";
bounce_to = "2 / 1h";
to_ip_from = "1 / 1h";
user = "1 / 1h";
bounce_to_ip = "1 / 1h";
}
max_rcpt = 5;
info_symbol = "R_RATELIMIT_INFO";
enabled = true;
}
Может нужно явно задавать какой-то параметр в options.inc для отбрасывания писем при превышении лимита?
> 2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only:
> ratelimit "to_ip_from(27:teztoid@vivaldi.net:192.168.42.1:root@centoz.tk)" exceeded,
> (1 / 3600): 15 (0:0 dyn)
> 2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only:
> ratelimit "to(27:teztoid@vivaldi.net)" exceeded, (2 / 3600): 15 (0:0 dyn)
> 2018-06-28 16:26:37 #34641(normal) <7faa44>; lua; ratelimit.lua:383: set_symbol_only:
> ratelimit "to_ip(13:teztoid@vivaldi.net:192.168.42.1)" exceeded, (3 / 7200): 15 (0:0
> dyn)да, видно что лимиты срабатывают и оценка по лимитам выдается 15 и учитывая что в actions.conf (если не меняли значение) стоит:
reject = 15; # Reject when reaching this scoreпроверьте логи Exim на всякий случай. могу грешить вот на эти настройки ACL в Exim:
# skip scanning for authenticated users (if desired?)
accept authenticated = *возможно закомментировать его
ИЛИ
же нижеуказанное действие:
warn
condition = ${if >{$spam_score_int}{0}}
add_header = X-Spam-Bar: $spam_barпереформатировать для того чтобы не уведомлял, а запрещал:
deny message = Limit exceded
condition = ${if >{$spam_score_int}{0}}а может вообще, следует проверять на R_RATELIMIT текст или закоментить их:
# If symbol is specified, then it is inserted instead of setting result
#symbol = "R_RATELIMIT";# If info_symbol is specified, then it is inserted next to set the result
#info_symbol = "R_RATELIMIT_INFO";
также посоветовал бы в их почтовую рассылку написать, где возможно они подсказали бы правильную сторону куда копать :)
Всеволод уже ответил вам в GitHub'е:
>>I don't understand what you are trying to say. set_symbol_only means that you have configured >>your module to add symbol instead of issuing soft reject message. You need to remove symbol from >>the configuration if you want to do rejections...