{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Копытов Иван: заметки с тегом postfix",
    "_rss_description": "Блог ленивого сисадмина",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/www.kini24.ru\/tags\/postfix\/",
    "feed_url": "https:\/\/www.kini24.ru\/tags\/postfix\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Копытов Иван",
            "url": "https:\/\/www.kini24.ru\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "277",
            "url": "https:\/\/www.kini24.ru\/all\/zamena-bolshih-vlozheniy-v-email-na-ssylku\/",
            "title": "Замена больших вложений в email на ссылку",
            "content_html": "<p>Устанавливаем MIMEDefang:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">apt update\napt install mimedefang -y<\/code><\/pre><p>Правим файл<i> \/etc\/default\/mimedefang<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"ini\">SOCKET=\/var\/spool\/postfix\/mimedefang\/mimedefang.sock\nMD_ALLOW_GROUP_ACCESS=yes<\/code><\/pre><p>Добавляем пользователя <i>postfix<\/i> в группу <i>defang<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">usermod -aG defang postfix<\/code><\/pre><p>Так как postfix работает в chroot-окружении, создаем папку для сокета mimedefang:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">mkdir \/var\/spool\/postfix\/mimedefang<\/code><\/pre><p>Правим<i> \/etc\/postfix\/main.cf<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"ini\">milter_default_action = accept\nmilter_protocol = 6\nsmtpd_milters = unix:mimedefang\/mimedefang.sock\nnon_smtpd_milters = unix:mimedefang\/mimedefang.sock<\/code><\/pre><p>Теперь нужно добавить следующее в конец функции <i>filter<\/i> в файле<i> \/etc\/mail\/mimedefang-filter<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"perl\"># Если файл больше указанного размера, он удаляется из письма,\n    # его копия остается на диске, а вместо него предоставляется ссылка, по которой его можно скачать.\n\n    # Максимальный размер вложения (например, 10MB)\n    my $MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024;\n    # Директория для сохранения вложений\n    my $ATTACHMENTS_DIR = &quot;\/var\/mail\/attachments&quot;;\n    # URL, по которому будут доступны вложения\n    my $ATTACHMENTS_URL = &quot;https:\/\/mail.kini24.ru\/attachments&quot;;\n\n    # Создаем директорию, если её нет\n    mkdir $ATTACHMENTS_DIR unless -d $ATTACHMENTS_DIR;\n\n    $size = (stat($entity-&gt;bodyhandle-&gt;path))[7];\n    if ($size &gt; $MAX_ATTACHMENT_SIZE) {\n        md_graphdefang_log(&quot;The attached file $fname is too big, replaced with a link&quot;);\n        return action_replace_with_url($entity,\n            &quot;$ATTACHMENTS_DIR&quot;,\n            &quot;$ATTACHMENTS_URL&quot;,\n            &quot;Размер вложения превысил ограничения сервера, поэтому оно было удалено.\\n&quot; .\n            &quot;Вы можете скачать его по следующей ссылке:\\n\\n&quot; .\n            &quot;_URL_&quot;);\n    }<\/code><\/pre><p>В результате аыполнения функции <i>action_replace_with_url<\/i> в конец письма будет вставлен текст и ссылка для скачивания вложения, а сам файл бует сохранен в папку<i> \/var\/mail\/attachments<\/i>. Надо, кстати, покопаться и найти как вставлять ссылку в текст самого письма. Но пока что оставим как есть.<\/p>\n<p>У меня почтовый и веб-сервер находятся на разных виртуальных машинах, поэтому папку<i> \/var\/mail\/attachments<\/i> надо сделать общей. На почтовом сервере устанавливаем пакет сервера NFS:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">apt install nfs-kernel-server -y<\/code><\/pre><p>Открываем файл<i> \/etc\/exports<\/i> и вписываем в конец файла что-то вроде такого:<\/p>\n<pre class=\"e2-text-code\"><code class=\"plaintext\">\/var\/mail\/attachments 192.168.1.0\/24(rw,sync,no_subtree_check)<\/code><\/pre><p>И выполняем в консоли команду:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">exportfs -a<\/code><\/pre><p>Теперь переходим на веб-сервер и выполняем следующие команды:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">apt update\napt install nfs-common -y<\/code><\/pre><p>Открываем файл<i> \/etc\/fstab<\/i> и дописываем в конец:<\/p>\n<pre class=\"e2-text-code\"><code class=\"plaintext\">192.168.1.12:\/var\/mail\/attachments \/var\/www\/mail\/attachments nfs4 defaults 0 0<\/code><\/pre><p>где 192.168.1.12 — IP-адрес почтового сервера.<br \/>\nДальше выполняем команды:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">mkdir -p \/var\/www\/mail\/attachments\nchown -R www-data:www-data \/var\/www\/mail\/attachments\nmount -a<\/code><\/pre><p>И проверяем что папка смонтировалась:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">ls -l \/var\/www\/mail\/attachments<\/code><\/pre><p>После этого все вложения, которые были удалены из писем, должны стать доступны для скачивания.<\/p>\n",
            "date_published": "2025-03-31T13:45:17+07:00",
            "date_modified": "2025-03-31T13:45:06+07:00",
            "tags": [
                "debian",
                "linux",
                "mimedefang",
                "postfix",
                "вложение",
                "замена",
                "почта",
                "сервер",
                "ссылка"
            ],
            "_date_published_rfc2822": "Mon, 31 Mar 2025 13:45:17 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "277",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "237",
            "url": "https:\/\/www.kini24.ru\/all\/nemnogo-statistiki\/",
            "title": "Немного статистики",
            "content_html": "<p>Я был «спамером» целых три дня 😱<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.kini24.ru\/pictures\/open-relay.jpg\" width=\"252\" height=\"592\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2019-05-24T14:23:05+07:00",
            "date_modified": "2019-07-01T22:41:55+07:00",
            "tags": [
                "postfix",
                "досада",
                "открытый",
                "релей",
                "сервер",
                "спам"
            ],
            "image": "https:\/\/www.kini24.ru\/pictures\/open-relay.jpg",
            "_date_published_rfc2822": "Fri, 24 May 2019 14:23:05 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "237",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/www.kini24.ru\/pictures\/open-relay.jpg"
                ]
            }
        },
        {
            "id": "235",
            "url": "https:\/\/www.kini24.ru\/all\/otkryty-pochtovy-reley\/",
            "title": "Открытый почтовый релей",
            "content_html": "<p>Внезапно обнаружил, что мой почтовый сервер стал полностью открытым. Если честно, то даже не помню когда вносил какие-то сколь значимые изменения в конфигурацию postfix. С какого перепуга произошло это событие — для меня пока что загадка. Единственное, что косвенно указывало на это — возросшая нагрузка на сервер. Но я «грешил» на другое. Команда mailq сегодня выдала очередь из более чем 100 тысяч сообщений на отправку. Пришлось убивать всю очередь, не искать же нормальные письма в такой куче. Изменил несколько параметров почтовика, вроде бы все более-менее пришло в норму, даже сервер стал отвечать побыстрей. Но тесты все равно выдают, что у меня открытый релей, поэтому завтра, если будет свободное время, придется сбрасывать конфигурацию postfix и dovecot на «заводскую» и настраивать всё заново. Благо, что есть рабочий корпоративный сервер и часть настроек можно перенести оттуда. Впрочем, настройка с нуля поможет освежить мою память в этом плане и, возможно, пересмотреть некоторые настройки безопасности.<\/p>\n",
            "date_published": "2019-05-12T23:31:24+07:00",
            "date_modified": "2019-05-12T23:31:19+07:00",
            "tags": [
                "postfix",
                "настройка",
                "неожиданность",
                "открытый",
                "почта",
                "проблема",
                "релей",
                "сервер"
            ],
            "_date_published_rfc2822": "Sun, 12 May 2019 23:31:24 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "235",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "91",
            "url": "https:\/\/www.kini24.ru\/all\/pochta-i-virusy-v-arhivah\/",
            "title": "Почта и вирусы в архивах",
            "content_html": "<p>Часто вирусные файлы приходят в виде тех же vbs скриптов, упакованных в архив. Я не буду говорить про другие форматы, их не так уж и много, но каждый из них может доставить кучу неприятностей. Особенно если это будет шифровальщик.<br \/>\nТак уж сложилось, что несмотря на все ухищрения, используя стандартные методы, нельзя заставить ClamAV проверять архивы на наличие файлов определенного типа. Он может только попытаться определить заражен ли тот или иной файл в архиве, но со скриптами у него явные проблемы. Скрипт по сути представляет собой обычный текстовый файл, поэтому найти в нем код вируса достаточно проблематично.<br \/>\nЧасть этого вопроса удалось решить, заставив postfix отбрасывать письма, в которые вложены файлы из «черного» списка. Но он не может работать с архивами, увы. Это был первый, так сказать этап, который успешно показал себя.<br \/>\nВторым этапом стал поиск файлов в архивах при помощи ClamAV. Оказывается, можно все-таки заставить его проверять архивы на наличие нужных файлов. Неслучайно копаясь в интернете, наткнулся на <a href=\"http:\/\/www.edigarev.net\/2016\/05\/clamsmtp.html\">эту вот замечательную статью<\/a>. Использовав информацию из нее, подкинул созданный файл в папку с антивирусными базами ClamAV и перегрузил его. Никаких исправлений в файлы конфигураций вносить не пришлось, он сразу его подхватил. Далее я отправил письмо, полученное утром, и содержащее vbs-скрипт в архиве .7z через этот сервер. Хотел было поймать процесс обработки письма, но не успел. Впрочем, через минуту мне на почту упало сообщение от антивируса, что письмо обработано, найден архив с «вредным» файлом и что письмо было заблокировано. Это было все, чего я добивался.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Virus name: rules_block_7z_vbs.UNOFFICIAL\nSender: *****@*****.ru\nRecipient(s): *****@*****.ru\n\nQuarantined to: \/var\/tmp\/virus.yHPWqV<\/code><\/pre><p>Сам файл с нужными определениями состоит из строк вида<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rules_block_exe:CL_TYPE_MAIL:*:\\.[Ee][Xx][Ee]$:*:*:*:*:*:*<\/code><\/pre><p>Здесь самыми интересными для нас являются три поля: имя правила, тип правила и расширение файла. Имя и тип задаются первыми двумя параметрами, разделенными двоеточием. Затем идет имя файла с расширением в виде regexp-строки. Оставшиеся параметры оставляем без изменений. Расширение файла указывается в обоих регистрах.<\/p>\n",
            "date_published": "2017-09-19T14:18:25+07:00",
            "date_modified": "2017-09-20T07:20:20+07:00",
            "tags": [
                "clamav",
                "postfix",
                "архив",
                "база",
                "вирус",
                "вложение",
                "правило",
                "проверка",
                "сервер",
                "файл"
            ],
            "_date_published_rfc2822": "Tue, 19 Sep 2017 14:18:25 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "91",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "42",
            "url": "https:\/\/www.kini24.ru\/all\/borba-so-spamom-pri-pomoschi-asn\/",
            "title": "Борьба со спамом при помощи ASN",
            "content_html": "<h2>Блокируем целую подсеть спамеров одним махом<\/h2>\n<p>Бывает, что нужно отсечь почту, приходящую от целой сети. Отправители все время меняют свои адреса: отправляют определенное количество писем, меняют адрес, снова меняют адрес, снова отправляют... В таком случае помогает запрет на прием писем с определенных IP-адресов. А что делать, если таких адресов скапливается очень много? В итоге мы получаем целую «простыню» в настройках почтового сервера. Лично меня это не устраивает. Изучив часть из них, обратил внимание, что все они принадлежат одной сети. Посмотрев на список IP-адресов, закрепленных за этой сетью, понял, что список будет очень большим. Тогда же я заметил, что в регистрационных данных присутствует такая вещь, как <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B2%D1%82%D0%BE%D0%BD%D0%BE%D0%BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_(%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82)\">ASN<\/a>. Если очень кратко, то это уникальный идентификатор, присвоенный этой сети. Появилась мысль как-то использовать этот идентификатор в борьбе со спамом. Изучив список плагинов Spamassassin’а, увидел, что помимо прочих он также может определять не только вышеупомянутый ASN, но и подсеть отправителя.<br \/>\nДалее было дело техники. В настройках Spamassassin’а включаем загрузку этого модуля в <i>v320.pre<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">loadplugin Mail::SpamAssassin::Plugin::ASN<\/code><\/pre><p>Дальше нам нужно, чтобы он вставлял нужные заголовки в получаемые письма. Для этого в <i>local.cf<\/i> добавляем следующую строку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">add_header all ASN _ASN_ _ASNCIDR_<\/code><\/pre><p>Перезапускаем Spamassassin и... ничего не получилось. Заголовок вставляется, но данных в нем нет<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">X-Spam-ASN:<\/code><\/pre><p>Я потратил почти полдня, пока нашел причину почему это не работает. Оказалось, что в параметрах запуска Spamassassin был указан параметр -L, который запрещает работу с DNS. После удаления этого параметра, заголовок приобрел более «осмысленный» вид:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">X-Spam-ASN: AS25549 95.170.128.0\/22<\/code><\/pre><p>Вот теперь уже можно отдавать письмо на дополнительную проверку postfix. В файл <i>header_checks<\/i> добавляем строку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/^X-Spam-ASN.*AS25549 .*\/ DISCARD This is spamer<\/code><\/pre><p>и перезапускаем postfix. Всё, больше писем из этой сети вы не получите.<br \/>\nНо, к сожалению, не все сети имеют ASN. Тогда бороться с ними остается только по IP-адресам.<\/p>\n",
            "date_published": "2017-01-19T10:18:44+07:00",
            "date_modified": "2017-01-19T10:21:16+07:00",
            "tags": [
                "asn",
                "bgp",
                "postfix",
                "spamassassin",
                "x-spam-asn",
                "борьба",
                "спам"
            ],
            "_date_published_rfc2822": "Thu, 19 Jan 2017 10:18:44 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "42",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}