Архив рубрики: Разное

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+

Elasticsearch. Архивирование индексов в Elasticsearch

Возникает ситуация, когда необходимо архивировать индексы в Elasticsearch и складывать их на бекапный сервер. 
В таком случае мы прибегнем к elasticsearch-curator,  инструменту для управления вашими индексами и снимками Elasticsearch.

Подготовительный этап ОС.

Для начала нам необходимо установить соответствующее ПО для реализации данного сценария.

Подключим репозитирий Curator [5.5]:

для YUM Repository
https://www.elastic.co/guide/en/elasticsearch/client/curator/5.5/yum-repository.html

#vim /etc/yum.repos.d/elasticsearch-curator.repo
[curator-5]
name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

для APT repository
https://www.elastic.co/guide/en/elasticsearch/client/curator/5.5/apt-repository.html

#vim /etc/apt/sources.list.d/elasticsearch-curator.list
deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main

Ставим пакеты curator, NFS и jq:

для Centos 7 

#yum install -y elasticsearch-curator jq nfs

для Debian\Ubuntu

#sudo apt install -y  elasticsearch-curator jq nfs

Теперь создадим общую шару, куда будут иметь доступ наши машины с elasticsearch.
Советую создавать шару на стороннем сервере, можно поднять ее сразу на архивном, и примонтировать к elastic-машинам. 

Настройка NFS (на архивном сервере):

#mkdir -p /var/nfs_elk/snapshots/repository/
#mkdir -p /var/nfs_elk/snapshots/recovery/
#mkdir -p /var/nfs_elk/elasticsearch_backup
#chmod -R 755 /var/nfs_elk/*
#vim /etc/exports
/var/nfs_elk 192.168.1.0/24(rw,sync,no_root_squash)

Монтирование шары (на elastic-машинах):

#mkdir /var/nfs_elk/
#mount -t nfs 192.168.1.10:/var/nfs_elk/ /var/nfs_elk/

Подготовительный этап Elasticsearch.

После установки пакетов и настройки шар приступим к настройки elasticsearch.
Elasticsearch необходимо объявить общую шару и зарегистрировать ее.

В конфиг Elasticsearch.yml на всех машинах добавляем информацию об общей шаре и перезапустить сервис:

#vim /etc/elasticsearch/elasticsearch.yml
path.repo: /var/nfs-elk/snapshots

#systemctl restart elasticsearch

Объявить Elasticsearch на всех машинах о папке, куда будет бекапиться индекс:

curl -XPUT 'http://127.0.0.1:9200/_snapshot/repository' -H 'Content-Type: application/json' -d '{
"type": "fs",
"settings": {
"location": "repository",
"compress": true
}
}'

Объявить Elasticsearch на всех машинах о папке, куда будут складываться временные файлы при восстановлении индекса:

curl -XPUT 'http://127.0.0.1:9200/_snapshot/recovery' -H 'Content-Type: application/json' -d '{
"type": "fs",
"settings": {
"location": "recovery",
"compress": true
}
}'

Настройка архивирования индексов Elasticsearch

Процесс архивации протекает в несколько этапов:

  • Curator выводит список индексов из Elasticsearch согласно описанным правилам.
  • Создание снапшота индекса.
  • Переносим снапшота в ранее созданную директорию repository (/var/nfs_elk/snapshots/repository/).
  • Архивация в tar.gz и перенос архива в папку с бекапами.
  • Удаление индекса и снапшота.
  • Очистка папки repository.

Пример sh скрипта:

#vim backup.sh

#!/bin/bash

DAYS=21 #Количество дней, от текущей даты, старше которого индексы будут архивироваться
SNAPSHOT_DIRECTORY="/var/nfs_elk/snapshots" #Path to snapshot index из elasticsearch.yml
BACKUP_DIR="/var/nfs_elk/elasticsearch_backup" #Папка куда будут ложиться архивные логи
REPOSITORY="repository"
LOG="/var/log/elasticsearch/elasticsearch_backup.log" #Пишем процесс архивации в лог.
DATE=`date`

