IT science

трудовые будни

лечим почтовые вложения winmail.dat

Проблема древняя и как водится связана с попыткой Microsoft навязывать свои стандарты. Откуда берется почтовое вложение winmail.dat вы можете почитать тут: https://support.mozilla.org/ru/kb/chto-oznachaet-vlozhenie-winmaildat

сегодня мы решим эту проблему глобально, прокачаем наш postfix сервер

  1. Установим MIMEDefang.

для CentOS

yum install mimedefang

для Ubuntu

apt-get install mimedefang
  1. Настроим MIMEDefang на определенный порт TCP, наша служба будет слушать этот порт. Для этого исправим конфигурацию

для CentOS: /etc/sysconfig/mimedefang
для Ubuntu: /etc/default/mimedefang

дописываем в конце

SOCKET=inet:10185

3. Отредактируем файл /etc/mail/mimedefang-filter, можете просто вставить текст ниже

# -*- Perl -*-
#***********************************************************************
#
# mimedefang-filter
#
# Suggested minimum-protection filter for Microsoft Windows clients, plus
# SpamAssassin checks if SpamAssassin is installed.
#
# Copyright (C) 2002 Roaring Penguin Software Inc.
#
# This program may be distributed under the terms of the GNU General
# Public License, Version 2, or (at your option) any later version.
#
# $Id$
#***********************************************************************

#***********************************************************************
# Set administrator's e-mail address here.  The administrator receives
# quarantine messages and is listed as the contact for site-wide
# MIMEDefang policy.  A good example would be 'defang-admin@mydomain.com'
#***********************************************************************
$AdminAddress = 'postmaster@localhost';
$AdminName = "MIMEDefang Administrator's Full Name";

#***********************************************************************
# Set the e-mail address from which MIMEDefang quarantine warnings and
# user notifications appear to come.  A good example would be
# 'mimedefang@mydomain.com'.  Make sure to have an alias for this
# address if you want replies to it to work.
#***********************************************************************
$DaemonAddress = 'mimedefang@localhost';

#***********************************************************************
# If you set $AddWarningsInline to 1, then MIMEDefang tries *very* hard
# to add warnings directly in the message body (text or html) rather
# than adding a separate "WARNING.TXT" MIME part.  If the message
# has no text or html part, then a separate MIME part is still used.
#***********************************************************************
$AddWarningsInline = 0;

#***********************************************************************
# To enable syslogging of virus and spam activity, add the following
# to the filter:
# md_graphdefang_log_enable();
# You may optionally provide a syslogging facility by passing an
# argument such as:  md_graphdefang_log_enable('local4');  If you do this, be
# sure to setup the new syslog facility (probably in /etc/syslog.conf).
# An optional second argument causes a line of output to be produced
# for each recipient (if it is 1), or only a single summary line
# for all recipients (if it is 0.)  The default is 1.
# Comment this line out to disable logging.
#***********************************************************************
md_graphdefang_log_enable('mail', 1);

#***********************************************************************
# Uncomment this to block messages with more than 50 parts.  This will
# *NOT* work unless you're using Roaring Penguin's patched version
# of MIME tools, version MIME-tools-5.411a-RP-Patched-02 or later.
#
# WARNING: DO NOT SET THIS VARIABLE unless you're using at least
# MIME-tools-5.411a-RP-Patched-02; otherwise, your filter will fail.
#***********************************************************************
# $MaxMIMEParts = 50;

#***********************************************************************
# Set various stupid things your mail client does below.
#***********************************************************************

# Set the next one if your mail client cannot handle multiple "inline"
# parts.
$Stupidity{"NoMultipleInlines"} = 0;

# Detect and load Perl modules
detect_and_load_perl_modules();


