Linux
  • << DEBIAN >>
  •   < Debian 9 >
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   < Debian 11 >
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   < Debian 12 >
  •     Първоначални настройки
  •     DNS Сървър
  •     DNS Практика
  •     Инсталиране и настройка на Apache
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Първо надграждане на MAIL сървъра
  •     Инсталиране и настройка на пощенски сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •     WEB сървър с Nginx
  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Сървър за отдалечен достъп - RustDESK
  • < UBUNTU >
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  •   Ubuntu BUDGIE
  •     Инсталиране Ubuntu BUDGIE
  •     Първоначални настройки на Ubuntu BUDGIE
  •     Ubuntu BUDGIE като MAC OS
  •     Приложения за Ubuntu BUDGIE
  • GNOME работна среда
  •   Ubuntu GNOME
  •     Инсталиране на Ubuntu 21.04 GNOME
  •     Ubuntu 21.04 GNOME като MacOS
  • XFCE работна среда
  •   Debian - Install XFCE
  •     Debian XFCE - допълнение
  •     Debian XFCE като MacOS
  •   Ubuntu - Install XFCE
  •     Ubuntu XFCE - допълнение
  •     Ubuntu XFCE като MacOS
  • МАТЕ работна среда
  •   Debian - Install MATE
  •     Настройка на Debian MATE
  • PROGRAMS
  •   Conky
  •   Sublime Text
  • Филтриране на спама с RSpamd

    Вече има работещ сървър но проблема със спама си остава. Има няколко начина за справяне с проблема. Примерно SpamAssassin или rspamd. Втория е по-гъвкав, производителен и по-лесен за интегриране. RSpamd работи като сървис на сървъра и слуша PostFix използвайки milter (mail filter) протокола. Всеки път когато пристигне писмо, PostFix ще го прати до rspamd за проверка на съдържанието. RSpamd ще го анализира, оцени и ако резултата е висок имейла ще се счита за непоискан.

    Инсталирне на RSpamd

    RSpamd е сравнително нов продукт и го няма в репозиторите на Debian 9. За да го включим първо трябв да добавим PGP ключ:

    # wget -O- https://rspamd.com/apt-stable/gpg.key | apt-key add -


    След това да добавим програмата в репозиторите:

    # echo "deb http://rspamd.com/apt-stable/ stretch main" > /etc/apt/sources.list.d/rspamd.list

    Репозиторa се описва в /etc/apt/sources.list.d/rspamd.list Да обновим репозиторите

    # apt-get update


    И сега да инсталираме RSpamd:

    # apt-get install rspamd

    PostFix използва rspamd

    Нека накараме PostFix да изпраща всички входящи писма чрез rspamd:

    # postconf smtpd_milters=inet:127.0.0.1:11332 # postconf non_smtpd_milters=inet:127.0.0.1:11332 # postconf milter_protocol=6 # 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. За тази цел първо ще смъкнем файла от сайта

    # wget http://spamassassin.apache.org/gtube/gtube.txt


    Зачистваме логовете

    # > /var/log/mail.log # > /var/log/mail.err


    А сега да изпратим този мейл до себе си

    # sendmail tachko@home.tlan.net < gtube.txt


    И проверяваме мейл лога

    # cat /var/log/mail.log Feb 25 01:18:03 home postfix/pickup[6972]: 25F7680C3B: uid=0 from=<root> Feb 25 01:18:03 home postfix/cleanup[7994]: 25F7680C3B: message-id=<GTUBE1.1010101@example.net> Feb 25 01:18:03 home postfix/cleanup[7994]: 25F7680C3B: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@home.tlan.net> to=<tachko@home.tlan.net> Feb 25 01:18:03 home postfix/cleanup[7994]: 25F7680C3B: to=<tachko@home.tlan.net>, relay=none, delay=0.05, delays=0.05/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

    Точки за степенуване на спама (score metrics)

    RSpamd няма да отхвърли всички спам мейли. Той ще ги изчисли и в зависимост от процента вероятност за спам ще вземе решение. Да разгледаме файла /etc/rspamd/actions.conf

    # vi /etc/rspamd/actions.conf actions { reject = 15; add_header = 6; greylist = 4; }

    Това са действия по подразбиране. RSpamd изчислява и оценява. Когато достигне точки: - 15 - отхвъля мейла (както в горния случай на Gtube шаблона) - 6 и нагоре - добавя заглавна линия "X-Spam" - 4 и нагоре - ще задейства greylisting механизма който временно ще отхвърли мейла и ще чака за нов опит. Ако си мислите, че сте открили топлата вода, много се лъжете. Зловредния софтуер ако праща мейла оценен на 4 точки по Gtube, само веднъж ще задейства greylist-ата и успешно ще отхвърли спама, но хакерите правят след няколко минути нов опит и я заобикалят прослоутата greylist-ата. Ако искате да си направите свое точкуване то:

    # vi /etc/rspamd/override.d/metrics.conf actions { reject = 150; add_header = 2; greylist = 5; }

    Този файл може да го променяте да правите свои конфигурации. Примери може да намерите от ТУК.. Не правете промени по файловете в /etc/rspamd/local.d/, защото след актуализациите ще върне оригиналните стойности по-подразбиране. След всяка промяна в конфигурацията задължително трябва да се рестартира rspamd.

    # service rspamd restart


    Проверка дали rspamd е усвоил конфигурацията си

    # rspamadm configdump


    Отговора е много дълъг затова, ако искате примерно да видите стойността на reject то:

    # rspamadm configdump |grep reject

    И ако сте въвели собсвена конфигурация където е указан reject да е 150, трябва да зареди такава стойност.


    Конфигурацията може да се тества чрез:

    # rspamadm configtest syntax OK


    Може да проверим и кои процси вървят:

    # pgrep -a rspam 7942 rspamd: main process 7975 rspamd: rspamd_proxy process 7976 rspamd: controller process 7977 rspamd: normal process 7978 rspamd: normal process 7979 rspamd: normal process 7980 rspamd: normal process 7981 rspamd: hs_helper process

    Добавяне на заглавие

    Както знаете всеки мейл има заглавие и тяло. В заглавието влизат неша като изпращач, получател, дата, час и предмет. По принцип в заглавието има много повече неша. Тези допълнителни заглавия rspamd може да ги добавя като започват с "X-". За тази цел създаваме следния файл:

    # vi /etc/rspamd/override.d/milter_headers.conf extended_spam_headers = true;

    Това ще добави нови заглавия, които може да видите ТУК.

    Прехвърляне на спама в папка Junk

    Потребителите нямат за цел постоянно да следят логовете и да гледат кой мейл е спам и кой колко е маркиран. Нормалното състояние е да се влезе в пощата и да види какви писме има, а системата сама да каже кое писмо е спам и да го сложи в папка с рискови/нежалани писма. За целта Dovecot поддръжа sieve филтри

    #vi /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...)

    Така казваме, че sieve филтрите ще ги поместваме в /etc/dovecot/sieve-after Да създадем и директорията за начало

    # mkdir /etc/dovecot/sieve-after


    Сега в тази директория да създадем файл(филтър) spam-to-folder.sieve

    # vi /etc/dovecot/sieve-after/spam-to-folder.sieve require ["fileinto","mailbox"]; if header :contains "X-Spam" "Yes" { fileinto :create "INBOX.Junk"; stop; }

    Чрез този файл маркираните файлове като спам се преместват в пощенска кутия Junk. Папката INBOX.Junk ако още не съществува то тя се създава. До сега генреирахме спам, но той не се намира в папката за спам. Създадохме и самата папка но за да прехвърлим текушия спам там, а и за в бъдеще спама там да се помещава изплняваме сленото:

    # sievec /etc/dovecot/sieve-after/spam-to-folder.sieve

    Това генерира машинно четим файл /etc/dovecot/sieve-after/spam-to-folder.svbin. Рестартираме Dovecot

    # service dovecot restart

    Изучаване на съществуващия спам

    В предни версии за антиспам се ползваше SpamAssasin. Той ползва базата данни Bayes за да увеличи откриваемостта на спам. Проблема е, че rspamd не може да ползва тези данни за обучение заради другия алгоритъм на работа. За да обучим rspamd се ползват три метода: 1. Без обучение 2. Използване на предварителни шаблони 3. Сами си обучаваме системата. Да ги разгледаме:


    Без обучение


    Това не е толкова лошо. Препоръчвам да се активира. RSpamd е много функционален и добре замислен и върши страхотна работа. За да работи създаваме файл в /etc/rspamd/override.d/.

    # vi /etc/rspamd/override.d/classifier-bayes.conf autolearn = true;

    Лошото е, че подхода е много консервативен, някои писма като спам направо ги изучава за много лоши и после ги отхвърля. В началото докато се натрупа база от обучение може да се пусне.


    Използване на предварителни шаблони


    RSpamd има база с над 3000 научени майла. С това може и да се започне. Спираме RSpamd

    # service rspamd stop


    Вземаме предварителните статистики и ги поставяме в директорията /var/lib/rspamd. След това изпълняваме:

    # cd /var/lib/rspamd/ root@home:/var/lib/rspamd# wget https://rspamd.com/rspamd_statistics/bayes.ham.sqlite root@home:/var/lib/rspamd# wget https://rspamd.com/rspamd_statistics/bayes.spam.sqlite # chown _rspamd._rspamd /var/lib/rspamd/*sqlite


    Стартираме RSpamd

    # service rspamd start


    Уверяваме се, че базата данни е изпълнена:

    # rspamc stat Statfile: BAYES_SPAM type: sqlite3; length: 36.86k; free blocks: 0; total blocks: 0; free: 0.00%; learned: 0; users: 1; languages: 1 Statfile: BAYES_HAM type: sqlite3; length: 36.86k; free blocks: 0; total blocks: 16; free: 0.00%; learned: 1; users: 1; languages: 1 Total learns: 1

    В случая имаме една поща и беше обучена само тя.


    Сами си обучаваме системата


    Ако сървъра е работил достатъчно дълго време то той събира много писма със спам и хам. Именно това ще послужи за база за нашето обучение. Командата rspamc позволява да зареждаме цели директории/папки с имейли за обучение. Има и още нещо което улеснява работата. Формта на Maildir за съхранение на писмата съвпада с този на rspamd. Нека да се обучим за спам като ползваме спам директорията на tachko. Доверяваме се, че tachko не лъже със спама и неговата директоря е доверена за правилен спам:

    # rspamc learn_spam /home/vmail/home.tlan.net/tachko/Maildir/.INBOX.Junk/cur

    Така казахме, че спама на tachko е истински и вече писмата пристигащи с такъв маркер ще са спам. Колко качествено ще се открива спам зависи колко са добри данните за източника. Така, че не се обучават спам мейли на случаен принцип, поставени в папката Junk. Да проверим броя на писма, които сме научили:

    # rspamc stat Statfile: BAYES_SPAM type: sqlite3; length: 36.86k; free blocks: 0; total blocks: 0; free: 0.00%; learned: 0; users: 1; languages: 1 Statfile: BAYES_HAM type: sqlite3; length: 36.86k; free blocks: 0; total blocks: 0; free: 0.00%; learned: 0; users: 1; languages: 1 Total learns: 0


    Проверката на спам с Bayes няма да работи, преди да научи най-малко 200 имейла за спам. Преподаването на rspamd по-малко имейли или просто спам имейли няма да работи. Това се определя от променливата min_learns, дефинирана в /etc/rspamd/statistic.conf. Качеството на откриване на спам зависи от това колко добри са източниците. Пример: - имате потребители които съвестно слагат спама в папка Junk. Това прави статистиката точна - имате потребители които слагат произволни писма в папка Junk. Това е лъжлива информация и системата се обучава неправилно Затова внимавайте кои папки избирате за обучение на системата. Не слагайте всички папки от потребителите Junk като база за обучение.

    Обучение от потребителските действия

    Нека да кажем на Dovecot, че прместването на писмата в папката за нежелани съобщения веднага да показва, че е спам. Същевременно системата да се обучи, че е спам. Ще се добави Sieve сккрипт към действието преместване на писмо чрез IMAP. Dovecot съдържа в себе си приставка IMAPSieve, която ще конфигурираме за тази цел. Бъдете внимателни, базата за обучение за спам е глобална за всички потребители. Ако един потребител обучава безмислици то скоростта на проверка ще се съсипе. Този вид обучение се прави само на доверени потребители, които знаят какво правят, а не тренират. И така за начало да влкючим приставката IMAPSieve.

    # vi /etc/dovecot/conf.d/20-imap.conf # Търсим реда: #mail_plugins = $mail_plugins # Променяме го на: mail_plugins = $mail_plugins imap_sieve


    Също трябва да се редактира Dovecot's Sieve конфигурацията, за да се активират две необходими приставки. Sieve е скриптов език, който автоматизира нещата в съчетание с писма и папки.

    # vi /etc/dovecot/conf.d/90-sieve.conf # Търсим реда: #sieve_plugins = # Променяме го на: sieve_plugins = sieve_imapsieve sieve_extprograms # И под този ред добавете: # From elsewhere to Junk folder ("От другаде до папка Junk") 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

    Първото правило казва на Dovecot да изпълни правилото на сито, определено във файла /etc/dovecot/sieve/learn-spam.sieve Второто правило определя другия начин. "Всеки път, когато писмо се премества от папка Junk във всяка папка (*), да се извиква /etc/dovecot/sieve/learn-ham.sieve скрипт". sieve_pipe_bin_dir определя къде могат да се намират изпълнимите скриптове. Там ще бъдат и нашите присти скриптове за обучение. sieve_global_extensions, позволява да се включи плъгин, който да изпраща писма към външни команди. Забележка: ако ползвате предни версии от ръководството, пощенските директории могат да използват "." вместо "/". Ясен знак е, че намирате директории като .INBOX.Junk вместо просто Junk в директорията /home/vmail/home.tlan.net/tachko/Maildir/. В този случай заменете Junk със INBOX.Junk.

    Следва да създадем сценария на Sieve, за които сме казали за Dovecot.

    # mkdir /etc/dovecot/sieve


    После създайте следния файл:

    # vi /etc/dovecot/sieve/learn-spam.sieve require ["vnd.dovecot.pipe", "copy", "imapsieve"]; pipe :copy "rspamd-learn-spam.sh";


    И още един файл:

    # vi /etc/dovecot/sieve/learn-ham.sieve require ["vnd.dovecot.pipe", "copy", "imapsieve"]; pipe :copy "rspamd-learn-ham.sh";


    Тези два скрипта трябва да бъдат компилирани, но преди това да рестартираме Dovecot за да влязат в сила плъгините sieve_imapsieve и sieve_extprograms за да могат да се компилират скриптовете.

    # service dovecot restart # sievec /etc/dovecot/sieve/learn-spam.sieve # sievec /etc/dovecot/sieve/learn-ham.sieve


    Това създаде два файла learn-ham.svbin и learn-spam.svbin във формат плъгина на Dovecot да може да ги разбере. Да редактираме и правата върху файловете:

    # chmod u=rw,go= /etc/dovecot/sieve/learn-{spam,ham}.sieve # chown vmail.vmail /etc/dovecot/sieve/learn-{spam,ham}.sieve


    Последна стъпка е създаване на прост шел скрипт правещ действително обучението за спам:

    # vi /etc/dovecot/sieve/rspamd-learn-spam.sh #!/bin/sh exec /usr/bin/rspamc learn_spam


    Друго не е необходимо. Спам писмото се подава към този скрипт и rspamd го научава като спам писмо и съответно коригира базата си за откриване на спам. Следващия скрипт е за ham.

    # vi /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/learn-{spam,ham}.sieve


    Да повторим как работи процеса: - потребителя премества спама в папка Junk. - Dovecot разбира, че е задействано правилото Sieve “imapsieve_mailbox1”, така, че го нарича скрит скрипт /etc/dovecot/sieve/learn-spam.sieve - Sieve ще отнеме писмото и изпрати към rspamd-learn-spam.sh - скриптът на свой ред изпълнява електронната поща чрез команда / usr / bin / rspamc learn_spam. Такова е правилото и за другия вид поща (ham). Крайно време е да тестваме как работи. Но за да видим, че действително работи да редактираме файла:

    # vi /etc/dovecot/conf.d/10-logging.conf # Търсим реда: #mail_debug = no # Променяме го на: mail_debug = yes


    Рестартираме Dovecot:

    # service dovecot restart


    И гледаме следния файл:

    # tail -f /var/log/mail.log Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Debug: Loading modules from directory: /usr/lib/dovecot/modules Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Debug: Module loaded: /usr/lib/dovecot/modules/lib95_imap_sieve_plugin.so Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Debug: Effective uid=5000, gid=5000, home=/home/vmail/home.tlan.net/tachko Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/home/vmail/home.tlan.net/tachko/Maildir Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Debug: maildir++: root=/home/vmail/home.tlan.net/tachko/Maildir, index=, indexpvt=, control=, inbox=/home/vmail/home.tlan.net/tachko/Maildir, alt= Jul 10 05:25:03 home dovecot: imap(tachko@home.tlan.net): Logged out in=50 out=511

    Трябва да се види накрая, че Dovecot извиква скрипта rspamd-learn-spam.sh

    Очаквайте продължение ...