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

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

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

https://github.com/amwalding/wireshark_profiles

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

1️⃣ Скачиваете из репозитория zip файл нужного вам профиля. Например, DNS.

2️⃣ В Wireshark идёте в раздел Edit ⇨ Configuration Profiles. Жмёте Import from zip files и импортируете скачанный профайл в zip файле. Выбираете его.

3️⃣ Выбираете сетевой интерфейс, с которого хотите собирать пакеты. Откроется основной интерфейс программы с готовыми настройками фильтров.

4️⃣ Потом загруженные фильтры можно быстро переключать в правом нижнем углу программы.

Ничего особенного тут нет, можно и самому набросать себе нужные фильтры. Но тут всё сделали за нас, упростив задачу. Как минимум, не помешают базовые фильтры на DNS, DHCP, HTTP, ARP, SMB, VLAN и т.д.

#network #wireshark
​​В Linux относительно просто назначить выполнение того или иного процесса на заданном количестве ядер процессора. Для этого используется утилита taskset. Она может "сажать" на указанные ядра как запущенный процесс, так и запустить новый с заданными параметрами.

1️⃣ Покажу сразу на примерах. Допустим, у вас есть какой-то процесс, который по умолчанию может занимать ресурсы всех ядер процессора. Допустим, вы хотите разрешить ему работать только на первых двух. Для того, чтобы это сделать, нам необходимо узнать pid процесса:

# ps ax | grep mc
# ps -T -C mc | awk '{print $2}' | grep -E '[0-9]'
# pidof mc

Выбирайте любой способ, какой больше нравится. Смотрим, какие у нас процессоры и ядра в системе:

# lscpu | grep -i CPU\(s\)
# lscpu | grep -i numa
NUMA node(s):            1
NUMA node0 CPU(s):         0-3

Видим четыре CPU с 0 по 3. Посадим наш процесс на первые два ядра:

# taskset -pc 0-1 927
pid 927's current affinity list: 0-3
pid 927's new affinity list: 0,1

Где 927 - это pid процесса. Видим, что привязка изменилась с 0-3 на 0,1.

2️⃣ Менять привязку уже запущенных процессов мне кажется не таким полезным, как иметь возможность запустить процесс с заданными параметрами. Это более практичная возможность, для которой нетрудно придумать реальный пример.

Я активно использую архиватор pigz, который умеет жать всеми доступными ядрами. Ему можно задать ограничение на использование ядер, но он будет случайным образом занимать ядра и почти всегда нулевое будет занято. А его желательно оставить свободным для остальных задач. Особенно если вы снимаете дампы СУБД и сразу жмёте в каком-то нагруженном сервере. В таком случае можно явно во время запуска указать pigz, какие ядра использовать.

Для этого нужно запустить программу через taskset, указав ядра, на которых она будет работать. К сожалению, для этого не получится использовать простой список ядер, типа 1,2,3. Нужно использовать bitmask в полном или сокращённом виде. Например, использование только 0-го ядра будет выглядеть вот так:

# taskset 0x00000001 pigz testfile
или просто
# taskset 1 pigz testfile

Pigz будет жать только одним, нулевым ядром. Я до конца не разобрался, как быстро понять, какая маска тебе нужна. Самый простой способ это узнать, проверить на каком-то работающем процессе. Ему можно задать список ядер не маской, а явно. Допустим, нам нужна запустить архиватор только на 2 и 3 ядре. Для этого назначим, к примеру, эти ядра для htop и посмотрим нужную маску:

# taskset -pc 2-3 `pidof htop`
pid 984's current affinity list: 0-3
pid 984's new affinity list: 2,3
Смотрим маску:
# taskset -p `pidof htop`
pid 984's current affinity mask: c

Маска c. Запускаем pigz с этой маской, чтобы он жал только на 2 и 3 ядрах, оставив первые два свободными:

# taskset c pigz testfile

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

# dd if=/dev/zero of=/tmp/testfile bs=1024 count=2000000
# taskset 6 pigz testfile

Список масок, которые имеют отношение к первым 4-м ядрам:

1 - ядро 0
2 - ядро 1
3 - ядра 0,1
4 - ядро 2
5 - ядра 0,2
6 - ядра 1,2
7 - ядра 1,2,3
8 - ядро 3
9 - ядра 0,3
a - ядра 1,3
b - ядра 0,1,3
с - ядра 2,3
d - ядра 0,2,3

#linux #system
​​Для бэкапа серверов под управлением Linux существует отличное бесплатное решение - Veeam Agent for Linux FREE. Я очень давно его знаю, но конкретно для Linux давно не пользовался. У меня есть статья по работе с ним:

Бэкап и перенос linux (centos, debian, ubuntu) сервера с помощью Veeam Agent for Linux

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

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

1️⃣ Скачал с сайта Veeam файл с репозиторием для Debian veeam-release-deb_1.0.8_amd64.deb и загрузочный ISO для восстановления Veeam Linux Recovery Media. Для загрузки нужна регистрация.

2️⃣ Скопировал файл с репозиторием на целевой сервер и подключил его:
# dpkg -i veeam-release-deb_1.0.8_amd64.deb

3️⃣ Установил veeam и дополнительные пакеты:
# apt install blksnap veeam cifs-utils

