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


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

Rspamd 1.6.5 (+ модули) и Exim 4.89 на Debian 8

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

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

#1 Demonik

Demonik

    Учусь Linux

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

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

Установка Rspamd 1.6.5 и Exim 4.89 на 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.89

2) Устанавливаем Redis server как БД для Rspamd



apt-get install redis-server

Смотрим чтоб сервер запускался только на локалхосте, в файле /etc/redis/redis.conf:

bind 127.0.0.1

3) Устанавливаем Rspamd
 
Для понимания:
Взято отсюда.
 
# Секция options описывает основные настройки Rspamd, например[/size]
# pidfile - это опция, указывающая расположение PID файла
# .include - это подключение доп. файлов конфигурации
# Обратите внимание на строку
# .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/options.inc"
# в данном случае если мы хотим добавить новые директивы в секцию options, то мы
# должны написать их в нашем пользовательском файле /etc/rspamd/local.d/options.inc
# priority=1 - указывает приоритет файла
# duplicate=merge - указывает режим слияния
# Если же мы хотим заменить некоторые стандартные настройки, в частности те, что
# устанавливаются их файла /etc/rspamd/options.inc, то мы должны описать их в
# файле /etc/rspamd/override.d/options.inc
# Итак, важно запомнить, что файлы пользовательских настроек, лежащие
# в папке /etc/rspamd/local.d добавляют новые настройки к существующей конфигурации,
# а файлы из папки /etc/rspamd/override.d заменяют стандартные настройки.
# Но для полного понимания того, какие файлы должны быть нужно смотреть основные
# файлы конфигурации.
 
а) Добавляем репозиторий и устанавливаем пакет:



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 = "Ваша пасс фраза";

б) Делаем так чтоб Rspamd принимал соединения только на локалхосте для этого создаем файл /etc/rspamd/override.d/worker-normal.inc и пишем в него следующее



bind_socket = "localhost:11333";

в) Воркер для связи с MTA через milter что ли.... Создаем файл /etc/rspamd/override.d/worker-proxy.inc и пишем в него:



bind_socket = "127.0.0.1:11332";

г) Понизим планку отвержения спам, для этого создадим файлик /etc/rspamd/local.d/metrics.conf и внесем в него следующее:



actions { 
 reject = 12;
}

как показывает практика это оптимальное значение.
 
д) Настроим хранение и самоизучение данных в БД Redis, создаем файл /etc/rspamd/local.d/redis.conf и пишем в него:

servers = "localhost:6379";
write_servers = "127.0.0.1";

так же в делаем файл /etc/rspamd/local.d/statistic.conf и пишем в него:

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
}

е) Устанавливаем 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;
    }
}

 
4) Правим конфиг Exim.
 
Добавляем секцию rspmad для обращения из exim:

spamd_address = 127.0.0.1 11333 variant=rspamd

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

acl_smtp_data = acl_check_spam

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

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
    message = Subject: ***SPAM*** $h_Subject:

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

# Пропускаем остальное
accept

 
5) Устанавлвиаем владельца и права на конфигурационные файлы rspamd
 
 

