ServerAdmin.ru
28.4K subscribers
264 photos
33 videos
12 files
2.59K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​При выборе упсов я всегда отдаю предпочтение фирме APC, несмотря на то, что чаще всего они дороже аналогов. А всё из-за небольшой программы apcupsd, которую я использую уже более 10-ти лет с упсами этого вендора. Расскажу про неё для тех, кто о ней не слышал.

Apcupsd - это небольшая программа, доступная под все популярные системы (Linux, Windows, Macos, Freebsd). В Linux она есть в стандартных репозиториях популярных дистрибутивов. С её помощью можно управлять поведением систем в зависимости от состояния упса. Поясню на простом примере.

Допустим, у вас есть стойка, в ней 5 сильно разных серверов и один мощный UPS. Все сервера запитаны от этого упса. Вам нужно настроить автоматические отключение серверов при пропадании электропитания. При этом желательно выбрать определённую последовательность, кто и когда выключается.

С apcupsd решить эту задачу очень просто. Подключаете UPS по USB к любому серверу. То есть упс может быть и без сетевой карты. Я обычно к Linux его подключаю, потому что туда никакие дополнительные драйвера ставить не нужно. Apcupsd сразу видит упс. Настраиваю его в качестве сервера и ставлю ему максимальное время жизни при отключенном электропитании. То есть указываю, что этот сервер отключится, когда останется 10% заряда или 5 минут жизни упс.

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

У программы всего один простой конфигурационный файл, который хорошо прокомментирован. Помимо параметров завершения работы, можно настроить выполнение каких-то скриптов. Для Windows у программы есть иконка в трее, а также можно настроить веб интерфейс. Apcupsd пишет всю информацию в текстовый лог, так что его очень легко парсить и забирать данные в Zabbix, что я тоже делаю.

С этой программой у меня было в разное время и в разном контексте несколько статей на сайте. Можете посмотреть, как её использовать. Если не знали про неё, рекомендую попробовать. Она мне нравится намного больше стандартных приложений вендора. В первую очередь за счёт простоты и гибкости настройки, а так же минимализма и возможности без проблем и с единым конфигом настроить под все поддерживаемые системы.

Сайт

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

📌 В своё время было устройство с USB и LAN портам, которым пинговалось оборудование, роутеры и серваки. На USB порт вешалась релюшка на 5 вольт, и как только десяток пингов не проходили, на релюшку подавалось питание, и релюшка нажимала сброс на серваке или отключала питание роутера, в зависимости, куда подключили контакты реле.

📌 Мы вставляли флешку внутрь сервера с кроном, который должен был запустить скрипт с флешки который затирает нулями диск , запуск скрипта происходил по истечению 3 минут после запуска сервера. Свой человек должен был перед запуском эту флешку извлечь. Если сервак оказывался у других людей соответственно получали пустой диск.

📌 Помню были два девайса модные в то время. Один при несанкционированном извлечении из стойки устраивал электромагнитный коллапс дисковой полке. Если забыл отключить при проведении регламентных работ, то отправлял охапку дисков в помойку и радовался восстановлению из бэкапов. Другой был в виде промежуточного контроллера между диском и мат. платой, имел скрытую кнопочку в ножке компа. Если комп поднимали, контроллер, вооружённый собственной батарей, радостно затирал диск мусором, превращая содержимое в тыкву, пока черепашки-ниндзя везли трофей на экспертизы.

📌 У нас было полу-облачное решение! Но мы тогда круто потрудились.
На выделенном сервере в облаке или VDS крутился сервис, написанный хорошим человеком. Обращение к сервису было через кнопку на рабочем столе и в приложении на телефоне. По нажатию кнопки, творилась полная вакханалия. Выключались все сервера 1С. Выключались терминальные сервера. Ребутались компы для доступа к терминальной 1С. Отключались маршруты на коммутаторах и роутерах. И вообще много чего интересного ещё было.

📌 Помню делали запуск чудо "кнопки". Штука базировалась на центральной сигнализации на базе hikvision. По кнопке, которая отвечала за тревогу, блокировались некоторые двери и лифты, делали через реле подключенной в СКУД, далее она ещё звонила на нужные номера и запускала скрипты на сервере. Со звонками и СКУД было просто, там считай все аналогово настраивается. А вот со скриптами намучался. В итоге сделал скрипт, запускающийся при определенном событии от сетевого интерфейса, на который сигнал как раз и слала сигнализация. Оказалось, что IP пакеты помечаются кодами, на которые сценарий и повесил. А сам скрипт был на Powershell, так что там было просто и с паролями и самим сценарием.

📌 Была в одном месте еще такая фишка. Роутер на Linux пробрасывал порты через VPN на рабочие сервера. Но сделан был хитро. По умолчанию грузились правила iptables, которые вели к левым серверам, там тоже были базы, но с левым содержимым. После запуска роутера, админ удаленно выполнял скрипт, который переписывал правила iptables, и начинали работать настоящие сервера. В случае какого ахтунга, роутер просто надо было перезагрузить. И для маски-шоу вроде никакого криминала не было. Где базы? На сервере, сервер в датацентре в Москве. Вот, заходите, смотрите. Хотите - качайте. Локально нет ничего.

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

