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


Фотография
- - - - -

Rspamd 1.4.1 (+ модули) и Exim 4.87 на Debian 8

rspamd exim rspamd 1.4.1 rspamd+exim rspamd + exim спаморезка антиспам rspamd настройка

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 Demonik

Demonik

    Учусь Linux

  • Администраторы
  • 41 сообщений

Отправлено 25 Ноябрь 2016 - 08:09

Установка Rspamd 1.4.1 и Exim 4.87 на Debian 8 Jessie

 
 
1) Устанавливаем Exim из бэкпортов.
 
Подключаем бэкпорты jessie в /etc/apt/sources.list 

# jessie-backports, previously on backports.debian.org
deb http://mirror.mephi.ru/debian/ jessie-backports main contrib
deb-src http://mirror.mephi.ru/debian/ jessie-backports main contrib

Обновляем кэш и обновляем ПО

apt-get update
apt-get upgrade

Непосредственно сама команда установки:

apt-get -t jessie-backports install exim4-daemon-heavy

Проверяем  версию Exim

 exim -bV

Должна быть запись:

 Exim version 4.87

2) Устанавливаем Rspamd
 
а) Добавляем репозиторий и устанавливаем пакет:

apt-get install -y lsb-release wget # optionalCODENAME=`lsb_release -c -s`
wget --no-check-certificate  -O- https://rspamd.com/apt-stable/gpg.key | apt-key add -
echo "deb http://rspamd.com/apt-stable/ $CODENAME main" > /etc/apt/sources.list.d/rspamd.list
echo "deb-src http://rspamd.com/apt-stable/ $CODENAME main" >> /etc/apt/sources.list.d/rspamd.list
apt-get updateapt-get --no-install-recommends install rspamd

Настраиваем WebUI (вэбморду) для Rspamd, в консоли вводим:

rspamadm pw

Появляется пасс фраза, которую нужно ввести в /etc/rspamd/worker-controller.inc в параметр password вместо q1, а так же добавить строчку с такой же пасс фразой:

enable_password = "Ваша пасс фраза";

б) Правим конфиг Exim.

 
Добавляем секцию rspmad для обращения из exim:

spamd_address = 127.0.0.1 11333 variant=rspamd

Анонсируем acl:

acl_smtp_data = acl_check_spam

Правим\добавляем acl (у меня он немного измененный, не как на офф сайте, добавлен реврайт темы):

acl_check_spam:
# Не сканировать сообщения от этих хостов
accept hosts = +relay_from_hosts

# Не сканировать сообщения пришедшие с определенного порта (я хз зачем это надо, закоментил)
accept condition = ${if eq{$interface_port}{587}}

# skip scanning for authenticated users (тоже закоментил у себя)
accept authenticated = *

# add spam-score and spam-report header when told by rspamd
warn spam = nobody:true
     condition = ${if eq{$spam_action}{add header}}
     add_header = X-Spam-Score: $spam_score ($spam_bar)
     add_header = X-Spam-Report: $spam_report
     message = Subject: ***SPAM*** $h_Subject:

# 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}}

accept

в) Устанавливаем nginx для проксирования запросов:

apt-get install nginx

