Showing posts with label SSL. Show all posts
Showing posts with label SSL. Show all posts

Saturday, 22 July 2023

Invalid arithmetic operator в Zabbix.


Всем привет.

SSL (TLS) сертификаты стали важным компонентом современной инфраструктуры, поэтому администратору нужно следить за тем, чтобы они не истекали и вовремя их обновлять. Удобно отслеживать срок действия SSL сертификатов на ваших сайтах с помощью системы мониторинга Zabbix.

В ранних версиях Zabbix для мониторинга SSL сертификатов приходилось использовать консольные скрипты, которые передают значения в Zabbix через UserParameter. В Zabbix Agent 2 появись возможность получения информации о сертификате с помощью встроенного плагина WebCertificate. 

Вот здесь рассмотрены оба способа мониторинга срока действия SSL.

По второму способу скажу сразу что скрипт автора /usr/lib/zabbix/externalscripts/sslcert_expiration.sh однозначно рабочий:

#!/bin/bash

data=`echo | openssl s_client -servername $1 -connect $1:${2:-443} 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##'`

ssldate=`date -d "${data}" '+%s'`

nowdate=`date '+%s'`

diffdate="$((${ssldate}-${nowdate}))"

echo $((${diffdate}/86400))

Кстати им же можно проверять сертификаты и на сереверах в локальной сети предприятия.

Но есть нюас.) В Linux без них никуда. При его тестировании на моем сервере Zabbix выскочил глюк на определении diffdate, что ему не делал скрипт тут падал в ошибку: «syntax error: invalid arithmetic operator (error token is «.

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

1)

data=$(echo | openssl s_client -servername "$1" -connect "$1":${2:-443} 2>/dev/null | openssl x509 -noout -enddate | awk -F '=' '{print $2}')

2)

diffdate=$((`date -d "$ssldate" '+%s'`- `date -d "$nowdate" '+%s'`))

3)

# Using Python to calculate the difference in seconds

diffdate=$(python -c "from datetime import datetime; print(int((datetime.strptime('$data', '%b %d %H:%M:%S %Y %Z') - datetime.now()).total_seconds()))")

4)

# Retrieve the SSL certificate end date

data=$(echo | openssl s_client -servername "$1" -connect "$1":${2:-443} 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter' | cut -d '=' -f 2)

5)

# Calculate the difference in seconds using 'bc' command

diffdate=$(echo "$ssldate - $nowdate" | bc)


Проверка решений своим поиском по Google привела к тем же вариантам, так что ChatGPT не соврал. Но увы, ни один из способов к успеху не привел. Видно хорошо был сформатирован код моего Zabbix appliance.

Надеюсь вам повезет больше. Удачи.

Friday, 1 April 2022

Диагностика сетевого взаимодействия.


Всем привет. 

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

Вы начинаете с получения полного доменного имени (FQDN), fully qualifed domain name своего хоста и значения IP адреса его DNS сервера, а затем проверяете работает ли этот сервер DNS.

Затем вы применяете сконфигурированный сервер DNS на предмет определения значений имён контроллеров домена в своём домене и убеждаетесь что способны достигать каждого контроллера домена как по порту 389 (LDAP), так и по 445 (для GPO). 

Затем вы проверяете доступность шлюза по умолчанию. В конце, уже опционально, вы тестируете возможность достижения удалённого хоста по порту 80 (http) и по порту 443 (HTTP поверх SSL/ TLS). 

В приницпе весь рецепт диагностики состоит из кода Powershell для версии 7.0.

# Получаем значение имени DNS данного хоста

$DNSDomain = $Env:USERDNSDOMAIN

$FQDN      = "$Env:COMPUTERNAME.$DNSDomain"

# Получаем значение адреса этого DNS сервера

$DNSHT = @{

  InterfaceAlias = "Ethernet"

  AddressFamily  = 'IPv4'

}

$DNSServers = (Get-DnsClientServerAddress @DNSHT).ServerAddresses

$DNSServers

# Убеждаемся в доступности этих DNS серверов

Foreach ($DNSServer in $DNSServers) {

  $TestDNS = Test-NetConnection -Port 53 -ComputerName $DNSServer   

  $Result  = $TestDNS ? "Available" : ' Not reachable'

  "DNS Server [$DNSServer] is $Result"

}

Wednesday, 20 October 2021

PowerShell Security book #1.

Hi all.

Today I would like to present for your eyes the best e-book of authors Michael Pietroforte and Wolfgang Sommergut "PowerShell Security".

These authors describe in details security features in Powershell:

  • Control execution of scripts using execution policy, code signing and constrained language mode
  • Secure PowerShell remoting with SSH und TLS
  • Delegate administrative tasks with JEA
  • Audit and analyze PowerShell activities, encrypt logs
  • Improve code quality following best practices.

PowerShell is a powerful tool for system administration and as such also a perfect means for hackers. Due to the tight integration into the system, attempts to simply block PowerShell provide a false impression of security. The best protection is provided by PowerShell's own mechanisms. PowerShell offers almost unlimited access to the resources of a Windows computer and also can automate numerous applications such as Exchange. Users aren't limited to the many modules and cmdlets, but can also integrate .NET classes, Windows APIs, and COM objects. These capabilities are particularly dangerous in the hands of attackers. Since many versions of With Windows Server, Microsoft avoids to activate any roles and features on a freshly installed machine in order to minimize the attack surface. On such a locked down system users must explicitly add all required services.