Были времена... Хорошо, что прошли. Такой дичью занимались 😁

Я всегда сразу говорил, что могу настроить что угодно, но если меня спросят, всё расскажу, вилять не буду.

#разное #security
​​Хочу вас познакомить с необычным продуктом, который не будет подходить для массового использования. Но в каких-то нестандартных задачах он может оказаться настоящей находкой, так как позволяет как конструктор собрать то, что нужно именно вам. Речь пойдёт про open source CMDB систему DataGerry.

Чтобы сразу было понятно, о чём пойдёт речь, поясню, что это аналог таких продуктов, как i-doit, iTop, Ralph и т. д. Основное отличие от перечисленных бесплатных продуктов в том, что в DataGerry нет вообще никаких преднастроек. По своей сути это конструктор, который позволяет на базе CMDB (Configuration Management Database) собрать готовую систему под конкретную задачу.

В DataGerry вы сможете сами создавать категории, в них разные типы данных со своей структурой и параметрами, а на основании типов данных добавлять объекты. Это не готовая программа по учёту техники в офисе, серверов в стойках, лицензий ПО и т. д. Вы можете в ней хранить всё, что угодно. Описать структуру какого-то своего склада, своей системы управления.

У DataGerry есть встроенный API, с помощью которого можно настраивать интеграции с внешними системами. Аутентификация по API происходит с помощью токенов, доступ к системе через web настраивается либо с помощью локальных пользователей и групп, либо через интеграцию с LDAP.

Помимо API DataGerry умеет взаимодействовать с внешними системами через встроенные ExternalSystems. Это готовые экспортёры данных. Их можно писать самому в виде плагинов, либо использовать что-то из готового. Например, есть экспортёры inventory для Ansible, DNS записей для веб панели Cpanel, объектов в CVS файлы, объектов в MySQL базы и т.д. Список можно в документации посмотреть. Отдельно отмечу встроенную возможность экспорта хостов в бесплатную систему мониторинга OpenNMS.

Попробовать DataGerry очень просто. Есть готовый docker-compose.yml. Достаточно его запустить и идти в веб интерфейс на стандартный 80-й или 443-й порт. Учётка - admin / admin. При первом входе вам предложат пройти небольшое обучение, чтобы понять, как тут создавать объекты.

Сайт / Исходники

#управление #ITSM
​​▶️ Тема почтовых серверов приободрилась в последнее время, так что решил посмотреть выступление с linkmeetup, которое давно было в закладках (я их иногда всё же просматриваю).

Инженер из МойОфис рассказал про свои почтовые сервера - МойОфис Почта и Mailion. Так как оба продукта построены на базе Postfix и Dovecot, выступление получилось универсальным, из которого лично я вынес несколько полезных моментов. Например:

Если вы хотите использовать аутентификацию через LDAP, но пользователи у вас в AD, с которой вы хотите уехать, есть Open Source сервер 389 Directory Server, на который можно перенести учётные записи с помощью RedHat sync utility Directory Server with Active Directory.

В Dovecot есть свой собственный инструмент репликации для отказоустойчивой почтовой системы - dsync.

Альтернативой использования dsync может быть файловая система GlusterFS, которую разработчики МойОфис использовали в проде для почтового кластера.

Для адресных книг и их синхронизации нет каких-то универсальных продуктов. Каждый решает это вопрос на месте.

Общая тема выступления - миграция с одних почтовых серверов, в том числе облачных, в другие. Рассказывается общая теория по процессу без привязки к каким-то конкретным решениям.

Импортозамещение почтового сервера. Андрей Колесников, руководитель инженерного отдела, МойОфис
https://www.youtube.com/watch?v=D_6pu-nd6cc

#видео #mailserver
​​У команды VK Team в открытом доступе есть очень качественный курс по Linux. Записан и выложен он был 5 лет назад, но данная тематика не сильно меняется год от года, так что всё актуально и по сей день. Курс не для новичков, должна быть небольшая база.

Администрирование Linux (весна 2017)

Это не просто серия вебинаров с каким-то админом, а вполне серьезный курс, созданный на базе МФТИ (Московский физико-технический институт). Там же он и читался очно. К сожалению, в первой лекции нет записи консоли преподавателя, да и звук плохой, что немного смазывает впечатление о курсе, но потом это было исправлено.

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

Программа курса:
Основы (командная строка, bash скрипты и т.д.)
Пользовательское окружение Linux
Linux и сеть (основы)
Управление пользовательским окружением
Веб-сервисы
Хранение данных
Сервисы инфраструктуры
Резервное копирование
Инфраструктура электронной почты
Распределение ресурсов системы
Основы информационной безопасности
Отказоустойчивость и масштабирование