sub filter {
    my($entity, $fname, $ext, $type) = @_;
 
    ### Convert TNEF winmail.dat format
    ### Note: You must install Convert::TNEF and File::Type from CPAN before using this script
    if (lc($type) eq "application/ms-tnef" or lc($fname) eq "winmail.dat" ) {
        use Convert::TNEF;
        use File::Type;
        use File::Temp qw(tempfile tempdir);
 
        # Create a unique temporary directory under "/tmp"
        my $tnefdir = tempdir(CLEANUP => 1, DIR => "/tmp");
        if (not $tnefdir) {
                md_graphdefang_log('tnef_fail',"Unable to create temporary directory");
                return action_accept();
        }
 
        # If we can't Convert the TNEF file for some reason, just accept the attachment and log the error
        my $tnef = Convert::TNEF->read_ent($entity,{output_dir=>"$tnefdir"});
        if (not $tnef) {
                md_graphdefang_log('tnef_fail',$Convert::TNEF::errstr);
                return action_accept();
        }
 
        my $ft = File::Type->new();
 
        # Append attachments contained in the winmail.dat file to the message.
        for ($tnef->attachments) {
             # Determine the mime-type of the file
             my $mimetype = $ft->mime_type($_->data);
 
                # File::Type doesn't detect text files well, this is a workaround
             if ($mimetype eq "application/octet-stream") {
                  #Set the mime-type to text/plain if the first 1024 characters are printable
                  $text_check = substr($_->data,0,1024);
                  $mimetype = "text/plain" unless $text_check =~ /[^[:print:]s]/;
             }
 
             my $tnef_entity = action_add_part($entity, "$mimetype", "base64", $_->data, $_->longname, "attachment");
             md_graphdefang_log('tnef_ext', "File: " . $_->longname . " Type: $mimetype");
 
             # Run each new TNEF-sourced MIME part back through the filter again, this ensures that bad filenames etc.
             # cannot sneak through by being contained in winmail.dat files
 
             filter ($tnef_entity, $_->longname, "", "$mimetype");
        }
 
        # Deletes working files
        $tnef->purge;

 
        # Remark this if you want still want to keep the original winmail.dat file
        return action_drop();
    }
 
    # Keep the attachment
    return action_accept();
}

# DO NOT delete the next line, or Perl will complain.
1;

4. Установим модели Perl Convert::TNEF и File::Type

для CentOS

yum install perl-Convert-TNEF.noarch

второй пакет надо скачать и установить

wget https://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/perl-File-Type-0.22-1.el6.rf.noarch.rpm
yum install perl-File-Type-0.22-1.el6.rf.noarch.rpm

для Ubuntu

apt-get install libconvert-tnef-perl
apt-get install libfile-type-perl
  1. Проверим синтаксис Perl
# perl -c /etc/mail/mimedefang-filter
  1. Настроим автозапуск службы MIMEDefang и запустим ее
systemctl enable mimedefang.service
service mimedefang restart
  1. Проверим, слушает ли сервис указанный выше порт
# netstat -tlpn | grep 10185
tcp        0      0 0.0.0.0:10185           0.0.0.0:*               LISTEN      7401/mimedefang
  1. Теперь добавим проверку в Postfix, для этого откроем конфиг /etc/postfic/main.cf

и допишем в конце

smtpd_milters = inet:localhost:10185
milter_default_action = accept

готово! Любое письмо, которое будет иметь во вложении winmail.dat, будет обработано нашей службой и вложение будет расшифровано!

кодируем видео с использованием GPU

Для кодирования видео я использую приложение HandBrake. При сжатии ролика длиной 1 час 35 минут в h.265, с настройками по умолчанию, у меня тратилось примерно 35 минут с процессором i5-8300H.

