Sieve: Duplicate Extension

Удалять или перемещать дубликаты писем можно используя Dovecot Sieve и расширение «vnd.dovecot.duplicate» до версии 2.2.18 и «duplicate» в более свежих версиях. Дубли писем определяются по «Message-ID». Расширение по умолчанию отключено, но начать его использовать не составит труда.

/etc/dovecot/conf.d/90-sieve.conf

plugin {

  sieve_before = /var/spool/mail/vmail/default.sieve  # (путь может быть другим)

  sieve_extensions = +vnd.dovecot.duplicate      # dovecot < 2.2.18
  #sieve_extensions = +duplicate                 # dovecot >= 2.2.18
}

/var/spool/mail/vmail/default.sieve # (путь может быть другим)

require ["vnd.dovecot.duplicate"];      # dovecot < 2.2.18 
#require ["duplicate"];                 # dovecot >= 2.2.18

if duplicate {
    discard;
    #fileinto "Trash";      # если надо перемещать в корзину
    stop;
}

Проверить версию Dovecot

dovecot --version
2.2.10

Ввиду того, что я использую Centos 7 с Dovecot 2.2.10, то с версиями >= 2.2.18 не тестировал.

Источник Dovecot вики https://wiki.dovecot.org/Pigeonhole/Sieve/Extensions/Duplicate и гугл.

Кстати, в процессе настройки на тестовом сервере столкнулся с ошибкой «User test@exemple.com doesn’t have home dir set, disabling duplicate database»
Ошибка связана с тем, что в файле /etc/dovecot/conf.d/10-mail.conf не был указан параметр mail_home. Должно выглядеть примерно так:

mail_home = /var/spool/mail/vmail
mail_location = maildir:~/%n

По настройке mail_home и mail_location можно почитать в официальной вики https://wiki2.dovecot.org/VirtualUsers/Home

Roundcube 1.2.5 to 1.3.x

В первую очередь делаем бэкап, как файлов так и базы.

Т.к. roundcube 1.3.х требует php7 нужно подключить нужные репозитории

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Дальше удаляем старый php

yum remove php php-xml php-pdo php-mbstring php-mcrypt php-intl php-mysqli php-gd

Устанавливаем php7

yum install php70w php70w-opcache php70w-xml php70w-pdo php70w-mbstring php70w-mcrypt php70w-intl php70w-mysqli php70w-gd

Перезапускаем апач

systemctl restart httpd.service

Качаем свежий roundcube

wget https://github.com/roundcube/roundcubemail/releases/download/1.3.1/roundcubemail-1.3.1-complete.tar.gz
extract roundcubemail-1.3.1-complete.tar.gz
./roundcubemail-1.3.1/bin/installto.sh /var/www/roundcubemail/

Делаем бэкап старого composer.json Будем использовать новый

mv composer.json composer.json_old
cp composer.json-dist composer.json

Обновляем плагины

php composer.phar update --no-dev

При обновлении плагинов у меня вылезла ошибка

  [ErrorException]                                                                                                           
  file_put_contents(/var/www/roundcubemail/vendor/bin/crypt-gpg-pinentry): failed to open stream: No such file or directory

Она связана с битой ссылкой. Удалем ее и перелинковываем

rm vendor/bin/crypt-gpg-pinentry
ln -s /var/www/roundcubemail/vendor/pear/crypt_gpg/scripts/crypt-gpg-pinentry /var/www/roundcubemail/vendor/bin/crypt-gpg-pinentry

Осталось взять из composer.json_old те плагины, что уже работают с новой версией, и прописать в composer.json

Кстати, плагин managesieve таки работает и должен быть указан в config/config.inc.php

openDKIM: селекторы

Пару лет назад я писал про настройку OpenDKIM, но я не упомянул про селекторы. Это может пригодится, когда, допустим, нужно отправлять письма с нескольких почтовых серверов или с почтового сервера и сайта. Вариантов может быть много. Т.е., когда нужно указать для каждого сервера свой DKIM ключ.

Настраивается все ровно как в посту по настройке OpenDKIM. Отличий не много.

При создании ключа указываем селектор

opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s newselector

в записях KeyTable

newselector._domainkey.example.com example.com:newselector:/etc/opendkim/keys/example.com/newselector.private

в SigningTable

@example.com newselector._domainkey.example.com

Так же, при добавлении TXT записи нужно не забыть указать

newselector._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=.................." )  ; ----- DKIM key newselector for example.com

Clamav: игнорировать сигнатуру

Игнорировать сингатуру в Clamav можно создав файл local.ign2 и добавив в него собственно название сигнатуры.

echo "Signature" >> /var/lib/clamav/local.ign2