So, now I try to explain for you these features in practically. Let's go.

# Execution scripts.

We can define policies for execution Powershell scripts on the host by:

  • GPO
  • signing our script
  • set constrained language mode.

# Execution policy.

I prefer set RemoteSigned mode. It means that Scripts downloaded from the Internet must be signed by a trusted publisher.

How it set?

  • Set-ExecutionPolicy RemoteSigned
  • Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • $env:PSExecutionPolicyPreference

How it check?

Get-ExecutionPolicy -List | ft -AutoSize

We can set Turn on Poweshell script execution by GPO.

How it set?

mmc: Policies => Administrative Templates => Windows Components => Windows PowerShell and is called Turn on Script Execution.

Result: powershell.exe -ExecutionPolicy "Unrestricted" doesn't work!

However you can bypass it as following:

a) If a user decides to circumvent this policy, he simply copies the contents of a script to the ISE and runs it there. 

b) RemoteSigned allows unsigned scripts downloaded from the Internet to be started if you unblock the file using Unblock-File.

c) Another bypass consists of encoding the script in Base64 and transferring it to PowerShell.exe via the EncodedCommand parameter. 

To limit possible damage caused by such activities, it is recommended to use the Constrained Language Mode.

Monday, 8 February 2021

Настройка шифрованного подключения агента Zabbix.

Всем привет.

Если данные от с zabbix-агентов поступают на zabbix-сервер через интернет и при этом не используется vpn канал, то рекомендуется всегда включать шифрованние передачи данных. Для этого используется наиболее простой вариант шифрования с применением pre-shared ключей.

Для этого в конфигурацию агента zabbix_agent.conf добавляем следующие параметры:

TLSConnect=psk

TLSAccept=unencrypted,psk

TLSPSKFile=/etc/zabbix/zabbix_agentd.psk

TLSPSKIdentity=HOST-PSK

Выполняем генерация PSK-ключа, которую можно выполнить где угодно, а потом перенести файл zabbix_agentd.psk.

host-agent# openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk

Перестартовываем агента:

host-agent# service zabbix-agent restart

В свойствах хоста на zabbix-сервере в отдельной вкладке Encryption, настраиваем PSK-ключ нашего хоста.


Обращаю внимание что надо ставить галочки PSK в "Соединения с узла сети"  и  в "Подключения к узлу сети", т.е. обязательно должно быть выбрано PSK и там, и там.

Теперь можем выполнить проверку PSK-соединения:

- для этого сначала перекинем ключ агента на zabbix-сервер:

host-agent# scp /etc/zabbix/zabbix_agentd.psk server:agent01.psk

- посылаем get-запрос:

server# zabbix_get -s hots-agent -k agent.version --tls-connect=psk --tls-psk-identity="HOST-PSK" --tls-psk-file=anget01.psk

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

...

Saturday, 16 May 2020

LDAPS и Zabbix - нужные моменты.

Всем привет.

Не так давно была моя заметка про включение аутентификации LDAPS в Zabbix. На повторную проверку этой операции всплыли некоторые моменты, которые надо выполнить.

Со стороны сервера Zabbix.

Во первых в файл /etc/ldap/ldap.conf надо добавить строку:

TLS_REQCERT never

Во вторых, в файл /etc/hosts дописать DNS на свой контроллер домена dc01.forza.com:

192.168.10.1 dc01.forza.com

В третьих получить сертификат контроллера домена выполнив:

openssl s_client -showcerts -connect 192.168.10.1:636

Со стороны контроллера домена.

Во первых, фаерволле сервера разрешить входящие соединения по 389 и 636 TCP-портам.

Во вторых с помощью ldp.exe проверить  что сервер слушает по 636-му порту.



Thursday, 7 May 2020

PowerShell Web Access и SSL.

Всем привет.

Удобная штука PowerShell Web Access (PSWA), но ее использование без шифрования трафика с помощью SSL чревато. К счастью штатно она имеет в своем арсенале настройки использования SSL. Для настройки PSWA с использованием SSL сертификата есть несколько вариантов:

  • при установке самого web-приложения с помощью Pwersehll указать ключик -UseTestCertificate;
  • создать самозаверенный сертификат в оснастке диспетчера IIS;
  • обратиться в центр сертификации и получить нормальный сертификат, который затем и установить.
Далее  я опишу все шаги которые я прошел, уверен что часть из них могут быть лишними для вас. Но что было то было.

Итак, первый вариант был самым простым, но созданный таким образом сертификат PowerShellWebAccessTestWebSite (на 90 дней) оказался бесполезным даже  в тестовой среде. Поэтому после недолгих мучений с ним я перешел ко второму варианту. Для этой цели я создал самозаверенный сертификат, но с помощью известного скрипта. Увы, автоматизация бывает не всегда полезна. Дело в том что созданный таким образом сертификат оказался заточен на короткое имя сервера, а не на его FQDN. Почему так отработал скрипт - непонятно. Поэтому пришлось ручками сгенерировать третий самозаверенный сертификат в оснастке диспетчера IIS.

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

Популярное