Как я уже сказал, это курс не для новичков. Самые основы даются на другом их курсе на базе МГТУ им. Н. Э. Баумана - Администрирование Linux (осень 2015).

Оба эти курса можно использовать как базу для того, чтобы начать осваивать Linux. Меня очень часто спрашивают, с чего начать и что взять за основу. Это хороший пример основы.

#обучение
​​На моём канале не было ни одного упоминания про старую, самобытную систему мониторинга OpenNMS. Это open source проект из далёкого 1999 года. Она развивается и по сей день. Последний релиз был 14 декабря этого года.

OpenNMS делает упор на мониторинг сетевого оборудования, хотя не ограничивается только им. Метрики может собирать по SNMP, WinRM, XML, SQL, JMX, SFTP, FTP, JDBC, HTTP, HTTPS, JSON, VMware, WS-Management, Prometheus, плагины Nagios. Поддерживает протоколы учёта трафика NetFlow v5/v9, IPFIX, sFlow. Она вообще умеет очень много всего. Например, можно складывать NetFlow в ElasticSearch, а OpenNMS будет туда ходить, разбирать трафик и формировать какие-то события на основе того, что там найдёт. Система многогранная и функциональная. За столько лет она получила очень большое развитие.

Написана на Java, поэтому является кроссплатформенной. Данные хранит в PostgreSQL, метрики умеет в TSDB. Java может быть как минусом, так как в целом немного тормозная и требует много ресурсов, так и плюсом. OpenNMS легко запускается на любой системе, в том числе и на Windows. Не требуется какой-то особенной подготовки и настройки.

У OpenNMS есть интеграция с Grafana в виде готовых дашбордов, которые поддерживаются разработчиками. Как я уже упомянул, система умеет принимать данные с экспортёров Prometheus. Также есть интеграция с Kibana. То есть идёт в ногу со временем. Про неё можно много писать, но это уже не формат telegram заметок. Система старая, информации в интернете про неё много, в том числе и готовых руководств, и в том числе в виде видеороликов. Помимо этого есть хорошая документация.

Если подбираете себе готовую систему мониторинга сетевой инфраструктуры, где не хочется много костылить и пилить под себя, а хочется максимальной автоматизации и готовых решений, то обязательно попробуйте OpenNMS. Может вам зайдёт.

Отмечу бесплатные аналоги:
Observium
LibreNMS
NetXMS

Сайт / Исходники

#мониторинг #network
​​С завидной регулярностью появляются новости про взлом известной публичной облачной инфраструктуры по хранению паролей LastPass. Вот свежая:

Утечка резервных копий с данными пользователей LastPass
https://www.opennet.ru/opennews/art.shtml?num=58379

Было время, когда я тоже использовал этот сервис и хранил там свои пароли. А что, удобно. Пару кликов и пароль запомнен, а потом автоматически введён. Я иногда видел, как этим сервисом пользуются люди, которые проводили либо вебинары, либо обучение по IT. У них выскакивали эти надоедливые всплывающие информационные сообщения с предложением либо сохранить, либо заполнить веб формы.

Я быстро понял, что идея там хранить пароли плохая. Удалил учётку (лет 6-7 назад) и больше никогда не пользовался публичными сервисами для хранения паролей. Хочу это же посоветовать и вам. Мало ли, кто-то наверняка до сих пор пользуется LastPass или чем-то подобным. Я бы не рисковал. Да и удобство на самом деле сомнительное. Автозаполнение часто раздражает, а не помогает. Я и в браузере никогда не сохраняю важные пароли. Только всякую ерунду от незначительных сервисов.

Что там на самом деле своровали у LastPass после нескольких взломов - не известно. Правду всё равно не скажут, если реально что-то приватное утащили. Это похоронит сервис. Я для своих паролей использую локальный KeePass. А вы где храните пароли?

#security
​​Существует старый и известный продукт на основе Linux по типу всё в одном - Zentyal. Он время от времени мелькает в комментариях и рекомендациях как замена AD или в качестве почтового сервера. Решил вам рассказать о нём, так как и то, и другое сейчас актуально.

Стоит сразу сказать, что Zentyal в первую очередь коммерческий продукт, продающийся по подписке. Но у него, как это часто бывает, есть бесплатная community версия, которую они в какой-то момент переименовали в Development Edition. Полное название бесплатной версии - Zentyal Server Development Edition.

У бесплатной версии сильно ограничен функционал, но всё основное есть. То есть его можно использовать в качестве контроллера домена для Windows машин и почтового сервера. Дистрибутив основан на ОС Ubuntu, установщик полностью от неё. После установки в консоль лазить не обязательно, всё управление через веб интерфейс. Причём стандартный установщик автоматически разворачивает графическое окружение и ставит браузер Firefox, так что управлять сервером можно сразу через консоль VM.

