Архив рубрики: Администрирование

Алерты Grafana в Telegram через прокси

В моём случае Grafana работает на CentOs7.
На данный момент в Grafana (v6.1.4) не реализовано подключение прокси-сервера для отправки оповещений в telegram. При поиске в Google можно найти ряд статей (раз,два,три) в которых утверждается что она станет ходить через прокси, если его добавить переменные окружения с указанием прокси сервера:

export http_proxy="http://myproxy:3128"
export https_proxy="http://myproxy:3128"

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

Если способ выше вам так же не помог, предлагаю ознакомиться с «костылём» описанным ниже.
Суть кратко: будем отправлять все запросы в сторону https://api.telegram.org на свой сервер с Apache и на нём делать proxy_pass на реальный api.telegram.org.
Можно, конечно, просто на уровне IPTABLES редиректить все обращения на 443 порт на реальную API, но при таком раскладе мы займём 443 порт на нашей VPS, что не очень кошерно, сайтики с HTTPS уже не похостишь..
Читать далее

0

IPSec на CentOs 7 с помощью LibreSwan

Ниже небольшой гайд по настройке IPSec в двух топологиях с помощью LibreSwan:

  • для сервера с публичным IP на интерфейсе;
  • для сервера c локальным IP и за маршрутизатором с NAT, используя NAT Traversal (NAT-T)


Подготовительный этап одинаков в обоих случаях:

  1. Устанавливаем libreswan:
    yum install libreswan
    
  2. Включаем IP forwarding, а IP redirects отключаем, перезагружаем параметры:
    # Открываем файл
    nano /etc/sysctl.conf
    
    # и добавляем параметры:
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    
    # Применяем новые параметры
    sysctl -p
    
  3. Разрешаем IPSec траффик в firewalld:
    firewall-cmd --zone=public --add-service=ipsec
    
  4. Добавляем сервис в автозагрузку и запускаем
    systemctl enable ipsec
    systemctl start ipsec
    

Дальнейшая конфигурация отличается от топологии. Оба случая описаны ниже.
Читать далее

0

Zabbix — Мониторинг лицензии Octopus

Порой лицензия на Octopus Deploy заканчивается неожиданно, особенно если вы используете триальную лицензию на 30 дней и постоянно её продляете 😉
Для мониторинга срока действия лицензии я написал скрипт на Python, который обращается на API октопуса и забирает информацию о дате окончания лицензии и конвертирует её в Unix time. После чего это значение получает Zabbix и, если дата окончания лицензии наступает менее чем через 3 дня, отображает алерт.
Ниже подробнее.
Читать далее

0
Запись опубликована автором в рубрике Zabbix.

Удаление checkpoint(snapshot) VM без опции «Удалить» через PowerShell

Бывает что у чекпоинта(снапшота) отсутствует опция «Удалить» в контекстном меню, а удалить чекпоинт надо — негоже чтобы он занимал место.

Пример подобного снапшота

Для удаления запускаем PowerShell с правами администратора и выполняем:

Get-VMSnapshot -ComputerName ИМЯ-ГИПЕРВИЗОРА -VMName ИМЯ-ВМ | Remove-VMSnapshot

Опции ИМЯ-ГИПЕРВИЗОРА и ИМЯ-ВМ, разумеется, меняем на свои.

Источник — https://www.zubairalexander.com/blog/removing-backup-checkpoint-in-hyper-v-that-has-no-delete-option/

0

Мониторинг ssl сертификатов, хранящихся локально

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

Возникла необходимость как-то следить за сроком действия сертификатов, которые мы используем внутри организации, как правило они выданы нашем локальным CA. Так же имеется ряд сертификатов, выданных сторонними CA — для аутентификации в банках, на различных порталах итп.

