mindsellers
72 subscribers
25 photos
8 files
32 links
Практики из жизни Linux-админа. Asterisk, Bash, Python и черная магия.

Сайт http://mindsellers.ru
Группа VK https://vk.com/mindsellers
ТыТруба https://www.youtube.com/channel/UC7LUJgzIUL4VGiOWctoa0fw
По всяким вопросам обращаться @alex_dmit
Download Telegram
Как спасти сервер от коллеги и про тайну личной переписки

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

Представьте: ваш коллега потопал ножками в серверную, чтобы внести некие изменения на Linux-сервере с консоли. Ну допустим, айпишник сменить, чтобы в случае падения быстренько все на месте исправить. Или ядро обновить. Или просто он не доверяет ssh. Телефон этот раздолбай, как обычно, оставил в кабинете. И тут до вас внезапно доходит осознание того, что если он осуществит задуманное, сервер ляжет и не встанет. Как его остановить? Бежать за ним уже поздно, кричать бесполезно...

Или вот другая ситуация: вы, используя команду who видите, что на сервере есть подключенные по ssh клиенты, а сервер надобно перезагрузить. Как узнать - реально ли кто-то там что-то там делает, или просто забыл закрыть консольку? Как предупредить всех о своем намерении перезагрузить сервер?

Оказывается, в любом современном дистрибутиве есть волшебная команда wall, которая будучи вызванной с некой строкой в качестве аргумента принудительно выплюнет оную во все активные терминалы!!!

wall Hello World!

На всех консолях, даже если там что-то запущено, появится что-то вроде

Broadcast message from root@mindserllers (pts/2) (Fri Mar 23 15:28:21 2018):   

Hello World!


Вот такая полезная софтина, на которую я почему-то никогда не натыкался.

Но тут я вспомнил еще об одной давней мечте - иметь возможность обмена информацией по максимально защищенному каналу, но с людьми, для которых настройка VPN - уже целое дело. Догадываетесь, да? Просто ставим putty, даем друзьям дико кастрированный shell до какой-нибудь своей виртуалки в Цюрихе(ну, у всех ж есть виртуалка в Цюрихе, да?), - и готово, переписочка внутри ssh и не надо ничего писать самому. Да, пусть не самая удобная, но зато мы ТОЧНО знаем, что никакой Паша Дуров никакую нашу переписку никуда не сливает.

Но давайте пофантазируем дальше и решим, как все-таки кастрировать shell тем друзьям, которым удастся "продать" нашу безопасность. Да все просто: мы напишем свой shell!

Создадим файл /usr/bin/chat_shell.py с правами 755 и запишем в него

#!/usr/bin/python

import os
from getpass import getuser
user=getuser()
print 'Hello, '+user +'\n'
print 'To quit type "/exit"' + '\n\n'
try:
while True:
string=raw_input(user+'>')
if string == '/exit':
exit()
elif string == '':
pass
else:
os.system('wall'+' ' +string)
except:
pass

Это и будет наш шелл. Теперь добавим его в список командных оболочек:

echo '/usr/bin/chat_shell.py' >> /etc/shells

и еще добавим возможность вызывать его от "нормального" пользователя попроще:

echo alias chat='/usr/bin/chat_shell.py' >> /etc/bash.bashrc

Ну и создаем ограниченного юзера:

adduser username --shell /usr/bin/chat_shell.py

Вот, собственно, и все на сегодня.

P.S. Как вы понимаете, аналогичным образом можно написать свой "ограниченный" shell практически под любые задачи.

Всем хороших выходных!

#onestringscript #python #linux
Получение уникальных строк на Bash

Еще одна простая строка, которая может помочь в разных ситуациях. Допустим, у нас есть почтовик, и тут мы замечаем, что в очереди postqueue -p довольно много писем со статусом Over quota, что говорит нам о переполнении ящиков. Надо бы предупредить пользователей, почистить ящики и так далее. Естественно, мы легко выделим список всех переполненных ящиков примерно так:
postqueue -p | grep 'Over quota' -A1 | grep '@' 

Но на выходе мы получим кучу дублированных строк, так как на переполенный ящик в списке на доставку может стоять далеко не одно сообщение. На помощь нам придут две команды - sort, которая по умолчанию отсортирует строки по алфавиту, и uniq, которая удалит из выдачи повторы. Итого, получим
postqueue -p | grep 'Over quota' -A1 | grep '@' |sort | uniq

что на выходе даст нам несколько строк с переполненными ящиками.