После установки настройка и управление осуществляются через веб интерфейс: https://ip_address:8443, учётка та, что была создана в качестве пользователя во время установки системы. Там вы сможете установить пакеты для:
Контроллера домена на основе Samba 4.
Почтового сервера на базе SOGo с поддержкой IMAP, Microsoft Exchange ActiveSync, CalDAV и CardDAV.
Шлюза Linux с Firewall и NAT, DNS, DHCP, VPN и т.д.

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

Сами разработчики позиционируют Zentyal как альтернатива Windows Server для малого и среднего бизнеса. Насколько я могу судить, это одна из самых удачных реализаций Linux all-in-box.

Аналоги:
UCS
ClearOS

Сайт / Исходники

#docs #fileserver #mailserver #ldap #samba
​​В преддверии праздников не хочется заниматься рабочими моментами. Решил с вами поделиться новостью, а также обсудить её. Я регулярно читаю блог Cloudflare, там иногда бывают интересные новости. Некоторыми я делился с вами ранее. Я заинтересовался вот этой:

Xata Workers: client-side database access without client-side secrets

Название не очень информативное. Речь там идёт о serverless базе данных с доступом к хранимой информации через API - Xata. Мне стало интересно, что это такое, поэтому сходил на сайт и ознакомился. Технология мне показалась похожей по своей сути на объектные хранилища S3, поэтому думаю, что она станет популярной через некоторое время.

Идея там такая. Есть некая конструкция для хранения данных. Конкретно в Xata это связка из Postgresql, Kafka, Elasticsearch. Если я правильно понял описание структуры хранения, то данные хранятся в кластере PostgreSQL, по репликам они раскладываются через очередь Kafka, а одной из реплик является Elasticsearch. Таким образом решается вопрос традиционного хранения данных в SQL базе и использование Elasticsearch для функций аналитики, быстрого поиска, машинного обучения и т.д.

Доступ к данным через RESTful API. Я посмотрел синтаксис, он простой, легко читается даже не программистами. Соответственно и использовать его не сложно. Сейчас Xata в бета тесте, поэтому пользоваться можно бесплатно с некоторыми ограничениями. Как я понял, потом также останется лимитированный бесплатный тарифный план. Я зарегистрировался и немного попользовался этой БД. Удобный интерфейс для управления через браузер, примерно как это сейчас реализовано в S3 хранилищах у провайдеров.

Лично мне эта идея и технология показались очень интересными и полезными. Не удивлюсь, если будет сформирован какой-то общепринятый API для работы с подобными базами, а что там будет в бэкенде для хранения - не так важно. Как и сейчас не важно, где хранятся файлы в S3. Главное, чтобы был отказоустойчивый кластер с заданными параметрами доступа.

Подобная технология хорошо ложится в канву iac и serverless подхода, доля которого растёт год от года. Используется какой-то безсерверный код в облаке, статика хранится в S3, а данные в подобной БД. Идеальная структура, к примеру, для Telegram бота. Или для статичного сайта с JavaScript, где все запросы к данным реализованы на уровне API прямо в коде сайте.

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

#разное #devops
​​После переезда на новый ноут устанавливал и настраивал заново все программы. Это такая морока, отнимает очень много времени. Я в том числе из-за этого постоянно откладывал данную процедуру. Во время настройки Vscode решил кратенько рассказать, как я его использую.

Для тех, кто не знает, поясню, что Vscode (Visual Studio Code) - это бесплатный текстовый редактор от Microsoft с очень большим функционалом. По сути это IDE для программистов и девопсов. В разное время я использовал Atom, Notepad++, Sublime, PyCharm. В итоге остановился на Vscode, как наиболее функциональном и популярном решении.

Я использую бесплатные репозитории в Gitlab. У Vscode есть простая интеграция с этим сервисом. Устанавливается плагин GitLab Workflow, затем в VSCode выполняется аутентификация в Gitlab и можно прямо из веб интерфейса Gitlab открывать свои репозитории с VSCode, копировать их на ноут и работать с ними локально, а изменения пушить в облако. В итоге у тебя и локально всё есть, и копия в облаке, и всё это в гите со всеми изменениями.

В репозиториях я храню свои скрипты, конфиги, плейбуки ансибла, докер файлы. Некоторую другую информацию, для которой хочется иметь удобную историю изменений. У меня там обычно порядка 20-30 репозиториев. Под отдельные проекты создаю репозиторий, храню там настройки, конфиги и всё, что относится к проекту. По сути это мои персональные хранилища, которые создаются не для командной работы, а для себя лично.

По идее для работы одному, можно было бы всё это хранить в том же менеджере заметок, который тоже обычно используется. Там и история изменений есть. Но в VSCode работать с конфигами, особенно в формате yaml, удобнее. Там и подсветка, и некоторые другие функции есть. Плюс стоят плагины для подсветки и удобной работы с популярными форматами - sh, dockerfile, json, jinja.