Так появилось на свет решение в виде веб-страницы, на которую можно выгрузить сам сертификат, закрытый ключ (при необходимости) и оставить комментарий к сертификату.
Можно загружать сразу несколько сертификатов с ключами или без — не важно, страница определит если есть ключ и отобразит это в таблице.
ВАЖНО: для определения пары ключ+сертификат имена фалов должны быть одинаковыми до расширения, например cert.crt и cert.key
Если дней действия сертификата остаётся менее 14 — строчка с записью выделяется красным цветом — и это можно мониторить хоть тем же Zabbix.

Конфиденциальные данные искажены

Под катом инструкция как поднять эту страницу у себя.

Читать далее

0

Подключение WinSCP через mRemoteNG

В среде mRemoteNG есть возможность подключаться в один клик к сохранённым серверам, используя WinSCP.

Для этого открываем Инструменты -> Внешние инструменты и добавляем новый — WinSCP. Указываем путь до .exe и аргументы ниже без изменений: scp://%Username%:%Password%@%Hostname%/

Теперь к любому сохранённому серверу можно подключится WinSCP кликнув по нему правой кнопкой мыши и выбрав Внешние инструменты -> WinSCP

Так же в mRemoteNG есть возможность подключения Filezilla, MySQL Workbench, Zenmap итп. Подключение остальных внешних инструментов описано тут — https://github.com/mRemoteNG/mRemoteNG/wiki/Common-External-Tool-Configurations

0

Zabbix и RabbitMq — автообнаружение очередей сообщений

Данная статья описывает мониторинг только количества сообщений в очередях RabbitMq. Если вам нужен мощный комбайн для мониторинга RabbitMq «со всех сторон» лучше воспользоваться уже написанным шаблоном от jasonmcintosh.
Для решения моей задачи данный шаблон и скрипты показались избыточными и сильно нагружающими сервер ненужными лично мне проверками. Поэтому пришлось допиливать решение ниже.

Перед непосредственной настройкой автообнаружения очередей необходимо сделать несколько подготовительных вещей:

  1. Необходимо включить web-интерфейс RabbitMq активировав плагин, который входит в дистрибутив:
    rabbitmq-plugins enable rabbitmq_management
    после этого так же станет доступен API к которому можно обращаться.
  2. Создать отдельного пользователя в rabbitmq для доступа к очередям сообщений, с разрешением только на чтение. Сделать это можно как через веб-интерфейс так и из cli:
    rabbitmqctl add_user zabbix zabbixpassword
    rabbitmqctl set_user_tags zabbix monitoring
    rabbitmqctl set_permissions -p / zabbix "" "" ".*"
  3. В конфиге zabbix агента /etc/zabbix/zabbix_agentd.conf на хосте с RabbitMq добавить ключ:
    AllowRoot=1
    и после этого перезапустить zabbix агент. Ключ позволит агенту работать из под рута и выполнять команды rabbitmqctl.

Читать далее

0

Автозагрузка putty pageant с ключами

Для запуска pageant сразу с ключами создаем ярлык для pageant.exe и в поле «Объект» после пробела вводим путь (полный путь обрамлять кавычками) до ключа .ppt. Если необходимо загрузить несколько ключей их пути разделяем пробелами. После этого при необходимости можно link добавить в автозагрузку.

0

Zabbix — несколько значений из одного файла

Задача — имеется некоторый файл, в котором значения выглядят примерно вот так:

value1 = 645;
value2 = 444;

Значения в этом файле могут изменяться любым сторонним скриптом.
Нам необходимо получить в отдельные элементы данных каждое значение — 645 и 444 в данном случае.
Читать далее

0
Запись опубликована автором в рубрике Zabbix.

Elasticsearch. Работа с curator_cli для фильтрации вывода индексов.

В прошлой статье о архивации индексов в Elasticsearch мы использовали инструмент Curator. Согласно официальной документации, Curator умеет фильтровать вывод индексов согласно заданным параметрам.

В этот рам мы рассмотрим несколько примеров фильтрации curator_cli.

Как говорилось ранее, мы использовали запрос выводящий список всех индексов старше N-дней. Рассмотрим подробнее, что делает этот запрос:

