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

понедельник, 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

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

четверг, 22 июля 2021 г.

PCPO - Pc park observer


 PC park observer - система учёта комплектующих компьютеров парка, базирующегося на MS Windows

 Для чего эта система

Данная система предназначена для учёта комплектующих в компьютерном парке, базирующемся на Windows. Я выложил систему под GNU/GPL v. 3 лицензией, так что денег не прошу, можете использовать как угодно... Все пожелания и т.п. обсуждаются отдельно...

Особенности и возможности

Система работает под управлением ОС GNU Linux (на данный момент успешно обкатана на ubuntu 20.04).  Система собирает информацию и создаёт оповещения в случае изменений в необходимых хостах (в частности информацию об:

- мак адрес сетевого адаптера
- ip адрес
- имя хоста
- информацию о мат. плате (по возможности и её серийный номер)
- информацию о процессоре (по возможности и её серийный номер)
- информацию об оперативной памяти (по возможности серийный номер, тип памяти - ECC или не ECC, объём)
- видеоадаптер (с указанием PNP Device id)
- жёсткие диски (можно опционально включить проверку тех, что подключены по USB или iSCSI) - серийный номер, модель, объём

).

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

Доступ к системе регулируется на основе двух ролей - администраторов (могут менять системные настройки и менять перечень проверяемых сетей/хостов); менеджеров - могут просматривать статистику и аналитику по проверяемым хостам.

четверг, 24 июня 2021 г.

Мониторинг состояния здоровья и температуры жёстких дисков в Windows с помощью smartmontools + telegraf

 У меня уже развёрнута связка influxdb + grafana и тут в сетке появился хост с блядской виндой... Под линуксами всякими снимать инфу о состоянии жёстких дисков оказалось прилично легко, но с виндой пришлось покрутиться... Попытка прикрутить smartmontools в конфиг телеграфа в плагин [[inputs.smart]] провалилась успешно высыпанием кучей ошибок и прочего... Придётся ставить костыли и сегодняшний костыль будет писан на powershell (дабы не усложнять ничего в окружении и т.п.).

пятница, 19 марта 2021 г.

Блокировка "плохих" ip адресов через список blocklist.de

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

#!/bin/bash
cd /opt/blackips/
rm tempips.txt -rf
if wget https://www.blocklist.de/downloads/export-ips_all.txt -O tempips.txt
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
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
 

вторник, 16 марта 2021 г.

Nginx - включение basic авторизации для определённых ip адресов

 Первым делом заготовим файл, в котором будем хранить перечень ip адресов, для которых будем производить авторизацию. Положим его в /etc/nginx/ipsets/authips.conf. Собственно его содержимое будет примерно таким:

...
deny 1.1.0.0/19;
deny 2.2.3.0/24;
deny 3.3.3.0/22;
deny 4.4.4.4/32;
...

Для того, чтобы авторизация заработала, нам также надо создать файл, содержащий учётные записи с паролями. Для этого с помощью утилиты htpasswd
 
(если таковой не нашлось в системе, то доставим её, находится она в пакете apache2-utils: sudo apt install apache2-utils) создаём его:

понедельник, 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

 

четверг, 30 апреля 2020 г.

Мониторинг интерфейсов mikrotik с помощью mikrotik api, telegraf и grafana

 С чего началось... Меня попросили запилить мониторинг за народом, коий подключается по vpn к офису с использованием pptp (кто когда подключался, кто сколько прокачивал...). Самый первый и очевидный способ - полезть в snmp, да и запилить на нём, НО... Это же тебе надо знать заранее oid каждого интерфейса, а если мы говорим про vpn, то интерфейсы динамические... Вот заводишь ты новый vpn для кого то и потом его в мониторинге прописывать, нафиг... Гемор одним словом... А что если сделать так, чтобы в мониторинг всё попадало автоматом...
 


воскресенье, 26 апреля 2020 г.

nginx проксирование tcp/udp соединений

 nginx - это не только 10 килограммов веб серверов, но ещё и как все помним офигительный проксятник... Прилетела мне тут задачка - мониторить соединения которые стучатся на определённый tcp порт (а если понадобится, то и на udp)... Навскидку конечно можно проще простого - закрутить iptables с логированием да и делов, но вот nginx... Эта штука даёт куда больше воли в плане фантазии - к примеру редиректить соединения по условиям (скажем откуда кто пришёл, туда того и редиректить); можно прикрутить на 1 порт разнае редиректы/условия и т.д. и т.п. Но мне пока достаточно логировать соединения и в принципе на этом могу в последующем фигачить какие то графики (хочешь в модуле статистики самого nginx'a, хочешь прикручивай это дело к графане/zabbix и т.п.) и выстраивать какие то звонилки (а в некоторых случаях если угодно сразу банить козлов через прикрутку к fail2ban) в случае возникновения аномалий в работе тех или иных сервисов... Итак, собираю nginx...

sudo add-apt-repository -y ppa:nginx/development
sudo apt-get update
sudo apt-get install -y wget curl tmux unzip nginx

Далее создают конфиг для nginx'а (обычно пасутся /etc/nginx/conf.d или /etc/nginx/sites-[available/enabled])... примерно с таким содержанием (говорю же - мне пока достаточно...):

stream {

# Исключаем локальные (свои айпишники из логов)
map $remote_addr $log_ip {
"77.220.204.113" 0;
"77.220.204.114" 0;
default 1;
}


    upstream strange_web_server {
        server 10.20.20.10:8080;
    }

    upstream backup_server {
        server 10.20.20.11:22;
    }


# формат логов (если что необходимо, привинтить доп. переменные какие надо...
log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log /var/log/nginx/tcpproxy.log proxy if=$log_ip;
    error_log /var/log/nginx/error-tcpproxy.log;

# Собственно слушаем на определённом айпишнике, на определённом порту ну и проксируемс...
    server {
        proxy_connect_timeout 60s;
        listen 8.8.8.5:88;
        proxy_pass strange_web_server;
    }

    server {
        proxy_connect_timeout 60s;
        listen 8.8.8.5:7722;
        proxy_pass backup_server;
    }


}


За сим всё... :)

среда, 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 в системе ну или перезагрузить компик...

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