Обмен паролями через незащищенные каналы

Решил поделиться простым способом как обмениваться сообщениями через незащищенные каналы связи. При этом под незащищенными каналами я имею ввиду не каналы, которые без шифрования и без паролей, хотя и это тоже конечно. А Вообще любое место, в котором сохранение данных вами не контролируется и данные откуда могут попасть куда угодно. 
 
Так что этот способ например хорошо подойдет если нужно побыстрому переслать например пароль или еще какие-то данные для доступов или еще что-то. При этом для админов это работает быстро и удобно, поскольку у всех есть сгенерированные пары ssh ключей и они всегда под рукой. Итак

1. Публичный ssh rsa ключ получателя

Создаем файл с публичным ключом получателя сообщения. Этим ключом сообщение будет зашифровано. Расшифровать сообщение сможет только владелец соответствующего приватного ключа, поэтому необходимо быть на 100% уверенным, что для шифрования используется нужный публичный ключ.
 
$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQ5GVyTlgZGvlxD2qch4UpzMWXMjGMvDjSAJIxt4k18VdNbh1VjBTJD0F5rQbdFoeTyaxFL/u1iU0C/GpC/4V35yTP5Wtlc32jNpYAKu7xPKnRlClSj3whNIK6DWIeysXqdMB8efQLuWnCQQ/NNN86x4IjqokH2qvW/YDzy8xaYUPxaqqiQJ02UfGV+iQL3hyvqm8C/vLNizigOYBXA1MtkRtkfuhkC1sO04y+5vRHYGY156NXVsR6i6IFEwhJpjdH2pDVSH8GNdQ2ncWPJESuyvSwlTkAudvD8t/XyjDJloR1Lb4Hm/DyW70YmJDLaJgT+JE91le4VRrmrdHDYzOP user' > ~/ssh_public_keys/user
 

2. Шифрование сообщения на стороне отправителя

$ echo 'Plain Text Message' | openssl rsautl -encrypt -oaep -pubin -inkey <(ssh-keygen -e -f ~/ssh_public_keys/user -m PKCS8) | base64 -w0

TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==
 
Полученное зашифрованное сообщение преобразовано в текстовую форму, пригодную для передачи через текстовые мессенджеры.
 

3. Расшифровка сообщения на стороне получателя

 
$ echo 'TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==' | base64 --decode | openssl rsautl -decrypt -oaep -inkey ~/.ssh/id_rsa
 
Вот в общем и все, посылаем получившуюся строчку получателю через почту или мессенджер и его сможет расшифровать только обладатель приватного ключа. В текущей ситуации, когда многие работают удаленно и в распределенных командах, бывает полезно переслать пароль побыстрому или еще какие-то данные, которые в открытом виде слать совсем не хочется.
 
Вы можете сказать, для подобных вещей есть GPG ключи и в общем все это и все уже давно придумано. Но не у всех они подключены и настроены, а вот что касается админов, то у них всегда под рукой есть rsa ключи для доступа по ssh.
 
Ну и не забывайте, что пароли писать на бумажках нельзя 🙂 

Порядок работ и цены

При обращении к нам производим бесплатный Аудит ваших серверов и инфраструктуры. Выясняем необходимый объем работ в соответствии с вашими требованиями. Подготавливаем коммерческое предложение и высылаем его вам в кратчайшие сроки.

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

Составляем техническое задание и определяем график работ. Выбираем время проведения работ так чтобы минимизировать потери. При возможности подготавливаем все чтобы при проведении работы перерывов в работе серверов и приложений не было.

Проводим оценку работ и согласовываем стоимость.
 

  • Стоимость часа работы администратора – 2000 руб
  • Первичная настройка сервера – 10000 руб
  • Ежемесячное обслуживание сервера 24/7 с мониторингом и контролем состояния – 10000 руб
  • Настройка сервера с передачей под ваш контроль – 15000 руб

Подписываем договор и оговариваем удобные каналы для связи. Обговариваем все моменты для полного согласования всех работ.

Как получить wildcard ssl сертификат от letsencrypt

Совсем недавно letsencrypt добавил возможность получения ssl-сертификатов wildcard типа для доменов. До этого, все сертификаты от letsencrypt выдавались только для доменов и поддоменов, что могло быть довольно хлопотно несмотря на удобство работы с certbot по обновлению и поддержке всего этого хозяйства. А поскольку получить сертификат от letsencrypt можно совершенно бесплатно, без регистраций и смс, то это поднимает важность этого момента на небывалый уровень.

Итак, Как получить wildcard ssl сертификат от letsencrypt?

