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
​​Постоянно использую systemctl, чтобы посмотреть статус службы:

# systemctl status mariadb

И никогда не приходило в голову, что без указания службы эта команда тоже работает:

# systemctl status

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

State: degraded
Failed: 1 units

Стал разбираться, о чём тут идёт речь. Что там за сфейлившийся юнит:

# systemctl list-units --failed

Оказалось, что это systemd-modules-load.service юнит сфейлился на этапах ACTIVE и SUB. Мне это вообще ни о чём не сказало, поэтому стал разбираться дальше:

# systemctl status systemd-modules-load.service
# journalctl -u systemd-modules-load.service

Тут уже увидел конкретную ошибку в логе службы. Не загрузился один из модулей ядра, перечисленных в /etc/modules-load.d. Когда-то настроил и забыл об этом. Он и не нужен уже, но при этом он и не грузился, потому что добавил его с ошибкой 😎.

Помимо ошибок запуска юнитов, команда systemctl status покажет:

количество запущенных Units
uptime самой systemd
версию systemd
иерархический список запущенных служб

При этом список служб представлен в удобном виде. Более наглядно, чем в том же htop с иерархическим отображением. Так что команду надо запомнить и пользоваться.

#systemd
​​Если вы никогда не работали с OpenSearch, но хочется на него посмотреть и сравнить с ELK, то можно воспользоваться playground.opensearch.org. Для регистрации достаточно учётки gmail. Но даже если не регистрироваться, то можно что-то посмотреть. Но я не совсем понял, в каком формате. Я сразу зарегистрировался.

После регистрации вы получаете чистый сервер OpenSearch, куда загружены образцы типовых логов и дальше можно делать, что душе угодно. Создавать индексы, визуализации, дашборды и т.д. В общем, всё то же самое, что и на полноценной системе.

Я с OpenSearch вообще не знаком, но неплохо знаю ELK. Использую для сбора всевозможных логов: веб серверов, виндовых серверов, файловых, в том числе под виндой, логи микротиков, почтовых серверов и т.д. В общем, всё, что можно, туда засовываю.

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

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

Как и зачем появился OpenSearch, рассказывал в отдельной заметке. Если кто-то знает веские причины, кроме недоступности репозиториев ELK из России, по которым стоит перейти на OpenSearch, прошу поделиться в комментариях.

#elk
​​Почти во всех популярных дистрибутивах Linux в составе присутствует утилита vmstat. С её помощью можно узнать подробную информацию по использованию оперативной памяти, cpu и дисках. Лично я её не люблю, потому что вывод неинформативен. Утилита больше для какой-то глубокой диагностики или мониторинга, нежели простого использования в консоли.

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

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

# vmstat 1 -w -S M

Как можно убедиться, вывод такой себе. Сокращения, как по мне, выбраны неудачно и неинтуитивно. В том же dstat такой проблемы нет. Но в целом привыкнуть можно. В man vmstat они подробно описаны, так что с интерпретацией проблем не должно возникать.

А вообще, эта заметка была написана, чтобы в неё тиснуть необычный однострочник для bash, который меня поразил своей сложностью и непонятностью, но при этом он рабочий. Увидел его в комментариях на хабре и сохранил. Он сравнивает вывод информации об использовании памяти утилиты free и cat /proc/meminfo:

# eval $(free -kw | awk '/Mem/{print "mtotal="$2"\nmused="$3"\nmfree="$4"\nmshared="$5"\nmbuffers="$6"\nmcache="$7"\nmavailable="$8}/Swap/{print "stotal="$2"\nsused="$3"\nsfree="$4}');eval $(awk -F'(: +)| ' '!/\(/{print $1"="$2}' /proc/meminfo);clear; echo -e ";;;;;\nMem;total;$mtotal;│;$MemTotal;MemTotal\nMem;used;$mused;│;$[MemTotal-MemFree-Buffers-Cached-KReclaimable];MemTotal-MemFree-Buffers-Cached-KReclaimable\nMem;free;$mfree;│;$MemFree;MemFree\nMem;shared;$mshared;│;$Shmem;Shmem\nMem;buffers;$mbuffers;│;$Buffers;Buffers\nMem;cache;$mcache;│;$[Cached+KReclaimable];Cached+KReclaimable\nMem;available;$mavailable;│;$MemAvailable;MemAvailable\nSwap;total;$stotal;│;$SwapTotal;SwapTotal\nSwap;used;$sused;│;$[SwapTotal-SwapFree];SwapTotal-SwapFree\nSwap;free;$sfree;│;$SwapFree;SwapFree\n\n" | column -t -s ";" --table-columns " ,free -kw¹,KiB¹, ,KiB²,/proc/meminfo²" --table-right "free -kw¹,KiB¹" --table-truncate "/proc/meminfo²"

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

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