4️⃣ К сожалению, понадобилась перезагрузка сервера. Без перезагрузки не создавался бэкап. Veeam ругался, что не загружен модуль для снепшота диска. У меня так и не получилось его загрузить вручную. Вроде всё делал, что надо, но не заработало. Пришлось перезагрузиться и проблема ушла.

5️⃣ Так как на сервере у нас только один диск, мы не можем на него же класть бэкап, когда будем делать образ всей системы. Я решил использовать сетевой smb диск с другой виртуальной машины, которая запущена на целевом Proxmox, куда буду переносить систему. Для этого на ней поднял и настроил ksmbd, затем с помощью ssh настроил VPN туннель между машинами. Всё делал прям по инструкциям из указанных заметок. Заняло буквально 5-10 минут.

6️⃣ Запустил на целевой машине veeam:
# veeam
И с помощью псевдографического интерфейса настроил задание для бэкапа в сетевую папку smb. Там всё просто. Немного затупил с правильностью указания настроек для smb, так как не сразу понял формат, в котором надо записать путь к серверу (на картинке снизу скриншот правильных настроек). Но быстро разобрался. И ещё важный момент. На smb шару у вас должны быть права на запись. Если их нет, получите неинформативную ошибку. Я с этим проковырялся немного, пока не догадался проверить. Оказалось, что забыл дать права на запись в директорию, которая монтировалась по smb.

7️⃣ Запустил задание бэкапа и убедился, что он прошёл без ошибок.

8️⃣ Сделал на Proxmox новую виртуальную машину с диском, у которого размер не меньше исходной машины, которую бэкапили. Это важно. Даже если на диске занято очень мало места, перераспределить его при восстановлении на меньший диск не получится. Veeam просто не умеет этого делать.

9️⃣ Загрузил новую виртуалку с Veeam Linux Recovery Media, подключил туда по smb тот же сетевой диск, куда делал бэкап и успешно выполнил восстановление. Всё прошло без сучка и задоринки. Виртуалка сразу же загрузилась с восстановленного диска и заработала без каких-то дополнительных действий.

Такой вот полезный инструмент. Если локально ещё есть разные варианты, чем забэкапить машину, то с арендованными VPS всё не так просто. Veeam Agent for Linux позволяет из без проблем бэкапить и в случае необходимости восстанавливать локально.

#backup #veeam
​​Я одно время перепробовал кучу программ для ведения личных заметок. После этого собрал их все в одну публикацию (13 программ) и бросил это дело, потому что надоело. Таких программ море. Пробовать их, только время тратить. Сам сижу на Joplin + Singularity (недавно перешёл).

В закладках с тех пор остались некоторые варианты. Решил посмотреть кое-что и остановился на Memos. Эта штука мне прям понравилась. Покидал туда несколько заметок из Joplin. Формат один и тот же - Markdown, так что можно спокойно заметки переносить. Я где-то час погонял Memos, попробовал, почитал документацию.

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

🟢 Сразу понравился дизайн и оформление. Это чистая субъективщина. Когда увидел, сразу захотелось попробовать, потому что понравился минималистичный дизайн и хороший отклик. Приложение написано на Go + React.js. Работает очень шустро.

🟢 Memos поддерживает многопользовательскую работу со свободной регистрацией. То есть в целом это инструмент командной работы. Есть поддержка SSO с готовыми шаблонами для Github, Gitlab, Google, либо свой сервис через OAUTH2. Также встроена поддержка Keycloak. К общим заметкам можно оставлять комментарии.

🟢 По умолчанию используется база SQLite. В большинстве случаев этого за глаза хватит для текстовых заметок. Если сильно захочется, можно в MySQL или PostgreSQL перенести. Вложения могут храниться в базе, в файловой системе или в S3. Настраивается очень просто в веб интерфейсе. Я сразу на файловую систему переключил.

🟢 Простая интеграция с Telegram. Делаете своего бота, подключаете к Memos и создаёте заметки обычными сообщениями в телеге.

🟢 Заметки могут быть личные, публичные для всех, либо открытые для каких-то групп пользователей.

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

🟢 Ставится, как и переносится очень быстро и просто. Это обычный Docker контейнер с базой данных и вложениями в виде файлов.
# docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:stable
Соответственно, достаточно бэкапить паочку .memos.

🟢 Memos умеет в один клик выгружать все заметки единым архивом в виде .md файлов. Это если куда-то перенести надо будет или сохранить бэкап.

🟢 Есть поддержка вебхуков, но я так и не понял, к каким событиям их можно привязать. В документации написано, что к созданию заметки, но я не понял, как это работает. Через хук передаётся создатель заметки, время и текст (это ихз документации).

🟢 Есть поддержка API с доступом по токенам. Правда в документации не увидел описание возможностей. По идее заметки можно создавать. Что там ещё делать.

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

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

#заметки
​​Для администраторов Windows существует небольшая программа, написанная на каком-то стародавнем языке, потому что работает очень быстро и весит всего 4,2 Мб, которая помогает управлять терминальными серверами Windows. Хотя подойдёт не только для них, но и для любых серверов и рабочих станций, но писалась она именно для терминальников.

