ServerAdmin.ru
31K subscribers
573 photos
46 videos
22 files
2.83K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
Совет-предостережение насчёт systemd, монтирования дисков и некоторых облачных провайдеров. Ситуация, с которой сталкивался сам, а потом встречал ещё не раз. Если не ошибаюсь, последний раз такой механизм видел у хостера Linode.

В Linux есть служба systemd-mount, о которой я уже ранее писал. Хостер может её использовать для автоматического подключения сетевых дисков с разными параметрами. В целом это удобно и для него, и для пользователя. У меня был подключен в точку монтирования один такой диск. Я решил увеличить его в объёме и выбрать более производительный.

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

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

Идут постоянные попытки от systemd отмонтировать раздел, к которому подмонтирован уже НОВЫЙ диск. То есть у него записано где-то (я нашел в /run/systemd/generator), что к этой точке монтирования подключен старый диск. Софт хостера по управлению ресурсами просит systemd отключить старый диск от его точки монтирования, хотя по факту она уже занята другим диском.

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

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

Компания выпустила свой сервер - RouterOS enterprise Data Server со следующими характеристиками:

◽️20 слотов под U.2 NVMe диски, с поддежкой M.2
◽️сетевые порты: 2×100G QSFP28, 4×25G SFP28, 4×10G SFP+, 2×10G Ethernet
◽️16-core 2 GHz ARM CPU + 32GB DDR4 RAM

Внутри, как и ожидается – RouterOS в редакции Special ROSE edition с поддержкой в том числе технологии NVMe-TCP для экспорта дисков другим серверам. Это помимо традиционных SMB, NFS, iSCSI.

Компания позиционирует свой сервер как очень быстрое локальное хранилище под нагрузку, запущенную в контейнерах, которые RouterOS 7 поддерживает уже сейчас. В описании явно указаны примеры применения: MinIO, Nextcloud, Shinobi, Frigate и другие.

Неожиданная новинка. Цена всего $1950, что намекает на сегмент малого и среднего бизнеса. И при этом такие скорости, которые там особо не нужны.

Что думаете по поводу этих серверов? Мне кажется, зря они в сервера подались. Лучше бы на сетевых устройствах сконцентрировались, починили баги RouterOS 7, запустили бы наконец Long Term ветку. Представляю, сколько вылезет багов в системе на этом сервере, особенно в работе контейнеров под нагрузкой. Там инструментов для диагностики почти нет, работать с ними неудобно. Я бы не стал.

#mikrotik
This media is not supported in your browser
VIEW IN TELEGRAM
Типичная ситуация, которую я видел много раз. По какой-то причине некоторые руководители считают, что можно уволить сисадмина, не взять сразу на его место кого-нибудь, и оно само как-то будет работать. А потом что-то начинает ломаться.

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

Иногда мне пишут люди и просят помочь с какой-то проблемой, потому что сисадмин уволился и никто не знает, что делать. Я не берусь за такие задачи, обычно сразу отказываю. Не хочу связываться с такими делами. Это гарантированно бесконечные поиски информации и подводные камни в решении проблем.

Видео отсюда: https://www.youtube.com/shorts/8ooaojqQ70w
Прикольный, кстати, канал. Вроде ничего особенного, но некоторые вещи забавные.

#юмор (чёрный)
Please open Telegram to view this post
VIEW IN TELEGRAM
Протокол НТТРv3, или как ещё называют эту версию QUIC, появился довольно давно. Практические реализации появились ещё в 2020-м году. Я всё как-то мимо него проходил, не погружался и не настраивал. На прошлой неделе вышло видео:

▶️ Ускоряем HTTP/3: DNS-записи HTTPS

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

Для работы HTTP версии 3 нужно выполнить несколько шагов.

1️⃣ В настройке веб сервера включить его поддержку. В Nginx/Angie это делается следующим образом. Добавляем уже к существующим параметрам виртуального хоста с HTTPS следующие настройки:

listen 443 quic reuseport;
http3 on;

location / {
add_header Alt-Svc 'h3=":443"; ma=86400';
}

Обращаю внимание на важный момент. В пакетах Angie из репозиториев разработчиков модуль http_v3_module включён по умолчанию. Не проверял его наличие в пакетах с Nginx. DeepSeek посоветовал вручную собрать Nginx с параметром --with-http_v3_module.