Из минусов Vscode отмечу, что он довольно тормозной, потому что на Electron. Ещё говорят, что он статистику собирает и отправляет в Microsoft и это не отключается. Я не знаю, насколько это соответствует действительности, не проверял. Microsoft и так всё знает про меня, потому что всё это работает под Windows.

#devops #редактор
​​Когда мне надо быстро узнать, какой дистрибутив Linux установлен, я первым делом в консоли пишу команду:
# lsb_release -a

В Debian и Ubuntu по умолчанию обычно установлен пакет lsb-core, который содержит эту утилиту. В rpm дистрибутивах не всегда, поэтому там приходится проверять варианты:
# cat /etc/redhat-release 
или
# cat /etc/os-release

Если не помогает ни то, ни другое, значит у вас какой-то специфичный дистрибутив и начать расследование стоит с команды uname.
# uanme -a
Она покажет архитектуру процессора и версию ядра. В ней же может быть и упоминание названия системы, например, Debian, но без указания конкретной версии, что не удобно, поэтому сначала использую lsb_release.

На Centos и её клонах по выводу uname -a можно по косвенным признаками понять, какая конкретно система используется. Например, в Centos 7 версия ядра Linux будет примерно такая:
3.10.0-1160.76.1.el7.x86_64
что намекает на 7-ю версию Centos.

А в Oracle Linux 8:
5.4.17-2136.308.9.el8uek.x86_64
что тоже может указывать на версию системы, хотя тут уже становится трудно ориентироваться. Лично я не знаю, что значит дополнение uek в имени ядра.

А вы как определяете версию Linux? Может есть способ проще и быстрее? И универсальный для всех систем.

#bash #linux
​​Для нагрузочного тестирования сайтов существует много готовых инструментов. Но когда речь заходит о чём-то более сложном, чем простые get запросы к каким-то урлам, ситуация резко меняется. Первым делом на ум приходит популярный JMeter, но взять и сразу написать для него сценарий доступно не только лишь всем.

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

Locust ставится из pip и имеет встроенный веб сервер для запуска тестов и просмотра результатов, поэтому никакой особой настройки не требует. Устанавливаем:
# apt install python3-pip
# pip3 install locust

Теперь надо подготовить сценарий для тестирования. В самом простом случае он выглядит вот так:

from locust import HttpUser, task

class TestUser(HttpUser):
  @task
  def test01(self):
    self.client.get("/")
    self.client.get("/forum")
self.client.get("/about")

Здесь мы просто шлём запросы на три урла: /, /forum, /about. Запускаем locust:
# locust -f locustfile.py
И отправляемся в браузер для запуска теста с указанными параметрами и просмотра статистики - http://0.0.0.0:8089.

В документации подробно разобран формат файлов сценария с готовыми примерами. А так как программа известная, в гугле легко найти много готовых примеров с авторизацией, куками, задержками, возрастанием нагрузки и т.д.

Locust в первую очередь хорош для автоматизации тестирования, во-вторую, для мониторинга. Для него есть готовый exporter для Prometheus. Вы можете регулярно запускать тесты и мониторить результаты. Вот хороший пример по этой теме (тесты api и отправка результатов в prometheus).

Аналоги Locust:
artillery.io
k6
yandex.tank
Taurus

Сайт / Исходники

#нагрузочное_тестирование
Selectel (крупный российский облачный провайдер) выпустили уютное видео о своей компании. Без скучных цифр, количества сотрудников и "печенек в офисе". Просто и красиво рассказали о том, какие люди у них работают и что делают.
Смотрите по ссылке: https://slc.tl/16dkm

Реклама. ООО Селектел 
Pb3XmBtzszFi2eqzKZuTnyt3u2iXKefUvX13iHE
Подбиваю хвосты уходящего года. Есть одиночный гипервизор, где изначально не оптимальным образом распределили дисковое пространство. Точнее, неправильно предсказали потребление разных виртуалок. В итоге через некоторое время сложилась ситуация, когда в одной осталось много лишнего места, а в другой недостаток.

Виртуалки на дефолтных разбиениях дисков в Centos 7: корневой раздел под lvm, отдельно /boot и xfs поверх них. Как известно, файловая система xfs не поддерживает уменьшение размера. Мне пришлось переносить систему с сохранением всей структуры дисков, просто уменьшив размер корня. Делал это так.

1️⃣ Добавил в систему новый диск /dev/sdb меньшего размера. Разбил через fdisk также, как текущий sda: sdb1 - /boot, sdb2 - lvm.

2️⃣ Создал новую группу томов и логический раздел под новый корень.
# pvcreate /dev/sdb2
# vgcreate vg_root /dev/sdb2
# lvcreate -n lv_root -l +100%FREE /dev/vg_root
Создал файловые системы:
# mkfs.xfs /dev/vg_root/lv_root
# mkfs.xfs /dev/sdb1