Во первых стандартный certbot, выписывал все сертификаты до этого не умеет пока выписывать wildcard сертификаты, так что нужно качать новый.

wget https://dl.eff.org/certbot-auto
chmod 0755 certbot-auto

Теперь можно запускать самого бота

./certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns -d *.domain.com

Бот начнет задавать вопросы. Поскольку выбрана опция preferred-challenges dns он попросит создать для домена соответствующую TXT запись в DNS


Please deploy a DNS TXT record under the name
_acme-challenge.domain.com with the following value:

99EjBy71F_RWab8pepBc499GCHPAx1EVCd6pqLDlI3s

Before continuing, verify the record is deployed.
——————————————————————————-
Press Enter to Continue

Это средство для валидации того, что вы действительно являетесь владельцем указанного вами домена. Прописываем нужную запись в ДНС. Проверяем, что с сервера она видна по запросу

dig _acme-challenge.domain.com IN TXT

Если все нормально то жмем enter и едем дальше. Бот убеждается, что нужные записи в ДНС появились и выписывает вам сертификат. Вот так все очень просто.
Посмотреть список сертификатов можно следующей коммандой


./certbot-auto certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

——————————————————————————-
Found the following certs:
Certificate Name: domain.com-0001
Domains: *.domain.com domain.com
Expiry Date: 2018-06-16 17:01:40+00:00 (VALID: 71 days)
Certificate Path: /etc/letsencrypt/live/domain.com-0001/fullchain.pem
Private Key Path: /etc/letsencrypt/live/domain.com-0001/privkey.pem
——————————————————————————-

Особенностью беплатных сертификатов от letsencrypt является, то что они выдаются на 3 месяца, так что надо почаще следить за актуальностью установленных сертификатов.
По необходимости можно поставить бота в крон чтобы он обновлял сертификаты автоматом. Бот также умеет прописывать ныжные блоки в конфиги для распространенных веб-серверов, apache и nginx. В общем очень удобная и полезная в наше время штука. Желаю вам освоить ее и пользоваться с удовольствием.

Как сделать шифрованный раздел на файле

Итак, на одном сервере мне понадобилось побыстрому сделать отдельный шифрованный раздел, возникла вдруг такая потребность. Переразбивать диски и как-то править разделы совсем не хотелось, поэтому решил сделать шифрованный раздел на файле.

Преимуществом такого подхода является возможность все сделать налету, без изменения партиций и установки и настройки дополнительного ПО. Главное впоследствии не забыть, что сделано именно так.

Итак как сделать шифрованный раздел на файле?

Все процедуры я описываю для системы Ubuntu Server LTS 16.04.

Для этой операции нам понадобиться установить несколько пакетов

apt update && apt install cryptsetup

Смотрим на каком разделе есть достаточно места под наши цели и создаем там файл нужного размера

cd /home && fallocate -l 8G data.img

Форматируем его как шифрованный раздел, при этом программа предупредит о том что все данные будут утеряны и попросит ввести ‘YES’. А также попросит ввести вас пароль. Вводим пароль 2 раза и сохраняем его в какое-нибудь безопасное место, например в keepass.

cryptsetup -y luksFormat /home/data.img

Теперь выделенный файл отформатирован под шифрованный раздел, но в системе еще не виден. Для этого его надо промапить как устройство. При этом будет запрошен пароль, который использовался шагом выше.

cryptsetup luksOpen /home/data.img data_decrypt

Диск станет доступным для проведения с ним операций как с блочным устройством, так что теперь его вполне можно отформатировать.

mkfs.ext4 -j /dev/mapper/data_decrypt

Файловая система есть теперь диск можно подмонтировать

mkdir /data && mount /dev/mapper/data_decrypt /data

 

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

Главное не забывать что при ребуте или закрытии диска, процедуру по открытию нужно повторять снова, также как и монтирование.

Вот в общем и все что я хотел рассказать по данному вопросу.

 

Хорошие источники про ansible

Ansible – незаменимый помошник для DevOps. Для изучения ansible использовал несколько хороших книжек, где хорошо разбирается как это все работает под капотом и описаны разные best practice. Помогли систематизаровать знания и не наделать лишних ошибок при освоении этого замечательного инструмента. А также придти к собственному пониманию как удобно и комфортно использовать ansible для разных задач. Довольно занимательно просматривать книги и знакомиться с мнениями других людей на счет использования ansible после того как сам набираешься опыта и понимания как тебе самому приятнее и удобнее ео использовать.

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

learning ansible ebook
ansible-for-devops
ansible configuration management 2nd edition
ansible playbook essentials
ansible-_up_and_running