curator_cli --host localhost --port 9200 show_indices --filter_list "[{\"filtertype\":\"age\",\"source\":\"creation_date\",\"direction\":\"older\",\"unit\":\"days\",\"unit_count\":\"$DAYS\"},{\"filtertype\":\"kibana\",\"exclude\":\"True\"},{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"elastalert_status\",\"exclude\":\"True\"}]"

Мы запросили список всех индексов у Elasticsearch:

{\"filtertype\":\"age\",\"source\":\"creation_date\",\"direction\":\"older\",\"unit\":\"days\",\"unit_count\":\"$DAYS\"}

  • Параметр filtertype равный  age означает, что выборка индексов осуществляется на основе возраста(времени создания).
  • Параметр source равный creation_date — выбираем по дате создания.
  • Параметр direction равный older — этот параметр используется для определения того, являются ли индексы более старыми или младшими, чем контрольный момент времени, определяемый единицей, unit_count.
  • Параметр unit равный days — определяем параметр для unit_count. В нашем случаем мы ищем по дням (поиск возможен по другим временным единицам)
  • Параметр unit_count равный $DAYS — задаем множитель, старше кого дня ищем индексы.

Исключив из этого списка сервисный индекс .kibana в котором хранятся логи Kibana:

{\"filtertype\":\"kibana\",\"exclude\":\"True\"}

  • Параметр filtertype равный  kibana означает, что мы обращаемся к сервисному логу Kibana.
  • Параметр exclude равный True означает, что мы игнорируем данные индексы.

И исключив журнал запросов Elasticsearch:

{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"elastalert_status\",\"exclude\":\"True\"}

  • Параметр filtertype равный pattern означает, что данный тип фильтра будет перебирать список действий и сопоставлять индексы, соответствующие заданному шаблону.
  • Параметр kind равный regex — Этот параметр сообщает шаблону, что мы используем регулярное выражение.
  • Параметр value равный elastalert_status — значение kind, в нашем случаем мы обращаемся к журнал запросов Elasticsearch.
  • Параметр exclude равный True означает, что мы игнорируем данные индексы.

Немного о совмещении разных типов  filtertype

Если в Elasticsearch хранятся индексы с разным именем и назначением, то объединяя разные параметры поиска мы можем гибко фильтровать индексы.

На пример совместив filtertype pattern и age мы можем более точно выводить список индексов. Предположим в Elasticsearch два типа индексов с именами auditbeat-6.5.2-YYYY.MM.DD для хранения логов аудита и filebeat-6.2.3-YYYY.MM.DD для хранение логов сторонних сервисов.

#curator_cli --host localhost --port 9200 show_indices --filter_list "[{\"filtertype\":\"age\",\"source\":\"creation_date\",\"direction\":\"older\",\"unit\":\"days\",\"unit_count\":\"0\"},{\"filtertype\":\"kibana\",\"exclude\":\"True\"},{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"elastalert_status\",\"exclude\":\"True\"}]"

auditbeat-6.5.2-2019.02.18
auditbeat-6.5.2-2019.02.19
filebeat-6.2.3-2019.02.18
filebeat-6.2.3-2019.02.19

Объединив  filtertype pattern и age мы можем вывести отдельно список индексов auditbeat старше 1 (одного) дня:

#curator_cli --host localhost --port 9200 show_indices --filter_list "[{\"filtertype\":\"pattern\",\"kind\":\"prefix\",\"value\":\"auditbeat-\"},{\"filtertype\":\"age\",\"source\":\"creation_date\",\"direction\":\"older\",\"unit\":\"days\",\"unit_count\":\"1\"},{\"filtertype\":\"kibana\",\"exclude\":\"True\"},{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"elastalert_status\",\"exclude\":\"True\"}]"

auditbeat-6.5.2-2019.02.18

Как видим, для filtertype = pattern ми использовали регулярное выражение с шаблоном  value равному auditbeat-

Официальная документация: https://www.elastic.co/guide/en/elasticsearch/client/curator/5.5/filters.html

4+