3️⃣ Смонтировал новые разделы и скопировал туда данные с текущих:
# mount /dev/vg_root/lv_root /mnt
# mount /dev/sdb1 /mnt/boot
# xfsdump -J - /dev/centos/root | xfsrestore -J - /mnt
# xfsdump -J - /dev/sda1 | xfsrestore -J - /mnt/boot
/dev/centos/root - текущий корневой логический раздел.

4️⃣ Зашёл в окружение chroot нового корня:
# for i in /proc/ /sys/ /dev/ /run/ ; do mount --bind $i /mnt/$i; done
# chroot /mnt/
Обновил загрузчик и заменил в текущем раздел centos/root на vg_root/lv_root.
# grub2-mkconfig -o /boot/grub2/grub.cfg
# mcedit /boot/grub2/grub.cfg
Руками сделал автозамену centos/root на vg_root/lv_root.
# grub2-install /dev/sdb
Также в /etc/fstab надо изменить UUID или имена устройств на новые. Раздел /boot лучше указать по UUID устройства /dev/sdb1, а корень как /dev/vg_root/lv_root.

После этого вышел из chroot и перезагрузил систему, отключив старый диск. У меня она не загрузилась, вывалившись в grub rescue. Я не понял, почему. Тем не менее, в grub rescue я указал раздел с /boot и вручную дал команду на загрузку. Система загрузилась. Уже в ней ещё раз сделал:
# grub2-install /dev/sdb
и после этого система стала нормально перезагружаться. Возможно где-то ошибся, когда с загрузчиком работал. Это не пошаговое руководство, потому что я его не отлаживал. Написал по памяти, когда уже закончил. Рассказал просто саму идею.

❗️Если будете повторять, то потренируйтесь сначала на тестовых виртуалках. Я подобные манипуляции делал много раз, на разных ОС, разделах и файловых системах, начиная ещё с Freebsd (моя самая первая статья на сайте). Идея везде примерно одинаковая, разница в нюансах.

Нужно более ли менее понимать, что делать, если система совсем не грузится, если грузится grub, но не загружается ОС, если загружается ОС, но падает в emergency mode. В Linux в плане загрузки всё последовательно и чаще всего понятно, где проблема. Это не Windows, которая если падает при загрузке, то начинается какое-то шаманство, чтобы понять, в чём проблема.

#linux
🎄 В конце года принято подводить итоги и делать поздравления. Я обычно этим не занимаюсь 😁 Планы на год не строю, поэтому и подводить нечего. Опыт моей жизни показывает, что строить долгосрочные планы на какие-то конкретные периоды не имеет смысла, хотя есть много источников информации, где это советуют делать.

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

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

Ниже традиционный для уходящего месяца рейтинг публикаций. До связи в новом году 🎄

📌 Больше всего просмотров:
◽️ Новость про почту для домена в Яндексе (7478)
◽️ Видео с обзором, установкой и настройкой passbolt (7275)
◽️ Система OnCall от Grafana (7253)

📌 Больше всего комментариев:
◽️ Новость про почту для домена в Яндексе (153)
◽️ Регулярные взломы LastPass (121)
◽️ Почтовый сервер Postfix + Dovecot (114)
◽️ Обновление сервера 1С на Linux (75)

📌 Больше всего пересылок:
◽️ Курсы от VK Teem по Linux (595)
◽️ Репозиторий devops-interview (501)
◽️ Онлайн сервисы для проверки почтовых серверов (444)

📌 Больше всего реакций:
◽️ Почтовый сервер Postfix + Dovecot (241)
◽️ Проброс портов в Windows (137)
◽️ Курсы от VK Teem по Linux (131)
◽️ Покупка ноутбука ThinkPad T480 (126)
◽️ Алиасы и функции в bash (113)

#топ
​​Не знаю, как у вас, а у меня не получается полноценно отключаться от забот. Вчера впервые с 30-го числа открыл почту и проверил оповещения мониторинга. Ничего критичного не случилось, просто решил посмотреть обстановку. Есть много систем, за которыми кроме меня, никто не следит. И хоть от меня и не требуется оперативная реакция в выходные дни (никогда на это не подписываюсь), я всё равно проверяю почту, потому что в случае проблем, решать их всё равно придётся рано или поздно мне. Поэтому лучше проверить заранее, когда есть время.

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

Раз уже речь зашла о мониторинге, поделюсь небольшим советом. Я люблю настраивая важные оповещения от Zabbix в Telegram, насыщать их emoji. Использую стандартный шаблон с Webhook. Как минимум добавляю в заголовок сообщения с проблемой что-то вроде ⚠️ или 🔥, а в решение проблемы или 🟢. Столкнулся с тем, что с некоторыми emoji стандартный шаблон не работает. Конкретно заметил на 🔥, но есть и другие. Сейчас точную ошибку не скажу, не записывал, но помню, что потратил некоторое время, пока не разобрался, в чём проблема с отправкой. Ошибка была неинформативная, в итоге случайно догадался проверить разные emoji.

