Как получить 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

Сборка openssh с поддержкой авторизации через LDAP

На прошлых выходных вышла новая версия дистрибутива Debian 8 (Jessie), нового там много, поэтому впереди довольно много обновлений систем предстоит. В связи с этим решил заранее собрать версию ssh сервера, которая у меня используется в разных местах – она умеет работать с пользователями из LDAP. В этой статье я коснусь только самого процесса сборки, сам процесс настройки системы под подобную авторизацию я как-нибудь опишу позже. А сейчас о том как быстро и безболезненно пропатчить openssh-server на Debian 8 с патчем LPK.

Сам патч разработан давно в рамках LPK progect – http://code.google.com/p/openssh-lpk/ , есть несколько форков и продолжений этого патча под разные версии openssh. Я воспользовался одним из этих форков для предыдущего патча на Debian 7, когда пришло время я взял его же. Скачать его можно по ссылке https://github.com/takkeybook/openssh-lpk. Небольшую сложность, которая заключается в том что он для openssh-6.6p1 не так сложно обойти. Итак, предполагается что у вас уже есть среда с Debian 8 где вы будете проводить сбору. Выкачиваем исходники:

cd /usr/src ; apt-get source openssh-server

Скачиваем патч:

git clone https://github.com/takkeybook/openssh-lpk.git

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

cp openssh-lpk-6.6p1-0.3.14.patch /usr/src/openssh-6.7p1/debian/patches/openssh-lpk-6.7p1-0.3.14.patch

Добавляем в /usr/src/openssh-6.7p1/debian/patches/series этот патч

В самом патче меняем все упоминания 6.6p1 на 6.7p1. После этого пушим изменения о новых патчах

cd /usr/src/openssh-6.7p1/ ; quilt push ; quilt refresh

Доставляем необходимые пакеты для сборки если они не были установлены до этого:

apt-get build-dep openssh-server

Прописываем изменения в changelog чтобы у вас получился новый пакет с изменениями. Для этого воспользуемся утилиткой dch.

dch -i

Пишем, что-нибудь про изменения которые были внесены чтобы не забыть, например

Add LPK patch for working with LDAP

Теперь можно собирать пакет:

dpkg-buildpackage -us -uc

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

Настройка OpenVPN с авторизацией через LDAP

Данная небольшая статья поведает как настроить openvpn, да не просто так, а с авторизацией через LDAP. Раз уж я рассказывал до этого как настраивать LDAP, то пришла пора его для чего-то применить. Вот одно их полезных моментов куда его можно применить в целях организации закрытой инфраструктуры изолированной от попадания того кого не нужно. OpenVpn в этом деле незаменимая вещь, позволяющая давать доступ тому кому надо, а кого не надо оставлять за бортом. Ну а LDAP предельно упрощает предоставление таких прав нужным людям.

Для начала приведу общий конфиг для openvpn остановивлюсь на тех вещах которые нужны именно для нормальной работы opnevpn+ldap

tmp-dir /tmp
local 142.2.44.55
port 2000
proto tcp-server
tcp-queue-limit 256
bcast-buffers 4096
duplicate-cn
dev tun0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/local.crt
client-cert-not-required
username-as-common-name
key /etc/openvpn/keys/local.key
dh /etc/openvpn/keys/dh2048.pem
server 10.30.0.0 255.255.255.0
push "route 10.11.0.0 255.255.0.0"
push "dhcp-option DNS 10.11.0.1"
push "dhcp-option DOMAIN example.local"
push "sndbuf 393216"
push "rcvbuf 393216"
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
auth MD5
cipher AES-256-CBC
keepalive 10 120
max-clients 100
user nobody
group nogroup
persist-key
persist-tun
script-security 3 execve
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 4
plugin /usr/lib/openvpn/openvpn-auth-ldap.so "auth-ldap.conf"

В целом все как при обычном конфигурировании openvpn, есть небольшие только отличия

username-as-common-name – меняет авторизацию по common name из сертификата на авторизацию по логину и паролю, то что именно нам и надо.

plugin /usr/lib/openvpn/openvpn-auth-ldap.so “auth-ldap.conf” – подключает в качестве плагина openvpn-auth-ldap.so, который даест возможность вытаскивать из LDAP данные пользователя и использовать их для прохождения авторизации. На дебиане он ставиться довольно просто:

apt-get install openvpn-auth-ldap

В основном конфиге все, более добавлять ничего не надо. Есть еще дополнительный конфиг auth-ldap.conf где и осуществляется вся магия авторизации через LDAP.

URL ldap://10.11.0.2
BindDN cn=user,dc=example
Password pass
Timeout 15

BaseDN “ou=people,dc=example”
SearchFilter “(&(uid=%u)(attr1=vpn))”
RequireGroup false

Тут указаны данные к какому LDAP серверу подсоединяться

URL ldap://10.11.0.2

с какими правами работать

BindDN cn=user,dc=example , Password pass

и в какой директории искать

BaseDN “ou=people,dc=example”

Так же указан фильтр по которому будет производиться выборка

SearchFilter “(&(uid=%u)(attr1=vpn))”

это значит что будет проводиться поиск по указанному пользователю и если у него есть атрибут attr1=vpn, что позволяет ограничить в директории пользователей на тех кому нужен доступ по VPN и кому нет, так же можно разграничить доступ по разным VPN.

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

URL ldap://10.11.0.2
BindDN cn=user,dc=example
Password pass
Timeout 15

BaseDN “ou=people,dc=example”
SearchFilter “(uid=%u)”
RequireGroup true

BaseDN “cn=openvpn,ou=groups,dc=example”
SearchFilter “(cn=openvpn)”
MemberAttribute memberUid

 

Добавляется секция с поиском в группе указанного пользователя. Теперь для предоставления прав на доступ достаточно добавить пользователя в указанную группу или удалить если он там больше не нужен. Вот в общем и все, надеюсь эта статья будет вам полезна.