dadv: (chuck)
[personal profile] dadv

Как включить поддержку шифрования почты в протоколе SMTP для FreeBSD и штатного sendmail, в ужасном стиле безграмотных "хаутушек". Контекст - полное отсутствие доверия к публичным центрам сертификации, продающим сертификаты за деньги и желание закрыть SMTP-трафик от тупых СОРМ2-снифферов без попытки защититься от man-in-the-middle.

  • Устанавливаем cyrus-sasl2 из портов или пакетов.
  • В /etc/make.conf добавляем строчки:

    SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
    SENDMAIL_LDFLAGS=-L/usr/local/lib
    SENDMAIL_LDADD=-lsasl2

    Пересобираем штатный sendmail с поддержкой SASL:

    cd /usr/src/lib/libsmutil
    make cleandir && make obj && make
    cd /usr/src/lib/libsm
    make cleandir && make obj && make
    cd /usr/src/usr.sbin/sendmail
    make cleandir && make obj && make && make install

    Эта часть позаимствована из Handbook.

  • Создаём сертификаты.

    Берем вот этот скрипт: make-server-key, кладем его в /etc/mail. Туда же кладем openssl.cnf.diff.

    Редактируем начало скрипта, подставляя в servername имя почтового сервера (для содержимого сертификата), в shortname короткое имя сервера для именования файла сертификата, в contact адрес электронной почты (для соответствующего поля сертификата), в days время действия сертификата, в pass пароль для шифрования приватного ключа создаваемого скриптом самоподписанного Certificate Authority (CA), в answers - ответы на стандартные вопросы openssl, которые он задаёт при генерации сертификатов. А можно ничего не редактировать, оставить дефолты (нигилизм mode on).

    Запускаем скрипт, он полностью автоматически создаёт в /etc/mail подкаталоги CA и certs, в которых генерирует самодельный Certificate Authority, а так же выданный им сертификат для sendmail. По умолчанию срок действия 10 лет.

    Берем sendmail.mc.add, меняем в нём myserver на shortname, прописанный в make-server-key (или, опять же, ничего не меняем). Дописываем строчки из него в свой .mc-файл, пересобираем и переустанавливаем конфиг, рестартуем sendmail.

Всё. Теперь те сервера, которые тоже поддерживают STARTTLS и которым неважно, что сертификат самодельный, станут шифровать SMTP-трафик при отправке нам почты, или при приёме от нас. В /var/log/maillog для таких шифрованных сессий будут писаться слова типа STARTTLS=server, version=TLSv1/SSLv3, cipher=DHE-RSA-AES256-SHA, bits=256/256

Date: 2014-01-20 16:48 (UTC)
From: [identity profile] dmarck.livejournal.com
Женя!

Кладите, пожалуйста, такие штуки ещё и в [livejournal.com profile] ru_root (можно репостом) ;)

Date: 2014-01-20 18:09 (UTC)
From: [identity profile] dadv.livejournal.com
Нет, такое я никогда не положу в публичное сообщество из-за стыда - я большую часть этого кода тупо слямзил, не разбираясь в предмете (SSL). Но оно работает.

Date: 2014-01-20 23:02 (UTC)
From: [identity profile] dmarck.livejournal.com
oh no/

вот в том числе и поэтому

Date: 2014-01-20 18:11 (UTC)
From: [identity profile] dadv.livejournal.com
Кстати говоря, в десятке, которая только что зарелизилась, есть автоматическая поддержка генерации сертификата для STARTSSL:

2.3.1. /etc/rc.d Scripts

rc.d/sendmail now generates and uses an SSL certificate by default when sendmail_enable="YES". This will allow remote MTA to use STARTTLS to encrypt incoming email. The certification is signed with a key that is thrown away and is not a substitute for generating your own properly if you need to use STARTTLS authentication. Options to control the certificate generation is documented in rc.d/sendmail. [r256773]

Date: 2014-02-01 21:39 (UTC)
From: [identity profile] click0.livejournal.com
Евгений!
Есть уже готовый порт mail/sendmail-sasl + подложить готовые сертификаты.

Date: 2014-02-01 22:05 (UTC)
From: [identity profile] dadv.livejournal.com
Да. Суть в том, чтобы и это тоже автоматизировать до упора, максимально снизив "порог" сложности настройки.

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios