Главная

Tuesday, 27 December 2022

Тестирование инфраструктуры с Testinfra #2.

Всем привет.

Усвоив идею тестирования на Testinfra и переориентировав ее для проверки системы, можно добиться очень многого. Автоматизация запуска тестов в ходе разработки приложений или даже написания и выполнения тестов для существующей инфраструктуры - два прекрасных способа упростить рутинные операции, которые могут вызвать ошибки. Рytest и Testinfra - отличные проекты, начать использовать их очень просто, к тому же при необходимости они легко расширяются. Самое естественное начало разработки проверочных тестов - во время создания самой инфраструктуры. Любое усовершенствование требует нового теста

Сегодня погоняем пару теcтов через Testinfra.

Вам понадобится установить web-сервер и запустить его на порту 80 для выдачи статической стартовой страницы. По мере достижения прогресса мы будем добавлять новые тесты. Неотъемлемой составляющей написания тестов является осознание сбоев, так что смоделируем несколько проблем, на примере которых будем разбираться, что нужно исправить.

На свежем сервере Ubuntu начните с установки пакета Nginx:

$apt install nginx

Создайте новый файл теста test_webserver.py, в который мы будем постепенно

добавлять тесты:

def test_nginx_is_installed(host):

assert host.package('nginx').is_installed

Сделаем вывод pytest лаконичнее с помощью флага -q, чтобы сосредоточить свое внимание на сбоях. Удаленный сервер называется node4, для подключения к нему используется SSH. Вот команда для запуска первого теста:

(validate) $ pytest -q --hosts='ssh://node4' test_webserver.py

1 passed in 1.44 seconds

Отлично! Необходимо, чтобы веб-сервер был запущен и работал, так что добавляем новый тест для проверки этого поведения:

def test_nginx_is_running(host):

assert host.service('nginx').is_running


Повторный запуск теста, казалось бы, должен опять пройти успешно:

(validate) $ pytest -q --hosts='ssh://node4' test_webserver.py

.F

= FAILURES ===================================