#onestringscript #linux #bash
Мультипоточный сокет-сервер на Python

Всем наверняка известно, что в Python есть модуль socket, который реализует, собственно, сокеты и двусторонний обмен данными. Но вот незадача: при классическом использовании, как в официальном примере
# Echo server program
import socket

HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)


сервер обслуживает только одно подключение в единицу времени! Пока не свершится подключение conn, addr = s.accept(), не начнется чтение. Пока не будут прочитаны данные data = conn.recv(1024), сервер не будет ждать новых подключений, даже если задать s.listen(10000).

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

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

Исходник доступен на гитхабе, комментарии по коду - в wiki
http://pubwiki.mindsellers.ru/index.php/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%81%D0%BE%D0%BA%D0%B5%D1%82-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80

https://github.com/mindsellers/SockServer-py

#python #linux
Telegram-бот "Попингуй"

У многих админов, в том числе и у нас, используется система мониторинга Zabbix с прикрученным к ней телеграм-ботом, который всякие ворнинги постоянно кидает в группу. Но бывает так, что падает агент заббикса, или происходит ложное срабатывание, ну и так далее. В итоге приходится ночью вскакивать с кровати, бежать к компу, ломиться на рабочий комп по удаленке - и все это ради того, чтобы просто пропинговать ресурс и убедиться в том, что он жив. Вот и решил я написать свой бот на Python, который будет болтаться на сервере в локальной сети и по заявкам пользователей пинговать что надо.
Сначала добавляем себе супер-бота @BotFather, создаем через него своего бота и получаем токен, который надо будет указать в скрипте, затем переходим к разработке.

Сам скрипт выкладывать в канал смысла не вижу, его можно посмотреть по ссылкам ниже. Кроме стандартной работы с библиотекой telebot, интерес в скрипте представляет механизм авторизации. Используя библиотеку shelve, мы будем хранить в файле эдакую базу данных "ключ: значение". В качестве ключа у нас будет слово users, а в качестве значения - множество ID наших клиентов. При запуске скрипта мы читаем из базы идентификаторы в множество(если, конечно, там уже есть нужный ключ. Если его нет, то множество останется пустым):
db=shelve.open('/admin/teleusers.db')
allowed=set()
try:
allowed=db["users"]
except:
pass

Если пользователь отправит нам пароль, то мы внесем его в множество allowed и положим обновленное множество в базу:
if message.text == password:
print message.from_user.id
allowed.add(message.from_user.id)
db["users"]=allowed
bot.send_message(message.chat.id, 'Вы добавлены в список пользователей бота. Теперь можете писать адрес, который надо пропинговать')

При каждом запросе проверяем, "наш человек или посторонний". Если наш, то запускаем пинг и возвращаем результат. Если пинг завершится неуспешно, то выводим сообщение о недоступности ресурса.
if user in allowed:
bot.send_message(message.chat.id, 'Пингую, подождите')
else:
bot.send_message(message.chat.id, 'Пока не скажешь пароль, ничего не получишь!')


Для того, чтобы не заморачиваться с демонизацией скрипта, но при этом быть уверенным в его работе, воспользуемся systemctl - создадим файл сервиса /etc/systemd/system/telegrambot.service
[Unit]
Description=MyTelegramBot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /admin/telegrambot.py
Restart=always

[Install]
WantedBy=multi-user.target


Перечитаем список демонов и запустим нашего

sudo systemctl daemon-reload
sudo systemctl enable telegrambot.service
sudo systemctl start telegrambot.service


Все, можно пробовать подключаться.
Код можно посмотреть в wiki и в vk

http://pubwiki.mindsellers.ru/index.php/Telegram-%D0%91%D0%BE%D1%82_%22%D0%BF%D0%BE%D0%BF%D0%B8%D0%BD%D0%B3%D1%83%D0%B9%22

https://vk.com/@mindsellers-telegram-bot-popingui

#python #linux #bash #telegram
VPN за 10 секунд для системных администраторов

Итак, интернет в РФ планомерно превращается в тыкву, и если для телеграма есть прокси, для сайтиков - анонимайзеры и VPN, то как быть в случае, если с удаленного сервера станет недоступно что-то важное? Например, я вот не смог плагины для OpenFire скачать на днях. Поднимать vpn-клиент на сервере и на горячую настраивать маршрутизацию - и долго, и страшно. И вообще не наш путь. Есть ж ssh!

Для решения задачи по туннелированию всего или части трафика через сервера в странах, где у власти адекватные люди, прекрасно подходит утиллита sshuttle. Рассмотрим ее установку, параметры и возможности

