Тази статия е продължение на Подобрение ВИРТУАЛИЗАЦИЯ и MySQL До тук имаме: ● инсталиран сървър за електронна ● инсталиран и настроен PostFix ● инсталиран и настроен Dovecot ● инсталиран и настроен Roundcube ● PostFix приема и изпраща писма, след това ги предава на Dovecot ● Dovecot отговаря за пощенските кутии и удостоверенията, включително за PostFix ● ползваме потребители и домейни от база данни на MySQL. Усложняваме задачата с: ● инсталиране и настройване на програми за Антиспам ● защита от фишинг атаки ● инсталиране и настройване на антивирус за сървъра
RSpamd работи по следния начин:
Много пъти съм обяснявал горната картинка. Нас ни вълнува т.4. PostFix като получи писмо го дава на RSpamd за анализ дали е спам. RSpamd анализира писмото и връща отговор на PostFix дали да приеме писмото или да го маркира като спам. Така работи проверката за СПАМ. В случая ползваме RSpamd да проверява, но по същата логика работят и другите антиспам решения. Примерно едно различно такова е SpmaAssasin. RPspamd е по-гъвкав, производителен и по-лесен за интегриране. RSpamd работи като сървис на сървъра и слуша PostFix използвайки milter (mail filter) протокола. Всеки път когато пристигне писмо, PostFix ще го прати до rspamd за проверка на съдържанието. RSpamd ще го анализира, оцени и ако резултата е висок имейла ще се счита за непоискан.
apt install -y rspamd redis-server
Инсталирахме: rspamd - антиспам демон redis-server - сървър за съхранение на данните на RSpamd за обучение на спам и хам
Нека накараме PostFix да изпраща всички входящи писма чрез rspamd:
postconf smtpd_milters=inet:127.0.0.1:11332 postconf non_smtpd_milters=inet:127.0.0.1:11332 postconf milter_mail_macros="i {mail_addr} {client_addr} {client_name} {auth_authen}" service postfix restart
PostFix ще се свърже с rspamd, който слуша на TCP порт 11332 на localhost(127.0.0.1). Ще предаде имейла. smtpd_milters определя тази връзка чрез протокола SMTP. non_smtpd_milters setting е опция, която кара PostFix да проверява всички мейли произлизащи от системата. milter_mail_macros дефинира няколко променливи, които rspamd очаква за по-добро откриване на спам. RSPamd след това изпълнява проверките си и казва на PostFix дали мейла трябва да мине или да бъде отхвърлен.
За теста ще ползваме спам мейл, който идва със SpamAssassin. Той се нарича GTUBE и съдържа артикулен модел, който се разпознава като спам от SpamAssassin. За тази цел първо ще смъкнем файла от сайта
cd wget http://spamassassin.apache.org/gtube/gtube.txt
Зачистваме логовете
> /var/log/mail.log > /var/log/mail.err
А сега да изпратим този мейл до себе си
sendmail tachko@my.tlan.net < gtube.txt
И проверяваме мейл лога
cat /var/log/mail.log | grep Gtube 2024-05-15T09:19:50.790258-04:00 ns1 postfix/cleanup[6105]: BE51A140DB1: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@ns1.my.tlan.net> to=<tachko@my.tlan.net> 2024-05-15T09:19:50.795763-04:00 ns1 postfix/cleanup[6105]: BE51A140DB1: to=<tachko@my.tlan.net>, relay=none, delay=0.02, delays=0.02/0/0/0, dsn=5.7.1, status=bounced (Gtube pattern)
5.7.1 Gtube pattern - причина 5.7.1 Gtube модел кара PostFix да отхвърли мейла. Много е важна първата цифра на генерирания код. За пример: - 2 = Успех - 4 = Времене проблем, за повторно връщане - 5 = Постоянен проблем, не опитвай повече В нашия случай кода казва "Провал не пробвай повече" Кодовете може да намерите в RFC 3463 И още една проверка, много е важно, по-късно ще разберете защо.
cat /var/log/rspamd/rspamd.log 2024-05-18 06:58:09 #1800(normal) <ead7f6>; task; rspamd_message_parse: loaded message; id: <GTUBE1.1010101@example.net>; queue-id: <00B05140DB1>; size: 825; checksum: <a69eaeaf775e0f5f91a24c15f1d2a983> 2024-05-18 06:58:09 #1800(normal) <ead7f6>; task; rspamd_check_gtube: gtube reject pattern has been found in part of length 521 2024-05-18 06:58:09 #1800(normal) <ead7f6>; task; rspamd_add_passthrough_result: <GTUBE1.1010101@example.net>: set pre-result to 'reject' (15.00): 'Gtube pattern' from GTUBE(3) 2024-05-18 06:58:09 #1800(normal) <ead7f6>; task; rspamd_task_write_log: id: <GTUBE1.1010101@example.net>, qid: <00B05140DB1>, ip: 127.0.0.1, from: <root@ns1.my.tlan.net>, (default: S (reject): [15.00/15.00] [GTUBE(0.00){}]), len: 825, time: 67.678ms, dns req: 0, digest: <a69eaeaf775e0f5f91a24c15f1d2a983>, rcpts: <tachko@my.tlan.net>, mime_rcpts: =<recipient@example.net>, forced: reject "Gtube pattern"; score=15.00 (set by GTUBE) 2024-05-18 06:58:09 #1800(normal) <ead7f6>; task; rspamd_protocol_http_reply: regexp statistics: 0 pcre regexps scanned, 0 regexps matched, 172 regexps total, 0 regexps cached, 0B scanned using pcre, 0B scanned total 2024-05-18 06:58:09 #1797(rspamd_proxy) <28cf6f>; proxy; proxy_milter_finish_handler: finished milter connection 2024-05-18 06:58:09 #1797(rspamd_proxy) <7f7eb9>; proxy; proxy_accept_socket: accepted milter connection from 127.0.0.1 port 46412 2024-05-18 06:58:09 #1797(rspamd_proxy) <7f7eb9>; milter; rspamd_milter_process_command: got connection from 185.163.245.186:59330 2024-05-18 06:58:09 #1797(rspamd_proxy) <7f7eb9>; proxy; proxy_milter_finish_handler: finished milter connection
Набързо смятам да поясня, защото надолу ще берете ядове, ако не обърнете внимание на това което ще покажа, а именно етапите през които преминава проверката. set pre-result to 'reject' (15.00) - писмото е отхвърлено защото е набрало от теста 15 точки, по-късно ще поясня. (default: S (reject): [15.00/15.00] - отново имаме 15 от 15 точки и писмото е отхвърлено. 172 regexps total - общо сме събрали 172 точки. Непременно запомнете това число, много е важно. Повечето публични сървъри не от ранга на GMail събират 172 точки. Примерно mail.bg, abv.bg.
RSpamd няма да отхвърли всички спам мейли. Той ще ги изчисли и в зависимост от процента вероятност за спам ще вземе решение. Да разгледаме файла /etc/rspamd/actions.conf
nano /etc/rspamd/actions.conf actions { reject = 15; # Reject when reaching this score add_header = 6; # Add header when reaching this score greylist = 4; # Apply greylisting when reaching this score (will emit `soft> #unknown_weight = 1.0; # Enable if need to set score for all symbols implic> # Each new symbol is added multiplied by gf^N, where N is the number of spa> #grow_factor = 1.1; # Set rewrite subject to this value (%s is replaced by the original subject) #subject = "***SPAM*** %s" .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/act> .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/actions.conf" }
Това са действия по подразбиране. RSpamd изчислява и оценява. Когато достигне точки: - 15 - отхвъля мейла (както в горния случай на Gtube шаблона) - 6 и нагоре - добавя заглавна линия "X-Spam" - 4 и нагоре - ще задейства greylisting механизма който временно ще отхвърли мейла и ще чака за нов опит. Ако си мислите, че сте открили топлата вода, много се лъжете. Зловредния софтуер ако праща мейла оценен на 4 точки по Gtube, само веднъж ще задейства greylist-ата и успешно ще отхвърли спама, но хакерите правят след няколко минути нов опит и я заобикалят прослоутата greylist-ата. Ако искате да си направите свое точкуване, а не да ползвате това по подразбиране.
nano /etc/rspamd/local.d/actions.conf reject = 150; add_header = 6; greylist = 4;
Това на практика никога няма да отхвърли писмото. Другите две стойности обаче са доста разумни по подразбиране. Лично аз използвам тази настройка през цялото време, така че потребителите да могат да намерят нежелана поща в папката си с нежелана поща , но не трябва да ме питат дали сървърът за електронна поща го е отхвърлил. Внимание!!! reject = 150; - ако съберете повече от 150 точки няма да получите нищо, писмото просто ще бъде отрязано и няма да имате никакво уведомяване. А помните ли какво казах малко по-горе? "Публични сървъри като mail.bg, abv.bg и от този ранг се точкуват с 172 точки." Това значи, че никога няма да получите от тях писмо, даже уведомяване няма да имате, че са пратили писмо. Просто ще се отреже и това е. Извода е, че reject = 175; за да получите писмо от по-малко оторизирани сървъри. По-надолу в тестовете ще се види. Между другото, можете да пратите писмо примерно от mail.bg и ще видите, че нищо няма да пристигне. Когато вдигнете на 175 точки, писмата ще почнат да пристигат. Настройката на rspamd може да се променя в /etc/rspamd/override.d/… и ще промени цели секции, а ако променим в /etc/rspamd/local.d/… ще се променят само части от конфигурацията. За повече информация можете да прегледате Writing Rspamd rules. Каквото и да правите – никога не променяйте файловете /etc/rspamd/* директно, защото софтуерна актуализация ще се опита да ги замени. След всяка промяна в конфигурацията задължително трябва да се рестартира rspamd.
systemctl restart rspamd
Проверка дали rspamd е усвоил конфигурацията си
rspamadm configdump | grep -e add_header -e reject -e greylist soft_reject_on_timeout = false; description = "DMARC reject policy"; add_header = 6; reject = 150; greylist = 4; greylist { action = "soft reject"; "/etc/rspamd/local.d/greylist-whitelist-domains.inc", "/etc/rspamd/local.d/maps.d/greylist-whitelist-domains.inc", reject_message = "Spam message rejected"; discard_on_reject = false; quarantine_on_reject = false;
Конфигурацията може да се тества чрез:
rspamadm configtest syntax OK
Може да проверим и кои процси вървят:
pgrep -a rspam 6373 rspamd: main process 6374 rspamd: rspamd_proxy process (localhost:11332) 6375 rspamd: controller process (localhost:11334) 6376 rspamd: normal process (localhost:11333) 6377 rspamd: normal process (localhost:11333) 6378 rspamd: hs_helper process
Както знаете всеки мейл има заглавие и тяло. В заглавието влизат неша като изпращач, получател, дата, час и предмет. По принцип в заглавието има много повече неша. Тези допълнителни заглавия rspamd може да ги добавя като започват с "X-". За тази цел създаваме следния файл:
nano /etc/rspamd/override.d/milter_headers.conf extended_spam_headers = true; systemctl restart rspamd
Това ще добави нови заглавия, които може да видите ТУК. Добавката в заглавието ни е нужна за да можем писмото определено като спам след това да го манипулираме (примерно да се премести в папката Junk).
Потребителите нямат за цел постоянно да следят логовете и да гледат кой мейл е спам и кой колко е маркиран. Нормалното състояние е да се влезе в пощата и да види какви писме има, а системата сама да каже кое писмо е спам и да го сложи в папка с рискови/нежалани писма. За целта Dovecot поддръжа sieve филтри
nano /etc/dovecot/conf.d/90-sieve.conf # Identical to sieve_before, only the specified scripts are executed after the # user's script (only when keep is still in effect!). Multiple script # locations can be specified by appending an increasing number. #sieve_after = sieve_after = /etc/dovecot/sieve-after #sieve_after2 = #sieve_after2 = (etc...) systemctl restart dovecot
Така казваме, че sieve филтрите ще ги поместваме в /etc/dovecot/sieve-after Да създадем и директорията за начало
mkdir /etc/dovecot/sieve-after
Сега в тази директория да създадем файл(филтър) spam-to-folder.sieve
nano /etc/dovecot/sieve-after/spam-to-folder.sieve require ["fileinto"]; if header :contains "X-Spam" "Yes" { fileinto "Junk"; stop; }
require - включват функционалност за преместване на имейли в определени папки (fileinto) и за създаване на папки, ако все още не съществуват в (пощенска кутия). Тогава, ако rspamd маркира имейл като спам, той се премества в папката INBOX.Junk, която просто се показва като „Junk“ на потребителя под неговата входяща кутия. Dovecot обаче не разбира така написани файлове. Трябва да се конвертират във вид който може да ги чете. Затова ще компилираме файла.
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
Това генерира машинно четим файл /etc/dovecot/sieve-after/spam-to-folder.svbin. Рестартираме Dovecot
service dovecot restart
Анди Олсен посочи, че Dovecot е въвел функция за автоматично изтриване на имейли в папка, които достигат определена възраст. Това е особено полезно за папките „Trash“ и „Junk“.
nano /etc/dovecot/conf.d/15-mailboxes.conf mailbox Junk { special_use = \Junk auto = subscribe autoexpunge = 30d } mailbox Trash { # auto = create special_use = \Trash auto = subscribe autoexpunge = 30d } service dovecot restart
auto = subscribe - гарантира, че папките „Junk“ и „Trash“ се създават автоматично за всеки потребител. В противен случай спам имейлите не могат да бъдат преместени в папката „Junk“ по-късно. И вече ако се пробвате да пращате писма от не високо защитени сървъри писмата Ви ще пристигат в папката Спам. Най-накрая ще кажа как сървъра да изглежда надежден за другите сървъри. Сега да вдигнем прага от 150 точки при които се възприема подателя за сигурен.
nano /etc/rspamd/local.d/actions.conf # reject = 150; reject = 175; add_header = 6; greylist = 4; service rspamd restart
Наново пращаме писмо от не толкова надежден съръвър. Писмата пристигат нормално. Тук искам обаче да уточня нещо. Ако искате висока защита на сървъра си ще се наложи да смъкнете прага при което ще загубите връзка към несигурните сървъри. Лично Ваш избор кое да е.
Много функции в Rspamd използват Redis, за да запазят своите данни. Redis е вид система от бази данни. Тя е много по-ограничена от традиционната SQL база данни, защото просто съхранява ключове и стойности. Няма няколко полета/колони като в SQL. Но това е светкавично бързо, както работи. На моя стар сървър той обработва около 50 000 заявки в секунда. Получава скорост от своята простота и от запазването на данните в RAM. Така че няма достъп до диска, за да извлече информация. (Но той често копира данните си на диск, за да предотврати загуба на данни.) Хората използват Redis като кеш или за много бързо търсене на прости структури от данни. Както и rspamd . Вие инсталирахте пакета „redis-server“ по-рано. И това е всичко, което трябваше да направите. Той стартира автоматично и прослушва много входящи връзки на TCP порт 6379 на localhost. В Rspamd бекендът на Redis е активиран по подразбиране. Просто трябва да му кажете IP адреса на вашия Redis сървър.
nano /etc/rspamd/override.d/redis.conf servers = "127.0.0.1"; systemctl restart rspamd
Една от характеристиките на rspamd е анализирането на модели на думи с помощта на теория на вероятностите. Тази функционалност се съдържа в неговия „ статистически модул “. (Да, името е доста подвеждащо.) По същество вие показвате на rspamd много хам (добри) и спам (лоши) имейли и тяхното откриване се подобрява с течение на времето. Rspamd препоръчва (и по подразбиране) използването на Redis за съхраняване на данни за обучение за спам. Това е, което ще използваме сега.
Можете да започнете с празна база данни за обучение. Това не е толкова лошо, колкото звучи. rspamd има много повече функционалност, за да определи дали даден имейл е хам или спам. Автоматичното обучение приема имейли, които вероятно са хам или спам, и ги използва за обучение на филтъра за спам. Документацията на rspamd съдържа допълнителни примери за фина настройка на автоматичното обучение. След няколкостотин имейла обучението ще допринесе за по-добър процент на откриване. Ако искате да използвате автоматично обучение, просто създайте нов файл.
nano /etc/rspamd/override.d/classifier-bayes.conf autolearn = [-5, 10];
Това ще обучи имейли със спам резултат по-малък от -5 като (добро). И имейли със спам резултат над 10 като спам (нежелан). Можете да дадете други стойности по желание.
Използвали ли сте стария базиран на SQLite обучителен файл на стария сървър? Потърсете файлове като /var/lib/rspamd/*.sqlite на стария сървър. В такъв случай, моля, следвайте тези прости инструкции от документацията на rspamd, за да ги конвертирате в данни в Redis. Ако вместо това вече сте използвали Redis, тогава просто трябва да копирате базата данни на Redis от стария сървър. Спрете Redis на новия сървър. Копирайте /var/lib/redis/dump.rdb от стария сървър на новия сървър. Стартирайте Redis отново. И рестартирайте rspamd.
systemctl stop redis scp root@old-server:/var/lib/redis/dump.rdb /var/lib/redis systemctl start redis systemctl restart rspamd
За да проверите дали това работи, можете да попитате Rspamd с помощта на rspamc stat
rspamc stat Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 21164; users: 214; languages: 0 Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 1411; users: 62; languages: 0
Работили ли сте преди с пощенски сървър с пощенски кутии в структура Malidir , но без rspamd? Тогава вероятно имате голямо количество нормални и спам писма. Нека ги използваме, за да обучим rspamd. Важно е да обучите и имейлите с хам и спам. Командата rspamc ще ви позволи да захранвате цели директории/папки с имейли в учебния процес. Пример за обучение на спам от tachko@my.tlan.net:
rspamc learn_spam /var/vmail/my.tlan.net/tachko/Maildir/.Junk/cur
Можете да тренирате за нормални писма на определен потребител, в случая tachko
rspamc learn_ham /var/vmail/my.tlan.net/tachko/Maildir/cur
Разбира се, качеството на откриването на спам ще зависи от това колко добри са изходните данни. Ако потребителите поставят имейли в своята папка за нежелана поща, които не са типичен спам, те ще замърсят откриването. За да проверим броя на писмата които сме научили:
rspamc stat Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 21164; users: 214; languages: 0 Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 1411; users: 62; languages: 0
Проверката за спам по метода Bayes няма да работи, преди да научи поне 200 имейла със спам и хам. Преподаването на rspamd на по-малко имейли или само на спам имейли няма да работи. Това се определя от променливата min_learns , дефинирана в /etc/rspamd/statistic.conf.
rspamd ви позволява да тренирате откриването на спам за всеки потребител. Няма да поддържа глобална база данни за обучение, която да се прилага за всички потребители. Вместо това всеки потребител получава собствено обучение. Предимство: потребителите работят по различен начин. Някои са се абонирали за бюлетин за продажби и сега смятат, че отбелязването му като спам ги кара да се отпишат. Да, това е глупаво, но може напълно да обърка откриването на спам. Също така може да се интересувате много от информацията за продукта viagr*, докато други не. Недостатък: обучението все още изисква много радиолюбители и спам съобщения, преди да има ефект. Така че освен ако потребителят не получи 200 проби от добри и зли имейли, откриването на спам не може да работи. Много потребители няма да получат толкова много имейли, така че поради липсата на обучение за спам откриването няма да се подобри. Ако решите, че искате да използвате обучение за спам за всеки потребител, добавете/редактирайте файла /etc/rspamd/local.d/classifier-bayes.conf и вмъкнете:
nano /etc/rspamd/local.d/classifier-bayes.conf users_enabled = true;
Сега стигаме до нещо наистина страхотно. Нека кажем на Dovecot, че преместването на имейли в папката Junk учи незабавно rspamd, че имейлът е спам. И обучете имейл като хам, ако бъде преместен от папката Junk поща. Ще добавим тригери (всъщност „ сито скриптове “) към действието на преместване на имейли през IMAP. Понастоящем препоръчваният начин е вместо това да използвате приставката „ IMAPSieve “. Няма нищо за инсталиране – идва с пакетите Dovecot. Просто трябва да го конфигурираме.
nano /etc/dovecot/conf.d/20-imap.conf protocol imap { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins quota imap_sieve # Maximum number of IMAP connections allowed for a user from each IP address. # NOTE: The username is compared case-sensitively. #mail_max_userip_connections = 10 }
Също така трябва да редактираме конфигурацията на Sieve на Dovecot, за да активираме два плъгина, които са необходими за нашата задача. Sieve е скриптов език, който автоматизира нещата във връзка с имейли и папки.
nano /etc/dovecot/conf.d/90-sieve.conf ### Почти накрая: # Enables showing byte code addresses in the trace output, rather than only # the source line numbers. #sieve_trace_addresses = no # From elsewhere to Junk folder imapsieve_mailbox1_name = Junk imapsieve_mailbox1_causes = COPY imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve # From Junk folder to elsewhere imapsieve_mailbox2_name = * imapsieve_mailbox2_from = Junk imapsieve_mailbox2_causes = COPY imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve sieve_pipe_bin_dir = /etc/dovecot/sieve sieve_global_extensions = +vnd.dovecot.pipe sieve_plugins = sieve_imapsieve sieve_extprograms } service dovecot restart
Първото правило казва на Dovecot да изпълнява правилата на Sieve, както е дефинирано във /etc/dovecot/sieve/learn-spam.sieve файла, когато имейл се премести в папка „Junk“ на потребителя. Ще създадем този скрипт Sieve след минута. Второто правило определя другия начин. Всеки път, когато имейл се премести от папката „Junk“ в произволна (*) папка, /etc/dovecot/sieve/learn-ham.sieveсе извиква скриптът Sieve. sieve_pipe_bin_dir - определя къде е разрешено да се намират изпълними скриптове. Ще поставим нашите прости скриптове за обучение там. sieve_global_extensions - активира плъгина за тръба, който позволява изпращане на имейл до външни команди. След това нека създадем скриптовете Sieve, за които казахме на Dovecot в директория /etc/dovecot/sieve, за да поставим нашите нови файлове.
mkdir /etc/dovecot/sieve nano /etc/dovecot/sieve/learn-spam.sieve ### Sieve за СПАМ писма require ["vnd.dovecot.pipe", "copy", "imapsieve"]; pipe :copy "rspamd-learn-spam.sh"; nano /etc/dovecot/sieve/learn-ham.sieve ### Sieve за HАМ (нормални) писма require ["vnd.dovecot.pipe", "copy", "imapsieve", "variables"]; if string "${mailbox}" "Trash" { stop; } pipe :copy "rspamd-learn-ham.sh";
Горният скрипт Sieve избягва обучението на имейл като хам , ако потребителят го премести в папката Кошче . В края на краищата, ако изчистите папката си с нежелана поща , не искате да обучавате нежеланата си поща като обикновени имейли. Рестартираме Dovecot.
systemctl restart dovecot
Горните два скрипта трябва да бъдат компилирани за да може Dovecot да ги чете.
sievec /etc/dovecot/sieve/learn-spam.sieve sievec /etc/dovecot/sieve/learn-ham.sieve
Това създава два нови файла learn-ham.svbin и learn-spam.svbin, които вътре изглеждат като безсмислици, но вече са във формат, който плъгинът Sieve на Dovecot може да разбере. Нека поправим и разрешенията на тези файлове, докато сме там:
chmod u=rw,go= /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin} chown vmail:vmail /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin}
И последната стъпка е да създадете прости скриптове на обвивката, които извършват действителното обучение за спам/хам.
nano /etc/dovecot/sieve/rspamd-learn-spam.sh #!/bin/sh exec /usr/bin/rspamc learn_spam
Това изглежда просто, нали? Нищо повече всъщност не е необходимо. Спам имейлът се предава на този скрипт и rspamd го научава като спам имейл и съответно коригира своята база данни за откриване на спам. Вторият скрипт учи хам и се нарича /etc/dovecot/sieve/rspamd-learn-ham.sh.
nano /etc/dovecot/sieve/rspamd-learn-ham.sh #!/bin/sh exec /usr/bin/rspamc learn_ham
Тези два шел скрипта трябва да бъдат направени изпълними:
chmod u=rwx,go= /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh chown vmail:vmail /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh
Надявам се, че още не си си загубил ума. Това наистина е просто верига от неща, които трябва да се случат. Нека повторим как работи този процес: ● потребителят премества спам имейл в своята папка „Junk“. ● Dovecot осъзнава, че това задейства правилото на Sieve „imapsieve_mailbox1“, така че извиква скрипта на Sieve /etc/dovecot/sieve/learn-spam.sieve (всъщност *.svbin версията на скрипта) ● Sieve ще вземе имейла и ще го изпрати („препрати“) към изпълнимия шел скрипт rspamd-learn-spam.sh ● скриптът от своя страна изпълнява имейла чрез командата “/usr/bin/rspamc learn_spam” Това работи еднакво и за другия начин или за изучаване на имейли с хам, разбира се. Сигурен съм, че нямате търпение да го изпробвате. За да видите обаче, че наистина работи, ви предлагам да редактирате файла /etc/dovecot/conf.d/10-logging.conf и да зададете „mail_debug=yes“. Това ще добави много повече подробности към файла /var/log/mail.log, но на натоварен сървър може също да доведе до главоболия. 🙂
nano /etc/dovecot/conf.d/10-logging.conf #mail_debug = no mail_debug=yes
Рестартираме Dovecot.
systemctl restart dovecot
Отваряме втори терминал и вътре пишем:
tail -f /var/log/mail.log
През Roundcube преместваме писмо в папката Junk (СПАМ) Във втория терминал трябва да се покажат много неща. И съдържание от рода на:
imapsieve: Static mailbox rule [1]: mailbox=`Junk' from=`*' causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-spam.sieve' after=(none) imapsieve: Static mailbox rule [2]: mailbox=`*' from=`Junk' causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-ham.sieve' after=(none) imapsieve: Matched static mailbox rule [1] sieve: file storage: script: Opened script `learn-spam' from `/etc/dovecot/sieve/learn-spam.sieve' sieve: action pipe: running program: rspamd-learn-spam.sh program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: USER=john@example.org program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: HOME=/var/vmail/example.org/john program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: HOST=narnia Mailbox Junk: UID 1: Opened mail because: mail stream sieve: uid=1: Execute storing into mailbox 'Junk'
rspamd поддържа подробен регистър на своите действия в /var/log/rspamd/rspamd.log. Ако потребител се оплаче, че определен имейл е бил блокиран или поне маркиран като спам, тогава погледнете този дневник. Можете да сравните /var/log/mail.log с него, като сравните ID на опашката на Postfix. Това са 12-цифрените шестнадесетични числа като „ 95CE05A00547 “. Тези идентификатори могат да бъдат намерени и в rspamd.log:
rspamd идва с добра бонус функция: уеб интерфейс. Тя ви позволява да проверявате имейлите за спам, да получавате статистически данни и да прецизирате резултатите. Той вече е инсталиран и активиран по подразбиране и очаква HTTP заявки на порт 11334 на интерфейса localhost. Предлагам ви да добавите проста прокси конфигурация към вашата вече работеща конфигурация за уеб поща с активиран HTTPS, за да получите достъп. Първо трябва да активирате модулите на Apache за HTTP прокси и пренаписване:
a2enmod proxy_http a2enmod rewrite
Можете или да създадете нова конфигурация на виртуален хост, или просто да редактирате /etc/apache2/sites-available/my.tlan.net-ssl.conf файл. Навсякъде в маркерите VirtualHost добавете:
nano /etc/apache2/sites-available/my.tlan.net-ssl.conf <VirtualHost *:443> ServerName my.tlan.net ServerAlias mail.my.tlan.net ns1.my.tlan.net www.my.tlan.net DocumentRoot /var/www/my.tlan.net/ SSLEngine on Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/my.tlan.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/my.tlan.net/privkey.pem Header always set Strict-Transport-Security "max-age=31536000" SSLUseStapling on <Location /rspamd> Require all granted </Location> RewriteEngine On RewriteRule ^/rspamd$ /rspamd/ [R,L] RewriteRule ^/rspamd/(.*) http://localhost:11334/$1 [P,L] </VirtualHost> <IfModule mod_ssl.c> SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000) </IfModule>
Тази част от конфигурацията ще препраща всички заявки към https://my.tlan.net/rspamd към localhost:11334 и по този начин ви дава достъп до уеб интерфейса на rspamd. Интерфейса е защитен с парола, която можете да поставите в конфигурационен файл на rspamd. Нека създадем хеш парола:
rspamadm pw Enter passphrase: Iceman $2$ngti745qgtnfybho3ozxu8cdwzydgjdc$zrpouz9mu5syrsrxztboboweuspojfruuff8ky7f7yk7yy84jyyb
Да създадем нов конфигурационен файл.
nano /etc/rspamd/local.d/worker-controller.inc password = "$2$ngti745qgtnfybho3ozxu8cdwzydgjdc$zrpouz9mu5syrsrxztboboweuspojfruuff8ky7f7yk7yy84jyyb" systemctl restart rspamd systemctl restart apache2
Ако всичко върви според очакванията, сега трябва да имате достъп до уеб интерфейса на rspamd на https://my.tlan.net/rspamd.
Тук ще можете да правите статистика на сървъра и да следите състоянието му. С това приключваме първата част от настройването на RSpamD.