Генерируем dhparam

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Вставляем в /etc/nginx/nginx.conf (Если сертификатов нет или не используете то коментим все связанное с SSL

worker_processes  2;
user www-data www-data;


pid        /var/run/nginx.pid;


events {
        worker_connections 8192;
        use epoll;
}


http {
    include       mime.types;
    default_type  text/plain;


    sendfile  on;
    tcp_nopush   on;
    tcp_nodelay on;


    gzip  on;


    server {
        listen ip.ip.ip.ip:443 ssl default_server;
        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-XSS-Protection "1; mode=block";


        ssl_certificate /etc/nginx/ssl/rspamd.example.com.crt;
        ssl_trusted_certificate /etc/nginx/ssl/int.crt;
        ssl_certificate_key /etc/nginx/ssl/key.key;


        server_name "";
        return 444;


        location / {
                proxy_pass  http://127.0.0.1:11334;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
        ssl on;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;


        ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";
        ssl_prefer_server_ciphers on;
        ssl_session_cache builtin;
        ssl_session_timeout 1m;
        ssl_stapling on;
        ssl_stapling_verify on;
        server_tokens off;
        # Do not forget to generate custom dhparam using
        # openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_ecdh_curve prime256v1;
    }


    server {
        listen *:80;
        server_name rspamd.example.com;
        proxy_set_header Host rspamd.example.com;
        location / {
                rewrite ^(.*)$ https://rspamd.example.com$1 permanent;
        }
    }


     server {
        listen ip.ip.ip.ip:443 ssl;
        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-XSS-Protection "1; mode=block";


        ssl_certificate /etc/nginx/ssl/rspamd.example.com.crt;
        ssl_trusted_certificate /etc/nginx/ssl/int.crt;
        ssl_certificate_key /etc/nginx/ssl/key.key;


        server_name rspamd.example.com;


        location / {
                proxy_pass  http://127.0.0.1:11334;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
        ssl on;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;


        ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";
        ssl_prefer_server_ciphers on;
        ssl_session_cache builtin;
        ssl_session_timeout 1m;
        ssl_stapling on;
        ssl_stapling_verify on;
        server_tokens off;
        # Do not forget to generate custom dhparam using
        # openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_ecdh_curve prime256v1;
    }
}

3) Устанавливаем модули для Rspamd (буду добавлять, как буду ставить у себя...)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Правка некоторых рейтов переменных

 

PRECEDENCE_BULK - 2.750 (Поставил 2.750, так как некоторые масс рассылки не дотягивали до 15 очков чтоб среджектиться)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Многие модули работают с базами REDIS, как сконфигурировать это все, смотрите в пункте "б" !!!

 

а) Antivirus ClamAV (ссылка на офф сайт)
 
Описание: Банально вызывает проверку вложений антивирусом непосредственно из rspamd, плюс можно настроить гибче чем в exim.
 
Создаем файлик antivirus.conf по пути /etc/rspamd/modules.d/ с содержимым:

antivirus {
  # multiple scanners could be checked, for each we create a configuration block with an arbitrary name
  first {
    # If set force this action if any virus is found (default unset: no action is forced)
    # action = "reject";
    # if `true` only messages with non-image attachments will be checked (default true)
    attachments_only = true;
    # If `max_size` is set, messages > n bytes in size are not scanned
    #max_size = 20000000;
    # symbol to add (add it to metric if you want non-zero weight)
    symbol = "CLAM_VIRUS";
    # type of scanner: "clamav", "fprot" or "sophos"
    type = "clamav";
    # servers to query (if port is unspecified, scanner-specific default is used)
    # can be specified multiple times to pool servers
    # can be set to a path to a unix socket
    servers = "/var/run/clamav/clamd.ctl";
    # if `patterns` is specified virus name will be matched against provided regexes and the related
    # symbol will be yielded if a match is found. If no match is found, default symbol is yielded.
    patterns {
      # symbol_name = "pattern";
      JUST_EICAR = "^Eicar-Test-Signature$";
    }
    # `whitelist` points to a map of IP addresses. Mail from these addresses is not scanned.
    #whitelist = "/etc/rspamd/antivirus.wl";
  }
}

Добавляем в metrics.conf по пути /etc/rspamd/ в самый конец перед include-ами следующее: 

group "antivirus" {
        symbol "CLAM_VIRUS" {
            weight = 20.0;
            description = "ClamAV detected virus in attachment";
            one_shot = true;
        }    
}

P.S.: Если что-то не работает касаемо антивируса, установите его следуя из этой статьи.
 
б) Нейронная сеть (ссылка на офф сайт)
 
Описание: Как я понял, это экспериментальный модуль для пост-обработки сообщений на основе текущих символов и ещё чего-то для лучшего распознавания спама в дальнейшем.
 
Для начала ставим REDIS, чтоб в него Rspamd запихивал ключи для хранения

apt-get install redis-server

Далее приводим файл redis.conf по пути /etc/rspamd/modules.d/ к следующему виду (так же другие модули будут юзать этот конфиг если они работаю с redis):

# Please don't modify this file as your changes might be overwritten with
# the next update.
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local.override' to redefine
# parameters defined on the top level
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local' to add
# parameters defined on the top level
#
# For specific modules or configuration you can also modify
# '$LOCAL_CONFDIR/local.d/file.conf' - to add your options or rewrite defaults
# '$LOCAL_CONFDIR/override.d/file.conf' - to override the defaults
#
# See https://rspamd.com/doc/configuration/redis.html


redis {
  servers = "127.0.0.1"; # Read servers (unless write_servers are unspecified)
  #servers = "master-slave:127.0.0.1,10.0.1.1";
  write_servers = "127.0.0.1"; # Servers to write data
  #disabled_modules = ["ratelimit"]; # List of modules that should not use redis from this section
  #timeout = 1s;
  #db = "0";
  #password = "some_password";
  .include(try=true,priority=5) "${DBDIR}/dynamic/redis.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/redis.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/redis.conf"
}

Note: В Debian 8 Redis в своих логах ругается и просит сделать следующее (ничего сложно тут нет, думаю разберетесь):

 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

Далее приводим файлик fann_redis.conf по пути /etc/rspamd/modules.d к следующему виду: 

# Please don't modify this file as your changes might be overwritten with
# the next update.
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local.override' to redefine
# parameters defined on the top level
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local' to add
# parameters defined on the top level
#
# For specific modules or configuration you can also modify
# '$LOCAL_CONFDIR/local.d/file.conf' - to add your options or rewrite defaults
# '$LOCAL_CONFDIR/override.d/file.conf' - to override the defaults
#
# See https://rspamd.com/doc/tutorials/writing_rules.html for details