apt install sshuttle
sshuttle -r login@domain.xx 0/0 #заворачиваем весь трафик в ssh-туннель, кроме dns-запросов
sshuttle --dns -r login@domain.xx 0/0 #заворачиваем весь трафик, в том числе dns
sshuttle -r login@domain.xx 11.22.33.44/26 #заворачиваем только определенную сеть
sshuttle -r login@domain.xx 0/0 -x 10.0.0.0/8 #заворачиваем все, кроме указанной подсети


Обратите внимание, что для запуска sshuttle потребуются права sudo!

Естественно, можно использовать этот замечательный инструмент и для обеспечения временного доступа в локальную сеть предприятия(ну или квартиры, если у вас проброшен ssh и белый айпишник) удаленно, особенно в том случае, когда vpn-сервера нет, а делать его лень.

P.S. Знаю, что для многих sshuttle - давно известный инструмент, но я почему-то про него не знал, и думаю, что кому-то это знание будет так же полезно, как и мне.

#onestringscript #linux #bash #vpn #proxy #telegram
Простой VPN-сервер за 5 минут на PPTP
Просто пример рабочего конфига

Прошу учесть, что несмотря на все достоинства PPTP(скорость работы, простой конфиг, клиент встроен в винду и андроид), основной недостаток его - безопасность, а именно уязвимость MS CHAP V2. Но в том случае, когда вам нужно ехать, а не шашечки, и ехать прямо сейчас - PPTP вполне можно использовать. Все действия ниже актуальны для Ubuntu 16.04

apt install pptpd #ставим софт
nano /etc/pptpd.conf #правим конфиг

option /etc/ppp/pptpd-options
logwtmp
localip 192.168.0.1 #внутренний адрес VPN
remoteip 192.168.0.2-102 #клиентский пул
connections 100

nano /etc/ppp/pptpd-options #правим опции pptp

name pptpd
refuse-pap
nobsdcomp
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
novjccomp
nodefaultroute
lock
nobsdcomp
lcp-echo-failure 50
mtu 1400
mru 1400

nano /etc/ppp/chap-secrets #задаем логины и пароли

# Secrets for authentication using CHAP
# client server secret IP addresses
test pptpd testpass 192.168.0.100

nano /etc/sysctl.conf # нужно включить форвард

net.ipv4.ip_forward=1 # в файле должна быть эта строка

echo 1 > /proc/sys/net/ipv4/ip_forward #включаем форвард без перезагрузки

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE #включаем маскарад
iptables-save > /etc/iptables.up.rules #сохраняем конфиг
echo 'pre-up iptables-restore < /etc/iptables.up.rules' >> /etc/networks/interfaces
/etc/init.d/pptpd restart #перезапускаем сервер


Вот и все, можно подключаться.

#linux #vpn
Корпоративное хранилище в 2018 году

Сегодня в одном чатике разгорелся спор по поводу применимости samba-сервера под Linux в корпоративной среде, ориентированной под windows-пользователей. Обсуждение началось с вопроса неофита: "как подмонтировать Linux-каталог к компу с windows?" Естественно, все тут же забыли о самом вопросе, и начали наперебой предлагать решения - от FTP до переноса функции контроллера домена на Linux.

На мой взгляд, удобнее всего поднимать корпоративное хранилище на NextCloud(форк OwnCloud).

Преимущества:
* Полная независимость прав на файлы и каталоги в инфраструктуре NextCloud от пользователей собственно Linux-сервера
* Возможность интеграции с доменом
* Гибкая настройка прав доступа к файлам и каталогам, которую могут осуществлять сами пользователи
* Ограничение на размер хранилища для каждой группы или пользователя
* Возможность одновременной работы с офисными файлами через расширение Collabora Office
* Поддержка версионности файлов
* Возможность работы через веб-интерфейс, официальные клиенты под все платформы, WebDav
* Легкость переноса и резервного копирования
* Отличная документация
* Возможность построения отказоустойчивых и HL кластеров

Недостатки:
* Чуть более сложная настройка в сравнении с той же samba
* Необходимость краткого ликбеза для сотрудников

Прочитать мой пошаговый мануал по установке системы можно по ссылке http://pubwiki.mindsellers.ru/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_NextCloud

!UPD! Сообщают о недоступности сайта nextcloud из-за очередной придури роскомпозора. Рекомендую или скачать архив через vpn или использовать sshuttle

https://t.me/mindsellers/27

