Раз я медицинский работник меня вечно сопровождают персональные данные пациентов по работе, и все мы люди уже привыкли в своей работе использовать Мессенджеры типа WhatsApp, Telegram и т.п.
Многие из нас задумывались как обезопасить себя, а точнее персональные данные пациентов, при этом не нарушать законодательство. Понятно что чаще всего проверяющим плевать на персональные данные, но когда дело дойдёт до конкретного судебного случая, тогда и начнут мучать по каждому поводу, так что лучше всего этот повод не давать.
И так сегодня мы настроем свой чат-мессенджер на базе Delta Chat , программа с открытым исходным кодом. Прелесть её в том что она имеет вид как мессенджер, а по факту это почтовый клиент т.е. все способы шифрования для почты можно использовать в неё, просто надо правильно настроить почтовый сервер и тогда всё будет храниться в вашей защищённой сети или где то на выделенном сервере, и даже если кто то этот сервер похитит/изымет то все данные на нём будут зашифрованы и бесполезны.
Для начала нам нужен сервер, желательно примерно такой конфигурации:
- 1 процессор
- 1 Гб оперативки
- 10 Гб жесткий диск
Естественно с доступом по SSH.
Естественно можно это всё закрутить на имеющемся почтовом сервере или уже установленном сервере с Linux, но лучше не смешивать всё в одну кучу, с учётом что уже давно всё легко виртуализируется.
Я для своих целей использую хостинг РуВеб тарифы весьма хорошие на мой взгляд, можно конечно найти и бесплатный сервер по это дело, но сейчас не об этом.
Мне на ближайшие несколько месяцев точно хватит тарифа KVM-NANO, с учётом реферальной системы мне оно вообще бесплатно, написал пару статей в своё время и теперь регулярно получаю по партнёрской программе доход. Плюс с учётом скидок если покупать на 3 года к примеру вообще выйдет менее 100 рублей такой сервер. Так что рекомендую, пользуйтесь моей реферальной ссылкой https://ruweb.net/?from=26399
С сервером определились, теперь начнём его настройку.
При создании сервера обычно указывается hostname, его надо заранее придумать, потом поменять не получиться т.к. чаще всего это имя привязано к билинговой системе, но если железка ваша то конечно проблем таких не будет.
В этой стате будут использованы с личными доработками и правками несколько других статей, сами понимаете что программы развиваются и регулярно что то меняется, поэтому если мануалу хотя бы 1 год, с большой долей вероятности он уже не работает на 100% и придётся включать свои мозги:
Для начала нам потребуется домен, надеюсь он у вас есть, у домена как правило есть доступ к настройке DNS записей, так что нам надо их настроить примерно так:
chat.my.ru A <ip>
chat MX chat.my.ru
У всех регистраторов домена свои панели управления, так что тут уж сами, у меня была проблема в этом месте т.к. домен 3 уровня то ему пришлось прописывать А и АААА записи т.е. ip обычны и ipv6 иначе при получении сертификата для шифрования были проблемы, не получалось подтвердить права на домен, а соответственно ключи не делаются.
Настройку рекомендую продолжать только когда настроите и проверите все эти записи хотя бы тут https://2whois.ru/?t=dns обновляются они не быстро, в самом печальном случаи до 72 часов.
Систему для установки я выбрал CentOS 8 т.к. она одна из самых консервативных в плане защиты, можно на любой другой но могут возникнуть какие то трудности.
Установим postfix, dovecot и nginx (nginx — для получения сертификатов let's encrypt, wget — для установки certbot-auto, nano — редактор):
dnf install postfix dovecot nginx wget nano -y
Разрешим Postfix принимать почту извне и настроим hostname, domain и origin сервера, так как почтовый домен и адрес сервера совпадают, то домен будет везде одинаковым:
postconf -e "inet_interfaces = all"
postconf -e "myhostname = chat.my.ru"
postconf -e "mydomain = chat.my.ru"
postconf -e "myorigin = chat.my.ru"
Откроем порты 80, 143, 443, 465, 587, 993 в firewall:
firewall-cmd --permanent --add-service={http,https,smtps,smtp-submission,imap,imaps}
systemctl reload firewalld
Создадим настройки сайта для нашего доменного имени, что бы получить сертификаты let's encrypt используя certbot-auto
nano /etc/nginx/conf.d/chat.my.ru.conf
server { listen 80; listen [::]:80; server_name
chat.my.ru; root /usr/share/nginx/html/; }
Запускаем nginx
systemctl enable nginx
systemctl start nginx
Установим certbot-auto:
Тут я столкнулся с первой сложностью, в старых статьях это всё делается в 5-6 строчек, но разработчики всё усложнили так что пользуемся сайтом разработчика и проходим квест установки по полной:
Заходим на сайт и выбираем свою систему https://certbot.eff.org/lets-encrypt/centosrhel8-nginx
sudo dnf install epel-release
sudo dnf upgrade
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
certbot-auto certonly -a nginx --agree-tos --staple-ocsp --email my_mail@chat.my.ru -d chat.my.ru
После всего этого сгенерируются сертификаты для сайта (в дальнейшем мы будем их использовать для TLS-шифрования соединения с сервером), проверьте что они у вас появились:
/etc/letsencrypt/live/chat.my.ru/fullchain.pem
/etc/letsencrypt/live/chat.my.ru/privkey.pem
Исправим соответственно файл конфигурации Postfix, что бы разрешить прием писем на портах 465 и 587:
nano /etc/postfix/master.cf
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_tls_wrappermode=no
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
Выполним команды, что бы указать расположение TLS сертификата и личного ключа сервера:
postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/chat.my.ru/fullchain.pem"
postconf "smtpd_tls_key_file = /etc/letsencrypt/live/chat.my.ru/privkey.pem"
При необходимости можем включить логирование TLS подключений:
postconf "smtpd_tls_loglevel = 1"
postconf "smtp_tls_loglevel = 1"
Добавим в конец файла конфигурации Postfix требование использовать протоколы не ниже TLS 1.2:
nano /etc/postfix/main.cf
smtp_tls_mandatory_protocols = >=TLSv1.2
smtp_tls_protocols = >=TLSv1.2
Включим и запустим Postfix:
systemctl start postfix
systemctl enable postfix
Дальше настраиваем Dovecot:
dnf install dovecot -y
systemctl start dovecot
systemctl enable dovecot
Изменим файл конфигурации Dovecot:
nano /etc/dovecot/dovecot.conf
protocols = imap lmtp
Настроим хранилище писем, что бы письма сохранялись в папках пользователей:
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
mail_privileged_group = mail
Добавим Dovecot в группу mail что бы Dovecot мог читать входящие:
gpasswd -a dovecot mail
Запретим авторизацию без TLS шифрования:
nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
Добавим автоподстановку домена при авторизации (только по имени пользователя):
auth_username_format = %n
Изменим расположение сертификата, ключа, расположения файла с ключом Диффи-Хеллмана, минимальную версию TLS 1.2 и предпочтение выбора протоколов шифрования сервера, а не клиента:
nano /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/secureim.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/secureim.example.com/privkey.pem
ssl_dh = </etc/dovecot/dh.pem
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
Сгенерируем ключ Диффи-Хеллмана, генерация ключа реально занимает продолжительное время:
openssl dhparam -out /etc/dovecot/dh.pem 4096
Изменим секцию service auth, так что бы Postfix смог подключиться к серверу авторизации Dovecot:
nano /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0600
user = postfix
group = postfix
}
}
Включим автосоздание системных почтовых папок (на тот случай, если мы будем пользоваться сервером в том числе и для обычной почты) добавив строку auto = create в секции почтовых папок:
nano /etc/dovecot/conf.d/15-mailboxes.conf
mailbox Drafts {
auto = create
special_use = \Drafts
}
mailbox Junk {
auto = create
special_use = \Junk
}
mailbox Trash {
auto = create
special_use = \Trash
}
mailbox Sent {
auto = create
special_use = \Sent
}
mailbox "Sent Messages" {
auto = create
special_use = \Sent
}
Настроим сервис LMTP следующим образом:
nano /etc/dovecot/conf.d/10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
Добавим следующие настройки в конец файла, что бы сообщить Postfix доставлять письма в локальное хранилище через сервис Dovecot LMTP. Так же отключим SMTPUTF8, так как Dovecot LMTP не поддерживает это расширение:
nano /etc/postfix/main.cf
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no
Создадим пользователей которые будут использовать сервер, создав соответствующую запись в системе и задав ей пароль, который будет использоваться для авторизации через smtps и imaps:
adduser user1
passwd user1
Перезапустим Dovecot и Postfix:
systemctl restart dovecot
systemctl restart postfix
Добавим в /etc/crontab задачу для автоматического обновления сертификатов:
nano /etc/crontab
30 2 * * * root /usr/local /bin/certbot-auto renew --post-hook "nginx -s reload"
В принципе система настроена, осталось только установить клиенты и сделать учётные записи для пользователей.
Клиенты для всех и вся берём с официального сайта разработчика https://delta.chat/ru/download
По идее Delta Chat не требует от нас создавать свою какую то почту, он легко вам подключит для общения mail.ru yandex.ru и т.п. сервисы, но мы то хотим защищённую свою почту/чат, что мы выше и сделали
При входе указываем логин и пароль созданный чуть выше user1@chat.my.ru и пароль указанный выше при создании учётки
Создавать новых пользователей в консоли не очень удобно, поэтому для себя я установил панель управления CockpitWebConsole:
yum install cockpit
Затем включите и запустите службу cockpit.socket для подключения к системе через веб-консоль и проверьте службу и запустите процессы, используя следующие команды:
systemctl start cockpit.socket
systemctl enable --now cockpit.socket
systemctl status cockpit.socket
ps auxf|grep cockpit
Настроим firewall, красненькое при установке это нормально
firewall-cmd --add-service=cockpit --permanent
firewall-cmd --reload
Вход в панель управления:
https://chat.my.ru:9090
будет предупреждение что не настроен сертификат безопасности, ну тут не особо важно на мой взгляд, просто соглашаемся с рисками.
Входим под пользователем с правами root или под самими пользователем root, иначе вы не сможете добавлять необходимые права и создавать учёные записи.
Как видите всё русифицировано и лаконично, ничего лишнего. В разделе "Учётные записи" добавляем нужных пользователей, тут же можете назначать администраторские права и блокировать или удалять учётки.
При необходимости адрес этой панели можете сообщить пользователям, для того чтобы они имели возможность зайти и поменять пароль самостоятельно, других админских функций у них в панели не будет, так что можно не переживать.
Спасибо тем кто дочитал до конца, как говорится подписывайтесь и ставьте лайки.
PS: есть свои особенности - при работе с разных устройств свои шифрованные сообщения могут быть прочитаны только на том устройстве с которого отправлены, возможно как то это решается, но я ещё не нашел как.