fann_redis {
  servers = 127.0.0.1:6379; # Redis server to store learning data and ANN
  train {
    max_train = 10k; # Number of trains per epoch
    max_usages = 10; # Number of learn iterations while ANN data is valid
    spam_score = 8; # Score to learn spam
    ham_score = -2; # Score to learn ham
  }
  use_settings = false; # If enabled, then settings-id could switch this module to another FANN
  .include(try=true,priority=5) "${DBDIR}/dynamic/fann_redis.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/fann_redis.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/fann_redis.conf"
}

Создаем воркер для модуля (создаем файлик log_helper.inc по пути /etc/rspamd/ со следующим содержимым): 

count = 1;
type = "log_helper"

Инклюдим воркер для загрузки с Rspamd в файлы rspamd.conf, rspamd.systemd.conf, rspamd.sysvinit.conf

worker {
    .include "$CONFDIR/log_helper.inc"
}

Проверку работы этой балалайки можно произвести следующим методом:

redis-cli

и смотрим ключи командами:

LLEN RFANN0_spam - cчетчки спам ключей
LLEN RFANN0_ham  - cчетчки НЕспам ключей
KEYS *           - посмотреть все ключи в базе или в базах я хз...

эти ключи должны увеличиваться с поступлением писем.

 

в) Модуль статистики и обучения (классификатор (ссылка на офф сайт)
 
Описание: Модуль основанный на бэйсовской теореме. Как в spamassassin. Изучает письма и потом после накопления базы знаний, задействует классификатор для распознавания SPAM и HAM сообщений.

 

В файлик statistic.conf по пути /etc/rspamd/ вставляем следующий код:

classifier "bayes" {
    tokenizer {
    name = "osb";
    }

    backend = "redis";
    servers = "127.0.0.1:6379";
    min_tokens = 11;
    min_learns = 200;
    autolearn = true;

    per_user = <<EOD
return function(task)
    local rcpt = task:get_recipients(1)

if rcpt then
    one_rcpt = rcpt[1]
    if one_rcpt['domain'] then
        return one_rcpt['domain']
    end
end

return nil
end
EOD

    statfile {
        symbol = "BAYES_HAM";
        spam = false;
    }
    statfile {
        symbol = "BAYES_SPAM";
        spam = true;
    }
    learn_condition =<<EOD
return function(task, is_spam, is_unlearn)
    local prob = task:get_mempool():get_variable('bayes_prob', 'double')

    if prob then
        local in_class = false
        local cl
        if is_spam then
            cl = 'spam'
            in_class = prob >= 0.95
        else
            cl = 'ham'
            in_class = prob <= 0.05
        end

        if in_class then
            return false,string.format('already in class %s; probability %.2f%%',
            cl, math.abs((prob - 0.5) * 200.0))
        end
    end

    return true
end
EOD

Supported parameters for the redis backend are:

  • tokenizer: leave it as shown for now. Currently only osb is supported
  • backend: set it to redis
  • servers: IP or hostname with port for the redis server. Use an IP for the loopback interface, if you have defined localhost in /etc/hosts for both IPv4 and IPv6, or your redis server will not be found!
  • write_servers (optional): If needed, define dedicated servers for learning
  • password (optional): Password for the redis server
  • database (optional): Database to use (though it is recommended to use dedicated redis instances and not databases in redis)
  • min_tokens : minimum number of words required for statistics processing
  • min_learns (optional): minimum learn count for both spam and ham classes to perform classification
  • autolearn (optional): see below for details
  • per_user (optional): enable per users statistics. See above
  • statfile: Define keys for spam and ham mails.
  • learn_condition (optional): Lua function for autoleraning as described below.

 

Autolearning

From version 1.1, Rspamd supports autolearning for statfiles. Autolearning is applied after all rules are processed (including statistics) if and only if the same symbol has not been inserted. E.g. a message won’t be learned as spam if BAYES_SPAM is already in the results of checking.

There are 3 possibilities to specify autolearning:

  • autolearn = true: autolearning is performing as spam if a message has reject action and as ham if a message has negative score
  • autolearn = [-5, 5]: autolearn as ham if score is less -5 and as spam if score is more than 5
  • autolearn = "return function(task) ... end": use the following Lua function to detect if autolearn is needed (function should return ‘ham’ if learn as ham is needed and string ‘spam’ if learn as spam is needed, if no learn is needed then a function can return anything including nil)

Redis backend is highly recommended for autolearning purposes since it’s the only backend with high concurrency level when multiple writers are properly synchronized.

 

 

 

 

Изучение следует....


Есть вопросы или пожелания? demonik.0789@gmail.com

Сайт: https://asteriskperm.ru/

Группа ВК: ССЫЛКА (Заходим и вступаем! ;D)






Темы с аналогичным тегами rspamd, exim, rspamd 1.4.1, rspamd+exim, rspamd + exim, спаморезка, антиспам, rspamd настройка