затем перезапускаем clamav.

Пример, сегодняшний косяк с блокировкой doc файлов

echo "Win.Exploit.CVE_2016_3316-1" >> /var/lib/clamav/local.ign2

centos 7 + openfire 4.0.2 + SSO

Заметка на память как заставить openfire работать с SSO

Качаем openfire и устанавливаем

wget http://download.igniterealtime.org/openfire/openfire-4.0.2-1.i386.rpm
yum install ~/openfire-4.0.2-1.i386.rpm

Читать далее «centos 7 + openfire 4.0.2 + SSO»

Перенос виртуального сервера на физический с созданием программного рейда

Задача: перести виртуальный почтовый сервер на физический с созданием RAID 1 (зеркало).

Имеется виртуалка на XenServer и физический сервер с двумя винтами по 1 Тб

Установим Centos minimal на один из винтов и поделим диск на разделы

/dev/sda1 /boot
/dev/sda2 swap
/dev/sda3 /

Теперь установим mdadm и vim (обожаю этот текстовый редактор)

yum install mdadm vim

Теперь надо подготовить второй диск для настройки на нем рейда. Скопируем схему разбивки диска с /dev/sda

sfdisk -d /dev/sda | sfdisk /dev/sdb

Читать далее «Перенос виртуального сервера на физический с созданием программного рейда»

настройка openDKIM в centos 7

Установим opendkim
yum install opendkim

Нужно в /etc/opendkim.conf поправить Mode и раскомментировать строки
Mode sv
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable

Создадим ключи
mkdir /etc/opendkim/keys/example.com
chmod 750 /etc/opendkim/keys/example.com
opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com
chmod 640 /etc/opendkim/keys/example.com/*

Допишем в /etc/opendkim/KeyTable

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private

и в /etc/opendkim/SigningTable
*@example.com default._domainkey.example.com

Перезапустим opendkim
systemctl restart opendkim.service

Осталось научить postfix работать с dkim и указать для домена TXT запись.

Добавляем в /etc/postfix/main.cf

#DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

затем
postfix restart

Добавляем TXT запись.
Берем содержимое файла /etc/opendkim/keys/example.com/default.txt

default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=.................." )  ; ----- DKIM key default for example.com

Проверяем
dig txt default._domainkey.example.com

Отправляем тестовое письмо и наслаждаемся результатом.
opendkim

rsyslog, samba, full audit

После настройки самбы и дополнительного full.audit следует озаботиться тем, куда собственно этот аудит будет записываться.

Как рабочий пример:

# less /etc/samba/smb.full_audit.conf
         full_audit:priority = NOTICE
         full_audit:facility = LOCAL5
         full_audit:success = mkdir rmdir read write rename unlink chmod fchmod chown fchown ftruncate lock symlink readlink link mknod close open
         full_audit:failure = none
         full_audit:prefix = |[%S]|%u|%I

Тут важна строка full_audit:facility = LOCAL5

Настраиваем /etc/rsyslog.conf
Находим строку
*.info;mail.none;authpriv.none;cron.none /var/log/messages
и добавляем local5.none дабы в /var/log/messages не заносился аудит самбы
*.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages
Указываем куда записывать аудит
local5.* /var/log/samba/samba.audit

Дабы применились изменения перезапускаем rsyslog
service rsyslog restart

Однако в /var/log/messages скорее всего появится очень большое количество таких строк
rsyslogd-2177: imuxsock begins to drop messages from pid 194326 due to rate-limiting
rsyslogd-2177: imuxsock lost 684 messages from pid 194326 due to rate-limiting

Это связано с тем, что rsyslog по умолчанию для одного пида записывает в логи не более 200 записей в течении 5 секунд. Т.е. если пользователь заходит в самба шару с большим количеством файлов, то записей в samba.audit может быть больше 200, т.о. появляется запись в /var/log/messages о том, что rsyslog отбросил остальные строки.

Есть три варианта решения (по крайней мере я столько нашел)

1. Отключить ограничение. Добавляем в /etc/rsyslog.conf
$SysSock.RateLimit.Interval 0

2. Поиграться с интервалом и разрешенным чилом записей
например:
$SysSock.RateLimit.Interval 10
$SysSock.RateLimit.Burst 500

3. Убрать записи «imuxsock begins to drop messages бла бла бла» из /var/log/messages
Решается добавлением в /etc/rsyslog.conf после #### RULES ####

:msg, regex, "imuxsock begins to drop messages from pid .* due to rate-limiting" ~
:msg, regex, "imuxsock lost .* messages from pid .* due to rate-limiting" ~

Подробнее здесь

Дабы применились изменения перезапускаем rsyslog
service rsyslog restart