ServerAdmin.ru
28.7K subscribers
281 photos
34 videos
13 files
2.61K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
🔥 AMD Ryzen без установочного платежа. Только до конца мая!

Команда Aéza приветствует вас и представляет новую акцию.
Вся линейка AMD Ryzen в Фалькенштейне (Германия) до конца этого месяца доступна к заказу без установочного платежа.

5 причин, почему стоит приобрести сервер у нас:
❯ Фиксированная цена и оплата в рублях
❯ Гарантированный интернет-порт 1 Гбит/с
❯ Круглосуточная поддержка в онлайн-чате
❯ Базовая AntiDDoS-защита уже в комплекте
❯ Быстрая установка сервера на любой ОС

Доступны к установке: Windows10, Windows Server, Debian, Ubuntu, CentOS и любая другая ОС из Вашего ISO-образа. Наши инженеры всегда на связи и помогут с любым вопросом и переносом / настройкой ваших проектов к нам.

Успевайте заказать, предложение ограниченно: aeza.net
Новостной канал: @aezahost
По любым вопросам: @aezasupport

#реклама
​​Для веб интерфейса OpenVPN сервера есть отличное родное решение - Access Server. У него есть только один минус - это платный продукт. Есть бесплатная версия с суровым ограничением - не больше двух vpn подключений к серверу. Это позволяет его использовать только для одной цели - личный сервер для единоличного использования. Да и то, лично мне двух подключений не хватит.

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

Основные возможности:
- управление через веб интерфейс, cli, api
- создание нового клиента и конфигурации для него в один клик
- ограничение доступа клиентов по ip
- возможность настройки протокола и порта, на котором будет работать openvpn сервер
- логи с информацией о подключениях клиентов
- различные способы аутентификации: ldap, radius, AD, pam

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

Сайт - https://openvpn.net/access-server/

#openvpn #vpn
​​Вчера в комментариях к заметке об OpenVPN был упомянут любопытный российский продукт Рутокен VPN. Меня он очень заинтересовал, так что решил его сразу же проверить. Это Open Source продукт на базе OpenVPN с веб панелью для управления.

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

Взял Ubuntu 20.04 и установил на неё по инструкции. Там всё очень просто и быстро, не буду приводить шаги по установке. После перезагрузки зашёл по внешнему IP на веб интерфейс. Указал типовые настройки, необходимые для работы сервера OpenVPN и сгенерировал корневой сертификат.

Далее создал пользователей. Там идея такая, что пользователи могут сами заходить на веб интерфейс, генерировать себе конфигурацию, скачивать её вместе с клиентом. Сам клиент тоже Open Source, называется Рутокен VPN клиент. Он нестандартный, так как поддерживает работу с фирменным USB токеном Рутокен ЭЦП. Веб интерфейс довольно простой, как и сам функционал. Можно менять настройки сервера и управлять клиентами. Хотя у всех примерно так же, потому что это типовой функционал OpenVPN Server.

Дальше меня ждал сюрприз. Когда зашёл новым пользователем в веб интерфейс, заметил, что мне предлагают подготовить Рутокен ЭЦП для установки на него сертификата, либо сделать конфиг для смартфона. То есть идея в том, что этот продукт заточен под работу со своими родными токенами.

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

Потом прикинул, что формат конфигов openvpn одинаковый, что для смартфона, что для компьютера. Сделал конфигурацию для смарта, поставил на комп обычный OpenVPN Client и скормил ему этот конфиг. Без проблем подключился к серверу и вышел в интернет с его ip адресом. Отправлять весь трафик клиента через VPN - опция, которую можно указать через веб интерфейс.

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

Всё это бесплатно и от разработчика в РФ.

Сайт - https://www.rutoken.ru/products/all/rutoken-vpn/
Исходники - https://github.com/AktivCo/Rutoken-VPN-Community-Edition-Server

#отечественное #openvpn #vpn
​​Управление фоновыми процессами в Linux

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

