ServerAdmin.ru
26.6K subscribers
197 photos
24 videos
8 files
2.47K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
Делюсь с вами историей из практики, которая случилась на днях. Она вышла типовой и показательной, поэтому рассказываю. Поясню, что я участвовал в рамках платной консультации и настройками не занимался. Только предлагал разные варианты на основе своего опыта.

Ко мне обратился владелец сервиса со средней нагрузкой примерно в 600 rps (запросов в секунду). Использовался типовой стек на базе Nginx, Php-fpm, MySQL и некоторых вспомогательных сервисов. Все запросы клиентов стекались в один php скрипт. Частично был настроен мониторинг на базе Prometheus и Grafana, но сделан был для галочки и большая часть нужных метрик там отсутствовала (по nginx и php-fpm ничего не было). MySQL сервер был отдельной VPS, запросы к нему шли через ProxySQL.

Проблема была на первый взгляд простая. Часть клиентов получали 502 ошибку, которая в nginx выглядела вот так:

connect() to unix:/run/php-fpm/www.sock failed (11: Resource temporarily unavailable) while connecting to upstream

Обычно это следствие нехватки php-fpm воркеров. Если ресурсы сервера позволяют, то надо увеличить их количество. Ресурсов было много. Из 16 ядер и 32 Гб памяти занято было от силы 3-4 ядра и 3-4 Гб памяти. При этом в php-fpm был настроен статичный запуск воркеров, а их кол-во всего 32, что по моим представлениям очень мало для подобной задачи и сервера.

Дальше началось самое интересное. Увеличение числа воркеров не приводило к исчезновению ошибки об их нехватке в nginx. Более того, чем больше добавляешь воркеров, тем больше 502 ошибок у пользователей и тем меньше 200 ответов.

После того, как поиграли с числом воркеров php-fpm, я понял, что узкое место не со стороны веб сервера, но так как мониторинга не было, не понятно, куда смотреть. На всякий случай проверили лимиты операционной системы на подключения к unix сокетам, сетевым подключениям, файловым дескрипторам. Проблем не было. Потом таймауты nginx и fastcgi. На первый взгляд тоже всё в порядке. Настроили быстро мониторинг php-fpm и через консоль вручную смотрели метрики, но ничего полезного там не увидели.

Для эксперимента я предложил сменить режим работы php-fpm с unix сокета на tcp и добавить много воркеров, штук 100-200, можно было бы и 500, сервер тянул. Ошибка в Nginx изменилась, но суть осталась прежней. Там просто по таймауту отваливались подключения к воркерам. Увеличение количества воркеров не решало проблему.

На этом этапе я уже окончательно убедился, что проблема не с веб сервером. У меня были две идеи: либо не тянет БД, либо в php скрипте какой-то замкнутый цикл, который с ростом числа воркеров просто плодит паразитную нагрузку, а запросы клиентов так и остаются с ошибками. Для БД был какой-то мониторинг, но он толком ничего не показывал. Были метрики числа и времени выполнения запросов, число столбцов, участвовавших в них и что-то ещё. Эти метрики показывали ровные линии, без всплесков и провалов. Каких-то базовых метрик на тему производительности не было, поэтому трудно было оценить, что там вообще происходит. По htop повышенная нагрузка не просматривалась.

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

Потом заказчик добавил ещё один веб сервер и часть запросов отправил туда, но это не помогло. Проблема решилась просто — увеличили в 2 раза ресурсы MySQL сервера и всё поехало, как надо.

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

#мониторинг
Старый мем из комментариев к одной статье на сайте. Я его публиковал уже пару лет назад, когда тут читателей раз в 5 меньше было. Читать диалог снизу вверх.

Как обычно, мемы в комментариях приветствуются. Я все просмотрел к прошлому посту.

#мем
Ко мне поступил вопрос, ответ на который я знаю. Более того, он реализован в виде статьи, по которой можно решить похожие задачи по аналогии. Я не буду копировать вопрос слово в слово, сокращу, оставив суть.

Zabbix мониторит инфраструктуру, метрики собираются, триггеры работают. Но хочется получать больше фактической информации в момент срабатывания триггера. Например, при срабатывании триггера на нехватку места на диске, сразу же пройтись по серверу командой:
find -type f -exec du -Sh {} + | sort -rh | head -n 10
И результат отправить в уведомление или где-то сохранить для просмотра.