А как у вас обстоят дела с отдыхом? Получается полноценно уходить на длинные выходные или отпуск, не проверяя рабочую почту и мессенджеры?

#разное
Делюсь с вами списком основных действий, которые я выполняю практически всегда при базовой настройке системы Linux. Причём не важно, как это делается - автоматически, при подготовке шаблона или вручную. Получился готовый how-to, который можно использовать при настройке.

1️⃣ Первым делом обновляю репозитории и устанавливаю все обновления. Очень часто у хостеров типовые шаблоны несвежие. Лучше сразу же всё обновить.
2️⃣ Проверяю сетевые настройки. В основном это нужно, чтобы понять, как они управляются. У разных хостеров и в разных системах могут быть большие отличия. Иногда меняю DNS серверы. В РФ чаще всего ставлю DNS от Яндекса. Меняю, если нужно, hostname.
3️⃣ Устанавливаю привычные утилиты и программы: htop, iftop, screen, mc, net-tools, bind9-dnsutils (bind-utils).
4️⃣ Проверяю настройки времени, часовых поясов, автообновления. Настраиваю, если что-то не сделано. Обязательно проверяю, что обновление времени работает. Некоторые хостеры блокируют ntp порты в том числе и на выход.
5️⃣ Меняю настройки службы SSH. В основном это смена порта с 22 на любой другой, либо разрешение/запрет аутентификации под root или по паролю. Либо всё вместе, либо по отдельности, в зависимости от потребностей.
6️⃣ Увеличиваю глубину хранения history терминала, настраиваю мгновенную запись команды в историю, а не после выхода из сеанса. Также добавляю сохранение времени выполнения команд.
7️⃣ Если за севером постоянного наблюдения и обслуживания не будет, то ставлю пакеты и настраиваю автоматическую установку обновления безопасности. Подключаю swap, если его нет.
8️⃣ Делаю настройку системной почты для root. Либо просто алиас с нужным ящиком добавляю, либо делаю полноценную настройку отправки через внешний smtp сервер.
9️⃣ В завершении настраиваю Firewall, либо отключаю, если не нужен.
🔟 После всех настроек обязательно перезагружаю сервер и убеждаюсь, что он нормально стартует с заданными настройками, что все службы запущены (ntpd, sshd, подключается swap и т.д.). В основном это нужно, чтобы проверить настройки Firewall и сети, если они менялись.

Если у вас есть, чем дополнить этот список, поделитесь в комментариях. Возможно я что-то важное забыл. Мой многолетний опыт собрал вот такой набор действий.

#linux
​​С появлением Docker стали бурно развиваться контейнеры. Одним из главных преимуществ по сравнению с виртуальными машинами была скорость запуска и размер контейнеров, а также экономия ресурсов хостовой машины. Разработчики активно начали развивать идею с размером образов. Насколько маленьким он может быть?

Сначала по привычке использовали образы на основе традиционных Linux систем - Debian, Centos и т.д. Потом появился очень маленький Alpine, затем пустой образ scratch. Сейчас дошли до distroless образов, где вообще нет привязки к какой-то конкретной системе. Насколько я могу понять архитектуру подобных образов, там только ядро Linux, а из user space вырезано вообще всё (пакетный менеджер, оболочки и т.д.), что не требуется для запуска приложения.

В погоне за минимализмом как-то стали забывать о производительности. Я встречал информацию, что некоторые приложения в образах Alpine работают заметно медленнее. Разница с типовым образом на Debian может достигать 20-30%. А ещё все эти минимальные образы очень неудобно отлаживать. В итоге экономия места оборачивается повышенной тратой рабочего времени разработчиков и поддержки.

Насколько я понимаю, вся эта тема с минимализмом актуальна на очень больших инфраструктурах с сотнями серверов и тысячами контейнеров. Первые distroless образы анонсировал Google. У него есть несколько базовых образов для python, java, nodejs. Сейчас эту тему подхватили и начали развивать. Например, есть большая коллекция готовых distroless образов у chainguard. Там не только среда исполнения для различных языков, но и distroless образы nginx, php, posgresql и т.д.

💡Я к чему всё это написал. Если у вас нет большой необходимости в очень маленьких образах, то не используйте всех этих кастратиков. Постоянно приходится пользоваться готовыми образами. Очень не нравится, когда внутри ничего нет. Экономия на спичках оборачивается потом лишними хлопотами в отладке.

#docker #devops
Вчера сделал публикацию с настройкой сервера. Заметил, что многие поинтересовались подробностями на тему настройки системной почты в Linux. Решил вынести это в отдельную публикацию и пояснить. Ранее не писал об этом заметок.

По умолчанию известные мне дистрибутивы Linux (Debian, Centos, Ubuntu) системную почту для пользователя root записывают в директорию /var/spool/mail. Там создаётся файл для каждого системного пользователя, для которого было отправлено хотя бы одно письмо. Почта для root может складываться в файл root или другого пользователя, который был создан во время установки системы.