Называется Terminal Services Manager от компании LizardSystems. Это платная программа, но существует бесплатная версия без ограничений для персонального использования. Кто и как её в итоге использует – не проверяется. Лицензия получается автоматически через специальную форму на сайте. Заполняешь и сразу получаешь лицензионный ключ на почту. Я проверил, всё работает. Свою лицензию получил сразу же после отправки формы.

Terminal Services Manager умеет:

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

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

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

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

Программа простая, удобная, разбираться с настройкой не надо. Всё интуитивно понятно, настраивается сходу. Можно считать, что она бесплатна, так как использование никто не проверяет. Авторы не из России. Так и не понял, откуда они. Плюс, у них есть неплохой набор бесплатных программ: LanSpy, LanWhois, Remote Shutdown (эту программу я когда-то использовал), LanLoad.

#windows
Просматривал на днях на reddit r/Sysadminhumor, где встретил любопытный комикс. Сходил на сайт автора, а их там полно. Мне лично понравился формат и его какой-то душевный подход. Переведу для тех, кто не очень знает английский, то, что написано на комиксе выше. Он получился поучительный.

- Это Боб. Боб - обычный процесс в Linux.
- Как и большинство процессов, Боб имеет свои потоки, с которыми он делит контекст, общую память и любовь.
- Как и любой процесс, он рано или поздно будет уничтожен. Когда мы аккуратно завершаем процесс с помощью SIGTERM,
- мы даём ему шанс пообщаться с потомками об этом, так что они успевают завершить все свои дела
- и попрощаться друг с другом. Такова жизнь процесса.
- С другой стороны, когда мы прибиваем процесс через SIGKILL, мы не даём ему возможности закончить свои дела и попрощаться.
- И это ужасно.
- Так что, пожалуйста, не используйте SIGKILL. Позвольте потомкам спокойно завершить свою работу.


Мораль такова. Прибивайте процесс так:
# kill <process_id>

а не так:
# kill -9 <process_id>


⇨ Сайт автора с комиксами: https://turnoff.us

#мем
​​🎓 Мне давно скидывали ссылку на небольшой курс по GIT на youtube для начинающих. Там с самых азов даётся инфа для тех, кто с GIT никогда не работал. Только сейчас дошли руки посмотреть. Вроде неплохо сделано, послушал введение. Комментарии хорошие, просмотров много. Весь материал разбит на небольшие ролики по 5-7 минут, где разбирается одна тема. Если вы совсем нулёвый по этой теме, то это для вас:

Базовый курс по Git

Заодно решил подбить всю эту тему с обучением GIT.

▪️ Обзорное видео по GIT от авторского ютуб канала Артема Матяшова - Git. Большой практический выпуск. Автор очень хорошо объясняет. Если прям ничего про GIT не знаете, рекомендую начать с него. Хороший монтаж, подача, оформление. Я почти все его видео с удовольствием смотрел. У него их немного.

🔥Очень прикольная визуальная обучалка по основам GIT - LearnGitBranching. Она поддерживается, регулярно обновляется. Качественно сделана. Есть русский язык.

▪️ Ещё одна игра по обучению GIT - Oh My Git! Она попроще learnGitBranching, но в целом тоже неплохая.

▪️ Бесплатный курс по основам от Слёрм - Git для начинающих.

▪️ Бесплатные курсы по основам GIT на Stepik: Основы работы с Git и Самоучитель по GIT.

▪️ Более продвинутый курс с погружением в нюансы, ориентированный на разработчиков - Git курс от сообщества javascript.ru.

▪️ Бесплатная книга на русском языке - Pro Git book.

В завершении добавлю мотивирующий текст, который я написал ещё 3 года назад здесь на канале, если вы всё ещё сомневаетесь, надо ли вам разбираться с GIT или нет:

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

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

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

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

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

#обучение #git #подборка
​​Когда мне нужно было быстро поднять smb сервер, чтобы разово перекинуть какие-то файлы, раньше я устанавливал samba и делал для неё простейший конфиг.

Потом в Linux появилась поддержка протокола smb и сервера на его основе в ядре в виде пакета ksmbd. Стал использовать его. Хотя принципиально ни по времени настройки, ни по удобству он особо не выигрывает у самбы. Настройка плюс-минус такая же. В нём основное преимущество в скорости по сравнению с samba, что для разовых задач непринципиально.

На днях в комментариях поделились информацией о том, что есть простой smb сервер на базе python. Решил его попробовать. Он реализован в отдельном пакете python3-impacket.

# apt install python3-impacket

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

# cd /usr/share/doc/python3-impacket/examples/
# python3 smbserver.py share /mnt/share -smb2support

share - имя шары
/mnt/share - директория для smb сервера, не забудьте на неё сделать права 777, так как доступ анонимный
smb2support - использовать 2-ю версию протокола, если это не добавить, то с Windows 11 подключиться не получится.

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

Если нужна аутентификация, то её можно добавить:

# python3 smbserver.py share /mnt/share -smb2support -username user -password 123

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

Если подключаться с Linux, то таких проблем нет. Смотрим информацию о сетевых папках сервера:

# smbclient -L 172.20.204.133 --user user --password=123

Подключаемся к настроенной шаре:

# smbclient //172.20.204.133/share --user user --password=123

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