#bash #script #perfomance
​​Короткая заметка для тех, кто использует Docker. Вы знаете, как посмотреть параметры, с которыми запускался контейнер? Я лично не знаю и не изучал этот вопрос.

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

То есть запустив что типа этого:

# docker run \
--name insentry_watch \
--detach \
--restart unless-stopped \
--network host \
--volume insentry-data:/var/lib \
--volume /etc/timezone:/etc/timezone:ro \
--volume /etc/localtime:/etc/localtime:ro \
--stop-timeout 60 \
cr.yandex/crp5a5q503oamalo3iou/insentry-watch/linux/amd64:23.1.0.27

Я сохраню эту команду. А как узнать, с какими параметрами был запущен контейнер, если вы это забыли и не сохранили? Тут поможет runlike. Простое приложение, которое показывает полную команду, с которой был запущен контейнер. Runlike написан на python, так что можно установить через pip:

# pip install runlike

Либо просто запустить через Docker. Для этого он собран в отдельный контейнер:

# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

Жаль, что вывод сразу не форматируется. На выходе получается однострочная портянка.

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

Исходники

#docker
​​С появлением open source технологии WebRTC связано создание огромного количества продуктов для онлайн разговоров и конференций через браузер. Практически все бесплатные продукты и множество платных построены на его базе. Среди них известный Яндекс.Телемост, Сферум от mail ru, self-hosted сервисы BigBlueButton и Jitsi, и многие другие.

Очень простым сервисом на основе WebRTC, который можно развернуть у себя буквально в несколько действий, является MiroTalk P2P. Его можно вообще не настраивать. По умолчанию всё заработает. Как он работает, можно посмотреть на публичном сервисе:

https://p2p.mirotalk.com

Локально он будет выглядеть один в один.

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

Полный open source, никаких ограничений.
Аутентификация пользователей, защита конференций паролем.
Оптимизация под смартфоны.
Шаринг экрана, приложения, вкладки браузера, в том числе прямой видео поток.
Качество до 4K и 60 FPS.
Запись конференций.
Поддержка REST API.

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

Чтобы Mirotalk запустить у себя, достаточно воспользоваться инструкцией. Не буду её тут приводить. Я немного с ним поразбирался, поэтому запускал и в Docker, и напрямую через npm (Nodejs). MiroTalk написан на JavaScript.

В инструкции в том числе показано, как запустить сервис за прокси с помощью Nginx или Apache. Если будете так делать, то перепроверьте конфиги из руководства. Они неаккуратно сделаны с некоторыми очень неоптимальными настройками. Например, для редиректа с HTTP на HTTPS в Nginx используется if. Так делать не надо. А вот так надо.

Для тех, кто будет реально устанавливать и пробовать, дам подсказку. Современные браузеры запрещают доступ к микрофону и камере сайтам без HTTPS. MiroTalk можно запустить без шифрования, выбрав в .env настройку HTTPS=false. Всё запустится без каких-либо ошибок. Но в браузере не будет выскакивать запрос на доступ к микрофону. Сервис, соответственно, работать не будет. Я долго возился с сервером, пока не понял, в чём дело и почему не работает. Достаточно включить HTTPS=true и всё заведётся на самоподписанном сертификате. С ним браузеры будут работать.

Я тестировал в локалке, соответственно STUN и TURN просто отключил. По умолчанию используются бесплатный сервер STUN от google и какой-то канадский TURN metered_ca, завязанный на учётку автора программы. Если хотите полностью независимый сервер с p2p между интернет клиентами, то можете поднять свои STUN и TURN серверы с помощью Coturn. Там настройка очень простая.

На картинке снизу я смартфон направил в окно, а у себя расшарил вкладку браузера.

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

#видеоконференции
Забавное ироничное интервью с энтузиастом vim, которое пользователи vim могут принять за чистую монету. Если не примут, то могут, наверное, обидеться. Но ярые фанаты vim реально похожи на этого парня:

▶️ Interview with a VIM Enthusiast

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

Ролик был снят как пародия на видео:
▶️ Vim Will Actually Change Your Life
Парень реально рассказывает, как Vim меняет жизнь и навыки работы за компом.

Я сделал сравнение vim и ide. Знаешь ли ты, насколько быстрее запускается vim? На 4,3 секунды. 4,3 секунды я экономлю каждый день. Все эти месяцы обучения того стоили.