Узнать, куда точно отправляется почта для root, можно в файле с алиасами - /etc/aliases. В строке root: посте двоеточия будет указано, куда отправлять почту суперпользователя. Это может быть как обычный локальный пользователь:
root: user01
так и сам root:
root: root

Если вы хотите отправлять эту почту на какой-то внешний ящик, то можно его указать в алиасе:
root: user@mail.example
После редактирования алиасов, нужно обновить локальную базу данных с ними:
# newaliases

Для того, чтобы отправить почту, вы должны установить локальный почтовый клиент или сервер. Например, postfix, либо любой другой (exim, msmtp и т.д.). Без дополнительной настройки этот почтовый сервер будет пытаться самостоятельно отправить почту. Если не выполнить предварительно настройку DNS, то с большой долей вероятности отправленное письмо попадёт в спам. В целом, это не проблема, если письмо получаете вы сами. Сделаете исключающее правило и можно больше ничего не настраивать.

Сейчас всё чаще отправка почты блокируется хостерами. Разрешить отправку по 25 порту либо вообще невозможно, либо нужно написать в тех. поддержку и объяснять, зачем вам это нужно. В большинстве случаев для системной почты заниматься этим не имеет смысла. Лучше использовать какой-то сторонний сервер для доставки почты. Для этого вам нужно настроить локальный почтовый клиент (либо сервер, работающий как клиент) на работу через внешний сервер. Настройка будет зависеть от типа сервера, который вы установите.

У меня есть статья с примером настройки почтового сервера postfix для отправки системной почты через внешний сервер. Отдельно я рассмотрел вопрос отправки почты через почту Яндекса, где нужно учесть один важный нюанс. Адрес отправителя должен совпадать с логином в почтовой системе. Рассказываю, как в postfix его изменить, потому что по умолчанию отправка будет идти от локального пользователя сервера.

Реализаций отправки системной почты может быть много. Подойдёт любой локальный почтовый клиент или сервер с возможностью отправки через внешний сервер. Я всегда использую postfix, потому что умею его настраивать. Но у него не самая простая и очевидная настройка для таких задач. Проще взять msmtp. Там вся настройка в одном файле. Вот пример для Debian.

А вы как решаете вопрос с доставкой системной почты? Собираете её? В целом, там не так много полезной информации, которую прям обязательно нужно читать. Если есть система сбора логов и мониторинг, то всё самое важное в системном логе тоже будет. В основном эта почта интересна для контроля за задачами cron. Иногда можно почитать о новых пакетах, которые предлагают к обновлению. Больше не припомню чего-то реально полезного.

#mailserver #linux
​​Почтовые сервера условно можно разделить на 3 типа по сфере применения:
для переписки пользователей;
для отправки сообщений с сайтов и веб серверов;
для массовых рассылок.

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

Ранее я чаще всего касался темы почтового сервера для переписки пользователей. Сейчас хочу рассказать про сервер для отправки почты с сайта или приложения и частично массовых рассылок. Речь пойдёт про open source проект Postal. Это бесплатный аналог таких сервисов, как  Sendgrid, Mailgun, Postmark и т.д. с возможностью установки на своем железе.

Postal умеет:
Использовать встроенный API для приёма почты к отправке.
Использовать разные домены и учётные записи для отправки.
Собирать и отображать в виде графиков статистику по отправке и получению писем.
Отображать очередь отправки.
Использовать вебхуки для просмотра информации о доставке в режиме реального времени.
Отслеживать корректность настроек DNS для добавленных доменов.
Управлять политиками хранения писем.
Логировать все этапы создания и доставки письма.
Искать письма с заданными параметрами по всему почтовому серверу.
Временно задержать отправку сообщений.
Пересылать входящую почту на другие smtp серверы или почтовые ящики.
Пересылать входящую почту в приложение по HTTP в виде JSON.
Определять спам с помощью SpamAssassin и вирусы с помощью ClamAV.

Почтовый сервер Postal запускается с помощью docker-compose, а настраивается и управляется с помощью набора скриптов. То есть вам не придётся запускать самому контейнеры, указывать переменные и т.д. Достаточно будет передать параметры скрипту, он сам всё настроит и запустит. Процесс установки и настройки описан в документации. Достаточно один раз в консоли всё настроить и запустить. Дальнейшее управление через веб интерфейс. Ходить в консоль больше не придётся. Отдельно нужно будет аккуратно настроить DNS записи, получив информацию о DKIM и SPF записях в веб интерфейсе.

Под капотом у Postal веб сервер Caddy, сервер баз данных MariaDB для хранения информации, RabbitMQ для управления сообщениями между рабочими процессами. Насколько я понял, реализация непосредственно smtp сервера в Postal своя, написанная на Ruby.

Аналогом Postal является Cuttlefish. Более простой сервер для отправки почты с удобным веб интерфейсом. Тоже написан на Ruby, под капотом привычный Postfix.

Сайт / Исходники

#mailserver