Желание понятное. Я сам одно время задумался над такой же задачей и реализовал её в лоб. Мне захотелось, чтобы вместе с оповещением триггера о том, что высокая нагрузка на CPU, мне сразу же прилетела информация о топ 10 самых нагруженных процессов.

У Zabbix нет готовых инструментов для реализации такой задачи. Я реализовал следующим образом:

1️⃣ Добавляю в стандартный шаблон новый айтем типа Zabbix Trapper.

2️⃣ Разрешаю на zabbix agent запуск внешних команд.

3️⃣ Настраиваю на Zabbix Server действие при срабатывании одного из нужных мне триггеров. В действии указываю выполнение команды на целевом сервере, которая сформирует список процессов и отправит его на сервер мониторинга с помощью zabbix-sender.

В моём случае я отправлял результат работы команды:
# ps aux --sort=-pcpu,+pmem | awk 'NR<=10'
По аналогии решается любая похожая задача.

Подробности рассказывать здесь не буду, так как всё это наглядно по шагам описано в статье:
https://serveradmin.ru/monitoring-spiska-zapushhennyh-proczessov-v-zabbix/

#вопрос_читателя #zabbix
​​Закрою тему с регулярными выражениями ещё парой полезных ссылок, которыми поделились в комментариях. Первое — сервис на основе OpenAI, который английский текст переводит в регулярные выражения. Причём делает он это неплохо.

https://www.autoregex.xyz

Я попробовал пару примеров. Сделать регулярку по маске телефона +7903ххххххх. Прям так и написал в запрос: Phone number regexp by mask +7903ххххххх. Выдал ответ: \+7903\d{6}. В целом верно, только должно быть \+7903\d{7}.

Вот ещё пример. Минимум восемь символов, по крайней мере, одна заглавная английская буква, одна строчная английская буква, одна цифра и один специальный символ. Запрос написал так: Minimum eight characters, at least one upper case English letter, one lower case English letter, one number and one special character. Регулярку получил такую 😱:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{8,}$