Либо ты примешь таблетку vim, либо я не буду с тобой разговаривать. По-моему, vim - лучший редактор на свете. Ты согласен со мной? Какая эффективность!!! В нём всё делается быстро. Супер мощь набора текста. Сделай свою жизнь эффективнее 10-ти пальцевым методом набора текста. Всем нужно научиться работать с vim.
 
Школа? Какая школа? Всем следует изучать vim, как это делал я, а не ходить в школу. Через vim и его набор команд вы изучите алфавит, научитесь управлять текстом. Увеличится продуктивность в вашей жизни.

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

Vim всегда с тобой. Его невозможно удалить. У меня нет графического окружения на компе, только vim. И это дорожка в один конец. На серверах то же самое: insert mode, visual mode, j, o, m, q, jq (*команды мог напутать, сам vim не пользуюсь*). И это круто.

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

Ну и т.д. Устал переводить 😊 На слух это довольно сложно. Ещё немного отдельных перлов:

Я не рекомендую кому-то использовать vim, я настаиваю на этом.

Vim становится продолжением человеческого мозга.

Использовать компьютер и не пользоваться vim, это как ездить на машине без машины.

Пользуетесь VIM? Я - нет.

#юмор
​​Очередная тема выходного дня. На этот раз — дети. Я долго не решался об этом писать, потому что тема личная, очень субъективная. Неделю собирал и структурировал мысли на этот счёт. Надо всё уместить в 4000 символов.

Начну с того, что меня реально беспокоит и печалит. Много взрослых людей сейчас без детей. Вижу их среди моих одноклассников, одногруппников, коллег. Людям уже 30-35+, а у них нет детей. Мне немного жаль их, даже если это осознанный выбор. Они пропускают мимо себя одну из самых ярких граней жизни.

Дети в первую очередь — безграничное, безусловное счастье и радость. Как бы трудно тебе ни было в моральном и финансовом плане. Природа награждает тебя за то, что ты действуешь в русле её замысла, чувством радости, удовлетворения, счастья. После рождения детей становятся понятны строки из песни Я Люблю Тебя Жизнь:

И вершина любви -
Это чудо великое, дети!
Вновь мы с ними пройдем
Детство, юность, вокзалы, причалы,
Будут внуки, потом
Всё опять повторится сначала.

Песня великолепная, мировоззренчески ёмкая, как никакая другая. Люблю её в исполнении Погудина Олега. Рекомендую 👍

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

Дети — естественный и необходимый этап в формировании мужчины. Он принимает на себя долгосрочную ответственность за полностью зависимых от него людей. Это огромный труд и в первую очередь в осознании того, что результат семейной жизни и жизни детей это полностью твоя ответственность. И если что-то не получилось с супругой, с воспитанием детей, то это твоя вина. Сейчас на мужчин давят со всех сторон, делая подобную ответственность трудноподъёмной. Многие не выдерживают, обвиняя жену, государство, общество в том, что у них что-то не получилось. Нужно всё это понимать, работать над собой и действовать в соответствии с внешними условиями, даже если они враждебны к твоим мужским проявлениям.

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

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

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

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

#мысли
На неделе посмотрел несколько интересных роликов на youtube. Каждый по отдельности не тянет на публикацию, поэтому решил их объединить в единый пост.

Денис Астахов, автор канала ADV-IT рассказал о том, где и как он рисует диаграммы. Всегда интересно посмотреть опыт специалиста по горячей теме. Впервые увидел использование Lucidchart.
▶️ АРХИТЕКТУРНЫЕ ДИАГРАММЫ - ГДЕ и КАК СОЗДАВАТЬ

Интересное, красивое, содержательное видео про разработку Envoy. Оно на английском, но с вшитыми в видео субтитрами, так что смотрится легко. Я такие ролики смотрю в том числе, чтобы немного держать уровень английского. Не имея разговорной практики, я вполне сносно на слух перевожу с английского. И это только благодаря роликам с субтитрами.
▶️ Inside Envoy: The Proxy for the Future [OFFICIAL FILM]

Видео с вопросами админу. В основном со всем согласен, кроме некоторых частностей. Просто приятно было послушать коллегу по цеху.
▶️ 10 вопросов Linux-администратору

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

Если кому-то есть чем поделиться по теме IT видео, буду рад. Я люблю что-то слушать, смотреть, когда куда-то иду, еду, занимаюсь.

