Настройка локального SMTP-релея с Docker

Настройка локального SMTP-релея с Docker
Photo by Mariia Shalabaieva / Unsplash

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

Что такое SMTP-релей

SMTP-релей — это промежуточный почтовый сервер, который принимает письма от локальных приложений и пересылает их через внешний SMTP-сервер. Это удобно, когда нужно централизованно управлять отправкой писем или когда приложения не поддерживают аутентификацию SMTP.

Преимущества использования SMTP-релея

  • Централизованная настройка: все приложения отправляют письма через один релей
  • Упрощенная конфигурация: приложениям не нужно знать данные внешнего SMTP-сервера
  • Гибкость: легко сменить провайдера электронной почты
  • Безопасность: учетные данные хранятся в одном месте

Настройка с помощью Docker

Для настройки SMTP-релея будем использовать Docker-образ juanluisbaptiste/postfix. Этот образ содержит настроенный Postfix, который может работать как релей.

Конфигурация Docker Compose

  smtp:
    <<: *defaults
    image: juanluisbaptiste/postfix
    container_name: smtp
    environment:
      - SMTP_SERVER=smtp.mail.me.com
      - [email protected]
      - SMTP_PASSWORD=xxxxxxxxxxxxxxx
      - SERVER_HOSTNAME=home.example.com

Важно: порт 25 НЕ прокидывается наружу! Релей работает только внутри Docker-сети и доступен другим контейнерам по имени smtp.

Описание переменных окружения

  • SMTP_SERVER: адрес внешнего SMTP-сервера (в примере используется iCloud)
  • SMTP_USERNAME: имя пользователя для аутентификации
  • SMTP_PASSWORD: пароль или App-специфический пароль
  • SERVER_HOSTNAME: имя хоста вашего сервера

Настройка для различных провайдеров

Gmail

environment:
  - SMTP_SERVER=smtp.gmail.com
  - [email protected]
  - SMTP_PASSWORD=your-app-password
  - SERVER_HOSTNAME=yourdomain.com

Yandex

environment:
  - SMTP_SERVER=smtp.yandex.ru
  - [email protected]
  - SMTP_PASSWORD=your-password
  - SERVER_HOSTNAME=yourdomain.com

Mail.ru

environment:
  - SMTP_SERVER=smtp.mail.ru
  - [email protected]
  - SMTP_PASSWORD=your-password
  - SERVER_HOSTNAME=yourdomain.com

Запуск и проверка

  1. Добавьте в ваш файл docker-compose.yml конфигурацию

Запустите контейнер:

docker-compose up -d

Просмотрите логи:

docker-compose logs smtp

Проверьте статус контейнера:

docker-compose ps

Тестирование SMTP-релея

Для проверки работы релея из другого контейнера можно использовать:

# Запуск временного контейнера для тестирования
docker run --rm -it --network your-network-name alpine:latest sh

# Установка telnet внутри контейнера
apk add busybox-extras

# Подключение к релею
telnet smtp 25

# Отправка тестового письма
HELO localhost
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: Test message
From: [email protected]
To: [email protected]

This is a test message.
.
QUIT

Интеграция с другими контейнерами

Основное преимущество такой настройки — использование SMTP-релея другими контейнерами в рамках одной Docker-сети.

Пример с веб-приложением

  web-app:
    <<: *defaults
    image: nginx:alpine
    container_name: web-app
    environment:
      - SMTP_HOST=smtp
      - SMTP_PORT=25
    depends_on:
      - smtp

  smtp:
    <<: *defaults
    image: juanluisbaptiste/postfix
    container_name: smtp
    environment:
      - SMTP_SERVER=smtp.mail.me.com
      - [email protected]
      - SMTP_PASSWORD=xxxxxxxxxxxxxxx
      - SERVER_HOSTNAME=dntsk.dev
    

Пример с Laravel приложением

  laravel-app:
    <<: *defaults
    image: php:8.2-fpm
    container_name: laravel-app
    environment:
      - MAIL_MAILER=smtp
      - MAIL_HOST=smtp
      - MAIL_PORT=25
      - MAIL_ENCRYPTION=null
    depends_on:
      - smtp

Пример с WordPress

  wordpress:
    <<: *defaults
    image: wordpress:latest
    container_name: wordpress
    environment:
      - WORDPRESS_CONFIG_EXTRA=
        define('SMTP_HOST', 'smtp');
        define('SMTP_PORT', 25);
    depends_on:
      - smtp

В этих примерах приложения обращаются к SMTP-релею по имени контейнера smtp и порту 25 внутри Docker-сети.

Безопасность

Такая конфигурация обеспечивает максимальную безопасность:

  • Изоляция: SMTP-релей доступен только контейнерам внутри Docker-сети
  • Отсутствие внешних портов: порт 25 не прокидывается на хост-систему
  • Централизованная аутентификация: учетные данные хранятся только в релее

Заключение

Настройка локального SMTP-релея с Docker — это безопасный и эффективный способ централизованно управлять отправкой электронных писем внутри контейнерной инфраструктуры. Ключевые преимущества такого подхода:

  • Безопасность: релей изолирован внутри Docker-сети
  • Простота интеграции: другие контейнеры подключаются по имени smtp
  • Централизованное управление: все настройки внешнего SMTP в одном месте
  • Гибкость: легко сменить провайдера без изменения конфигурации приложений

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

Read more

Загрузка и использование MMDB в Clickhouse

Загрузка и использование MMDB в Clickhouse

Прошлый способ использования GeoIP данных показал, что он не очень удобен. Поэтому я зарылся в проблему и нашел более простой и действенный способ, как загрузить данные из базы MaxMind (но лучше использовать бесплатные аналоги типа IPInfo) в Clickhouse. Для этого мы берем отсюда релиз аплоадера и запускаем его вот так:

Охота на цифрового шпиона: как астроном стал первым кибердетективом

Охота на цифрового шпиона: как астроном стал первым кибердетективом

История о том, как одна бухгалтерская ошибка привела к раскрытию международной шпионской сети и заложила основы современной кибербезопасности В августе 1986 года астроном Клиффорд Столл работал системным администратором в Лаборатории Лоуренса Беркли в Калифорнии. Его обычный день был нарушен странным сообщением: компьютерная система показывала ошибку в 75 центов. Кто-то создал

Когда технологии слежки обращаются против государства: хакер наркокартеля против ФБР

Когда технологии слежки обращаются против государства: хакер наркокартеля против ФБР

В эпоху повсеместного наблюдения границы между охотником и жертвой становятся размытыми. Недавний отчет Министерства юстиции США раскрыл тревожный случай, когда сложные технологии слежки были обращены против самих правоохранительных органов с летальными последствиями. Цифровая охота на информаторов Согласно 47-страничному отчету Генерального инспектора Министерства юстиции, хакер, связанный с преступной группировкой Хоакина "