Проверил через regex101.com, регулярка верная. По крайней мере не смог подобрать неподходящий вариант. Спецсимволы, как я понял, перечислены тут - [@$!%*#?&]

И ещё одна полезная ссылка:

https://regexlearn.com/ru

Это хорошая обучающая программа на русском языке для изучения регулярок. По своей сути это open source проект, переведённый на разные языки.

📌 Все ресурсы по regexp одним списком:
▪️ regex101.com — проверка регулярных выражений
▪️ grex — автоматическое составление регулярок
▪️ regexper.com — схематическое изображение регулярок
▪️ ihateregex.io — готовые примеры регулярных выражений
▪️ autoregex.xyz — построение регулярок с помощью ИИ
▪️ stepik.org — бесплатный курс для изучения регулярок
▪️ regexlearn.com — обучение regex на русском языке

#regex
​​На днях нужно было с API поработать. Поставил, как обычно, Postman. Я уже писал о нём. Раньше всегда его использовал, а на новом ноуте ещё не приходилось. Скачал последнюю версию, запустил. Заметил, что он как-то потяжелел. Решил посмотреть на аналоги.

Сразу скажу, что наиболее известный аналог — Insomnia.rest. Я не стал его пробовать, так как слышал про плагин для VSCode — REST Client. Решил попробовать его, так как постоянно использую VSCode. В целом, можно подёргать апишку одиночными запросами, посмотреть результат, но мне не очень понравился предложенный формат работы в интерфейсе VSCode. Так что вернулся на Postman.

Покажу пример, как его использую я. Допустим, надо замониторить какие-то метрики из API. Сначала надо всё проверить, посмотреть ответы, форматы данных и т.д. Доступ к API часто по временным токенам, которые надо постоянно обновлять. В Postman удобно сделать переменные, записать туда токен или какую-то ещё меняющуюся информацию (uid и т.д.) и потом во всех запросах использовать эту переменную. Запросы все сохраняются, открываются в разных вкладках. Один раз настроив все переменные и запросы, можно сохранить проект и потом к нему вернуться.

Это удобно, в отличие от работы с апишками через curl в консоли. Я долгое время именно так и работал с api. Потом попробовал Postman и стал пользоваться им, если нужно что-то более, чем сделать несколько одиночных запросов. Так что рекомендую, если ещё не пробовали.

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

#api #devops
Хочу подкинуть вам идею, которая может когда-нибудь пригодиться. Подключение к NFS серверу можно организовать через проброс портов по SSH и это нормально работает. Когда есть sshfs, может показаться, что в этом нет никакого смысла. Могу привести свой пример, когда мне это пригодилось.

Мне нужно было перекинуть бэкапы виртуалок с внешнего сервера Proxmox домой на мой NFS сервер. Тут вариант либо порты пробрасывать на домашний сервер, но это если у тебя белый IP, либо как раз воспользоваться пробросом портов, подключившись из дома к внешнему серверу по SSH.

Настраивать тут особо ничего не надо. Если NFS сервер уже настроен, то достаточно сделать обратный проброс локального порта 2049 на внешний сервер:

# ssh -R 2049:127.0.0.1:2049 root@server-ip

Если на той стороне уже есть nfs сервер и порт 2049 занят, то можно указать другой. Только надо аккуратно поменять ровно то, что нужно. Я обычно путаюсь в пробросе портов по SSH, так как тут неинтуитивно. Должно быть вот так:

# ssh -R 3049:127.0.0.1:2049 root@server-ip

Останется только на удалённом сервере подмонтировать том:
# mount -t nfs -o port=3049 localhost:/data /mnt/nfs-share

Тут ещё стоит понимать, что nfs и sshfs принципиально разные вещи. Первое — это полноценная сетевая файловая система со своими службами, хранением метаданных и т.д., а второе — реализация доступа к файлам по протоколу SFTP на базе FUSE (Filesystem in Userspace). SFTP обычно используется для разовой передачи файлов. NFS же можно ставить на постоянку. Это стабильное решение (но не через SSH 😀).

#nfs #ssh #fileserver
Те, кто постоянно работают с Postgresql наверняка знают про такой параметр, как stats_temp_directory. В самой документации по СУБД сказано, что его перенос в ОЗУ снизит нагрузку на файловое хранилище и увеличит быстродействие.

Я в обязательном порядке переносил это хранилище для временных данных статистики в tmpfs, потому что при использовании SSD этот каталог очень быстро съедал его ресурс. И это не пустые опасения, как часто бывает с SSD. Я реально видел по мониторингу, как утекал ресурс. Там идёт постоянная активная перезапись.

Хорошая новость в том, что в Postgres 15 больше не потребуется это делать. Там все подсчёты статистики выполняются в памяти по умолчанию. Такого параметра, как stats_temp_directory больше нет.

Сейчас уже активно обновляют или ставят 1С вместе с Postgres 15, так что информирую. Сборку postgresql для 1С можно скачать тут - https://1c.postgres.ru. 15-я уже в наличии.

#postgresql
​​Недавно на официальном канале Zabbix были опубликованы несколько интересных видео с митапа на английском языке. Основная тема — мониторинг облачных структур и Kubernetes. Там прям с конкретными примерами внедрения (по куберу). Что, как и куда ставили, какие метрики собирали и т.д. Всё это с реальными картинками. Получилось информативно.

Если вам интересна эта тема, то рекомендую.

Kubernetes monitoring with Zabbix - Initial configuration
Monitoring Kubernetes with Zabbix
Cloud monitoring with Zabbix
Monitoring O365 Defender and other Azure cloud resources

Также напоминаю, что Zabbix регулярно проводит вебинары на русском языке по базовым темам. Завтра в 11 по мск должен быть вебинар Установите и настройте Zabbix за 5 минут.

#zabbix #видео
​​Вчера посмотрел очень любопытные видео про взлом гипервизора Esxi и шифрование виртуалок. Вот они:

Esxi: меня взломали! Лечим и понимаем причину.
Esxi: меня взломали! Лечим и понимаем причину, часть 2

Там прям со всеми подробностями всё описано и рассказано. И как "шифровали" и как "расшифровывали". Это история со счастливым концом, но так бывает не всегда.

Я вообще не удивлён такой истории, так как лет 5 назад один мой знакомый точно так же в один прекрасный момент получил полностью зашифрованный набитый виртуалками гипервизор Esxi. Потом дня 3 лил на него бэкапы (хорошо, что были), восстанавливал работоспособность. Гипервизор обслуживал работу реального производства.

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

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

Из-за таких историй с фаерволами, в которые я тоже попадал, я уже неоднократно делал заметки на тему nmap и других похожих программ. Периодически делайте тестирование своей инфраструктуры откуда-то извне. Так у вас есть шанс заметить то, что не должно быть в публичном доступе. Хотя бы простенький скрипт используйте, который я описывал в статье или программный продукт, типа простенького flan или более серьезных OpenVAS и Nessus Scanner.

Лично я давно уже все SSH доступы, а особенно доступы к интерфейсам управления гипервизорами, закрываю белыми списками IP адресов. Даже если у вас нет статического IP, добавьте всю подсеть своего домашнего провайдера. А вообще советую вам завести 2-3 максимально дешёвые VPS именно для получения статического внешнего IP. Это если вам его больше взять неоткуда.

Кому-нибудь ещё зашифровали гипервизор? Я так понял, что история получилась массовая.

#security
​​Расскажу вам про полезный инструмент, которым с одной стороны можно будет пользоваться самим, а с другой стороны для понимания того, как этот инструмент могут использовать другие. В том числе и против вас.

Речь пойдёт про сервис для обмена файлами pwndrop, который можно развернуть у себя. Это open source проект, исходники на github. В базе это простой и удобный сервис для обмена файлами. Ставится в пару действий, имеет простой конфиг, приятный и удобный веб интерфейс. Служба написана на Go, веб интерфейс на JavaScript. Работает шустро.

Основной функционал у pwndrop типичный для таких сервисов. Загружаете файл, получаете ссылку и делитесь ею с другими людьми. Причём загрузить ваш файл они могут как по http, так и по webdav. Из удобств — автоматически получает сертификат от let's encrypt, если развёрнут на реальном доменном имени с DNS записью.

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

У pwndrop можно изменить url админки, чтобы скрыть её от посторонних глаз. Обращение на основной домен можно перенаправить в любое другое место. То есть наличие самого сервиса на конкретном домене можно спрятать, оставив только доступ по прямым ссылкам, которые заранее известны.

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

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

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

Pwndrop ставится скриптом, либо вручную скачиванием архива со всеми файлами. По умолчанию он устанавливает себя в /usr/local/pwndrop, там и конфиг, и бинарник. Также создаёт systemd службу. Формат конфига очень простой, примеры настроек есть в репозитории. Их буквально несколько штук (порты, директории, ip и т.д.). Также запустить сервер можно в Docker с помощью готового образа от linuxserver.io.

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

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

#fileserver
​​Мне казалось, что когда-то я уже делал публикацию на тему софта на смартфоне для системного администратора, но не смог её найти 🤷🏻‍♂️ Может мне это приснилось 🤫 Решил поднять ещё раз эту тему и собрать обратную связь.

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

Первый список того, что стоит прямо сейчас:
RD Client — RDP клиент от Microsoft. Пользуюсь регулярно для разных задач.
OpenVPN Connect — обычный ovpn клиент.
Total Commander — просто люблю этот файловый менеджер, использую постоянно, особенно lan плагин, чтобы копировать по smb с NAS.
Todoist — про этот сервис упоминал не раз, использую в качестве списка дел, пользуюсь постоянно, но на смартфоне на крайний случай стоит.
MikroTik — приложение для управления Микротиками.
KPass — стоит на всякий случай, если придётся глянуть пароли. Пользуюсь редко, постоянно файл с паролями на смартфоне не лежит, надо сначала скачать.
Joplin — клиент для просмотра заметок, пользуюсь на смартфоне редко, но иногда надо.
Planyway — приложение от одноименного сервиса, использую для календаря с планированием, рассказывал о нём отдельно.
ProxMon — ставил, когда писал заметку, на практике не возникла ни одно ситуации, что мне пришлось бы им воспользоваться.
UptimeRobot — приложение от одноимённого сервиса мониторинга, а котором рассказывал отдельно.

💡Теперь то, что было полезным и стояло в разное время:
Wifi manager — позволяет быстро и наглядно оценить загруженность частоты wifi по каналам.
Wifi Analyzer — с его помощью я проверял работу capsman от микротик. С помощью программы можно увидеть множество точек за одним SSID и подключаться к ним по MAC адресу. Это одна из возможностей, которая интересна лично мне. В программе много других полезных функций.
Zadarma — клиент sip телефонии. Использую, когда настраиваю asterisk. Сервис задарма удобен в качестве тестового транка на время настройки и тестирования.
Клавиатура для паролей — простое приложение, которое позволяет легко вводить пароли, которые придуманы в русской раскладке, но вводятся на английском языке. Сам я такие не люблю использовать, но приходится работать и с ними. Без русской клавиатуры их вводить очень неудобно.
JuiceSSH — ssh клиент. Пользовался редко, так как через смартфон работать по ssh очень неудобно, хоть какой клиент ни возьми.
PingTools — набор полезных сетевых утилит. Можно пингануть, трассерунть что-то прямо из смартфона.

🎓Отдельно расскажу про приложение Linux Command Library, которое можно поставить из Google Play. Это огромная база данных по командам, утилитам, однострочникам в Linux. Хоть и не часто, но иногда приходится что-то искать, смотреть в смартфоне, особенно когда в серверную за консоль приходишь. В ней удобно подсмотреть какие-то команды, вместо того, чтобы их гуглить. Там всё удобно разбито по темам. В общем, сами посмотрите, приложение популярное.

❗️А теперь хотел бы у вас спросить, что из нашей тематики у вас есть в смартфонах под Android? Если будет много полезных комментариев с программами, то сделаю ещё один общий список.

#смартфон #разное #android
Старенький мемчик, но мне он очень нравится. Может потому, что тут собака. В интернете принято умиляться котиками, но я их не очень люблю. Другое дело собака, обожаю их.

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

#мем
​​Я уже вижу очертания будущей войны роботов и людей. У меня в районе уже несколько лет Яндекс обкатывает свои такси на ИИ. Сейчас всё чаще вижу, что машинами управляют не люди. Только наблюдают за ними. Раньше было не так. Управляли водители, ИИ учился.

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

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

Вот конкретные примеры раздражения, которые наблюдал я:
1️⃣ Человек только подходит к пешеходному переходу, робот уже останавливается.
2️⃣ Светофор мигает жёлтым, робот останавливается заблаговременно.
3️⃣ Робот пропускает машины, чтобы сделать поворот. Ждёт, когда будет безопасный интервал, не лезет без этого.
4️⃣ Робот едет медленно в жилом районе, 30-40 км. в час.
5️⃣ Робот сильно замедляет движение на лежачих полицейских.

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

Больше всего раздражаются водители коммерческого транспорта и таксисты. То есть те, кто работают на машинах. Для них спокойная культурная езда — прямой убыток. Ну или так они думают.

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

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

#разное
​​Один из подписчиков поделился со мной интересным проектом — Proxmox Helper Scripts. Это большой набор bash скриптов для управления гипервизором, виртуалками и контейнерами через консоль.

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

Я изучил некоторые скрипты. Это очень простой bash код, который можно посмотреть, понять, изучить и что-то взять на вооружение. Мне один раз предложили решить комплексную задачу по автоматизации развёртывания VM в Proxmox для тестовой среды. Я сначала согласился, набросал черновики, но потом отказался от задачи, так как не было времени довести до ума. Думал, потом доделаю и выложу в статье или заметке, но так и не доделал. Для тех, кому интересно, использовал стандартные CLI команды Proxmox.

Набор Proxmox Helper Scripts — это продукт для домашнего использования любителями этой виртуализации. Готовые LXC контейнеры для установки тоже на это намекают (Home Assistant, Pi-hole, Syncthing, CrowdSec и т.д.). Я лично для себя там ничего полезного не нашёл, но в целом идея нормальная. Свою аудиторию она найдёт. Автор активно пилит скрипты. Видно по почти ежедневным обновлениям репозитория. Я попробовал установить некоторые LXC контейнеры. Сделано удобно, мне понравилось. На выходе полностью работающий сервис в обычном контейнере.

👍 Отдельно отмечу скрипт по установке тёмной темы интерфейса управления. Он устанавливает качественную и проработанную тёмную тему - PVEDiscordDark.

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

p.s. Отдельное спасибо всем, кто шлёт в личку что-то интересное. Я обычно всё проверяю, но не всё становится заметками.

#proxmox
В выходные разбирал свой старенький HP Proliant N54L Microserver, который трудится в качестве NAS уже лет 8. На него установлен Xpenology.

С самим сервером всё в порядке. Заметил, что шуметь стал сильнее, поэтому полностью разобрал и продул. У него всего 2 вентилятора - по центру сзади для продувки хардов, и один в блоке питания.

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

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

Так что если хотите приобрести простенький файловый сервер, обратите внимание на б.у. серверы HP Microserver. Это недорогие и качественные изделия.

#железо
​​Решил для себя проработать ещё один документ от CIS на тему MySQL сервера. Взял версию 5.7, как наиболее универсальный вариант. Честно сказать, документ вообще не впечатлил. Показался набором очевидных банальностей. Ничего для себя оттуда не вынес, но так как потратил довольно много времени на прочтение и разбор, решил всё же сделать небольшую подборку для вас о тех вещах, что мне показались сколько-нибудь полезными.

📌 Mysql сервер должен запускать от непривилегированного пользователя без shell доступа к серверу. Все файлы и директории, с которыми работает сервер, должны принадлежать этому пользователю без доступа посторонних. Это же касается и лог файлов, особенно с ошибками.

📌 Если есть возможность использовать аутентификацию пользователей через unix сокет, оставьте только её, а остальные виды отключите. Речь идёт про плагин auth_socket для mysql или unix_socket для mariadb. Удалённые подключения к mysql серверу для безопасности стоит настроить по tls с помощью сертификатов.

📌 Обязательно ограничьте запуск сервера конкретным IP адресом, на котором он должен быть доступен. Например так:
bind_address=192.168.11.3
Если используется внешний IP адрес, необходимо ограничить к нему доступ на уровне firewall.

📌 Если не используете символьные ссылки в файлах, с которыми работает сервер, то отключите их поддержку в my.cnf:
skip-symbolic-links = YES

📌 Настройте ведение лога ошибок:
log-error = /var/log/mysql/error.log

📌 При работе с mysql сервером через консольный клиент следует избегать ситуаций, когда пароль пользователя используется непосредственно в команде и остаётся в системной истории команд. Я, кстати, и сам так попадал, и на других серверах видел пароли mysql пользователей в истории bash. Стоит избегать вот таких конструкций:
# mysql -u admin -p password
Либо интерактивно вводите пароль, либо храните в отдельном файле .my.cnf с ограничением доступа.

Далее обобщил целый набор банальностей, которые разделены на множество подразделов и подробно описаны на десятках страниц. В общем и целом там вот что.

💡Необходимо устанавливать все обновления, удалить все тестовые данные, если они есть. Проверить всех пользователей и их права. Особенно обратить внимание на права SUPER, PROCESS, CREATE USER, GRANT OPTION. Они должны быть только у административных пользователей.

💡Необходимо следить за бэкапами, за учётными записями, от имени которых они выполняются. Не забывать про binlog, если вам нужна возможность восстановления между полными бэкапами.

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

💡По возможности сервер должен быть изолирован от остальных служб на отдельной VPS или сервере.

#cis #mysql
​​На прошлой неделе проскочила новость по куче групп и сайтов о том, что какие-то "известные" релизеры из NTDEV выпустили урезанную версию Windows 11 под названием сборки tiny11. Пример новости:

NTDEV выпустила tiny11 — облегчённую версию Windows 11 Pro 22H2, которой требуется всего 2 ГБ ОЗУ и 8 ГБ места на диске

У меня много старого железа, особенно хороших ноутбуков, которые жалко выкинуть, а использовать не особо получается, поэтому новость заинтересовала. Я как раз недавно накатил на один из старых ноутов на Corel 2 Duo, 2 Гб оперативки и 40 Гб SSD Windows 11. Интересно было посмотреть, как заработает. В целом, заработало, но очевидно, что со временем не хватит места на SSD.

Tiny11 требует всего 8 Гб на диске, поэтому в конкретно моём случае выглядит привлекательно. А с учётом того, что я только что накатил туда полноценную Win11, можно сравнить с этой сборкой. В общем, не откладывая в долгий ящик, поставил я эту систему на ноут. И она реально работает лучше. Места занимает меньше, и шевелится в целом лучше.

Поставил туда браузер, старый Office 2010. Всё работает вполне сносно. Можно спокойно сайты смотреть, youtube, фильмы из домашней коллекции, работать с документами. Детям для учёбы сгодится, или для мультиков на даче. Я всех троих приучаю с малолетства навыкам работы с компьютером. Дома за стационарными сидят, летом ноуты пригодятся. Жаль только, что на старом железе не работает MineCraft из-за дров видеокарт. На старых не запускается. Дома трое (8, 6, 4 года) с азартом играют на домашнем сервере.

Такую сборку, кстати, удобно использовать в тестовых лабах, типа EVE-NG, GNS3 или PNETLab.

#windows
Любопытный трюк подсмотрел, когда изучал документы от CIS. Если вы хотите гарантированно защититься от создания конкретного файла, то просто сделайте вместо него символьную ссылку в /dev/null.

Например, если вы хотите себя подстраховать и гарантированно запретить сохранение истории mysql команд при работе в консоли, сделайте символьную ссылку на дефолтное расположение файла с историей команд:

# ln -s /dev/null $HOME/.mysql_history

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

Мне бы сходу пришла другая идея — создать пустой файл с таким же именем и назначить ему такие права, чтобы никто не смог его изменять. Но какие-то сервисы могут вести себя не так, как ты ожидаешь. Например, не будут стартовать, либо рядом запишут копию файла с другим именем. Вариант с символьной ссылкой в /dev/null более прост и надёжен.

#bash #terminal
​​Настраивал на днях мониторинг Zabbix с помощью HTTP агента. Мне нужно было довольно часто делать проверки, чем чаще, тем лучше. Взял для начала интервал в 20 секунд. И тут же получил затык. Реально проверки выполнялись гораздо дольше с разбросом между 1-2 минутами.

Начал разбираться. Первым делом заподозрил нехватку HTTP Pollers. Прибавил сразу с запасом:
StartHTTPPollers=20
Это вообще никак не помогло. Оно и понятно. Это была первая и единственная HTTP проверка на тот момент.

Посмотрел логи сервера в надежде увидеть там какие-то подсказки, но не помогло. Стал копать в сторону таймаутов и интервалов именно для http агента. Там же под капотом другие инструменты. Конкретно эти проверки реализуются с помощью curl. Думаю, может там кроются какие-то нюансы. В итоге ничего не придумал и не нашёл. Никаких особых настроек конкретно для http агента нет. Всё выполняется в рамках всех проверок.

💡И тут меня осенило. Зашёл и проверил очередь запросов в Zabbix — Администрирование ⇨ Очередь ⇨ Обзор очереди. А тут сотни запросов в ожидании от 30 секунд до 1 минуты. На сервере очень много simple check и icmp запросов. Нагрузку на сервер они особо не создают, поэтому не заметно, что их много и они тупят. Для этих проверок не критичны задержки, поэтому никто и не заметил, что они иногда не соблюдают заданный интервал.

Далее открыл стандартный дашборд Zabbix под названием Zabbix server health. На нём есть 2 нужных виджета: Utilization of data collectors и Queue size. На первом видно, каких именно обработчиков не хватает, чтобы не росла очередь. В моём случае это были poller data collector и icmp pinger data collector. Увеличил их количество в конфиге сервера:
StartPollers=25
StartPingers=10
и всё поехало как надо. Очередь рассосалась, HTTP агент стал работать точно в заданных интервал в 20 секунд.

#zabbix
​​Обработал несколько материалов на тему Nginx и подготовил универсальный конфиг с общими параметрами и некоторыми примерами настроек для виртуального хоста. Перед применением конфиг обязательно правится под ваш сервер. Нужно сделать некоторые подготовительные действия, чтобы на нём завестись. Как минимум, получить сертификаты, создать нужные директории, сгенерировать dhparam.pem, какие-то пути подправить и т.д.

https://pastebin.com/dHscS0Vi

Это компиляция из моих же настроек в постах про Nginx (1, 2). Настройки TLS частично подсмотрел в генераторе от Mozilla:
https://ssl-config.mozilla.org/

Также кое что посмотрел в генераторе конфигов от Digital Ocean:
https://www.digitalocean.com/community/tools/nginx

Проверил всё это дело на nginx playground:
https://nginx-playground.wizardzines.com

А также с помощью анализатора конфигов Nginx от Яндекса gixy:
https://github.com/yandex/gixy

Настройки TLS проверил тут:
https://www.ssllabs.com/ssltest

Параметры моего конфига поддерживают работу TLS 1.0 и 1.1. За это дают большой штраф. Можете отключить эти протоколы и соответствующие шифры, но тогда, к примеру, отвалятся все старые андроиды версии 4 и ниже. Смотрите сами, нужна ли вам поддержка максимального числа оборудования, или важнее соответствие современным протоколам безопасности.

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

📌 В завершении несколько полезных ссылок на мои материалы по теме Nginx:
Подробная установка и настройка Nginx с примерами
Автоматическое тестирование конфигурации Nginx
Правильный redirect 301 для SEO в Nginx
Nginx в качестве балансировщика нагрузки
Проксирование запросов в nginx с помощью proxy_pass
Сборка rpm пакета nginx с дополнительными модулями

#nginx #webserver