#видео
​​🎓 По компьютерным сетям есть отличный курс "Компьютерные сети", Климанов М.М. от МФТИ (Московский физико-технический институт):
https://www.youtube.com/playlist?list=PLthfp5exSWErPFK_-EAhVtxO3XoY0gsSe
Я уже упоминал про него ранее.

Есть не хуже, а может даже и лучше, если судить про просмотрам и активности в комментариях, курс "Компьютерные сети, учебный курс.", Созыкин Андрей:
https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1

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

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

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

Условно я делю всех вопрошающих на 3 категории:
1️⃣ Старшеклассники.
2️⃣ Молодые специалисты после универа.
3️⃣ Люди 30-35+, пытающиеся войти в IT из другой специальности.

🟢 Несколько лет назад я написал статью для подростков: Куда поступить, чтобы выучиться на программиста или сисадмина. Я советовал сразу вкатываться в IT со школьной скамьи и идти в универ на заочку просто для корочки. Не уверен, что дал там подходящие советы, но на тот момент думал именно так. Более того, подтверждение своих советов позже увидел лично в одном знакомом школьнике, который после окончания 11-го класса уже фактически имел профессию программиста и мог зарабатывать наравне со своими родителями. И он не хотел идти в ВУЗ, чем очень расстраивал своего отца, который просил моего совета, как быть. Я успокоил и сказать, что у вас всё круто. Мало кому так повезло найти себя уже в школе. Так что со школьниками вопрос открыт. Сейчас есть крутые университеты, типа Иннополиса. Я бы хотел там отучиться, или отправить учиться детей, если захотят.

🟡 Для начинающих специалистов у меня обычно другой совет. Денег там чаще всего ещё нет, так что рекомендую устроиться хоть куда за любые деньги, лишь бы была практика. Браться за любую работу, пробовать. По ходу дела вникать в отрасль и решать, что тебе в ней больше нравится. Параллельно изучать бесплатные курсы, материалы, статьи, в общем, всё что есть по понравившейся теме. Семьи ещё нет, времени много. Например, можно бесплатно попасть в какой-то инкубатор или интенсив и ударно там потрудиться. Такие мероприятия обычно организуют крупные вендоры, типа Tinkoff или VK. Там же можно и предложение по работе получить. Тоже таких знаю.

🔴 Для третьей категории рекомендую ещё раз хорошо подумать и если решение твёрдое, то идти на какие-то курсы. Времени на самообразование обычно уже нет, да и голова после 30 начинает хуже соображать. Тут уже нет времени сидеть самому, вникать и тыкаться наугад. Надо, чтобы помогли. Да и деньги к этому времени уже хоть какие-то есть, так что можно себе позволить где-то отучиться. К тому же из-за возраста подход по-любому будет основательный и взвешенный. Есть мотивация, в том числе и финансовая. Больше посоветовать нечего. Если честно, я не знаю, как тут вырулить в итоге. Чем и как нужно впечатлить нанимателей, убедив их, что джун 35-ти лет хороший вариант для их вакансии, если там ещё 50 таких же, только 23-х летних после универа. Если у кого-то есть практические советы на этот счёт, то поделитесь своим мнением. Уверен, среди читателей есть люди, которые вкатились в IT после 30-ти.

Кстати, вот моя заметка про современные онлайн курсы.

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

#мысли #обучение
​​Наиболее популярным WAF (Web Application Firewall), как платным, так и бесплатным, является ModSecurity. Компания, которая его разрабатывала, поддерживала и обеспечивала платную техническую поддержку давно уже объявила дату End-of-Life (EOL) - 1 июля 2024 года. После этого код полностью переходит на поддержку open source сообщества. Вряд ли без регулярных денежных вливаний продукт продолжит развитие. А так как он основан на статических сигнатурах, без регулярного обновления быстро потеряет актуальность.

В связи с этим появился шанс у других сервисов получить дополнительную аудиторию. Одним из относительно новых проектов (ему примерно год) из этой сферы является open-appsec. Я его установил, настроил и протестировал в реальной работе. Выглядит он неплохо и результат выдал не хуже, чем в среднем показывают подобные программы. Чтобы разобраться и настроить, я потратил много времени, так что не смогу подробно описать. Но попробую рассказать саму суть и дать основные ссылки, чтобы при желании можно было повторить и попробовать.

В основе open-appsec лежит алгоритм машинного обучения. Используются 3 модели, в зависимости от подписки:

1️⃣ Basic model - бесплатная оффлайновая модель, которая лежит в github и используется по умолчанию.
2️⃣ Advanced model - тоже оффлайновая модель, может быть вручную скачана и установлена из личного кабинета сервиса. Регистрация там бесплатная.
3️⃣ Unsupervised model - работает и обновляется в режиме реального времени. Это платная функция.