#python #fileserver
​​Расскажу про необычный и полезный сервис, который позволяет создать зашифрованные HTML странички, которые могут быть расшифрованы полностью на стороне клиента за счёт возможностей современных браузеров и JavaScript. То есть это полностью client side шифрование. На веб сервере лежит обычная html страничка. Никакой поддержки шифрования со стороны сервера не требуется.

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

Исходники сервера открыты:

https://github.com/robinmoisson/staticrypt

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

https://robinmoisson.github.io/staticrypt/

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

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

Вот пример зашифрованной странички, которую я создал с помощью этого сервиса: https://serveradmin.ru/files/encrypted.html Пароль - serveradmin. Можете скачать html код и посмотреть, что он из себя представляет. В репозитории проекта описан принцип работы по шифрованию и расшифровке.

Напомню, что ранее я рассказывал про сервис link-loc, который похожим образом шифрует не саму страницу, а ссылку на неё. В связке с этим сервисом получается вообще полное шифрование и ссылки, и самой страницы.

#security
​​Для получения бесплатных TLS сертификатов от Let's Encrypt существуют два набора скриптов: certbot и acme.sh. Может ещё какие-то есть, но эти самые популярные. Certbot написан на python, acme.sh полностью на bash.

Я всегда использовал certbot. Просто привычка. Начал с него и всегда пользуюсь именно им. Много раз слышал, что acme.sh более удобен и функционален. Плюс, не привязан к версии python. Он вообще не нужен, хотя для базовых систем это не принципиально. Python обычно есть на всех полноценных системах Linux.

Решил я посмотреть на acme.sh и сравнить с certbot. Устанавливается он просто:

# curl https://get.acme.sh | sh -s email=my@example.com

Обязательно измените email. С указанным доменом example потом ничего выпустить не получится. Установщик делает 3 вещи:

1️⃣ Копирует скрипт acme.sh и некоторые конфиги в домашнюю директорию ~/.acme.sh/
2️⃣ Подключает в .bashrc окружение из ~/.acme.sh/acme.sh.env. По сути просто делает алиас alias acme.sh="/root/.acme.sh/acme.sh".
3️⃣ Добавляет в cron пользователя задачу на ежедневную попытку обновления сертификатов.

После этого можно сразу пробовать получить сертификат. Acme.sh поддерживает разные CA, поэтому надо явно указать letsencrypt:

# acme.sh --issue --server letsencrypt -d 329415.simplecloud.ru -w /var/www/html

Если всё прошло без ошибок, то в директории ~/.acme.sh появится папка с именем домена, где будет лежать сертификат, ключ и некоторые настройки для этого домена. Теперь можно куда-то скопировать этот сертификат с ключом и перезапустить веб сервер. Например, в директорию /etc/nginx/certs/. Можно это сделать вручную, а можно через тот же acme.sh:

acme.sh --install-cert -d 329415.simplecloud.ru \
--key-file    /etc/nginx/certs/key.pem \
--fullchain-file /etc/nginx/certs/cert.pem \
--reloadcmd   "service nginx force-reload"

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

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

# apt install certbot
а не так:
# curl https://get.acme.sh | sh -

Если кто-то пользуется acme.sh и знает его явные преимущества, прошу поделиться информацией.

Исходники

#webserver
​​В ОС на базе Linux есть разные способы измерить время выполнения той или иной команды. Самый простой с помощью утилиты time:

# time curl http://127.0.0.1/server-status
Active connections: 1 
server accepts handled requests
 6726 6726 4110 
Reading: 0 Writing: 1 Waiting: 0 

real 0m0.015s
user 0m0.006s
sys 0m0.009s

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

Сейчас в репозитории современных систем приехал более продвинутый инструмент для отслеживания времени выполнения консольных команд - hyperfine:

# apt install hyperfine

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

Например, в hyperfine можно обернуть какую-то команду и получить информацию по её выполнению. Покажу на примере создания дампа mysql базы:

# hyperfine --runs 1 --export-json mysqldump.json 'mysqldump --opt -v --no-create-db db01 -u'user01' -p'pass01' > ~/db01.sql'

На выходе получаем файл mysqldump.json с информацией:

{
 "results": [
  {
   "command": "mysqldump --opt -v --no-create-db db01 -u'user01' -p'pass01' > ~/db01.sql",
   "mean": 2.7331184105,
   "stddev": null,
   "median": 2.7331184105,
   "user": 2.1372425799999997,
   "system": 0.35953332,
   "min": 2.7331184105,
   "max": 2.7331184105,
   "times": [
    2.7331184105
   ],
   "exit_codes": [
    0
   ]
  }
 ]
}

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

Точно так же можно собирать информацию о реальном отклике сайта:

# hyperfine --runs 3 'curl -s https://github.com/'

Можно раз в минуту прогонять по 3 теста с нужной вам локации, записывать результат и сравнивать со средним или с заданным пределом.

Я привел примеры только для мониторинга. Так то hyperfine многофункционален. Так что берите на вооружение.

#linux #мониторинг #perfomance
Давно не было заметок на тему почтовых серверов. Год назад тема была очень живая, когда Яндекс объявил, что бесплатная почта для доменов перестаёт быть бесплатной. Судя по всему он на этом неплохо заработал. Часть знакомых мне людей в итоге оплатила услугу и продолжает с тех пор пользоваться уже за деньги.