И второй момент. Я изначально add_header добавил не в корневой location, а в параметры сервера, где добавляются другие заголовки. HTTPv3 не заработал. Долго выяснял, в чём дело. Думал, это формальность. Я обычно всегда заголовки ко всему серверу применяю, а не location. Но тут, судя по всему, это имеет принципиальное значение.

2️⃣ Открываем на файрволе порт 443 UDP, так как QUIC работает по UDP. Я сначала тоже забыл это сделать. У меня по умолчанию всё, что не надо, закрыто, поэтому ничего не заработало. Быстро сообразил, что надо открыть UDP порт.

Этих настроек уже достаточно, чтобы HTTPv3 заработал, но не с первого запроса. По умолчанию браузер обращается по v2 и только после того, как придёт настроенный заголовок, переходит на v3. А первые несколько запросов улетают по v2.

Чтобы это исправить, придумана новая DNS запись типа HTTPS. Браузер, при обращении к сайту, ищет A запись и параллельно запрашивает HTTPS. Если она есть и там указано, что сайт поддерживает работу HTTPv3, он сразу обращается по v3.

Не все DNS хостинги поддерживают этот тип записи. Например, DNS от Яндекса не позволяет создать эту запись. Я в итоге от него отказался. Бесплатный DNS хостинг есть у Selectel. Причём недавно они выпустили новую версию этого хостинга и всем предлагают туда перейти. Мне как-то лень переносить было, и так всё работает. Но старая версия DNS хостинга не поддерживает эти записи. Пришлось перейти на новую. Там без проблем создал HTTPS запись. Выглядит она примерно так:

# dig serveradmin.ru HTTPS
serveradmin.ru.     3600  IN   HTTPS  1 . alpn="h3,h2"

1 - приоритет
. - основное доменное имя, аналог serveradmin.ru
alpn="h3,h2" - указание на поддержку версии HTTPv3 и HTTPv2

3️⃣ Таким образом, третий пункт – добавление DNS записи типа HTTPS.

После этого сайт с первого запроса стал работать по протоколу третьей версии.

В настройке нет никаких проблем, можно прямо сейчас использовать новую версию протокола. К тому же это максимально безопасно, так как современные браузеры всегда делают попытку открыть сайт и по v2. Если вы где-то ошибётесь в настройке, то v3 просто не заработает. Я в этом убедился на практике. Когда что-то было не так, сайт работал как и прежде. И только после того, как всё сделал правильно, заработал HTTPv3.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#webserver #angie
В своей деятельности нередко приходится вносить изменения в стандартные юниты systemd. Я не буду писать длинное руководство со всеми командами и параметрами. Их всё равно не запомнишь все. А 1-2 момента можно выхватить и сразу начать применять. Вот такими моментами и поделюсь, которые когда-то не знал, увидел, запомнил и применяю.

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

1️⃣ Раньше я шёл в /etc/systemd/system/multi-user.target.wants, искал юнит nginx и смотрел, какие там установлены параметры. А можно сделать вот так:

# systemctl cat nginx.service

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

2️⃣ Теперь добавляем изменение. Можно создать директорию /etc/systemd/system/nginx.service.d и туда положить конфигурацию override.conf с перекрывающими или дополнительными параметрами. Так давно не делаю, потому что помню команду:

# systemctl edit nginx.service

Открывается текстовый редактор по умолчанию. Вносим изменение:

[Service]
Restart=always
RestartSec=5s

Сохраняем. Конфигурация автоматически применяется. Теперь если набрать:

# systemctl cat nginx.service

То мы увидим и исходную конфигурацию и файл /etc/systemd/system/nginx.service.d/override.conf, который был создан автоматически после команды edit.

Не зная про команду cat, я каждый раз вручную проверял override.conf и исходный юнит. Просто не довелось о ней услышать или где-то увидеть.

3️⃣ Расскажу про ещё один нюанс, который иногда забываю, потом разбираюсь, почему не работает, и вспоминаю, в чём проблема. Если добавляется новый параметр, то никаких нюансов нет, просто указываете его и всё. Если же параметры в override.conf перекрывают такие же в основном юните, например ExecStart и некоторые другие, то значение нужно сначала обнулить, а потом записать новое значение. Например:

ExecStart=
ExecStart=/usr/sbin/nginx -g 'daemon off; master_process off;'

Переписали параметры запуска, которые в основном юните выглядят так:

ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'

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

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

#systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
С момента первого моего упоминания сервиса axiom.co, продолжаю его использовать. Вновь пишу о нём, чтобы рассказать тем, кто не видел эту информацию. Очень простой в настройке и удобный в использовании для хранения и анализа логов веб сервера. Я пользуюсь полностью бесплатным тарифом, который не требует никаких подтверждений и персональных данных. Аутентификация через учётку на github. При этом позволяет хранить 500GB логов в месяц. Мне этого за глаза.

Про настройку и использование я уже писал ранее. По настройке с тех пор ничего не поменялось. Для отправки используется Vector (иногда падает, надо мониторить и переподнимать), у него встроенная интеграция с axiom.

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

Например, я позавчера включил на сайте протокол HTTPv3. Решил сходить посмотреть, сколько запросов по этому протоколу выполняется. Сбор логов настроен по указанной выше ссылке. В веб интерфейсе axiom иду в раздел Query и мышкой в конструкторе строю запрос: Dataset = serveradmin.ru, Where != http_version, Summarize count(), group by http_version.

['serveradmin.ru']
| where isnotempty(http_version)
| summarize count() by bin_auto(_time), http_version

И получил график растущего использования HTTPv3. Протокол используется.

Или вот ещё пример. Посмотрим, по каким url на запросы выходят 404 коды ответов. Dataset = serveradmin.ru, Where status =~ "404", Summarize count(), group by url.

['serveradmin.ru']
| where status =~ "404"
| summarize count() by bin_auto(_time), url

Думаю, идея понятна. В сервисе ничего такого особенного нет, чего нельзя было бы сделать где-то в другом месте. То же самое можно сделать в ELK, Graylog, Loki, Goaccess. Но тут всё бесплатно, ничего настраивать не надо. Просто оправляем логи и пользуемся. Разумеется, если у вас там ничего секретного нет. А то уже предвижу комментарии на тему того, что я свои секретные логи веб сервера никому показывать не могу. Если не можете, то не используйте облачные сервисы. Тут всё очевидно. Наверняка они эти данные как-то используют, иначе откуда такая щедрость.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#logs #webserver
Основной вопрос, который возникает при включении прокола HTTPv3 для сайта: "А какая разница с прошлым протоколом? Зачем включать?". Я решил провести некоторые тесты на своём реальном сайте, включая и отключая h3. Для тестов взял хорошо известный мне инструмент WebPageTest и запустил у себя.

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

Запустил я локальную версию WebPageTest на своём сервере и прогнал серию тестов с отключенным h3 и включенным. Для каждого прогона делал по 9 тестов с двумя запусками, когда второй использует кэш после первого запуска. И сравнил результаты, как между одинаковыми тестами в рамках h2 и h3, так и между ними. Различия между однотипными тестами были минимальны. И между h2 и h3 разница была стабильная.

Результаты получились неоднозначными. Поленился поднять локальную копию сайта. Тестировал на рабочем, который опубликован в интернет. Интересно увидеть практические результаты, а не лабораторные. В итоге разница получилась незначительная в пользу h2. Можно сказать в пределах погрешности, кроме одного значения - Time To first Byte и как его следствие - время начала отрисовки Time to Start Render. В режиме h3 она неизменно была выше, чем в h2. То есть дольше приходил ответ на первый запрос, и позже начиналась отрисовка. Параметр TTFB важный с точки зрения СЕО, так что даже не знаю, как реагировать на эти измерения. По идее надо отключать h3.

Внимательно смотрел на результаты и сравнивал. H3 даёт по всем параметрам результаты не хуже h2, а где-то даже лучше. DNS Lookup одинаковый, то есть проседания на DNS запросы нет, Total Connection Time у h3 неизменно ниже, загрузка всех элементов чуть быстрее, но Time to First Byte, за который по идее отвечает непосредственно сервер, всегда у h3 выше и из-за этого едут все остальные метрики, так как и отрисовка, и полная загрузка начинают отставать. Такое ощущение, что причина в реализации h3 в самом веб сервере. Надо тестировать с другими, но это довольно хлопотно, если разворачивать реальный сайт, а не синтетические странички.

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

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

#webserver #webpagetest
Коротенькая заметка про небольшой полностью бесплатный полезный сервис, который я стал использовать - newreleases.io. Добавляешь туда ссылку на какой-то проект, и он начинает следить за выходом обновлений. Поддерживаются различные источники информации - репозитории GitHub, GitLab, хранилище контейнеров Docker Hub и многие другие. Я по факту использовал только ссылки на guthub и docker hub, так как всё, что меня интересует, живёт там.

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