Open-appsec существует в виде open-source версии с оффлайновой обученной моделью, которую можно скачать и установить из репозитория. Advanced модель можно использовать, если зарегистрироваться и вручную качать её обновления из личного кабинета, которые периодически выходят с уведомлением на email. Ну а третья модель это платная подписка. Она, соответственно, считается самой надёжной.

Сервис монетизируется по модели SaaS. Есть веб панель управления, через которую можно управлять системой. Там же в этой панели хранятся логи и вся аналитика. Если используете бесплатную версию, то всё управление локально через CLI и yaml конфиги. Логи тоже все хранятся у вас локально. В целом, довольно честно.

Я запускал и тестировал open source версию с basic model, потом подключил её к SaaS и уже там посмотрел отчёты. То есть эффективность работы бесплатной версии не сильно хуже платной, а платить предлагают за удобство управления.

Работает Open-appsec в виде модуля к Nginx. Установка простая. Выполняется автоматически. По сути, нужно просто скачать модуль, подключить его к Nginx, установить агент Open-appsec, который всем управляет. Также сервис интегрирован в Kubernetes и его NGINX Ingress Controller.

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

Отдельно отмечу, что у Open-appsec уже есть интеграция с CrowdSec. Что такое CrowdSec, я писал отдельно. Это современный аналог Fail2ban, только намного более развитый и функциональный.

Продукт довольно сложный. Но тут это скорее норма, чем исключение. Я не видел нигде, чтобы WAF легко настраивался. Чтобы комфортно работать с системой, обязательно придётся куда-то выгружать логи, так как они огромные. Работать с ними локально неудобно, а придётся, так как нужно будет анализировать работу и настраивать исключения. По умолчанию сервис будет работать в режиме обучения, изучения, фиксации атак (detect-learn). Потом его можно переключить в режим отражения (prevent-learn).

В целом, мне продукт понравился. Думаю, он получит активное развитие и распространение в будущем. На текущий момент бесплатный Community
Edition тариф в SaaS весьма функциональный. Эффективность, если верить тестам отсюда, на уровне Free тарифа CloudFlare.

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

#waf
​​Продолжу тему WAF, раз уж начал. Я ранее писал про Nemesida WAF. Это коммерческий продукт, у которого есть бесплатная версия. Причём вполне функциональная, можно пользоваться. Существенное отличие от платной версии - только сигнатурный анализ. При этом в платной присутствует AI (Искусственный Интеллект) и ML (Машинное обучение). Это бесплатную Nemesida отличает от бесплатной же Open-appsec, где ML есть в open source версии.

Заметку я хочу написать не об этом, а о бесплатном продукте той же Nemesida - WAF Bypass Tool. Это open source утилита для проверки эффективности работы WAF. Она прогоняет через сайт кучу различных запросов на тестирование всевозможных уязвимостей (Cross Site Scripting (XSS), Open Redirect (OR), Remote File Execution (RCE) и т.д.) и в конце сводит результаты в табличный вид. С её помощью можно быстро оценить качество работы того или иного продукта, а также различных режимов настроек.

Для базовой проверки достаточно указать только адрес сайта и запустить любым удобным способом инструмент. Либо скачать python скрипт:

# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/
# python3 -m pip install -r /opt/waf-bypass/requirements.txt
# python3 /opt/waf-bypass/main.py --host='example.com'

Либо запустить в контейнере из Docker Hub, тогда вообще ничего делать не надо:

# docker run nemesida/waf-bypass --host='example.com'

Ключами можно управлять настройками. Например, использовать прокси, ограничивать число потоков (имеет смысл сделать, так как утилита выполняет около 3000 тысяч запросов, можно получить бан за интенсивность), выводить результаты в json, управлять детализацией вывода, выбирать отдельные наборы тестов и т.д. Можно писать свои тесты, запускать их на постоянку и забирать результаты в мониторинг.

Утилита проверяет количество ложно-положительных (FP - False Positive) и ложно-отрицательных (FN - False Negative) срабатываний. Это один из наиболее значимых критериев работы WAF. Значение PASSED (OK) покажет количество заблокированных проверок.

#waf
​​Есть любопытный проект под названием WireHole. Это docker-compose файл, который скрещивает в единое целое WireGuard, Pi-hole и Unbound для быстрого и удобного развёртывания VPN инфраструктуры, где клиенты автоматически получают DNS сервер с фильтрацией рекламы на уровне запросов.

