Sign inSign up

jetstylehub/postfix-tls

By jetstylehub

•Updated over 7 years ago

Alpine based postfix image with ssl/tls included

Image
0

8.5K

jetstylehub/postfix-tls repository overview

⁠Postfix docker container

Автоматически настраивает SSL/TLS с генерируя самоподписанный сертификат при запуске. Есть возможность использовать свои сертификаты.

⁠Конфигурирование

Переменные окружения используемые контейнером:

POSTFIX_EMAIL_HOST (required): Основной почтовый домен для postfix. Используется в качестве CN для самоподписанного сертификата.

POSTFIX_ADDITIONAL_DOMAINS: дополнительные почтовые домены для postfix. Используются в качестве Alt Names для самоподписанного сертификата.

Контейнер при запуске проверяет наличие сертифкатов/ключей в /etc/postfix/cert. Если не находит их - генерирует самоподписанные сертификаты и приватные ключи и кладет их в этот каталог. Если каталог уже содержит необходимые файлы, то генерация новых не происходит. Posfix настраивается на использование SSL/TLS с этими сертификатами. Файлы, наличие которых проверяется в /etc/postfix/cert:

  • rootCA.key: server privete key
  • rootCA.pem: server public certificate
  • {POSTFIX_EMAIL_HOST}.crt: Main mail domain certificate
  • {POSTFIX_EMAIL_HOST}.key: Main mail domain private key

Таким образом к каталогу /etc/postfix/cert контейнера можно подключить volume содержащий, например, купленный сертификат на домен или полученный с помощью letsencrypt и он будет использоваться для postfix. В таком случае самоподписанный сертификат при запуске контейнера создан не будет. Имена файлов должны быть именно такие как указаны выше. Base name файлов сертификата и ключа домена обязательно должны совпадать с переменной POSTFIX_EMAIL_HOST.

Пример: если вы используете этот контейнер и у вас есть ключ и сертификат для домена mydomain.me, то в монтируемом volume должны находиться следущие файлы:

rootCA.key
rootCA.pem
mydomain.me.crt
mydomain.me.key

Если меняете $POSTFIX_CERT_DIR в entrypoint то поменяйте его и в gencert.sh.

⁠TODO:

  • Настроить OpenDKIM так же с генерацией самоподписанных сертификатов для доменов и мочь подключать volume с кастомными
  • Начиная с Postfix 3.4 попробовать избавиться от supervisord и syslog. Для логирования в stdout использовать postlogd: http://www.postfix.org/MAILLOG_README.html⁠

⁠OpenDKIM

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

  • DKIM_DOMAINS (required): строка с доменами через пробел, письма от которых надо подписывать DKIM'ом. Должна совпадать или содержать в себе домены из числа POSTFIX_EMAIL_HOST и POSTFIX_ADDITIONAL_DOMAINS. OpenDKIM будет запущен, для него создадутся ключи на каждый домен. В логах контейнера один раз при генерации ключей будет написано какие TXT записи нужно добавить для каждого домена. Их нужно незамедлительно прописать у держателя зоны, а то письма будут подписываться, а проверка на почтовиках будет не удаваться. Так же нужные TXT-записи можно посмотреть в контейнере: /etc/opendkim/keys/{domain}/{DKIM_SELECTOR}.txt на случай если забыли/потеряли. Однажды созданные (или помещенные в volume) ключи перетираться при перезапуске контейнера не будут. Есть возможность поместить свои ключи, подмонтировав volume с соотв. иерархией каталогов к /etc/opendkim/keys/ контейнера.

  • DKIM_SELECTOR: DKIM selector. Участвует в прописании TXT записи у домена. По умолчанию mail.

  • DKIM_KEY_LEN: длина ключа. По умолчанию 2048.

⁠Статус

Для генерации ключей нужен opendkim-genkey который доступен только в alpine:edge. Неизвестно когда он будет в :latest. А postfix и opendkim после сборки из edge не работают (проблема прав на файлах). Я пофиксил права в entrypoint и почта отправляется и подписывается (верификацию входящей почты не проверял), но тем не менее тянуть контейнер собранный из edge в продакшн не правильно.

⁠Данные внутри контейнеров

Сертификаты Postfix и ключи OpenDKIM в случае хранения на ФС контейнера будут удалены и сгенерированы заново в случае docker-compose down\up, т.к. удаляются сами контейнеры. В случае docker-compose stop\up контейнеры не удаляются, все их данные остаются при перезапусках. При использовании volume данные в них остаются даже после docker-compose down\up. Это особенно важно для OpenDKIM т.к. при перегенерации ключей придется обновлять записи в DNS. Поэтому желательно использовать volume для ключей/сертификатов Postfix и OpenDKIM даже для автоматически генерируемых данных. Например так для сервиса postfix в docker-compose.yml:

services:
  postfix
    volumes:
      - opendkim:/etc/opendkim/keys
      - postfix:/etc/postfix/cert


volumes:
  postfix:
  opendkim:

Tag summary

Content type

Image

Digest

Size

18.1 MB

Last updated

over 7 years ago

docker pull jetstylehub/postfix-tls