Сегодня хотел не об этом. Попался на глаза очередной готовый почтовый сервер на базе известных open source компонентов, упакованных в Docker - docker-mailserver. На первый взгляд всё это очень сильно похоже на Mail-in-a-Box или Mailcow, которые уже давно известны и на слуху. У них даже количество звёзд на гитхабе примерно одинаковое.

Основные компоненты и особенности этой сборки:

 Postfix + Dovecot + Amavis
 Rspamd и SpamAssassin
 Clamav + Fail2ban
 OpenDKIM и OpenDMARC
 Postscreen + Postgrey
🔥SASLauthd с поддержкой LDAP
 Не используются базы данных, только конфигурационные файлы.

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

У продукта неплохая документация: описание структуры, какие DNS записи нужны, как настроить окружение, пример рабочего docker-compose для запуска и т.д. В общем, я почитал, впечатление хорошее. Подробная документация обычно признак зрелого продукта. В этом плане он выглядит более привлекательно, чем Mail-in-a-Box.

С другой стороны, docker-mailserver ориентирован на максимальную простоту и снижение требований по ресурсам. По сути это минимальное ядро для реализации современного почтового сервера. Для запуска достаточно 1 vCore и 512MB RAM. Рекомендуется: 1 vCore 2GB RAM. У этой сборки нет ни интерфейса для администрирования, ни веб интерфейса для почты. Пользователи создаются консольными командами или берутся из LDAP.

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

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

Подборка бесплатных почтовых серверов

Надо бы её обновить. Уже есть чем дополнить. Того же Mail-in-a-Box там нет, или Modoboa. Думаю, организую в ближайшее время.

Отдельное внимание обращаю на бесплатную версию Tegu. Я давно себе поднял для технических нужд и пользуюсь. Очень простой в настройке почтовый сервер. Состоит из одного бинарника на Go и конфига. Уже имеет встроенный веб интерфейс для управления. То есть просто рисуете конфиг, запускаете бинарник и у вас готовый почтовый сервер, где реализованы все основные возможности стандартного почтового сервера. Для тех, кто не хочет заморачиваться по этой теме, а нужен просто работающий сервер - идеальный вариант. У меня есть заметка, где я Tegu упаковал в deb пакет сразу вместе со службами для systemd.

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

#mailserver
​​Я когда-то давно уже рассказывал про сервис мониторинга UptimeRobot. Хочу лишний раз про него напомнить, так как сам с тех пор им так и пользуюсь для личных нужд.

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

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

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

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

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

Речь пойдёт про Chisel — это TCP/UDP туннель, который работает поверх HTTP с использованием SSH. Причём представляет он из себя один бинарник, написанный на GO. Один и тот же файл и для сервера, и для клиента, работает под всеми популярными системами. То есть вы можете поднять сервер на Windows, а подключиться клиентом с Linux и наоборот. Благодаря тому, что chisel работает поверх HTTP, вы очень быстро и просто можете поднять необходимый туннель там, где этот протокол открыт. Покажу сразу на примерах.

1️⃣ Пример, который в настоящее время очень актуален. Быстро поднимаем SOCKS5 прокси, через который будем выходить в интернет. Качаем бинарник под свою систему из репозитория:
# wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz
Делаем его исполняемым и запускаем сервер:
# ./chisel server --port 80 --socks5
Подключаемся с Windows машины:
> chisel.exe client http://<server-ip>:80 socks
Теперь идём в браузер и настраиваем socks прокси: адрес - 127.0.0.1, порт 1080. Проверяем на любом сервисе для определения ip адреса. Браузер должен выходить в интернет через IP адрес сервера. Можно добавить аутентификацию:
# ./chisel server --port 80 --socks5 --auth user123:password321
> chisel.exe client --auth user123:password321 http://188.227.57.126:80 socks
Очень просто и быстро. Не нужны никакие VPN туннели. Оставляем отдельный браузер под эту прокси и выходим по мере нужды в интернет через него.

2️⃣ Ещё пример. Допустим, мы хотим подключиться по SSH к машине, к которой нет доступа извне, но сама она может по HTTP стучаться наружу. Очень часто HTTP протокол открыт хотя бы для того, чтобы качать обновления на сервер или для каких-то других нужд. Берём любой свой сервер, к которому есть прямой доступ через интернет и запускаем там chisel. Если свободен 80-й порт, можно прямо на нём. Если нет, то выбираем любой другой.
# ./chisel server -p 80 --reverse
Теперь идём на закрытый сервер, качаем туда бинарник под свою систему и подключаемся как клиент к серверу, где мы до этого запустили chisel:
# ./chisel client http://<server-ip>:80 R:2222:localhost:22
При подключении клиента будет создан обратный туннель с 2222 порта сервера на 22-й порт клиента. Теперь, чтобы подключиться по SSH к клиенту, достаточно выполнить на сервере:
# ssh -p 2222 root@127.0.0.1
и ввести учётные данные от клиента. Таким образом, не имея прямого доступа к клиенту, мы подключились по SSH к нему с использованием обратного туннеля по HTTP, который клиент инициировал сам.