Особенно это удобно для смартфонов. Небольшой WG клиент, быстрая настройка с помощью QR кода и на выходе у вас статичный IP от арендованной VPS или домашнего сервера и фильтрация рекламы средствами DNS. Настройка занимает буквально 5 минут.

Всё бы хорошо, но в настоящее время данный проект стал жертвой типичной проблемы, когда используются контейнеры с тэгом latest. Изменился базовый контейнер linuxserver/wireguard, за ним следом сломался ngoduykhanh/wireguard-ui. Ну и теперь ничего не работает. Я и так, и сяк его ковырял, пытаясь исправить. Потратил кучу времени и всё впустую. Уже бы сам быстрее собрал всё это, но каждый раз казалось, что ещё вот-вот и всё получится.

В итоге нашёл форк этой репы - https://github.com/m-karakus/wirehole. Человек просто взял и форкнул более старую версию проекта WireHole, когда использовался веб интерфейс wg-easy, а не wireguard-ui. И теперь всё реально запускается в пару кликов.

Копируете себе репу:

# git clone https://github.com/m-karakus/wirehole.git

Редактируете .env. В переменную MASTER пишите свой внешний IP адрес, указываете пароль для веб панели Wireguard и веб интерфейса Pi-hole. Больше можно ничего не менять. Запускаем:

# docker compose up

Идём в веб интерфейс http://ip-address:51821/ и добавляем клиента. Сканируем на смартфоне QR код и добавляем новое vpn соединение. Подключаемся и выходим в интернет через IP адрес сервера.

Веб интерфейс Pi-hole доступен через внутреннюю сеть по адресу http://10.2.0.100/admin. Там можно что-то настроить, посмотреть статистику. Она ведётся в том числе и по всем DNS запросам. Можно быстро оценить, куда ходит смартфон. А он куда только не ходит.

Удобная штука. Я взял VPS, накатил туда этот композ. Создал 2 учётки - для ноута и смартфона. Проверил, всё работает. Ничего особенного тут нет. Можно и самому всё это настроить. Но потом надо время тратить на поддержку и т.д. Проще взять что-то более ли менее популярное. Думаю, что WireHole в ближайшее время поправят и можно будет пользоваться. Он довольно старый и популярный. Не думаю, что его бросят. К тому же видел уже и в issues обсуждение проблемы и готовые pull requests. Судя по всему, пока некому их проверить и принять в основную ветку.

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

Исходники

#wireguard
​​Вы знали, что curl умеет отправлять почту через внешние smtp серверы? Я в целом знаю, что curl умеет всё, что только можно придумать про передачу данных, но конкретно вопрос не прорабатывал, хотя вскользь уже упоминал об этом, но в рамках решения другой задачи, поэтому особо не погружался в тему. Поэтому для отправки почты из консоли всё время ставлю какую-то дополнительную утилиту, типа mailx. На самом деле это не обязательно. Сейчас покажу, как отправлять почту через curl, не светя пароль в консоли.

Сразу ссылка на документацию. Оправляем почту полностью через ключи curl:

# curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --user 'root@server.ru:password123' --upload-file ~/mail.txt

Содержимое mail.txt примерно следующее:

From: "Vladimir" <root@server.ru>
To: "User" <user@gmail.com>
Subject: Mail from curl

Hello! How are you?

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

Не очень хорошая идея светить почтовый пароль в консоли. Можно его спрятать в .netrc файл. Для этого его надо создать в домашней директории пользователя ~/.netrc. Содержание такое:

machine mail.server.ru login root@server.ru password password123
machine mail.server02.ru login user@server02.ru password password12345

Каждый сервер на новой строке. Удобно, если используется отправка через несколько разных серверов. В соответствии с указанным smtp сервером берутся настройки учётной записи из файла .netrc. Команда на отправку с использованием .netrc будет такая:

# curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --netrc --upload-file ~/mail.txt

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

Если используется шифрованное соединение и порт 465, то достаточно просто указать адрес сервера в виде smtps://mail.server.ru. Отдельно указывать порт и ключи для ssl не обязательно.

Для того, чтобы явно указать HELO / EHLO при отправке, добавьте его через слеш после адреса сервера. Примерно так:
smtp://mail.server.ru/client_helo.server.ru

#terminal #curl
Я обновил популярную подборку со своего сайта:

Топ бесплатных программ для бэкапа

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

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

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

Если считаете, что какой-то полезной программы не хватает, пишите в комментариях здесь или на сайте. Я буду дополнять. В этом обновлении добавил туда ElkarBackup, FBackup. Почему-то их там не было. До этого добавлял ReaR и Restic, но анонса не делал.