#Проверим существование папки для архивов и если нет, создадим её
if ! [ -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

#Получаем массив индексов, которые старше $DAYS
INDICES=`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\"}]"`

#Проверим, не пустой ли список
TEST_INDICES=`echo $INDICES | grep -q -i "error" && echo 1 || echo 0`

if [ $TEST_INDICES == 1 ]
then
echo "$DATE Не найдено индексов для обработки" >> $LOG
exit
else
# Составляем цикл для каждого индекса в массиве $INDICES
for i in $INDICES
do
# Создаём снапшот для индекса $i
curator_cli --timeout 600 --host localhost --port 9200 snapshot --repository $REPOSITORY --filter_list "{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"$i\"}"

# Заносим в переменную имя снапшота для индекса $i
SNAPSHOT=`curator_cli --host localhost --port 9200 show_snapshots --repository $REPOSITORY`

# Архивируем папку репозитория и складываем архив в хранилище
cd $SNAPSHOT_DIRECTORY/$REPOSITORY && tar -zcvf $BACKUP_DIR"/"$i".tar.gz" ./*

# Удаляем snapshot
curator_cli --host localhost --port 9200 delete_snapshots --repository $REPOSITORY --filter_list "{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"$SNAPSHOT\"}"

# Удаляем индекс
curator_cli --host localhost --port 9200 delete_indices --filter_list "{\"filtertype\":\"pattern\",\"kind\":\"regex\",\"value\":\"$i\"}"

# Очищаем папку репозитория
rm -rf $SNAPSHOT_DIRECTORY/$REPOSITORY/*
done
fi

Подробнее о шаблонах фильтрации в этой статье

Ключ —host с параметром localhost возможно использовать только в том случае, если мы указали elasticsearch случать этот адрес. Если elasticsearch слушает порт 9200 только на одном адресе, то указать корректные данные.

После создания скрипта, добавим его выполнение в cron каждый день в час ночь (01:00 РМ):

#crontab -e
0 1 * * * /bin/bash /root/backup.sh >> /var/log/elasticsearch/elasticsearch_backup.log

Первоисточник: https://habr.com/ru/company/true_engineering/blog/349192/

3+

Список сетей сканеров для IPTABLES

-A INPUT -s 5.61.16.0/21 -j DROP
-A INPUT -s 5.61.232.0/21 -j DROP
-A INPUT -s 79.137.157.0/24 -j DROP
-A INPUT -s 79.137.174.0/23 -j DROP
-A INPUT -s 79.137.183.0/24 -j DROP
-A INPUT -s 94.100.176.0/20 -j DROP
-A INPUT -s 95.163.32.0/19 -j DROP
-A INPUT -s 95.163.212.0/22 -j DROP
-A INPUT -s 95.163.216.0/22 -j DROP
-A INPUT -s 95.163.248.0/21 -j DROP
-A INPUT -s 128.140.168.0/21 -j DROP
-A INPUT -s 178.22.88.0/21 -j DROP
-A INPUT -s 178.237.16.0/20 -j DROP
-A INPUT -s 178.237.29.0/24 -j DROP
-A INPUT -s 185.5.136.0/22 -j DROP
-A INPUT -s 185.16.148.0/22 -j DROP
-A INPUT -s 185.16.244.0/23 -j DROP
-A INPUT -s 185.16.246.0/24 -j DROP
-A INPUT -s 185.16.247.0/24 -j DROP
-A INPUT -s 188.93.56.0/21 -j DROP
-A INPUT -s 194.186.63.0/24 -j DROP
-A INPUT -s 195.211.20.0/22 -j DROP
-A INPUT -s 195.218.168.0/24 -j DROP
-A INPUT -s 217.20.144.0/20 -j DROP
-A INPUT -s 217.69.128.0/20 -j DROP

0

iSpy — уведомления в Telegram при обнаружении движения

Появилась необходимость получать уведомления при обнаружении движения от камеры видеонаблюдения. Камера была добавлена в iSpy.

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

Для работы скрипта необходим curl под Windows, скачать можно тут. Батники я положил в одну директорию с curl.exe — нет необходимости в скрипте указывать путь до экзешника.

  Читать далее

2+

Как получить chat id из канала telegram

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

Делаем канал публичным (можно после сделать приватным) и выполняем, изменив выделенное на своё:

curl https://api.telegram.org/botBOT:TOKEN/getChat?chat_id=@mychannelname

В ответ получите что-то типа:

{«ok»:true,»result»:{«id»:-100ХХХХХХХХХ8,»title»:………

Вот и искомый ID, использовать со знаком —

Проверить отправку сообщений в чат:

curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"-100ХХХХХХХХХ8","text":"Проверка"}' "https://api.telegram.org/botBOT:TOKEN/sendMessage"

2+

Как сменить пароль пользователя в Linux

Для смены пароля пользователя в Linux, необходимо выполнить в Терминале (или консоли) следующую команду:
passwd
После ввода этой команды, система потребует от вас корректно и дважды ввести ваш новый пароль. Если вы хотите сменить пароль другого пользователя, вам необходимы права суперпользователя root. Если вы наделены такими правами, то выполните в терминале:
sudo bash
И введите пароль суперпользователя root (о переходе в режим суперпользователя будет свидетельствовать знак «#» вместо привычного для вас знака «$»). И, затем, выполните команду:
passwd имя_пользователя
Где имя_пользователя — логин пользователя, которому вы меняете пароль. Система опять же потребует от вас корректно и дважды ввести новый пароль.
0

Проблема с буфером обмена X11 в Linux

Привет, %username%!

Так случилось, что на днях мне потребовалось переустановить свой Kali Linux (пришло время, с кем не бывает) на ноутбуке (Lenovo).

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

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

После долгого курения манов и консультациями с умными людьми я отчаялся, решения найдено не было.

Но один умный человек все же дал мне совет и это решило проблему. Вот что нужно делать:

  1. Идем в BIOS.
  2. Заходим в раздел конфигурации (на Lenovo — Config).
  3. Display -> Video Memory.
  4. Меняем значение с 256 на 512 Мб.
  5. Сохраняемся, перезагружаемся.
  6. ???
  7. PROFIT.

Проблемы с буфером обмена пропали, как и пропали тормоза интерфейса.

Связана проблема, вероятно, с буфером обмена в X11.

В гугле проблему не нашел, поэтому описал тут.

2+

a4tech bloody6.exe didn’t starts / bloody6.exe не запускается, процесс исчезает

Купил мышь bloody r7, на Windows 10 pro установил софт с официального сайта, но при запуске Bloody6 ничего не происходило — bloody6.exe просто исчезал из списка процессов.

Отключение антивируса и фаервола не дает результата.

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

В итоге я удалил антивирус (в моём случае это был Comodo) и перезагрузил систему. После чего Bloody6 запустился! Бред, т.к. антивирус я полностью отключал, но факт.

Надеюсь эта заметка кому-то поможет не потратить 2 дня в никуда.

______________________________________________________________________

Bought the mouse bloody r7, Windows 10 pro installed the software from the official site but when I run Bloody6 nothing happened — bloody6.exe just disappeared from the list of processes.

Disabling antivirus and firewall didn’t helps.

2 days I was trying to solve a problem, wrote to support. They said standard things — turn off antivirus, reinstall the system.

In the end, I removed the antivirus (in my case it was Comodo) and restart the system. Then Bloody6 start! Nonsense, because the antivirus I was totally disabled, but a fact.

I hope this note will help someone not to spend 2 day to nowhere.

0