Плюс, newreleases отправляет с настроенной периодичностью письма на почту со всеми обновлениями. Сделано просто и удобно.

Например, мне регулярно приходится обновлять Rocket.Chat. Каждый раз я иду в репозиторий, смотрю, какая там вышла свежая стабильная версия, меняю версию в инвентаре и обновляю контейнеры, перезапускаю. С newreleases задача упрощается.

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

У меня получился такой список:
- Rocket.Chat
- Joplin
- Gatus
- Docker-volume-backup
- Prometheus
- Php-src
- Zabbix
- Localsend
- Grafana
- Angie
- NXS-backup
- Roundcube
- Postfixadmin
- Lynis
- PeerTube
- ExplorerPatcher
- Scrcpy
- WebPageTest
- WG-easy
- Teamgram-server
- Cdebug
- Labean
- Pupirka
- Zabbix-in-Telegram

Скорее всего будет дополняться. Это только что, что вспомнил, когда принял решение пользоваться.

#сервис
Не знаю, зачем может пригодиться сервис, о котором пойдёт дальше речь. Просто мне он показался необычным и прикольным – seashells.io. С его помощью можно через pipe отправить вывод любой консольной команды в браузер в режиме реального времени.

# htop | nc seashells.io 1337
serving at https://seashells.io/v/f45rYSeF

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

# exec > >(nc seashells.io 1337) 2>&1

Можно логи туда направить:

# tail -f /var/log/syslog | nc seashells.io 1337

Можно какой-то цикл запустить и смотреть на его выполнение:

# while true; do date +'%d-%b-%Y-%H:%M:%S'; sleep 1; done | nc seashells.io 1337

Сервис бесплатный, опенсорсный. Если сильно хочется, можно собрать и запустить у себя серверную часть:

# apt install golang git
# git clone https://github.com/anishathalye/seashells-server
# cd seashells-server
# go build
# cp env.sample env
# ./run.bash

По умолчанию запустится на порту 8888. Можно идти по IP адресу в веб интерфейс: http://10.20.1.36:8888/

Отправляем команду на свой сервер:

# htop | nc 10.20.1.36 1337
serving at https://seashells.io/v/Nuns8eRT

В ссылке меняете seashells.io на 10.20.1.36, либо в локальном DNS назначаете seashells.io адрес своего сервера. А можно просто в исходниках поправить имя домена. В корне репозитория открываете файл main.go и меняете там baseUrl на свой. Тут же и ограничения на 5 одновременных подключений указано, можете тоже поменять. Я попробовал, пересобрал, всё получилось.

Если работать с этой штукой постоянно, то можно установить специальный клиент:

# apt install python3-pip python3.11-venv
# python3 -m venv ~/seashells
# cd ~/seashells/bin/pip
# ./pip3 install seashells
# htop | ./seashells -i 10.20.1.36 -p 1337 --delay 5
serving at http://10.20.1.36:8888/v/uJe2XRUQ

Такая необычная и простенькая программа уровня курсовой работы студента-программиста. Можете код посмотреть, что-то поменять там. Он простой и легко читается.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#remote
У меня в канале в разное время выходили разборы рекомендаций по безопасности от проекта CIS — Center for Internet Security. Кто не видел их, рекомендую. Я почерпнул оттуда некоторые настройки для своих установок. Сами документы объёмные. Постарался взять из них самую суть, которая пригодится в среднестатистическом применении:

▪️ Nginx
▪️ MySQL 5.7
▪️ Apache 2.4
▪️ Debian 11
▪️ Docker
▪️ Ubuntu 22.04 LTS
▪️ PostgreSQL 16

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

Отдельно отмечу проект Docker Bench for Security, который автоматически проверяет образы Docker на соответствие рекомендациям CIS.

Сегодня хочу развить эту тему и познакомить вас с проектом CIS Debian 10/11/12 Hardening от известного международного хостера OVH, который когда-то сильно горел. Этот проект состоит из bash скриптов для проверки вашей системы на базе Debian на соответствие рекомендациям по безопасности.

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

Покажу кратко, как пользоваться этими скриптами. Клонируем репозиторий:

# git clone https://github.com/ovh/debian-cis.git && cd debian-cis

Создаём файл /etc/default/cis-hardening и добавляем туда информацию о директории, из которой мы будем запускать скрипты:

# cp debian/default /etc/default/cis-hardening
# sed -i "s#CIS_LIB_DIR=.*#CIS_LIB_DIR='$(pwd)'/lib#" /etc/default/cis-hardening
# sed -i "s#CIS_CHECKS_DIR=.*#CIS_CHECKS_DIR='$(pwd)'/bin/hardening#" /etc/default/cis-hardening
# sed -i "s#CIS_CONF_DIR=.*#CIS_CONF_DIR='$(pwd)'/etc#" /etc/default/cis-hardening
# sed -i "s#CIS_TMP_DIR=.*#CIS_TMP_DIR='$(pwd)'/tmp#" /etc/default/cis-hardening

Теперь можно запускать как по отдельности проверки, так и все разом. Проверки находятся в директории bin/hardening. На каждый тест – отдельный bash скрипт с осмысленным названием. Например, 1.1.11_var_log_partition.sh. Запускаем:

# ./1.1.11_var_log_partition.sh
1.1.11_var_log_partition [INFO] Working on 1.1.11_var_log_partition
1.1.11_var_log_partition [INFO] [DESCRIPTION] /var/log on separate partition.
1.1.11_var_log_partition [INFO] Checking Configuration
1.1.11_var_log_partition [INFO] Performing audit
1.1.11_var_log_partition [INFO] Verifying that /var/log is a partition
1.1.11_var_log_partition [ KO ] /var/log is not a partition
1.1.11_var_log_partition [ KO ] Check Failed

Я проверку провалил. У меня /var/log находится на корневом разделе. С точки зрения безопасности и стабильности работы системы это не очень хорошо. Во-первых, логи могут заполнить весь корневой раздел. Во-вторых, отдельный раздел под логи можно смонтировать для большей безопасности с некоторыми дополнительными настройками, типа noexec, nosuid, noatime и т.д. Я всё это понимаю, но мне чаще всего удобнее с одним общим разделом для всего.

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

# ./hardening.sh --audit

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

# ./hardening.sh --audit > ~/cis.txt

Потом файл можно спокойно посмотреть, осмыслить. Смотреть удобно в less с подсветкой:

# less -R ~/cis.txt

В конце увидите итоговый результат:

Total Passed Checks : [ 102/243 ]
Total Failed Checks : [ 141/243 ]
Enabled Checks Percentage : 100.00 %
Conformity Percentage : 41.97 %

Его можно получить в json:

# ./hardening.sh --audit --summary-json

Для каждой проверки есть свой конфиг в etc/conf.d, где её можно настроить или отключить. По проверкам можно делать либо аудит, либо вносить изменения в систему.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#cis #security
Небольшой полезный проект на тему WireGuard, который в простых случаях заменяет веб интерфейс – wg-cmd. С его помощью можно в консольном режиме настроить сервер, добавить пользователей и прямо с консоли через QR-код настроить клиентов. Удобно, если сами настраиваете клиентов, к примеру, для своей семьи и прочих родственников, чьи смартфоны у вас под рукой.

Сразу предугадывая сообщения на тему того, что WG блокируют и т.д., скажу, что использовать WG надо внутри РФ на VPS. Это не заметка про то, как обходить блокировки и прочие ограничения. К этой VPS можно подключаться откуда-то извне (не наоборот) любым способом, который доступен. И на этой VPS решать все свои задачи, не трогая клиентские устройства.

Сразу напишу готовую инструкцию, чтобы можно было быстро воспроизвести. Делать всё буду на Debian 12.

# apt update && apt install wireguard-tools iptables
# curl -SL https://github.com/andrianbdn/wg-cmd/releases/download/v0.1.6/wg-cmd-0.1.6-linux-amd64 -o /usr/local/bin/wg-cmd
# chmod 755 /usr/local/bin/wg-cmd
# wg-cmd

Запустится консольный установщик. Можно на все вопросы ответить по умолчанию, ничего не меняя. Программа создаст все необходимые конфигурационные файлы, добавит правила в iptables, создаст wg интерфейс и юнит systemd.

После конфигурации откроется интерфейс управления сервером, где можно добавить клиента и тут же в консоли посмотреть QR код для него. В основном для этого обычно используется какой-то простенький веб интерфейс, типа wg-easy. Маленькая программа wg-cmd его заменяет. Можно добавлять и удалять пользователей, и считывать QR-коды. Больше она ничего не умеет. При желании можно руками в конфигурационных файлах клиентов что-то поправить, добавив дополнительные настройки.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#wireguard #vpn