Чтобы запустить команду в фоновом режиме (background), можно добавить в конец знак &:
# tar czvf sites.tar.gz /web/sites &
Команда будет запущена в фоне. Посмотреть список подобных задач можно с помощью команды jobs:
# jobs
[1]+ Running         tar czvf sites.tar.gz /web/sites &

Если вы запустили процесс в обычном режиме, но хотите его отправить в фон, то необходимо нажать в терминале сочетание клавиш CTRL+Z. Процесс будет остановлен. Проверить его состояние можно так же через jobs:
# ping 127.0.0.1
^Z
[1]+ Stopped         ping 127.0.0.1
# jobs
[1]+ Stopped         ping 127.0.0.1

Вернуть команду из остановленного состояния можно либо в фоновый режим с помощью bg (background), либо на передний план с помощью fg (foreground).
# bg %ping
# fg %ping
Здесь в качестве идентификатора использовалось начало названия команды ping, но можно было указать идентификатор %1 для первой команды, %2 для второй и т.д.

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

Необходимо помнить, что команды в jobs привязаны к конкретному терминалу. Если открыть второй, то там не увидите задачи первого. Это не аналог запуска команд в screen или tmux. При разрыве связи по SSH или отключении от консоли, фоновые задачи тоже будут завершены. Их, кстати, можно посмотреть ещё вот так:
# ps T
Ключ T означает привязку к конкретной консоли.

Может показаться, что jobs, bg и fg это какой-то архаизм, но на практике, когда часто работаешь в консоли, периодически используешь. Особенно, когда что-то сжимаешь, распаковываешь, дампишь базу или скрипт какой-то запускаешь. Это быстрее и удобнее, чем открывать и перемещаться в другую консоль. Чтобы не мешал вывод, который будет из bg пробиваться в консоль, можно его перенаправить >/dev/null 2>&1.

#terminal #linux
​​Последние несколько лет замечаю, что Proxmox вытеснил всех в нише управления виртуальными машинами KVM. Хотя так было далеко не всегда. Когда я начинал пользоваться виртуальными машинами на базе KVM, использовал для управления libvirt и консольную утилиту virsh, либо GUI для неё. Некоторым заказчикам даже в прод внедрял такое решение. Нормально работает и по сей день. Ставилось всё на обычный Debian.

Если вам по какой-то причине не подходит или не хочется использовать Proxmox, а причины этого вполне могут быть, посмотрите на Kimchi. Это простой и приятный веб интерфейс для управления гипервизором KVM. Работа веб интерфейса основана на HTML5. Ставится Kimchi на любой Linux дистрибутив. Есть готовые пакеты (deb и rpm) под все популярные системы.