#backup #подборка
​​Когда готовил материал по отправке email сообщений через curl, подумал, он же наверное и читать умеет. И не ошибся. Curl реально умеет читать, и не только, почту по imap. Это открывает очень широкие возможности по мониторингу почтовых серверов с помощью утилиты.

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

Но с curl всё получается намного проще. Она много чего умеет. Расскажу по порядку. Сразу важная сноска, которая сильно затормозила меня в этом вопросе. Когда будете пробовать, возьмите свежую версию curl. Более старые некоторые команды для imap не поддерживают. Я сначала наткнулся на это в старом сервере Centos 7. Потом уже перешёл на современный Debian и там всё получилось.

Сразу перенесём логин с паролем в отдельный файл ~/.netrc:

machine mail.server.tld login username password supersecretpw

Проверяем количество сообщений в imap папке INBOX:

# curl "imap:/mail.server.tld" -n -X 'STATUS INBOX (MESSAGES)'
* STATUS INBOX (MESSAGES 405)

Получили число 405. Посмотрим, сколько из них непрочитанных:

# curl "imap://mail.server.tld" -n -X 'STATUS INBOX (UNSEEN)'
* STATUS INBOX (UNSEEN 147)

147 непрочитанных сообщений. Думаю, идею вы поняли. С помощью curl можно напрямую передавать серверу команды imap.

Смотрим список директорий в ящике:

# curl "imap://mail.server.tld" -n -X 'LIST "" "*"'
* LIST (\HasNoChildren \Marked \Trash) "/" Trash
* LIST (\HasNoChildren \UnMarked \Junk) "/" Junk
* LIST (\HasNoChildren \UnMarked \Drafts) "/" Drafts
* LIST (\HasNoChildren \Sent) "/" Sent
* LIST (\HasChildren) "/" INBOX

Или просто:

# curl "imap://mail.server.tld" -n

Ищем в ящике письма с темой test:

# curl "imap://mail.server.tld/INBOX?SUBJECT%20test" -n
* SEARCH 62 404 405 406
или так:
# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH HEADER Subject test'

Сообщения от определённого адресата:

# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH From vladimir@zeroxzed.ru'
* SEARCH 292 404 405 406

Получили UIDs писем. Смотрим содержание письма с конкретным UID. Для этого надо добавить ключ -v, так как оно передаётся в отладочной информации, как и все остальные ответы сервера:

# curl -v "imap://mail.server.tld/INBOX" -n -X 'FETCH 406 BODY[TEXT]'
или так:
# curl -v "imap://mail.server.tld/INBOX;UID=406/;BODY=TEXT" -n

И так далее. Письмо после проверки можно пометить прочтённым, переместить в другую директорию, удалить. Чтобы осмысленно дёргать imap сервер, достаточно посмотреть описание протокола. Информация по нему легко находится в поиске.

Команды imap рассмотрены в упоминаемом недавно курсе по сетям от Созыкина Андрея. Вот конкретный урок: ▶️ Протокол IMAP. Вообще, было интересно во всём этом разобраться. Если надо будет настроить мониторинг очередного почтового сервера, попробую что-то применить с помощью curl.

Первое, что приходит в голову в плане мониторинга - отправлять письмо с меткой времени в теле, а потом забирать его и анализировать эту метку. Если метка старая, значит письма не ходят. Это надёжнее, чем просто проверять статус служб и доступность портов. Тут и smtp, и imap сервер проверяются. И реализуется полностью с помощью curl и zabbix.

#curl #terminal
​​Те, кто сталкивался с настройкой VoIP телефонии, наверняка знают, что такое протокол и сервер STUN. Там постоянно приходится с ним взаимодействовать. Не припомню, где он использовался ещё. Но последнее время в связи с развитием протокола WebRTC, а также программных средств для видеоконференций на его основе, тема снова стала актуальной, даже ещё больше, чем с VoIP. Кратенько своими словами расскажу, что такое STUN и TURN.

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

Дополнением протокола STUN стал TURN. Он включает в себя возможности STUN, но и добавляет новые. В зависимости от настроек NAT на конкретном шлюзе, не всегда можно пробиться к клиенту извне. Данные, которые передаст STUN сервер клиенту, будут актуальны только для подключения этого STUN сервера, но не других клиентов. Шлюз просто отбросит от них соединения. Отдельная проблема, когда оба клиента за таким NAT.

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

