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

понедельник, 23 сентября 2024 г.

ip листы по автономной сети (AS) и их применение (возможно блокировка по ним) скажем в nginx/angie и т.д.

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

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

Итак, допустим нам прилетела задача по блокировке входящих соединений скажем нууу... С microsoft'а... Мы знаем AS мелгомякгой компании - это AS8075.

Я набросал вот таков вот простенький скриптик на баше, который будет генерировать geo лист для nginx:

#!/bin/bash
echo 'geo $remote_addr $ipblocked {'
echo '         default 0;'
whois -h whois.radb.net -- "-i origin $1" | grep 'route:\|route6:' | awk '{print $2 " 1;"}'
echo '}' 

Вызовем его так:

./t.sh AS8075 > msblocklist.conf  

Получим файл с примерно таким содержимым:

geo $remote_addr $microsoft {
        default 0;
1.186.0.0/16 1;
2.58.103.0/24 1;
...

}

Не забудем подключить данный файл в nginx добавив строку вида:

include /etc/nginx/blacklists/microsoft.conf;

Ну и теперь, где оно необходимо будем использовать данный список согласно нашим хотелкам примерно так:

  if ($microsoft) {
       return 403;
 }

Данный лист генерируется с учётом как ipv4, так и с учётом ipv6 адресов. Если необходимо оставить только ipv4, то достаточно

grep 'route:\|route6:' 

  исправить на

grep 'route:'

четверг, 13 октября 2022 г.

ssl expiration checker - скрипт для проверки срока истечения действия SSL сертификата в днях

 Тут на медни мне понадобилось собирать информацию с кучи доменов об истечении срока действия их сертификатов, собственно я и сделал такую штуку...

Репозиторий на гитхабе:

 https://github.com/constantinekg/ssl_expiration_checker

Скрипт проверки срока окончания действия SSL сертификата

Данный скрипт предназначен для проверки срока истечения действия SSL сертификата в днях.

Использование:

./ssl_checker.py -d https://example.com:443

Вывод:

152

понедельник, 21 марта 2022 г.

Мониторинг за обновлениями серверов на базе Ubuntu

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

Собственно вся писанина лежит в общем доступе тут:

https://github.com/constantinekg/ubuntu-checksoftwareupdates

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

понедельник, 11 января 2021 г.

Быстро отправить в windows (где есть curl) сообщение в telegram

 В общем в виндах надо отправить в скрипте быренько сообщение в телеграм... Проще простого... Для начала заводим бота в телеграме (получаем botID), узнаём id чата, куда отправлять сообщения и после этого там где необходимо пишем собственно в самом скрипте (bat файле допустим):

set chatID=424324534
set botToken=JILA3j4i23r53409tit0k:2353464573cdksdserw432
set message="Something going on %computername%"

curl https://api.telegram.org/bot%botToken%/sendMessage?chat_id=%chatID%^^^&text=%message%



суббота, 10 октября 2020 г.

Скрипт для проверки на ответ от DNS серверов на запрос об определённом домене с отсылкой в случае успешного результата в telegram

 Предположим мы только что прописали новый домен (предположим A запись) на каких-либо NS серверах и мы хотим проверять определённые dns серверы через определённый промежуток времени на ответ по нашему запросу на наш новый домен и если проверяемый dns сервер отдаст нам в результатах нами прописаный ip-адрес, который припаркован к нашему новому домену - нам прилетало бы уведомление в телеграм. Пишем на bash'е, если что понадобится dig, curl. Также понадобится (если ещё не заведён) завести себе бота в телеграме через @BotFather...

#!/bin/bash
# Created by Constantine in 2020
# $1 - domain for check
# $2 - dns server
# $3 - check ip address
# $4 - timeout between dns quireies in seconds
# here example for launch: ./checkdns.sh domain.tld 8.8.8.8 44.55.55.5 10
 