3️⃣ Обратный пример, когда мы хотим не с сервера подключиться к клиенту, а с клиента подключиться к какому-то сервису на сервере, доступ к которому напрямую закрыт. Допустим, на сервере крутился mysql на 127.0.0.1:3306. Мы хотим к нему напрямую подключиться с клиента. Запускаем так же сервер:
# ./chisel server -p 80 --reverse
Подключаемся к нему клиентом:
# ./chisel client http://<server-ip>:80 33306:localhost:3306
Теперь с клиента вы можете подключиться к mysql серверу:
# mysql -h 127.0.0.1 -P 33306 -u root
Попадёте в консоль сервера, к которому подключились клиентом.

Те, кто активно пользуются возможностями SSH, думаю, уже поняли, что это все те же возможности протокола SSH, только обёрнутые в HTTP через chisel. Про то, как то же самое делать напрямую через SSH я писал ранее:

⇨ SOCKS-прокси через ssh и переадресация портов

Chisel умеет маскировать себя. Для этого есть ключ --backend Если на сервер приходит обычный HTTP запрос, не от клиента, он может перенаправить его на web сервер.

Исходники

#vpn #ssh
Небольшая шпаргалка с командами, которая пригодится, когда у вас закончилось свободное место на дисках на сервере под управлением Linux.

🟢 Смотрим, что у нас вообще по занимаемому месту:

# df -h

🟢 Если в какой-то точке монтирования занято на 100% свободное место, можно быстро посмотреть, в каких конкретно директориях оно занято. Тут может быть много разных вариантов:

# du -h -d 1 / | sort -hr
# du -hs /* | sort -hr
Ограничиваем вывод:
# du -h -d 1 / | sort -hr | head -10
Смотрим топ 20 самых больших директорий:
# du -hcx --max-depth=6 / | sort -rh | head -n 20
Смотрим топ 20 самых больших файлов:
# find / -mount -ignore_readdir_race -type f -exec du -h "{}" + 2>&1 \
> | sort -rh | head -n 20

🟢 На всякий случай проверяем inodes. Иногда свободное место заканчивается из-за них:

# df -ih

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

# lsof | grep '(deleted)'
# lsof +L1

Если увидите там файлы большого размера, то посмотрите, какая служба их держит открытыми и перезапустите её. Обычно это помогает. Если служба зависла, то грохните её принудительно через kill -9 <pid>.

🟢 Ещё один важный момент. Может получиться так, что du оказывает, что всё место занято. В файловой системе напрямую вы не можете найти, чем оно занято, так как сумма всех файлов и директорий явно меньше, чем занято места. Среди удалённых файлов тоже ничего нет. Тогда проверяйте свои точки монтирования. Бывает так, что у вас, к примеру, скриптом монтируется сетевой диск в /mnt/backup и туда копируются бэкапы. А потом диск отключается. Если по какой-то причине в момент бэкапа диск не подмонтируется, а данные туда скопируются, то они все лягут на корневую систему, хоть и в папку /mnt/backup. Если после этого туда смонтировать сетевой диск, то ранее скопированные файлы будут не видны, но они будут занимать место. Ситуация хоть и кажется довольно редкой, но на самом деле она иногда случается и я сам был свидетелем такого. И читатели писали такие же истории. Вот одна из них. Поэтому если скриптом подключаете диски, то всегда проверяйте, успешно ли они подключились, прежде чем копировать туда файлы. Вот примеры, как это можно сделать.

#bash #terminal
​​Нравятся тенденции последних лет по принятию разных полезных современных утилит в базовые репозитории популярных дистрибутивов. Недавно рассказывал про hyperfine и bat. К ним можно теперь добавить утилиту duf, как замену df. Она теперь тоже переехала в базовый репозиторий:

# apt install duf

Когда первый раз про неё писал, её там не было. Качал бинарник вручную. Рассказывать про неё особо нечего. Так же, как и df, duf показывает использование диска разных устройств и точек монтирования. Вывод более наглядный, чем в df. Плюс, есть несколько дополнительных возможностей, которые могут быть полезны:

▪️ Умеет делать вывод в формате json:
# duf -json

▪️ Умеет сразу сортировать по разным признакам:
# duf -sort size
# duf -sort used
# duf -sort avail

▪️ Умеет группировать и сортировать устройства:
# duf --only local
# duf --only network
# duf --hide local
# duf --only-mp /,/mnt/backup
и т.д.

То есть эта штука удобна не только для визуального просмотра через консоль, но и для использования в различных костылях, велосипедах и мониторингах. Не нужно парсить регулярками вывод df, а можно отфильтровать, выгрузить в json и обработать jq. Написана duf на GO, работает шустро. Хороший софт, можно брать на вооружение.

#linux #terminal
▶️ Очередная подборка авторских IT роликов, которые я лично посмотрел и посчитал интересными/полезными. Как обычно к выходным.

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

Meet LocalSend - A Cross-Platform, Open Source Alternative to AirDrop and Quick Share!
Я уже рассказывал ранее про программу LocalSend. С тех пор, как узнал про неё, постоянно пользуюсь на всех семейных устройствах. Больше всего оценила простоту и удобство передачи файлов между устройствами жена. Популярный IT блоггер Techno Tim снял подробный обзор про эту бесплатную программу. Рекомендую 👍.