_____________________ test_nginx_is_running[ssh://node4] ______________________

host = <testinfra.host.Host object at 0x7f629bf1d668>

def test_nginx_is_running(host):

> assert host.service('nginx').is_running

E AssertionError: assert False

E + where False = <service nginx>.is_running

E + where <service nginx> = <class 'SystemdService'>('nginx')

test_webserver.py:7: AssertionError

1 failed, 1 passed in 2.45 seconds

Sunday, 25 December 2022

Тестирование инфраструктуры с Testinfra #1.

Всем привет.

Создание модульных тестов для тестирования инфраструктуры - замечательная идея. Главное найти подхоящий инструмент с низким порогом вхождения. Я таких знаю два - это Testinfra  (Python) и Pester (Powershell). Разумеется оба бесплатны, но более простым для старта я считаю первый. Так что сегодня будет Testinfra.

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

Пожалуй начнем. Создайте новую виртуальную среду и активируйте ее:

$ python3 -m venv validator

$ source validator/bin/activate

Установите  pytest:

(validator) $ pip3 install pytest

Установите testinfra:

(validator) $ pip3 install pytest-testinfra

Установите paramiko:

(validator) $ pip3 install paramiko

Фикстуры pytest предоставляют всю тестовую функциональность проекта Testinfra.  Чтобы извлечь пользу из этого, вам необходимо правильно указать тип соединения. Поскольку  существуют различные типы соединений прикладных частей, то, если соединение не указано непосредственно, Testinfra использует определенные типы по умолчанию. Лучше указывать тип соединения явным образом в командной строке.

Вот список поддерживаемых Testinfra соединений на сегодня:

-local

$ py.test --sudo test_myinfra.py

-Paramiko (SSH-реализация на Python)

$ py.test --ssh-config=/path/to/ssh_config --hosts=server

-Docker;

$ py.test --hosts='docker://[user@]container_id_or_name'

-SSH;

$ py.test --ssh-config=/path/to/ssh_config --hosts='ssh://server'

-Podman;

$ py.test --hosts='podman://[user@]container_id_or_name'

-Salt;

$ py.test --hosts='salt://*'

-Ansible;

$ py.test --hosts='ansible://all' # tests all inventory hosts

-Kubernetes (через утилиту kubectl);

$ py.test --hosts='kubectl://mypod-a1b2c3'

-OpenShift;

$ py.test --hosts='openshift://mypod-a1b2c3'

-WinRM;

$ py.test --hosts='winrm://vagrant@127.0.0.1:2200?no_ssl=true&no_verify_ssl=true'

-LXC/LXD

$ py.test --hosts='lxc://container_name'

Wednesday, 21 December 2022

Начало работы с СХД HP P2000.

Всем привет.

Пару слов про азы работы с СХД HP P2000 FC. С чего начинать? Заходим в web-админку СХД: 

1. Создаем Vdisk (правая клавиша мышки Vdisks -> Provisioning -> Create Vdisk)

Здесь выбираем какие диски должны быть в массиве, а так же Strape диски для автоматической подмены, при выходе из строя. Немаловажный параметр, на которой стоит обратить внимание это Chunk size, от этого зависит производительность данного Vdisk.

Размер Chunk size - определяет объем данных записываемых за одну операцию ввода/вывода. размер Chunk size задается в момент конфигурирования RAID массива и не может быть изменен позднее без переинициализации всего массива. Больший размер Chunk size обеспечивает прирост производительности при работе с большими последовательными файлами (например, видео), меньший - обеспечивает большую эффективность в случае работы с большим количеством небольших файлов.

2. Далее создаем Volume (правая клавиша мышки Vd01 -> Provisioning -> Create Volume) Здесь мы уже нарезаем логическое пространство, которое будем назначать нашим устройствам (серверам). Пока идет инициализация Vdisk, нам нужно создать хосты, которым будут назначены наши диски. Для этого нам необходимо узнать так называемые WWN портов нашей FC карты на сервере. 

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

Get-InitiatorPort | Select-Object -Property PortAddress,ConnectionType | Format-Table -AutoSize

По итогу видим все порты, которые нам доступны и активны на нашей FC карте. Нас интересует поле PortAddress.


Второй способ подойдёт для использования во всех версиях ОС Windows. Чтобы им воспользоваться необходимо установить утилиту управления от производителя HBA вашей СХД:

  • HBAnyware/OneCommand для Emulex
  • SANsurfer для Qlogic
  • HP System Management Console (HP SYM)
  • Dell Server Management Console

Sunday, 18 December 2022

NMAP и Python.

Всем привет.

Популярный NMAP также может вызываться и выполняться из разных языков  программирования, что делает его еще более мощным. Добавим ему Python - интерпретируемый язык программирования высокого уровня для программирования общего назначения. Python действительно удобный и чрезвычайно гибкий. Сам Python устанавливается по умолчанию в большинстве систем на основе Unix. Однако вам необходимо установить библиотеку NMAP отдельно. В системах на основе Debian вы можете просто использовать команду:

>pip install python-nmap

Теперь, когда вы установили требуемую библиотеку NMAP, запустите интерпретатор Python из терминала, введя команду python, и импортируйте библиотеку NMAP, как показано здесь:

kali@kali:~# python3

Python 3.9.7 (default, Sep 24 2021, 15:17:02)

[GCC 10.3.0] on linux

Type "help", "copyright", "credits" or "license" for more

information.

>>> import nmap

>>>

Теперь вы можете создать новый объект с именем nmp для вызова функции PortScanner. Затем запустите новое сканирование для целевого IP-адреса 127.0.0.1 и портов от 1 до 50, как показано ниже:

>nmp = nmap.PortScanner()

>nmp.scan('127.0.0.1', '1-50')

Сканирование завершается и дает следующий вывод:

{'nmap': {'scanstats': {'uphosts': '1', 'timestr': 'Fri Sep 20 13:12:09 2022', 'downhosts': '0', 'totalhosts': '1',

'elapsed': '1.06'}, 'scaninfo': {'tcp': {'services': '1-50', 'method': 'syn'}}, 'command_line': 'nmap -oX - -p 1-50 -sV 127.0.0.1'}, 'scan': {'127.0.0.1': {'status': {'state': 'up', 'reason': 'localhost-response'}, 'hostnames': [{'type': 'PTR', 'name': 'localhost'}], 'vendor': {}, 'addresses': {'ipv4': '127.0.0.1'}, 'tcp': {22: {'product': 'OpenSSH', 'state': 'open', 'version': '7.7p1 Debian 4', 'name': 'ssh', 'conf': '10', 'extrainfo': 'protocol 2.0', 'reason': 'syn-ack', 'cpe': 'cpe:/o:linux:linux_kernel'}}}}}


Хотя предыдущий вывод является необработанным, он, безусловно, может быть отформатирован с использованием многих функций Python. После того, как вы запустили начальное сканирование, вы можете исследовать различные функции python-nmap для получения определенных деталей сканирования.

Friday, 16 December 2022

NMAP как сканер уязвимостей.


Всем привет.

До сих пор вы знали возможности NMAP по сканированию и перечислению портов. Теперь вы увидите, как NMAP можно использовать для оценки уязвимости. Несмотря на то, что NMAP не такой всеобъемлющий, как сканеры уязвимостей, такие как Nessus и OpenVAS, он, безусловно, может обнаруживать основные уязвимости. NMAP делает это с помощью идентификаторов Common Vulnerabilities and Exposure (CVE). Он ищет подходящие CVE для служб, работающих на цели. Чтобы превратить NMAP в сканер уязвимостей, сначала необходимо загрузить и установить несколько дополнительных сценариев. 

Сначала вы переходите в каталог /usr/share/nmap/scripts, а затем клонируете две директории git:

cd /usr/share/nmap/scripts

git clone https://github.com/vulnersCom/nmap-vulners.git

git clone https://github.com/scipag/vulscan scipag_vulscan

ln -s pwd/scipag_vulscan /usr/share/nmap/scripts/vulscan

После можно скопировать vulscan.nse в /usr/share/nmap/scripts:

cp vulscan.nse /usr/share/nmap/scripts

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

nmap -sV --script=vulscan.nse 192.168.1.3

для проведения первого сканирования.

На этом все.

Wednesday, 14 December 2022

IPMI-функция мониторинга в Zabbix.

Всем привет.

IPMI (Intelligent Platform Management Interface) - интеллектуальный интерфейс управления платформой, предназначенный для автономного мониторинга и управления функциями, встроенными непосредственно в аппаратное и микропрограммное обеспечения серверных платформ. IPMI реализуется в виде отдельного контроллера сервера, который не зависит от операционной системы, BIOS, CPU севера и позволяет удаленно управлять физическим оборудованием.

Можно ли использовать функцию мониторинга IPMI в Zabbix? Можно, но предварительно надо выполнить несколько шагов по настройке IPMI, на примере НР iLO.

В НР iLO.

1. Создаем пользователя с правами администратора. С другими правами не работает (получим ошибки соединения IPMI в zabbix).

2. Активируем IPMI. По умолчанию он отключен.

В Zabbix.

1.  Нам нужно установить пакет IPMITOOL, чтобы сам Zabbix мог выполнять проверки IPMI. После используйте следующую команду, чтобы получить список доступных IPMI-датчиков на вашем устройстве iLO:

# ipmitool -I lanplus -H 192.168.1.220 -U admin -P adminpsw sensor


2. Обязательно установить StartIPMIPollers=5 в zabbix_server.conf. Перезапустить сервис Zabbix. У вас количество IPMI-полеров может быть другим.

Sunday, 11 December 2022

Про Інтернет без електрики.

Всім привіт.

На жаль відключення електроенергії на тривалий час – наша нова буденність. Головне залишатися на зв`язку та бути просто онлайн: робота, рідні, друзі. Саме тому провайдери Інтернету вже навчилися  забезпечувати надання послуг доступу до мережі Інтернет навіть в умовах тимчасової відсутності електроенергії.

Наразі така можливість перевірена для тих хто отримує послугу Інтернет по ADSL (RJ11) та Fibre channel (GРОN) завдяки резервному живленню міжстанційного телекомунікаційного обладнання та пониженного електроспоживання самих кінцевих точок за технологією. Для тих хто отримує інтернет вітою парою (RJ45) з проміжного роутера який часто висить у підїзді будинку треба уточнювати у провайдера.

Що потрібно споживачу, щоб скористатися інтернетом під час зникнення світла? 

Зовсім небагато:

- мати заряджений ноутбук, смартфон, ПК з UPS. За необхідності для додаткової підзарядки можна використовувати різні пристрої безперебійного живлення.

- підключити пристрій, який забезпечує надання інтернет у вашій оселі (маршрутизатор, модем, оптичний термінал (медіаконвертор) тощо) до резервного електроживлення. Це стосується випадку коли ви протребуєте мати Інтернет так само по всій оселі як до зникнення світла. Про невелику перебудову схеми трохи згодом.

То ж для цього необхідно зробити такі кроки:

Friday, 9 December 2022

Время современного ИТ-инженера.

Всем привет.

Чем замечательно наше время для ИТ-инженера? Прежде всего тем что для своего профессионального развития ему стали доступны многие тестовые полигоны бесплатно. Собрать свою мини-сеть с сервером, станциями и даже маршрутизаторами можно на своем домашнем компьютере в VirtualBox или GNS3, главное чтобы ОЗУ было побольше. Благо что в дисковом пространстве недостатка уже нет. Вот мой список виртуального оборудования в VirtualBox:


Что недоступно как виртаульный образ (у вас нет подписки), то можно пошупать на сайте самого производителя оборудования. Например Cisco. Уверен, небольшая регистрация вас не затруднит.

Вы же знаете что многие производители сетевого оборудования все больше склоннны к программируемым сетям, поэтому программная начинка их железа все больше напоминает мне хорошо кастомизированный Linux. А поддержка REST API и Python из коробки идет как must have!

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

Успехов всем нам!

Thursday, 8 December 2022

Период кеширования в Outlook 365.

Всем привет.

Возвращаясь к теме кеширования в MS Outlook и общаясь с специалистами пришел к выводу что все таки лучше его оставить. Особенно сейчас когда пользуешся Office 365, но имеешь перебои с интернетом. Период кеширования ставим не менее месяца, можно три.


Остальное как на слайде. Успехов.

Saturday, 3 December 2022

И волки сыты, и овцы целы!


Всем привет.

Играясь с полигоном ELK в качестве активного выявление угроз я обнаружил любопытную заметку. В ней говорилось что деятельность инфобеза в качестве охотников за угрозами можно уместить в 6 пунктов, заимствованных из отчета, опубликованного компанией Lockheed Martin (Eric M. Hutchins, Michael J. Cloppert, Rohan M. Amin, Ph.D., Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains, https://www.lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf):

  • Detect (oбнаруживать);
  • Deny (отказывать);
  • Disrupt (нарушать);
  • Degrade (ухудшать);
  • Deceive (обманывать);
  • Destroy (уничтожать).

Так вот по пункту Deny сообщалось следущее:

"этот пункт означает действия защитников, которые лишают злоумышленника объективного успеха. Примером может быть отказ в доступе к системным учетным записям, необходимым для горизонтального перемещения по рабочей среде. У автора была анекдотическая история. Однажды он анализировал сервис-респондер, который был занят в операционной деятельности предприятия. Злоумышленник активно похищал данные через канал, который должен был оставаться открытым для поддержки бизнес-операций. Все данные должны быть доступны, так что команда кибербезопасности оказалась в уязвимом и беспомощном положении. В качестве ответной меры они применили довольно своеобразную конфигурацию сети, чтобы вырезать случайное количество байтов из каждого случайного пакета в определенных файлах, которые направлялись к заведомо плохому месту назначения. И злоумышленник не смог восстановить украденные данные, потому что они были повреждены."

Тут я вспомнил свою историю, которая оказалась весьма похожа. Итак, руководящий орган поставил перед нашей бухгалтерией емкую задачу по сбору данных в сжатые сроки. Все бы ничего, но данные требовали консолидации со всей области, а это без малого 28 филиалов банка. Разумеется к часу Х данные были готовы на 90%, посылать непроверенные данные не хотелось, а нарушать сроки их подачи тем более. Над местным главбухом навис дамоклов меч. Они обратились к ИТ за помощью, т.е. ко мне.

Я решил что будет для всех правильно перевести ситуацию в чисто техническую - реализовать идею которая лишила бы руководство наверху рычага наказания нашего бухгалтера, хотя бы временно. Итак, я предложил взять готовые данные дополнить их  пустышкой до 100% и все красиво поместить в архив. В самом архиве был намеренно поврежден header чтобы архив не смог корректно распаковаться у адресата. И в таком виде файл был отправлен наверх. Разумеется адресат минут через 20 сообщил что архив (при пересылке?) был поврежден, срочно повторите отправку и т.д. Ай, я, яй, как же так... конечно сейчас  повторим. Вы уже поняли что за это время бухгалтерия дополучила недостающие данные, и уже новый но правильный архив бы "повторно" и торжественно отправлен адресату. 

Каюсь, но как говорится, остались и волки сыты и овцы целы!

Удачи.


Friday, 2 December 2022

Шпаргалка - установка RDS.

Всем привет.

Сегодня для вас еще одна шпаргалка - установка роли RDS. Это самый простой способ поднять RDS-сервер. Итак:

1) Устанавливаем роль RDS.

2) Тип развертывания: быстрый запуск.

3) Сценарий: на основе сеансов.

4) Выбор сервера: этот сервер, если пул серверов не был сформирован ранее.

5) Разрешаем автоматичский ребут. Ждем окончания установки роли.

6) Проводим настройку сеансов RDS:

- коллекции/Quiсk Session Collection

- задачи/Изменить свойства


7) Добавляем (опубликовать) приложения в RemoteApp: Задачи/Опубликовать удаленные приложения RemoteApp. Все опубликованные из коробки удаляем, но я из стандартных всегда оставляю "Калькулятор" для теста.

Thursday, 1 December 2022

USB-диск и хост Hyper-V.


Всем привет.

Уверенно написав вам в прошлый раз что проброс USB-дисков с хоста Hyper-V в ВМ есть немало инструкций в сети, я вчера случайно обнаружил еще одну фишку. Но по порядку...

Итак, вы вставили USB-диск в хост Hyper-V, перевели его в режим offline, кликнули на настройки ВМ, подсоединили там уже свободный диск и запустили саму ВМ. Есть, далее в самой ВМ находим это диск и переводим его в режим online. Отлично, наш USB-диск доступен.

Что дальше? Вот мы закончили с ним работать, теперь его надо благополучно извлечь. Ок, мы его опять переводим в режим offline в самой ВМ и... забираем его с собой.) 

ВМ не жалуется, потому что у нее забрали диск которым она уже не управляет, Hyper-V тоже не против, так как этот диск у него был offline. Все довольны, все работает.

А теперь фишка - ВМ будет себя чувствовать нормально до первой перезагрузки! Т.е. она просто не загрузиться. Почему? А дело в том что Hyper-V будет искать для ВМ тот самый диск который остался в настройках ВМ, но оказался у нас в кармане. И не найдя его выдаст ошибку и прекратит загрузку ВМ.



Поэтому не забывайте удалять диск и там тоже.

Удачи.