telegram_bot_id='krewpo2k3r5p253tewreqe3124234324235245345ds'
telegram_chat_id='34534534534'
telegram_message="Domain $1 has been found and now available by dns response from $2. Domain ip address is: $3"
 
 
while true; do
    if dig -t a $1 $2 | grep -q $3; then
        echo found
        curl -s -X POST https://api.telegram.org/bot$telegram_bot_id/sendMessage -d chat_id=$telegram_chat_id -d text="$telegram_message"
        exit 1
    else
        echo not found
    fi
    sleep $4
done

Пример запуска: ./checkdns.sh domain.tld 8.8.8.8 44.55.55.5 10

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

Domain domain.tld has been found and now available by dns response from 8.8.8.8. Domain ip address is: 44.55.55.5

 

пятница, 2 октября 2020 г.

Замена в тексте текста между двумя заданными ключевыми словами или тегами с помощью php

 Ещё тут попросили помочь по теме и вот я накидал такую функцию для замены текста в каком то тексте между заданными двумя ключевыми словами:

<?php

function string_between_two_tags($str, $starting_tag, $ending_tag, $string4replace)
{
$start = strpos($str, $starting_tag)+strlen($starting_tag);
$end = strpos($str, $ending_tag);
return substr($str, 0, $start).$string4replace.substr($str, $end);
}

$output = '<a href="www.mysite.com/custom-products"><span>Special custom products</span></a>';
$res = string_between_two_tags($output, '<span>', '</span>', 'custom');
echo $res;

?>


четверг, 1 октября 2020 г.

Посчитать количество ящиков в ящике через php

 Бывает знаешь размер коробки (скажем 100x100x100) и прикидываешь сколько маленьких коробок в эту одну большую коробку поместится. Тут один чувачок на стэке спросил как это делается на php и я быренько накидал функцию, собственно вот:

<?php function GetItemsInBoxQuantity ($boxsize = array(100, 100,100), $verifiable_item = array(50,50,50)) { # here we pass default values of box size and verifable items $boxspace = array_product($boxsize); $verifiable_item_space = array_product($verifiable_item); $count_boxes_in_boxspace = floor($boxspace / $verifiable_item_space); return $count_boxes_in_boxspace; } # Now we putting new values of box size and size of items $box = array(200,100,100); $verifiable_item= array(40,40,40); $result = GetItemsInBoxQuantity($box, $verifiable_item); echo 'We can put into box '.$result.' items.'; ?>

среда, 19 февраля 2020 г.

Мониторинг за процессами в Windows, согласно их путей выполнения с помощью telegraf, influxdb и grafana

Мне понадобилось следить за процессами в Windows и рисовать по ним графики, а также создавать оповещения о их различных статусах. Для этого я написал отдельное приложение на c# и сделал следующую связку:

1. На windows машинке работает служба telegraf, которая коллекционирует различные метрики, среди которых в ней включен плагин exec.
2. Плагин exec вызывает моё приложение, который отдаёт перечень процессов и их состояние в виде аргумента в telegraf.
3. Telegraf посылает метрики в БД influxdb.
4. Grafana берёт метрики из influxdb и далее рисуются графики и прикручиваются алерты...

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



Пример графика

Как работает моё приложение... 

Приложение вызывается с передачей к нему в качестве аргумента пути к CSV файлу, который внутри себя представляет примерно следующее:

C:\Program Files (x86)\ZKTime.Net\ZKTimeNet.exe,$ZKTimeNet
C:\OhmGraphite-0.10.0\OhmGraphite.exe,OhmGraphite
C:\Windows\system32\dns.exe,$DNS_server

Первый столбец указывает на путь выполнения к файлу (регистр букв соблюдается, так что предварительно необходимо посмотреть в таск менеджере корректный путь к выполняемому процессу). Разделителем выступает символ , после которого указывается наименование выполняемого процесса. Для чего это нужно? Представим что в системе есть 2 браузера firefox, но они установленны в разные директории. Таким образом в описании можно указать для разных путей разные наименования. Например firefox1 и firefox2. 

Обратите внимание на символ $ в начале наименования процесса. Таким образом я указываю, что за этим процессом необходимо следить и отсылать состояние его работы даже в том случае, когда он не запущен (допустим критические приложения). В случае наличия данного символа и отсутствия выполняемого процесса в системе - в метрике будет отдано значение -1, тогда как состояние запущенности процесса указывается метрикой, равной 1.

Качаем отсюда (https://github.com/constantinekg/getprocesses) 2 файла:


Файл getprocs.7z распаковываем, получаем getprocs.exe. Эти 2 файла (getprocs.exe и procs.csv) перемещаем в директорию с установленным telegraf'ом (C:\Program Files\telegraf).

Правим по образу и подобию CSV файл. Указываем необходимые для мониторинга процессы и т.д. 

В конфиг telegraf добавляем следующее:

# Читает метрики в stdout
[[inputs.exec]]

commands = [
"C:/\"Program Files\"/telegraf/getprocs.exe C:/\"Program Files\"/telegraf/procs.csv",
]
 
# Интервал сбора метрик
interval = "60s"

## Таймаут для ожидания выполнения процесса
timeout = "10s"

# Оставляем как есть
data_format = "influx"
data_type = "string"
[inputs.exec.tags]
# Возможные теги для полученных метрик процессов (в моём случае мне достаточно знать что это метрики из офиса, но можно добавить что то своё дополнительно
location = "office"

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

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

четверг, 9 января 2020 г.

Скрипт для бэкапа файлов сайта и базы данных mysql с помощью percona-xtrabackup

Понадобилось на одном хосте мне бэкапить базы данных mysql различных сайтов и их файлов...

Есть такой замечательный инструмент для бэкапа БД как xtrabackup. С помощью оного я буду делать бэкап БД (процесс резервирования порой бывает затратный по времени, но процесс развёртывания резервной копии намного быстрее нежели при использовании популярного у народа mysqldump + в моём случае я резервирую совершенно все базы за раз, а также имею лучшую целостность БД и сохраняю все учётные записи и их права доступа).

Для mysql версий 4x, 5x:

sudo -s
cd /opt
apt install xtrabackup p7zip-full
git clone https://github.com/constantinekg/sitebackup_with_mysql/
cd sitebackup_with_mysql/
echo 'Edit backup script for your settings...'
nano  backupdb.py
chmod +x backupdb.py
mkdir /backup

Для mysql версий 8x:

sudo -s
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
apt update
apt install percona-xtrabackup-80 p7zip-full
git clone https://github.com/constantinekg/sitebackup_with_mysql/
cd sitebackup_with_mysql/
echo 'Edit backup script for your settings...'
nano backupdb8.py
chmod +x backupdb8.py
mkdir /backup


Запускаем и проверяем:

./backupdb.py

Запихиваем задачу в крон:

crontab -e

01 * * * * /opt/sitebackup_with_mysql/backupdb.py # Для mysql 4/5x

01 * * * * /opt/sitebackup_with_mysql/backupdb8.py


Как восстанавливать...

В сути необходимо распаковать содержимое бэкапа (файлы БД) в /var/lib/mysql, предварительно перед этим остановив mysql сервер ( systemctl stop mysql ) и выставить там необходимые права на доступ, после чего запустить mysql сервер ( systemctl start mysql ). Готово!

rsync -avrP /data/backup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql

пятница, 29 ноября 2019 г.

Блокирование гадов в iptables по подписке



Пока копался в интернетах на тему блок листов всяких, я нашёл один хороший чёрный список всяких гадов, кои сканируют ресурсы и напичканы всякими плохими ботами. Список этот обновляется регулярно и поставляется любезно в виде списка правил для операционки routerOS. Но тут мне понадобилось получить ровно такой же функционал и на машинках под управлением обычных дистрибутивов GNU Linux. Оговорюсь сразу, что это можно/лучше проделывать на машинках, у которых есть хороший запас по cpu и памяти. Итак, я ставлю для начала на машинку пакет ipset:

sudo apt install ipset

Я написал короткий bash-скрипт, который положил в /opt/blackips/block-black-ips.sh (Будем блочить ТОЛЬКО IPv4):

#!/bin/bash
cd /opt/blackips/
rm drop.malicious.rsc -rf
if wget https://www.squidblacklist.org/downloads/drop.malicious.rsc -O drop.malicious.rsc
then
iptables -D FORWARD -m set --match-set blacklist src -j DROP
iptables -D INPUT -m set --match-set blacklist src -j DROP
iptables -D FORWARD -m set --match-set blacklist src -j DROP
ipset destroy blacklist
#ipset create blacklist hash:ip hashsize 1227600
ipset create blacklist hash:net family inet hashsize 32768 maxelem 300000
iptables -I FORWARD -m set --match-set blacklist src -j DROP
iptables -I INPUT -m set --match-set blacklist src -j DROP
iptables -I FORWARD -m set --match-set blacklist src -j DROP
cat drop.malicious.rsc | grep address= | awk '{print $8}' | sed 's/address=//' > tempips.txt
while read -r line; do
if [[ $line =~ .*:.* ]];
then
  echo "IPv6"
else
  ipset add blacklist "$line";
fi
done < tempips.txt
rm tempips.txt -rf
else
echo 'Error! Can not download black list of ip addresses!'
fi


Теперь добавим его в cron (sudo crontab -e):

# download black list of bad ip's and put them into iptables rules for DROP action
*/12 * * * * /opt/blackips/block-black-ips.sh

вторник, 2 апреля 2019 г.

Бот мониторинга для telegram

 

Сначала открываем telegram и идём вызываем Bot father (https://t.me/BotFather), после чего делаем запрос на создание бота. Нам будет выдан API Token. Скопируем его куда нибудь. В боте я зашил 3 комманды - одна /help (просто справочная информация аки описание), вторая /clock (при её вызове бот отдаст имя хоста и текущее время на сервере, где работает бот) и третья - /myid (возвращает id собеседника (понадобится для того, чтобы прописать в конфиге - кому отсылать сообщения)). Для того, чтобы в меню бота они появились нам необходимо также отредактировать бота в bot father, объявив ему что в вашем боте есть эти комманды. Также можно в bot father'е прописать имя, описание, о боте и его иконку.

Ставим необходимые зависимости:

sudo apt install python3-pip nmap git && sudo -H pip3 install --upgrade pip && sudo -H pip3 install pytelegrambotapi && sudo -H pip3 install paramiko


Сливаем проект на сервер, с которого будем мониторить наше хозяйство:

git clone https://github.com/constantinekg/monitoringtelebot

Далее необходимо поправить файл config.py (тут мы прописываем token бота, id того, кому будут приходить сообщения, а также перечень url сайтов, которых мы будем мониторить на код ответа от них 200.

Также необходимо подредактировать файл servers.txt (тут будут указываться хосты, которые будем проверять на доступность открытого порта). В целом конструкция такая:

ip_адрес номер_порта описание_сервиса

В качестве номера порта может быть указан номер какого то конкретного порта или диапазон портов, разделённых через знак тире (к примеру с 3000 по 3005 будет выглядеть так: 3000-3005).

Для автоматического старта системы я в /etc/rc.local перед строчкой exit 0 прописал:

cd /opt/monitoringtelebot/ && runuser -l linuxuser -c '/opt/monitoringtelebot/bot.py &'

Где:

/opt/browny-bot - путь до директории, в которой лежит бот
linuxuser - пользователь, от имени которого будет стартовать процесс бота


Все обсуждения - либо мне в личку, либо в гитхабе...