Google Maps Integration With Zabbix Geomap Widget
Небольшой обзорный ролик от Dmitry Lambert по интеграции Zabbix с Google Maps. Он, кстати, открыл отдельный канал Dmitry Lambert Tech, где будет выкладывать IT ролики на различные тематики, как остальные блоггеры. Я посмотрел, мне не зашло про всякие TrueNAS и NextCloud смотреть. Они у всех блоггеров примерно одинаковые.

Мобильное приложение Сингулярити: обзор 2024
Как я уже говорил, перешёл на программу по ведению дел и задач Сингулярити. Соответственно, подписался на их канал. Недавно вышел большой обзор мобильного приложения, которым я тоже пользуюсь. Приложение удобное, мне нравится. Реально использую на смартфоне, хоть и не часто. До этого использовал сервис todoist, но приложением их не пользовался. Субъективно, у Сингулярити оно удобнее.

ВСЁ ПРО ИГРЫ НА ЛИНУКСЕ (2024)
Чисто развлекательный контент для меня, так как автор снимает про Linux в качестве рабочей и развлекательной машины, а у меня винда для этого. Просто нравятся ролики этого автора. Хороший монтаж, картинка, тематика и т.д. Так что я их все смотрю. Они редко выходят, поэтому много времени не занимает.

Pika Backup -An open source linux backup solution that rivals the ease of Time Machine!
Когда увидел ролик, обрадовался. Подумал, что-то интересное про бэкапы, так как на этом канале обычно полезное и интересное выходит. Продукт может и неплохой, так как работает на базе BorgBackup, но это по сути GUI обёртка вокруг него. Актуально только для тех, у кого либо рабочая машина под Linux, либо на серверах GIU стоит. У меня ни того, ни другого, так что для меня материал оказался бесполезен. А сама программа неплохая.

Immich для просмотра и хранения личных фото и видео
Immich – одно из самых популярных open source решений для хостинга фотографий и видеороликов. Я в своё время делал подборку подобных решений, где про Immich не упомянул. Автор подробно рассказывает про этот сервис. Как и где развернуть, как спрятать за прокси, как настроить. В общем, хороший и подробный обзор-инструкция.

Install a self-hosted VPN platform // Netbird
Обзор и настройка популярного сервиса netbird.io для организации приватных сетей с peer-to-peer соединениями. Это что-то похожее на Tailscale, современный Hamachi или Nebula. Есть open source версия для установки на свой сервер. Думаю, имеет смысл попробовать этот продукт и написать заметку. Построено на базе WireGuard.

У меня на этом всё. Если тоже посмотрели что-то интересное и полезное, поделитесь в комментариях.

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

Зашёл, такой думаю, что-то необычное – Симулятор системного администратора. Игра сама не вышла, только демка. Вот она на ютубе:

▶️ https://www.youtube.com/watch?v=8K47j4XoTrE

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

А для тех, кто не знает или не слышал про серию админских игр Wargames, хочу про них напомнить. Там разные игры, в том числе на реальном Linux сервере, куда надо подключиться по SSH и выполнить те или иные задания. Сделано интересно и необычно. Некоторые игры очень сложные. Какие-то попроще.

Начать стоит с игры Bandit. Начальные уровни у неё совсем простые. Достаточно знаний консольных команд. На сайте к каждому уровню есть задания и подсказки для выполнения. Начинается игра с подключения по SSH:

▪️ server: bandit.labs.overthewire.org
▪️ port: 2220
▪️ user: bandit0 
▪️ pass: bandit0 

Потом можно поиграть в Natas. Там идея другая. Нужно мучать сайт и искать в нём уязвимости, подсказки, ответы. Эта игра посложнее, надо разбираться в устройстве сайтов: css, js и т.д.

С подключением по SSH также игра Leviathan. Она простая, уровней немного. Достаточно знать консольные команды Linux для прохождения и обладать определённой сноровкой, сообразительностью.

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

#игра
​​В выходные увидел любопытную рекламу, которая меня сразу же заинтересовала: "Evolution free tier - виртуальная машина бесплатно навсегда". И хостер отечественный cloud.ru. Я про него вообще не слышал ранее. Забегая вперёд скажу, что это облако от Сбера.

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

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

В общем, прошёл регистрацию. Чтобы создать вечную бесплатную VM, надо закинуть на баланс минимум 100 р. Причём можно именно разово закинуть, а не привязывать свою карту. Сделал это. И реально создал виртуальную машину с 2vCPU, 4 ГБ RAM и Диск на 30 ГБ.

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

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

Очевидно, что с такими условиями смысла в этой вечной бесплатной виртуалке никакого нет. Аналога free tier от AWS или Oracle не получилось. А я так надеялся 😁 Мне в целом то и нужно. У меня этих виртуалок полно. Мне не влом потратить 150-200 р. за аренду нужной VPS. Но получить бесплатную виртуалку всё равно было приятно. Но увы.

Такая вот реклама-антиреклама вышла. Зажмотились, конечно. Могли бы как-нибудь и бесплатно выпустить эти виртуалки в интернет с ограничением месячного трафика и без публичного IP. Понятно, что публичные IP дорожают и скоро их бесплатно будет не получить. Они и не всегда нужны. Я бы мог через VPN соединить эту виртуалку со своей сетью и как-то использовать. А в таком виде это всё не нужно. Изначально, когда увидел, что публичный IP денег стоит так и подумал, что из серой сети выпустят бесплатно в интернет и пользуйся, как хочешь. Но нет.