chown root:_rspamd /etc/rspamd/rspamd.conf.local
chown root:_rspamd /etc/rspamd/local.d/*
chown root:_rspamd /etc/rspamd/override.d/*
chmod 640 /etc/rspamd/rspamd.conf.local
chmod 640 /etc/rspamd/local.d/*
chmod 640 /etc/rspamd/override.d/*

6) Конфигурируем модули для Rspamd (буду добавлять, как буду ставить у себя...)
 
а) Модуль антивируса: Antivirus ClamAV (ссылка на офф сайт)
 
Описание: Банально вызывает проверку вложений антивирусом непосредственно из rspamd, плюс можно настроить гибче чем в exim.
 
Устанавливаем сам антивирус
apt-get install clamav-daemon
Далее создаем файлик antivirus.conf по пути /etc/rspamd/local.d/ с содержимым:



action = "reject";
servers = "/var/run/clamav/clamd.ctl";

б) Нейронная сеть (ссылка на офф сайт)
 
Описание: Как я понял, это модуль для пост-обработки сообщений на основе текущих символов и ещё чего-то для лучшего распознавания спама в дальнейшем.
 
Создаем файлик fann_redis.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду: 



servers = 127.0.0.1:6379;

Создаем воркер для модуля, делаем файлик /etc/rspamd/rspamd.conf.local со следующим содержимым: 

worker "log_helper" {
  count = 1;
}

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

redis-cli

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

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

эти ключи должны увеличиваться с поступлением писем.
 
в) Модуль history redis
 
Создаем файлик history_redis.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду: 

servers = 127.0.0.1:6379;

г) Модуль IP SCORE
 
Создаем файлик ip_score.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду:



servers = 127.0.0.1:6379;
root@mx1:/etc/rspamd/local.d# cat ip_score.conf
# how each action is treated in scoring
actions {
  reject = 1.0;
  "add header" = 0.25;
  "rewrite subject" = 0.25;
  "no action" = 1.0;
}
# how each component is evaluated
scores {
  asn = 0.5;
  country = 0.1;
  ipnet = 0.8;
  ip = 1.0;
}
# prefix for asn hashes
asn_prefix = "a:";
# prefix for country hashes
country_prefix = "c:";
# hash table in redis used for storing scores
hash = "ip_score";
# prefix for subnet hashes
ipnet_prefix = "n:";
# minimum number of messages to be scored
lower_bound = 10;
# the metric to score (usually "default")
metric = "default";
# upper and lower bounds at which to cap total score
#max_score = 10;
#min_score = -5;
# Amount to divide subscores by before applying tanh
score_divisor = 10;
# list of servers (or configure redis globally)
#servers = "localhost";
# symbol to be inserted
symbol = "IP_SCORE";

Так же определяем метрику для счета баллов, создаем файл /etc/rspamd/local.d/metrics.conf и дописываем в него:

symbol "IP_SCORE" {
  weight = 2.0;
  description = "IP reputation";
}

д) Модуль Multimap
 
Создаем файлик multimap.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду:

filename_blacklist {
  type = "filename";
  filter = "extension";
  map = "${LOCAL_CONFDIR}/filextansions.map";
  symbol = "FILENAME_BLACKLISTED";
  action = "reject";
}

Так же создаем файл /etc/rspamd/filextansions.map и приводим к следующему виду:

exe
com
dll
scr
lnk
bat

Можете добавить свои расширения файлов, которые Вы считаете нужным не принимать в письмах.
 
Так же мы можем добавить свои символы для фильтрации определенных параметров например по стране или номеру ASN и т.д... пример:
 
В файлик multimap.conf по пути /etc/rspamd/local.d/ добавляем:

 

MM_COUNTRY {

        type = "country";

        description = "Country multimap banned";

        score = 2.0;

    }

 

MM_ASN {

        type = "asn";

        description = "ASN multimap banned";

        score = 5.0;

    }

 

Далее создаем файлы /etc/rspamd/map/mm_country.map и /etc/rspamd/map/mm_asn.map заполняя их нужными значениями соответственно.

Данные для примера, т.к. меня спамили китаёзы, накинул им пару баллов, чтоб точно в спам улетали черти ;D
 
В /etc/rspamd/map/mm_country.map:

CN

В /etc/rspamd/map/mm_asn.map:

4134

е) Модуль MX CHECK
 
Создаем файлик mx_check.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду: 



# Set this to enable the module
enabled = true;
# connection timeout in seconds
timeout = 1.0;
# symbol yielded if no MX is connectable
symbol_bad_mx = "MX_INVALID";
# symbol yielded if no MX is found
symbol_no_mx = "MX_MISSING";
# symbol yielded if MX is connectable
symbol_good_mx = "MX_GOOD";
# lifetime of redis cache - 1 day by default
expire = 86400;
# lifetime of redis cache for no valid mxes - 2 hours by default
expire_novalid = 7200;
# greylist first message with invalid MX (require greylist plugin)
greylist_invalid = false;
# prefix used for redis key
key_prefix = "rmx";
# module-specific redis-server configuration
#servers = "localhost";
# a map of specific domains that should be excluded from MX check
#exclude_domains = "/path/to/map/";

Так же определяем метрику для счета баллов, создаем файл /etc/rspamd/local.d/metrics.conf и дописываем в него:

symbol "MX_INVALID" {
  score = 1.0;
  description = "No connectable MX";
  one_shot = "true";
}
symbol "MX_MISSING" {
  score = 2.0;
  description = "No MX record";
  one_shot = "true";
}
symbol "MX_GOOD" {
  score = -0.5;
  description = "MX was ok";
  one_shot = "true";
}

ж) Модуль Phishing
 
Создаем файлик history_redis.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду: 



openphish_enabled = true;
phishtank_enabled = true;

з) Модуль URL Reputation
 
Создаем файлик url_reputation.conf по пути /etc/rspamd/local.d/ и приводим к следующему виду: 



enabled = true;
# Key prefix for redis - default "Ur."
key_prefix = "Ur.";
# Symbols to insert - defaults as shown
symbols {
  white = "URL_REPUTATION_WHITE";
  black = "URL_REPUTATION_BLACK";
  grey = "URL_REPUTATION_GREY";
  neutral = "URL_REPUTATION_NEUTRAL";
}
# DKIM/DMARC/SPF allow symbols - defaults as shown
foreign_symbols {
  dmarc = "DMARC_POLICY_ALLOW";
  dkim = "R_DKIM_ALLOW";
  spf = "R_SPF_ALLOW";
}
# SURBL metatags to ignore - default as shown
ignore_surbl = ["URIBL_BLOCKED", "DBL_PROHIBIT", "SURBL_BLOCKED"];
# Amount of samples required for scoring - default 5
threshold = 5;
# Maximum number of TLDs to update reputation on (default 1)
update_limit = 1;
# Maximum number of TLDs to query reputation on (default 100)
query_limit = 100;
# If true, try to find most 'relevant' URL (default true)
relevance = true;

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

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

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






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