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

понедельник, 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) - серийный номер, модель, объём

).

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

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

пятница, 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) создаём его:

суббота, 5 декабря 2020 г.

Мониторим обновления в ubuntu с помощью python, influxdb, grafana

Заваливаешь бывает ты такой по ssh на какой нибудь сервер и если все актуальные обновления натянуты, то тебе рисуется в приветственном сообщении такая картинка:


 


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

Вообще в ubuntu информация об обновлениях в приветственное сообщение когда по ssh заваливаешь попадает из файла, который находится по пути /var/lib/update-notifier/updates-available. Вот его мы и будем использовать... 

У меня уже имеется в хозяйстве готовый стэк с influxdb в связке с grafana, которая рисует данные из него. Всё что мне необходимо - это послать http запросом данные метрик в influxdb, а об отрисовке данных и посылке их в telegram уже позаботится grafana. Для начала в influx я создаю новую базу с именем softwareupdates. Чтобы не долго заморачиваться - я написал скрипт на python:

#!/usr/bin/env python3

import time
import requests
import sys
import re
import os
import subprocess

hostname = os.uname()[1]
influxdbinitial = 'https://influxdb.host.tld/write?db=softwareupdates'


# функция для добавления в БД influxdb инфы о обновлениях
def puttoinfluxdb(totalupdates, securityupdates):
   # заправляем инфу о кол-ве общих обновлений
   data_binary = 'softwareupdates,host='+hostname+' totalupdates='+totalupdates
   try:
       response = requests.post(influxdbinitial, data=data_binary)
       print(response)
   except requests.exceptions.RequestException as e:  # This is the correct syntax
       print (e)
       sys.exit(1)
   # заправляем инфу о кол-ве обновлений на безопасность
   data_binary = 'softwareupdates,host='+hostname+' securityupdates='+securityupdates
   try:
       response = requests.post(influxdbinitial, data=data_binary)
       print(response)
   except requests.exceptions.RequestException as e:  # This is the correct syntax
       print (e)
       sys.exit(1)


def updatesnotifyget():
   #subprocess.run(["/usr/bin/apt", "update"])
   #time.sleep(3)
   f = open("/var/lib/update-notifier/updates-available", "r")
   lines = f.readlines()
   # print(lines[1])  
   totalupdates = re.sub("[^0-9^]", "", lines[1])
   securityupdates = re.sub("[^0-9^]", "", lines[2])
   puttoinfluxdb(totalupdates, securityupdates)

if __name__ == "__main__":
   updatesnotifyget()

Теперь сохраняю этот скрипт в /opt/scripts/checksoftwareupdates.py и даю права на выполнение оного с помощью chmod+x /opt/scripts/checksoftwareupdates.py. Далее пихаем скрипт в cron:

# check software updates
*/58,*/10,*/20 * * * *
/opt/scripts/checksoftwareupdates.py

# ^ буду запускать каждую 10, 20 и 58 минуту каждого часа

В графане создаю новый график, куда запихиваю данные и в итоге получаю:

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