#хостинг
​​Для сбора и обработки логов есть много различных решений, как self-hosted, так и облачных. Наиболее популярные - ELK и Loki. Первый прям вообще монстр, его надо плотно изучать, прежде чем пользоваться. Второй попроще, но тоже сходу его не одолеть. Надо разбираться. А самый простой вариант централизованного сбора - какой-нибудь syslog сервер. Во все эти хранилища логи надо как-то передавать и желательно перед этим обрабатывать. Одним из таких сборщиков и обработчиков является NXLog.

NXLog - относительно старое (2011 год) и известное решение, которое есть как в редакции Community, так и Enterprise. Различия в возможностях можно тут посмотреть. NXLog поддерживает установку на многие популярные системы, в том числе Windows. Для него есть готовые наборы фильтров для обработки логов. Это в целом популярный вариант для сбора логов в той же винде и отправки их куда-то дальше. Например, в ELK или другое хранилище. Я сам NXLog никогда не использовал. Предпочитаю другие варианты (Vector, Fluentd, Winlogbeat). Но много раз видел отзывы о том, что с его помощью собирают и обрабатывают логи с винды и потом куда-то пересылают.

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

Допустим, нам надо распарсить логи postfix и куда-то передать в формате json. Качаем пакет под свою систему и устанавливаем. Все настройки будут в едином конфигурационном файле. Идём в раздел документации Integration, находим там Postfix. Видим готовый пример фильтра, который распарсит лог и выдаст результат в json, чтобы получилось вот так:

{
"EventReceivedTime": "2016-10-05 16:38:57",
"SourceModuleName": "postfix",
"SourceModuleType": "im_file",
"EventTime": "2016-10-10 01:23:46",
"HostName": "mail",
"SourceName": "postfix",
"Component": "smtp",
"ProcessID": "2538",
"Message": "4F9D195432C: to=<destination@example.com>, relay=mail.example.com[216.150.150.131], delay=11, status=sent (250 Ok: queued as 8BDCA22DA71)",
"QueueID": "4F9D195432C",
"Recipient": "<destination@example.com>",
"RelayHostname": "mail.example.com",
"RelayIP": "216.150.150.131",
"Delay": "11",
"Status": "sent",
"SMTPCode": "250",
"QueueIDDelivered": "8BDCA22DA71"
}

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

Другой пример. Допустим, вы хотите парсить логи Windows DHCP server. То же самое. Идёте в документацию и смотрите готовый конфиг для парсинга виндовых логов аудита dhcp сервера. Там же будет рассказано, как включить нужные логи. NXLog даже историю браузеров умеет парсить. Очень любопытное решение для сбора истории пользователей. Мне даже в голову никогда не приходило, что это можно и нужно централизованно собирать у пользователей, а не где-то на шлюзе. Думаю, нужно для решения каких-то задач по безопасности.

Список готовых интеграций у NXLog солидный. Он умеет в том числе ходить в SQL базы и брать данные оттуда. В документации есть примеры. Дальше логи можно отправить в различные популярные современные хранилища - ELK, Graylog, Splunk или тот же Syslog. В простых случаях можно забирать логи, парсить и выгружать их рядом обработанными в отдельный лог файл.

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

#logs
​​Среди бесплатных систем для совместной работы, которые можно развернуть на своих серверах, не так много продуктов, из которых можно выбирать. Наиболее популярные:

- Nextcloud
- Onlyoffice Workspace

Есть менее распространённые и функциональные:

- Univention Corporate Server (UCS)
- EGroupware

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

Предлагаю вашему вниманию ещё один продукт из этой серии - Group-Office. Это относительно простая система из далёкого прошлого на базе PHP + MySQL. Как обычно, есть Community версия с открытыми исходниками на github и Professional за деньги.

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

У Group-Office есть свои интересные фишки. Отмечу их отдельно:

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

В списке бесплатных плагинов видел плагины для аутентификации через IMAP или LDAP сервер. При первом заходе нового пользователя создаётся его аккаунт. Выглядит интересно, особенно интеграция с IMAP. У Group-Office, кстати, есть свой почтовый сервер на базе postfix и dovecot. Там очень простая, базовая настройка без каких-либо дополнительных компонентов. Я для всех подобных продуктов рекомендую использовать отдельный внешний почтовый сервер.

Как уже сказал, возможности продукта расширяются плагинами. Какие-то стоят денег, какие-то бесплатные. Например, есть бесплатные плагины для OTP Authenticator, Oauth2 аутентификации, интеграции с Jitsi, DokuWiki и т.д.

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

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

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

Для посмотреть развернуть можно в Docker в пару шагов:

# git clone https://github.com/Intermesh/docker-groupoffice
# cd docker-groupoffice
# docker compose up -d

И идём на 9000 порт сервера по ip адресу. При желании можно поставить из пакетов. Для Debian они собираются и поддерживаются. Более того, в документации разработчики рекомендуют использовать именно пакеты.

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

Сайт / Исходники / Docker версия

#groupware