я конечно же погуглил и нашел, что можно использовать gpu (https://handbrake.fr/docs/en/latest/technical/video-nvenc.html)

переходим в настройки программы, активируем поддержку gpu

в настройках кодека выбираем h.265 (Nvidia NVEnc)

и смотрим результат, тот же ролик кодируется не 35 минут, а 4 минуты, ускорение практически в 10 раз

как открыть почтовый архив с gmail

Пришлось перевозить почтовые ящики и все сопутствующее с gmail на частный сервер, процесс расписывать не буду, т. к. довольно рутинный с кучей скриптов и т. д. чтобы все разложить по папкам. Расскажу как открыть этот архив сообщений.
Все сообщения склеена в один весомый файл, по сути все eml сложены туда.

Нам понадобится Thunderbird и расширение ImportExportTools NG.

Устанавливаем почтовую программу, затем ставим расширение (чтобы попасть в меню программы нажмите Alt).

создаем локальную папку

правой клавишей на ней кликаем и выбираем импорт mbox

некоторое время письма подгружаются и дальше с ними можно работать как с обычными, единственное все письма будут в одной папке, нет разделения на входящие/исходящие

но! можно использовать как экстренный вариант

включаем Entware в Padavan

  1. для начала подключаем флешку, да есть вариант использовать внутреннюю память устройства, но не забывайте, что количество циклов перезаписи ограничено, не стоит рисковать памятью устройства, пожертвуем флешкой
  1. флешка автоматически подмаунтится в систему, отключаем её, это нужно для возможности форматирования
  1. подключаемся по ssh и выполняем команду
/home/root # fdisk -l
  1. находим имя нашего носителя, в моем случае это
Disk /dev/sda: 4051 MB, 4051697664 bytes

дальше мы будем форматировать раздел, обязательно проверьте объём, не хочется запороть роутер

  1. форматируем в ext2 (бытует мнение, что ext2 лучше)
mke2fs /dev/sda1
  1. дальше придется переткнуть флешку, чтобы подключился раздел
    в терминале создаем папку opt в корне флешки
mkdir /media/AiDisk_a1/opt

AiDisk_a1 — мое имя носителя, когда будете в консоли набирать, после media нажмите tab и система дополнит имя

  1. дальше извлеките носитель (см. пункт 1) или из командной строки
ejusb
  1. включите загрузку Entware
  1. опять переткните флешку и наблюдайте в логах, как у вас загрузится Entware
May  4 14:33:00 opt-mount.sh: started [/dev/sda1 /media/AiDisk_a1]
May  4 14:33:06 opt-start.sh: call /opt/etc/init.d
May  4 14:33:06 Entware: Installing entware opkg....
May  4 14:33:06 Entware: Creating folders...
May  4 14:33:06 Entware: Warning: Folder /opt/bin exists! If something goes wrong please clean /opt folder and try again.
May  4 14:33:06 Entware: Warning: Folder /opt/etc/init.d exists! If something goes wrong please clean /opt folder and try again.
May  4 14:33:06 Entware: Warning: Folder /opt/sbin exists! If something goes wrong please clean /opt folder and try again.
May  4 14:33:06 Entware: Warning: Folder /opt/var/log exists! If something goes wrong please clean /opt folder and try again.
May  4 14:33:06 Entware: Downloading /opt/bin/opkg...
May  4 14:33:06 Entware: SUCCESS!
May  4 14:33:06 Entware: Downloading /opt/etc/opkg.conf...
May  4 14:33:06 Entware: SUCCESS!
May  4 14:33:06 Entware: Downloading /opt/etc/profile...
May  4 14:33:06 Entware: SUCCESS!
May  4 14:33:06 Entware: Downloading /opt/etc/init.d/rc.func...
May  4 14:33:07 Entware: SUCCESS!
May  4 14:33:07 Entware: Downloading /opt/etc/init.d/rc.unslung...
May  4 14:33:07 Entware: SUCCESS!
May  4 14:33:07 Entware: Updating opkg packages list...
May  4 14:33:07 Entware: SUCCESS!
May  4 14:33:07 Entware: Installing ldconfig findutils...
May  4 14:33:09 Entware: SUCCESS!
May  4 14:33:09 Entware: Congratulations!
May  4 14:33:09 Entware: If there are no errors above then Entware successfully initialized.
May  4 14:33:09 Entware: Found a Bug? Please report at https://github.com/Entware-ng/Entware-ng/issues
  1. я вас поздравляю, все прошло успешно теперь в консоли наберите для обновления списков пакетов
opkg update
  1. а дальше ставьте что нужно, например Midnight Commander
opkg install mc
 Нет комментариев    1224   9 мес   entware   ext2   opkg   padavan

Mail Server и Mail Station

Из бесплатных решений у synology есть два пакета, почтовый сервер на базе Postfix и пользовательский web клиент.

давайте рассмотрим функционал сервера

  • есть поддержка как локальных пользователей, так и доменных (есть возможность использовать как корпоративное решение)
  • использование основного домена и элиасов, т. е. пользователь автоматически получает почту с адресов user@domain.ru, user@aliase.ru и т. д.
  • поддержка протоколов как IMAP, так и POP3
  • обратите внимание на использование ssl, этот важный бонус вы оцените позже

безопасность прокачена просто на высоте, есть возможность использовать все современные технологии

  • защита от СПАМа с использованием модуля SpamAssassin
  • поддержка блэклистов DNSBL
  • есть возможность включить антивирус на базе ClamAV, я не включаю, т. к. значительно тратится память, а эффективность под вопросом, чаще происходят ложные срабатывания
  • можно создавать чёрные и белые списки, глобально для всех пользователей сервера, кстати очень гибкий редактор, см. ниже
  • можно установить ежедневные квоты на отправку сообщений, можно общее значение, можно индивидуально пользователям, удобно если чей-то ящик взломают — это не перерастет в лавинную отправку спама
  • фильтр вложений, можно задать запрещенные расширения файлов для пересылки (по-умолчанию, присутствует список самых распространенных исполняемых файлов)

подробнее настройка чёрного и белого списка, обратите внимание на возможности делать исключения

реализована защита от вредоносного содержимого письма, так же все настраивается

и самое, на мой взгляд, важное, это настройки SPF, DKIM и защита DMARK, сейчас современный почтовый сервер не может существовать без всего этого

если вы не знаете, что это такое — не беда, открываете Справку и читаете как правильно настроить DNS

да, Справка в Synology очень крутая!

есть возможность использовать псевдонимы не только внутренних пользователей, а можно настроить пересылку на внешние ящики, это круто

автоматическая скрытая копия, это что-то из области слежения

таблица с текущей очередью сообщений, с возможностью удаления, повторной отправки и очистки сообщений

журнал, полезная вещь, можно сразу увидеть было ли доставлено сообщение и когда, а также ошибки отправки, самое же важное, на мой взгляд, это возможность выгрузить лог postfix, сам пользовался и не раз

довольно подробный в текстовом формате отчет об отправленных, полученных, заблокированных сообщений, можно настроить получение на любой ящик

настройка пересылки, автоответа и т. д. с поддержкой глобальных переменных

Подведем итог, это бесплатная версия сервера (позже расскажу про платную), на мой взгляд реализован функционал современного почтового сервера на 95%. Есть все самые основные вещи, и работает сразу из коробки, не нужны «танцы с бубном». Очень удобный интерфейс управления. Рекомендую как частный почтовый сервер, до корпоративного не хватает адресной книги с возможностью делиться контактами и расшаривания почтовых папок.

PS обещал рассказать про ssl, когда вы настроите домен, пропишите в DNS адрес сервера, то с помощью synology сможете выпустить заверенные сертификаты Let’s Encrypt для IMAP, SMTP и POP3, в будущем synology будет автоматически перевыпускать эти сертификаты, т. е. настроили и забыли

Mail Station — это почтовый web-клиент RoundCube (https://roundcube.net). очень урезанный, без возможности отмечать сообщения как СПАМ, но в целом годный

т. к. RoundCube можно неплохо прокачать за счет огромного количества плагинов, то все в ваших руках

Ранее Ctrl + ↓