Kimchi достаточно старый и известный продукт, который хоть и не очень активно, но развивается, не заброшен. Последний релиз был в 2020 году. В 21-м обещали обновление, но оно так и не случилось :( С его помощью можно создавать, запускать, останавливать виртуалки. Управлять виртуальными сетями и хранилищами. Создавать шаблоны, клонировать виртуалки и т.д. То есть вся база для управления виртуальными машинами есть.

Из аналогов мне приходит в голову только Cockpit. Он появился позже Kimchi. У него функционал схожий по управлению KVM и развивается вроде бы бодрее. Но Cockpit это не только управление гипервизором, но и сервером в целом. То есть более масштабный продукт.

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

Исходники - https://github.com/kimchi-project/kimchi

#kvm #linux
Здесь мог бы сидеть ты, но ты уже используешь CI/CD в работе и не испытываешь проблем при релизах, а рабочие процессы не охвачены пламенем. Или нет?

Тогда срочно регистрируйся на курс «CI/CD на примере Gitlab CI» от Слёрма и стань участником потока. Расскажем обо всех тонкостях работы с CI/CD и научим мастерски применять эту практику в работе. Кстати, начать можно бесплатно: https://slurm.club/3NKvN4l

Ныряй #впоток, пока все не сгорело!

#реклама
​​Мимо меня прошла незамеченной новость о том, что вышел релиз Red Hat Enterprise Linux 9. После того, как закрыли проект Centos, я перешёл на Debian. Новости rpm дистрибутивов меня перестали интересовать. Не слежу за ними.

Среди форков быстрее всего подсуетился AlmaLinux OS и выпустил 9-ю версию. На сегодняшний день у Rocky Linux и Oracle Linux для загрузки доступны только 8-е версии. Не первый раз замечаю, что AlmaLinux быстрее всех выкатывает обновления.

Взгрустнулось мне из-за отсутствия единой Centos, которой все пользуются. Поддержка RHEL, а значит и его форков, которые выживут, будет до 2032 года. По-моему, бесплатной поддержки LTS версий в 10 лет больше нет ни у кого. У Ubuntu поддержка 5 лет, дальше только за деньги ещё на те же 5 лет. Релизы каждые 2 года выходят. Мне не нравится такая интенсивность. Постоянно что-то меняется.

У Debian тоже поддержка обновлений безопасности для каждого релиза по 5 лет, новый релиз каждые 2 года. Чтобы поддерживать единообразие версий парка серверов, необходимо примерно каждые 2-3 года обновлять машины до следующей версии. Например, если сейчас вы поставите 11-ю версию, 12-я выйдет в 23-м году. После этого не будет смысла устанавливать 11-ю версию, вы будете ставить 12-ю. А все 11-е версии придётся обновить до 12, чтобы получить одинаковую версию на серверах. И так постоянно.

В случае с Centos необходимости в столь частых обновлениях не было. Была, правда, другая проблема. Каждые 6-8 лет нужно делать миграцию со старой версию на новую. Хоть это и кажется большой срок, но на деле мне часто приходилось этим заниматься, переезжая сначала с 5-й версии, потом с 6-й. Время быстро летит, особенно когда система устанавливалась накануне выхода очередной новой версии.

Кто-нибудь остался на Centos Stream? Интересно, что с ним на практике происходит. Насколько проблемна для эксплуатации модель rolling release в данном конкретном случае. Подкидывает ли это проблем?

Я ранее уже писал об этом, но предвижу вопросы, поэтому сразу отвечу. Перешёл на Debian, потому что наличие нескольких форков RHEL делает неудобным их эксплуатацию. Аудитория разделится на несколько проектов. Из практических соображений удобнее пользоваться единым наиболее популярным дистрибутивом.
​​Одна из наиболее часто используемых команд консоли Linux, которую я набираю - ps (processes status). Это небольшая утилита для просмотра информации о запущенных процессах. У неё огромное количество ключей для представления информации. Если её запустить без них, то она покажет только список процессов данного терминала. Их может вообще не быть, кроме самой оболочки, в которой она запущена.

Сразу покажу команду, которую я использую чаще всего:
# ps ax
Выводит все процессы без привязки к пользователю и терминалу. Этот вывод чаще всего приходится грепать, чтобы посмотреть информацию по конкретному процессу. Например, поменял конфигурацию php-fpm на запуск определённого количества процессов, перезапустил демон и проверил, что процессов столько, сколько надо:
# ps ax | grep php-fpm
Можно сразу же пересчитать их количество для какого-то конкретного пула, если меняли только его настройки:
# ps ax | grep php-fpm | grep www | wc -l
Подозреваю, что тут можно и с одним грепом как-то обойтись, но я всегда делаю так. Либо можно использовать такой вариант:
# ps -F -C php-fpm
Но опять же, лично я привык использовать grep от полного списка. Вспоминать ключи не надо.

Если добавить ключ u, то можно посмотреть инфу об использовании ресурсов системы каждым процессом:
# ps axu
Лично я так редко делаю, привык смотреть эту инфу через htop. Почти всегда его ставлю, если сам настраиваю сервера и активно использую.

Полезно добавить к выводу ps ключ --forest, чтобы получить иерархический список процессов. Если просматриваете его весь, то будет нагляднее для анализа:
# ps ax --forest

Если вывод ps слишком длинный, вместо того, чтобы потом скролить терминал, можно добавлять less
# ps ax --forest | less
Less полезно использовать, чтобы увидеть полные строки процессов с параметрами, так как при таком просмотре выполняется перенос строк. Чтобы строки не обрезались, надо дважды добавить ключ -w
# ps ax -w -w

Теперь немного инфы из закладок. Не запоминал эти конструкции.
Вывод списка процессов с отображением информации о потребляемых CPU и MEM с сортировкой по первому:
# ps -e -o pcpu,pmem,args --sort -pcpu
Иногда бывает полезно этот список сверху обрезать:
# ps -e -o pcpu,pmem,args --sort -pcpu | head -10

Список самых тяжёлых процессов по памяти с выводом информации о pid и user этого процесса. Ну и заодно столбцы с mem и cpu переносим вправо, чтобы удобнее смотреть было:
# ps -eo pid,user,cmd,%mem,%cpu --sort=-%mem | head -10

Если к командам выше добавить watch, то эту информацию можно смотреть в режиме реального времени:
# watch -n 1 'ps -eo pid,user,cmd,%mem,%cpu --sort=-%mem | head -10'

Ну и в завершении ПАПА-скрипт, который соберёт информацию обо всех процессах, в том числе с повторяющимися именами, просуммирует их потребление и выведет общий список:
# ps axo rss,comm,pid | awk '{ proc_list[$2] += $1; } END \
{ for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' \
| sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

#bash #terminal
​​Хочу вас познакомить с необычной системой, которая может является составной частью большого мониторинга. Речь пойдёт о Self-hosted AIOps платформе MONQ. Я впервые о ней услышал несколько месяцев назад на одном из митапов Zabbix на русском языке. Там было отдельное выступление про Monq. Тогда я сделал себе пометку о ней, но с тех пор так и не пришлось познакомиться ближе и где-то использовать. Решил просто поделиться информацией.

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

Monq умеет:
- собирать данные из существующих систем мониторинга, например Zabbix или Prometheus, из своего агента, других систем (Splunk, Logstash, Jira, Gitlab и т.д.), обогащать их и обрабатывать
- выполнять синтетические тесты, например работу какого-то веб сервиса
- выполнять аналитику по проблемам, которые приходят из разных источников, с того же zabbix, prom и т.д.
- создавать правила для управления потоками оповещений, чтобы отсекать спам и неинформативные сообщения от монтиоринга
- строить ресурсно-сервисную модель инфраструктуры
- создавать гибкие системы оповещения и реагирования на проблемы
- создавать различные отчёты

Для обработки данных существует low-code редактор, позволяющий программировать поведение прямо в веб интерфейсе monq. Визуально и функционально мне эта система напомнила ELK, только для мониторинга. Первый собирает логи, а Monq события мониторинга и работает с ними - анализирует, генерирует карты, создаёт дашборды и т.д.

Система на первый взгляд кажется сложной. Она таковой и является, но вход простой. Попробовать её можно, даже если у вас только Zabbix в наличии. Можно с него направить поток данных в Monq и попробовать его возможности. Это делается довольно просто. Примерно так же, как Grafana подключается к Zabbix.

Разработчики MONQ из России, но продукт хотят сделать международного уровня. Надеюсь, у них всё получится.

Сайт - https://monq.ru/
Исходники - https://github.com/MONQDL
Запись выступления на митапе:
https://www.youtube.com/watch?v=OqRSFOpIlRE
Обзор возможностей:
https://www.youtube.com/watch?v=n04isBY7cpM

#мониторинг
​​На днях в комментариях к заметке о KVM зашла речь об очень интересном продукте для виртуализации - Nutanix Community Edition. Я давно о нём знаю, ещё с 2014 года, когда впервые увидел статью на хабре про неё от одного из разработчиков. Правда в то время ещё не было бесплатной CE версии, поэтому можно было только почитать, но не попробовать. Продукт стоил немалых денег.

Я узнал, что оказывается есть бесплатная Community версия, которую можно поставить у себя и попробовать. Объясню своими словами, что такое Nutanix. Это гиперконвергентное (не понимаю значение этого слова) решение, которое объединяет в себе вычислительные мощности и общее хранилище для построения распределённой системы виртуализации.

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

На практике установка Nutanix выглядит следующим образом. Вам нужно зарегистрироваться у них на сайте. При этом почтовые ящики публичных сервисов не принимаются (gmail, msn и т.д.), нужно использовать корпоративный. После регистрации получаете ссылки на ISO образы. Их можно установить на железо, либо виртуальные машины других гипервизоров. Далее создаёте кластер или используете в режиме одиночной ноды. Так тоже можно.

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

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

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

#виртуализация
Сейчас почти во всех современных Linux дистрибутивах по умолчанию используется firewall nftables. Я себе не придумываю никаких оправданий, почему я всё ещё им не пользуюсь. Уже пора это делать, но просто руки не доходят переделать правила. Ничего сложного там нет, а синтаксис nft удобнее и нагляднее, чем у iptables.

Предлагаю к просмотру простое видео с наглядным примером по настройке типовых правил для веб сервера с помощью nftables. Автор кратко рассказывает про nftables, приводит старые правила для iptables и переводит их в формат nftables.

▶️ Начинаем работу с nf_tables:
https://www.youtube.com/watch?v=XcILw0qFBLA

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

Основные отличия от iptables, о которых знаю:
единый конфиг для ipv4 и ipv6;
более короткий и наглядный синтаксис;
nftables умеет быстро работать с огромными списками, не нужен ipset;
экспорт правил в json.

Вы перешли уже на nftables? Проскакивает инфа, что грядёт переход на bpfilter, так как он ещё удобнее, но пока не понятна окончательная история с ним. В дистрибутивах по факту стоит nftables.

#видео #firewall #nftibles
​​Ранее рассматривал пару игр Bandit и Natas, где для прохождения нужно неплохо разбираться в линуксе, безопасности, веб разработке и т.д. В этот раз хочу предложить ещё одну игру из этой же серии, но очень лайтовую.

Называется Leviathan. Для начала игры надо подключиться по SSH к серверу:
Host: leviathan.labs.overthewire.org
Port: 2223
Username: leviathan0
Password: leviathan0

К игре нет никаких пояснений и описаний, кроме одной подсказки. Пароли на следующий уровень находятся в файлах /etc/leviathan_pass. Для просмотра пароля следующего уровня, нужно зайти пользователем предыдущего уровня и получить доступ к файлу.

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

Подсказки лежат в домашней директории пользователя. От неё и надо отталкиваться при решении задачи.

#игра
​​Существует простой и быстрый способ проверить производительность арендуемого сервера или VPS. Есть готовый скрипт Yet-Another-Bench-Script (yabs.sh). Сразу предупреждаю, не надо его использовать на рабочих системах. Ниже поясню почему. Это инструмент для быстрой оценки работы железа, которое вы только планируете использовать.

Yabs.sh - обычный bash скрипт. Читается легко, можете сами проверить его содержимое. Для теста диска он использует fio, для сети - iperf3 и синтетический тест Geekbench с выставлением баллов. Если этих компонентов нет в системе, он их скачивает. Именно поэтому не рекомендую запускать на рабочих машинах. Хотя какого-то особого криминала в этом нет. Можете заранее сами скачать утилиты. В скрипте есть проверка наличия их в системе.

Для проверки скорости сети используются публичные сервера iperf3. Если для вас важна точность, имеет смысл добавить парочку российских, например st.nn.ertelecom.ru или st.spb.ertelecom.ru. Дефолтные там из Европы и USA.

Geekbench генерирует отчёт о своей работе и создаёт уникальную ссылку с публикацией результатов. Так что это ещё один момент, из-за которого скрипт не надо запускать на рабочих серверах. Мало ли, что он там отправлять будет. Вот пример отчёта - https://browser.geekbench.com/v5/cpu/15318285

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

#linux #terminal
​​Когда-то давно упоминал про почтовый сервер hMailServer. Это бесплатное решение под Windows для организации своего почтового сервера, как локального, так и внешнего. Я на днях столкнулся с таким и решил ещё раз подробнее о нём написать. Продукт реально интересный, удобный и функциональный.

hMailServer поддерживает даже самые древние версии Windows. Свежая версия сервера может быть запущена на XP. Не знаю, кому это может быть актуально, но возможность такая есть. В качестве базы данных в комплекте с установщиком идёт бесплатная версия MSSQL CE, но по желанию может быть выбрана одна из следующих субд: PostgreSQL, MySQL, MSSQL Server.

Установка hMailServer - обычный инсталлятор Windows. Скачиваете дистрибутив (~4,2 МБ, шок 😱) и запускаете. Сервер работает как служба Windows. Почту хранит на диске в формате MIME. Есть поддержка русского языка.

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

Некоторые возможности hMailServer:
- интеграция с AD
- использование алиасов
- антивирус clamav
- простенький антиспам на базе анализа spf, dns, helo и т.д.
- встроенный авто-бан по ip для переборщиков учёток
- встроенный бэкап
- поддержка серых списков (Grey listing)
- поддержка шифрования с помощью tls сертификатов
- поддержка DKIM
- встроенная утилита диагностики соединений с другими smtp серверами
- настраиваемые правила обработки писем

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

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

Сайт - https://www.hmailserver.com/

#mailserver #windows
​​Утилита find и время изменения файлов

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

mtime – время последнего изменения файла
ctime – время создания файла
atime – время последнего доступа к файлу

Когда вводишь команду:
# find /mnt/backup -maxdepth 1 -type d -ctime +1
ожидаешь найти все каталоги, созданные более суток назад, чтобы удалить их и освободить место на диске. Я специально взял именно сутки, так как тут сразу наглядно видно разночтение в ожидании и реальности. Find в таком виде покажет каталоги, созданные более трех суток назад.

Вот наглядный пример:
# date +"%Y-%m-%d %H-%M"
2022-06-06 19-45

# ls -lh
drwxr-xr-x 3 root root 4.0K Jun 2 17:09 2022-06-02
drwxr-xr-x 3 root root 4.0K Jun 3 03:03 2022-06-03
drwxr-xr-x 3 root root 4.0K Jun 4 03:03 2022-06-04
drwxr-xr-x 3 root root 4.0K Jun 5 03:03 2022-06-05
drwxr-xr-x 3 root root 4.0K Jun 6 03:03 2022-06-06

# find /mnt/backup -maxdepth 1 -type d -ctime +1
/mnt/backup/2022-06-04
/mnt/backup/2022-06-03
/mnt/backup/2022-06-02

Директория 2022-06-05 старше суток, но в вывод find не попала. По факту параметр +1 означает всё, что старше двух суток. А для поиска старше суток, необходимо использовать +0.

Это связано с тем, что find определяет, как много 24-часовых периодов назад директория была создана. Любая дробная часть игнорируется, поэтому для соответствия -ctime +1 директория должна быть создана по крайней мере два дня назад.

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

Я с периодичностью раз в год-два разбираюсь с этим нюансом. Встречается редко, но когда наткнёшься, начинаешь вспоминать, как там find интерпретирует эти интервалы. Решил записать, может больше не буду забывать, но это вряд ли 🤷🏻‍♂️.

#bash #find #terminal
​​🛡 Показываю на наглядном примере, насколько сейчас просто мамкиным хакерам брутить пароли. И почему категорически нельзя ставить их простыми, хотя я постоянно вижу, что простыми их продолжают делать. Особенно в почтовых ящиках, пирах астера, RDP учётках, которые делают для теста и забывают удалить.

Вот наглядный пример - проект t14m4t. Это обычная bash обёртка над Hydra и Nmap. Автоматически ставит их и запускает сканирование заданного хоста.

Установка на Debian:
# git clone https://github.com/MS-WEB-BN/t14m4t/
# cd t14m4t
# bash install.sh
# chmod +x t14m4t
Сканируем вымышленный хост hacktarget.com:
# ./t14m4t hacktarget.com

Скрипт ищет открытые порты популярных сервисов (smtp, imap, rdp и т.д.) и пытается сбрутить учётки по словарям, которые прилагаются в виде отдельных файлов. В репе на github словари простые, типа admin / admin, но нет никакой проблемы найти реальные.

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

❗️На свои сервера с доступом в локалку не надо ставить подобные инструменты. Используйте только изолированную среду. Часовые виртуалки идеальное решение. Лично я использую simplecloud.ru для этого.

#security
​​Обновление Zabbix Server 5 ⇨ 6

На днях обновлял распределённую систему мониторинга Zabbix 5 до последней 6-й версии. Несколько замечаний по горячим следам.

Centos 7 не поддерживает 6-ю версию Zabbix Server, так что придётся заранее мигрировать на какую-то другую систему. Я перенёс на Debian 11.

Само обновление сервера проходит штатно: устанавливаем репозиторий для 6-й версии и обновляем через пакетный менеджер все компоненты Zabbix. Проблем у меня не возникло.

После обновления обязательно почистите кэш браузера, перелогинтесь и перезапустите php-fpm на сервере. Если не сделать последнее, то увидите вместо веб интерфейса ошибку на несоответствие версии БД и исходников веб интерфейса. Она немного сбивает с толку, так как не отражает реальную проблему. Я первый раз с подобным столкнулся и немного потратил времени, пока не разобрался, в чём дело. Толком даже не понял, из-за чего это произошло. Конфиг php-fpm не менялся.

Zabbix Proxy 6 нормально работает на Centos 7. Без проблем обновил через репозиторий zabbix-release-6.0-1.el7.noarch.rpm. Если используете для прокси базу sqlite, то не забудьте удалить её перед запуском новой версии. Прокси не поддерживает обновление схемы БД, её нужно пересоздать заново. Если файла с базой нет, то новая база с нужной схемой будет создана автоматически.

Новая версия сервера без проблем поддерживает все старые версии Zabbix Agent. Обновлять их большой нужды нет, если не используете новый функционал. У меня где-то есть даже версии 2.4. Они все успешно работают с новым сервером.

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

Если есть какие-то вопросы по Zabbix, задавайте, подскажу. Я хорошо его знаю.

#zabbix
​​Лень разбираться в SQL?

Для вас уже всё сделали.
📌 Канал @databases_secrets рассказывает обо всех возможностях, приёмах и лайфхаках Баз Данных, SQL и Big Data.

Подписывайтесь и прокачивайте свои навыки: @databases_secrets

#реклама
​​Ещё один пример того, чем пользуются юные "хакеры". Известный скрипт на Python для DDoS атак - MHDDoS. Для того, чтобы научиться защищаться от подобных инструментов, имеет смысл самому их изучить.

Я время от времени сталкиваюсь с атаками чем-то подобным. Последний раз мой сайт зачем-то пытались ддосить в конце февраля. Особо не парился с защитой, но одного fail2ban оказалось недостаточно. Очень много запросов было, логи разрастались молниеносно и fail2ban сам его вешал. Пришлось скрипт быстро набросать, чтобы в бан сразу улетали те, кто открывали с сервером больше 50 соединений. А сами логи отключил.

Хоть заметку и не об этом хотел сделать, но сразу покажу скрипт, так как наверняка будете спрашивать в комментариях.

#!/bin/bash
ips=`netstat -ntu | grep -vE "(Address|servers|127.0.0.1)" \
| awk '{print $5}' | cut -d ':' -f 1 | sort -n | uniq -c \
| sort -n | awk '{if ($1 > 50 ) print $2}'`
if [[ -z $ips ]]; then
  exit 0
else
  for i in $ips
do fail2ban-client -vvv set nginx-limit-conn banip $i
  done
fi

Для этого лучше использовать ipset. Заранее добавить правило блокировки в iptables, а потом просто обновлять список. Но мне не захотелось заморачиваться и что-то перенастраивать. Просто напрямую в fail2ban стал отдавать ip адреса. Их было не много, поэтому решение нормально сработало, плюс писались логи самого fail2ban. Их можно было анализировать.

Возвращаемся к MHDDoS. Установить его просто, нужен только Python и Git:
# git clone https://github.com/MatrixTM/MHDDoS.git
# cd MHDDoS
# pip install -r requirements.txt

Сразу можно запускать атаку. Для атаки L7 требуется список прокси. Если его нет, то скрипт автоматом скачает списки прокси от публичных сервисов, которые их предоставляют, проверит работоспособность и начнёт использовать. Проверка длится очень долго, так что пользоваться в таком виде не очень удобно. Лучше заранее обзавестись готовым списком. Их продают за 3-5$.

# python3 start.py GET https://site.com 0 50 proxy.txt 10 30
Атакуем сайт site.com атакой типа L7 методом GET с использованием всех доступных прокси (параметр 0), в 50 потоков, используя по 10 подключений к каждому прокси-серверу, в течении 30 секунд.

Для атаки уровня L4 прокси не нужны. Всё гораздо проще:
# python3 start.py udp 1.1.1.1:53 1 30
Атакуем dns сервер udp флудом по 53 порту в 1 поток в течении 30 секунд.

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

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

❗️Как обычно предупреждаю, не надо запускать подобные штуки на своих рабочих машинах или серверах. Используйте какие-нибудь арендованные виртуалки.

Документация - https://github.com/MatrixTM/MHDDoS/wiki/Usage-of-script

#security #ddos
​​Из личного недавнего опыта история про импорт сертификата в Windows. Вообще, эта тема очень мной нелюбимая, потому что непонятная и глючная. Решил даже статью написать, потому что знаю, многим она поможет. У меня статья с переносом сертификатов Крипто Про уже несколько лет одна из самых популярных на сайте.

Стал недоступен комп, где установлен сертификат для сервисов контура, потому что ими не пользовались давно. Но серт стал нужен, чтобы зайти в личный кабинет ИП в налоговой. У меня был бэкап в виде запароленного pfx файла с контейнером закрытого ключа и самим сертификатом в формате cer.

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

Расскажу сразу, что в итоге помогло и в чём была проблема. Либо в лицензии Крипто Про, либо в версии. Лицензия у меня давно протухла, потому что для работы с сертификатами, которые выпускает сам Контур, лицензия не нужна. Она как-то хитро зашита в сами сертификаты и когда ими пользуешься, всё работает нормально. Но вот конкретно импорт не хотел работать и давал ошибку.

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

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

https://serveradmin.ru/import-pfx-sertifikata-proizoshla-vnutrennyaya-oshibka/

#разное #ошибка
Как вы перезагружаете свой Linux?

Есть несколько способов перезагрузить систему Linux. Чаще всего используются 2 из них: консольные утилиты shutdown или reboot.
# shutdown -r now
# reboot

На первый взгляд они выполняют идентичное действие. Тогда не понятно, зачем печатать больше, если можно печатать меньше. Есть старое мнение, что эти команды работают по-разному. И тянется это с BSD систем. Насколько мне известно, как минимум в Linux это уже не так. C переходом на systemd, обе эти команды всего лишь символьные ссылки на /bin/systemctl и в этом легко убедиться.
# ls -l /usr/sbin/reboot
/usr/sbin/reboot -> /bin/systemctl
# ls -l /usr/sbin/shutdown
/usr/sbin/shutdown -> /bin/systemctl

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

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

Дам ещё небольшую подсказку в рамках этой темы. И shutdown, и reboot обращаются к бинарникам операционной системы. Если у вас какие-то проблемы с диском и не удаётся прочитать этот бинарник, то перезагрузка не состоится. Если запущена консоль, то можно через неё сразу передать команду на перезагрузку напрямую ядру:
# echo b > /proc/sysrq-trigger
Если же вы перед физической консолью сервера, то можно отправить команду через одну из комбинаций Linux Magic System Request Key - ALT-SysRq-b.

Возвращаясь к изначальной теме. У кого-нибудь есть точная информация на этот счёт? Есть ли ещё где-то разница между этими командами?

#linux