Наиболее известной бесплатной реализацией TURN сервера является Coturn, который можно развернуть у себя. При этом в сети довольно много и бесплатный серверов, которые реализуют возможности этих протоколов. Например, известный STUN сервер от гугла - stun.l.google.com. Можно использовать для каких-то своих задач. TURN полностью бесплатный вряд ли можно найти. За это уже деньги надо платить, но есть сервисы с ограниченными бесплатными тарифными планами.

Проверить работу STUN и TURN серверов можно с помощью публичного сервиса:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

Указываете адрес сервера в формате stun:stun.l.google.com:19302 и запускаете проверку. Наглядно видно, что возвращает STUN сервер - внешний IP адрес и порт.

▶️ Вот тут на индусском английском рассказано с картинками то, что я описал.

#voip #webrtc
Два полезных канала для тех, кто увлекается хакингом:

🧾 Infosec Globe — обозреватель кибермира в реальном времени. Новости про хакеров, взломы, утечки, кибервойны.

🔬 Лаборатория Хакера — уроки по хакингу, полезные github-инструменты, книги, курсы по пентесту, OSINT, анонимности, криптографии.
​​Не знаю, в курсе вы или нет, но все торрент раздачи довольно легко отслеживаются. Я примерно представлял себе, что это реально, но не думал, что настолько просто. Есть сайт:

https://iknowwhatyoudownload.com

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

Потыкал там случайные айпишники. Чего только нет - фильмы, игры, софт, xxx и т.д. В общем, имейте ввиду, что все ваши торренты на виду.

#разное
​​Я уже делал серию заметок про CIS (Center for Internet Security). Это некоммерческая организация, которая разрабатывает собственные рекомендации по обеспечению безопасности различных систем. Я проработал рекомендации для:

- Nginx
- MySQL 5.7
- Apache 2.4
- Debian 11
- Docker
- Ubuntu 22.04 LTS

Основная проблема этих рекомендаций - они составлены в огромные pdf книги, иногда до 800 страниц и покрывают очень широкий вектор атак. Выбрать из них то, что вам нужно, довольно хлопотно. Я выделяю основные рекомендации, которые стоит учесть при базовом использовании стреднестатиcтической системы. В этот раз разобрал рекомендации для PostgreSQL 16.

🔹Убедитесь, что настроено логирование ошибок. Задаётся параметром log_destination. По умолчанию пишет в системный поток stderr. Считается, что это ненадёжный способ, поэтому рекомендуется отдельно настроить logging_collector и отправлять логи через него. По умолчанию он отключен. Если настроено сохранение логов в файлы, то не забыть закрыть доступ к ним и настроить ротацию средствами postgresql (log_truncate_on_rotation, log_rotation_age и т.д.)

🔹Для повышения возможностей аудита имеет смысл включить логирование подключений и отключений клиентов. Параметры log_connections и log_disconnections. По умолчанию отключено.

🔹Если вам необходимо отслеживать активность в базе данных, то имеет смысл настроить параметр log_statement. Значение ddl позволит собирать информацию о действиях CREATE, ALTER, DROP.

🔹Для расширенного аудита используйте отдельный модуль pgAudit. Обычно ставится в виде отдельного пакета. Для расширенного контроля за действиями superuser используйте расширение set_user.

🔹Если есть необходимость работать с postgresql в консоли, установите и настройте утилиту sudo, чтобы можно было контролировать и отслеживать действия различных пользователей.

🔹Рекомендованным методом аутентификации соединения является scram-sha-256, а не популярный md5, у которого есть уязвимость (it is vulnerable to packet replay attacks). Настраивается в pg_hba.conf.

🔹Настройте работу СУБД на том сетевом интерфейсе, на котором она будет принимать соединения. Параметр listen_addresses, по умолчанию указан только localhost. Если используется внешний сетевой интерфейс, не забудьте ограничить к нему доступ средствами firewall.

🔹Если есть необходимость шифровать TCP трафик от и к серверу, то не забудьте настроить TLS. За это отвечает параметр hostssl в pg_hba.conf и параметры ssl, ssl_cert_file, ssl_key_file в postgresql.conf. Поддерживается работа с self-signed сертификатами.

🔹Для репликации создавайте отдельных пользователей. Не используйте существующих или superuser.

🔹Не забудьте проверить и настроить создание бэкапов. Используйте pg_basebackup для создания полных бэкапов и копии WAL журналов для бэкапа транзакций.

Остальные рекомендации были в основном связаны с ролями, правами доступа и т.д. Это уже особенности конкретной эксплуатации. Не стал о них писать.

Сам файл с рекомендациями живёт тут. Для доступа нужна регистрация.

#cis #postgresql