#linux #samba #nextcloud
Выделение раздела Linux на диске без перезагрузки и LVM. Бесплатно, без СМС

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

Тут нам на помощь приходит замечательная команда:

fallocate -l 10G /tmp/disk.img


которая создаст файл размером 10 гигабайт в /tmp. Далее, с этим файлом можно обращаться как с разделом:

mkfs.ext4 /tmp/disk.img
mount /tmp/disk.img /mnt


А уж кейсы, в которых можно применить подобный подход, придумайте сами.

#linux #onestringscript
Терминальный сервер на Ubuntu Server 16.04

apt update
apt install lxde xrdp #Ставим легкое окружение LXDE и сервер RDP
apt install subversion gcc libice-dev pkg-config zlib1g-dev cvs autoconf
apt install libtool libssl-dev libpam0g-dev libx11-dev libxfixes-dev xfonts-base
# Поставили зависимости, далее качаем и компилируем
# X11rdp, по сути - X-сервер для RDP
cd /usr/src
svn co svn://server1.xrdp.org/srv/svn/repos/main/x11rdp_xorg71
mkdir /usr/local/X11rdp
cd x11rdp_xorg71
sh buildx.sh /usr/local/X11rdp

ln -s /usr/local/X11rdp/bin/X11rdp /usr/local/bin
ln -s /usr/share/fonts/X11 /usr/local/X11rdp/lib/X11/fonts


Листинг конфигурационных файлов:
/etc/xrdp/sesman.ini
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=1
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh

[Security]
AllowRootLogin=0
MaxLoginRetry=3
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins

[Sessions]
X11DisplayOffset=1
MaxSessions=10 #Максимально сессий
KillDisconnected=0
IdleTimeLimit=0
DisconnectedTimeLimit=0

[Logging]
LogFile=/var/log/xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG

[X11rdp]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp


/etc/xrdp/xrdp.ini
[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1
max_bpp=24

[xrdp0]
name=sesman-X11rdp
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24


#Linux #Terminal
Как выгрузить список активных пользователей Zimbra

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

su zimbra #переключаемся под пользователя zimbra
cd /tmp #переходим в tmp

zmprov -l gaa -v domain.ltd | grep -B11 'zimbraAccountStatus: active' > /tmp/all #в файл выдергиваем строку с нужным статусом
# и 11 строк до нее
# блоки в файле будут разделены ---
# поэтому каждый блок в сумме будет 13 строк
split -l 13 all # разбиваем файл на отдельные, каждый по 13 строк
#файлы будут начинаться на х
for file in ./x*; do echo $(cat $file|grep display| cut -d':' -f2)';'$(cat $file|grep mail| cut -d':' -f2) ; done > csv.csv
#выводим в csv displayName и саму почту
rm -f ./x*
rm -f ./all
#удаляем ненужные файлы


На выходе получаем валидный csv-файл
#Linux #bash #onestringscript
Полноценное логирование действий пользователей в консоли

Все, конечно, знают о ~/.bash_history. Равно как и о том, что его нужно за собой чистить, особенно, если занимаешься на чужой системе чем-то интересным. Недавно мне стало интересно, как же хранить реальные логи действий, да желательно с привязкой к тому, кто реально хулиганил на системе(мало ли, у кого гипотетически есть sudo) и ко времени.

В интернетах наткнулся на проект snoopy logger. Потестил, и выяснил, что штука вполне неплохая, лог пишет исправно, ставится или скриптами от разработчиков или из репозиториев (в Убунтовских есть).

Не вижу смысла в дальнейших подробностях - заходим и ставим!

https://github.com/a2o/snoopy

#linux #bash
Добавление дисков к linux-виртуалке на VMWare наживую

Воткнулись тут в интересную ситуацию - добавляем новый диск машинке через vCenter, а RedHat от оракла его не видит. Ребут как самый очевидный, но и самый инвазивный способ, был отвергнут. Нашлось рассово-верное решение:

1. Смотрим, какие у нас вообще шинки есть:
ls /sys/class/scsi_host

На выходе видим список host0 host1 и так далее. Минимум шина будет одна, host0
2. Пересканируем все шинки:
echo "- - -" >/sys/class/scsi_host/hostX/scan

X в команде меняем на номер, начиная с 0, для всех шин, полученных на предыдущем шаге.
3. Профит -
fdisk -l


#linux
Настраиваем серваки стильно, модно, молодежно

Чисто случайно наткнулся на превосходное приложение - cockpit(ссылка на проект будет в конце). Хреновина чем-то напоминает старый добрый вебмин, но гораздо более стильная и веселая. Ставится в одну команду, позволяет рулить системой, сетью, докером и виртуалками, и все это из браузера! И даже пользоваться консолькой прямо в браузере.

Переходим по ссылочке и наслаждаемся.

https://cockpit-project.org/
#linux
Перенос ubuntu на систему с EFI

Буквально сегодня возникла задача - срочно перенести Ubuntu 14.04 на новое железо со старого(накрылась материнка). Система ставилась довольно давно, мать тоже была старая. Казалось бы - все тривиально: выдернул винты, воткнул в новое железо, и получай удовольствие. Но не тут-то было! Старая мать знать не знала про UEFI, а новая, соответственно, только про UEFI и знает, никакого legacy.

В общем, не буду растягивать прелюдию. Для восстановления нам потребуется загрузочная флешка с чем-то убунту-образным. У меня нашлась с Linux Mint 18 x64, и на ней все прекрасно получилось.

Загружаемся с флешки и запускаем Gparted. Необходимо "отрезать" от диска раздел(я отрезал 512Мб) в самом начале, отформатировать его в FAT32, поставить метку тома EFI и флаг boot. Затем установить и запустить boot repair:

sudo add-apt-repository -y ppa:yannubuntu/boot-repair && sudo apt -y install boot-repair && boot-repair


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

#linux #bios #uefi
Уведомление в telegram из zabbix

Задача мониторинга всегда актуальна. Одним из лучших продуктов для ее реализации я считаю Zabbix. Но к сожалению, по умолчанию он умеет слать уведомления по почте и jabber. При этом существует возможность использования внешних скриптов для обработки алярмов.

Телеграм предоставляет аж 2 разных API - для ботов и для клиентов. Про реализацию бота я уже писал, так что сейчас рассмотрим реализацию клиента. Для начала, нужно пойти на сайт телеграма, получить id и токен доступа к API client. После этого можно перейти к скрипту.

Для реализации доступа к API client существует прекрасная библиотека под названием Telethon, так что начнем с ее установки:

pip3 install telethon


Обратите внимание: либа реализована только под python3.x!

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

client.send_message(alex_dmit, 'Привет!')


Однако слать сообщения в личку каждому из заинтересованных - не наш метод, нам нужно слать уведомления в чат. К сожалению, примера для отправки сообщений в группу я не нашел, но поковырявшись в самой библиотеке обнаружил метод: нужно по ссылке для приглашения в чат получить его идентификатор, а уже после слать сообщение. Рассмотрим весь скрипт:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from telethon import TelegramClient
import sys
api_id = 242424
api_hash = '8d79f63dfsfsfsdfsfsdfs'#параметры подключения
phone_number = '+79063448810' # номер телефона


client = TelegramClient('/usr/lib/zabbix/alertscripts/%sessionname%', api_id, api_hash)
client.connect()
if not client.is_user_authorized():
client.send_code_request(phone_number)
client.sign_in(phone_number, input('Enter the code: '))
print(sys.argv[1])
destination_group_invite_link='https://t.me/joinchat/Dk3ZYRWFRXXXXXXXXpI7ADaQ'
entity=client.get_entity(destination_group_invite_link)
client.send_message(entity=entity, message=sys.argv[1:])



Как несложно понять, destination_group_invite_link нужно скормить ссылку-приглашение в группу. При первом запуске скрипт запросит код подтверждения, который будет выслан на любое другое устройство, с которого в этот момент авторизован пользователь. После этого по указанному адресу(в нашем случае /usr/lib/zabbix/alertscripts/) будет создан файл сессии, и пока мы его не удалим, скрипт будет работать без запросов подтверждения.

Отправлять в чат мы будем все, что получили в качестве аргументов: sys.argv[1:]

Дадим права на запуск, и проверим работоспособность скрипта:

chmod +x ./send.py
./send.py 'Тестовое сообщение'


Переходим к настройке заббикса. Все, описанное ниже, имеет отношение к версии 3.4, но насколько мне известно, и в 2.х и в 4.х все делается примерно так же.

Для начала, нужно зайти в Настройка->Действия и включить дефолтное действие Report problems to Zabbix administrators. Затем, в Администрирование->Способы оповещения добавим новый способ под названием telegram. Тип оповещения "скрипт", параметры оповещения {ALERT.SUBJECT} и {ALERT.MESSAGE}.

Остается только перейти в настройки своей учетной записи и включить способ уведомлений telegram.

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

#zabbix #linux #python #telegram #telethon