په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

پدې وروستیو کې موږ د وینډوز سرورونو کې د سندونو اعتبار موده څارلو دنده سره مخ شوي یو. ښه، زه څنګه پاڅیدم وروسته له هغه چې سندونه څو ځله په کدو بدل شول ، په هغه وخت کې کله چې د دوی د نوي کولو ږیره لرونکي همکار په رخصتۍ و. له هغې وروسته، هغه او ما یو څه شکمن کړ او پریکړه یې وکړه چې د هغې په اړه فکر وکړو. له هغه ځایه چې موږ ورو ورو د NetXMS څارنې سیسټم پلي کوو، دا د دې دندې لپاره اصلي او په اصولو کې یوازینی نوماند شو.

پایله په پای کې په لاندې بڼه ترلاسه شوه:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

او پروسه پخپله دوام لري.

لاړ شه. په NetXMS کې د پای ته رسیدو سندونو لپاره هیڅ جوړ شوی کاونټر شتون نلري ، نو تاسو اړتیا لرئ خپل ځان جوړ کړئ او د ډیټا چمتو کولو لپاره سکریپټونه وکاروئ. البته، په پاورشیل کې، دا وینډوز دی. سکریپټ باید په عملیاتي سیسټم کې ټول سندونه ولولي، د دوی د ختمیدو نیټه په ورځو کې واخلي او دا شمیره NetXMS ته انتقال کړي. د هغه د ایجنټ له لارې. دا هغه ځای دی چې موږ به یې پیل کړو.

یو اختیارتر ټولو ساده. په ساده ډول د نږدې نیټې سره د سند پای نیټې پورې د ورځو شمیر ترلاسه کړئ.

د دې لپاره چې د NetXMS سرور زموږ د دودیز پیرامیټر شتون په اړه پوه شي، دا باید د اجنټ څخه ترلاسه کړي. که نه نو، دا پیرامیټر نشي کولی د نشتوالي له امله اضافه شي. له همدې امله، د ایجنټ ترتیب کولو فایل کې nxagentd.conf موږ یو بهرنی پیرامیټر تار اضافه کوو چې نوم یې دی HTTPS.CertificateExpireDateSimple، په کوم کې چې موږ د سکریپټ لانچ راجستر کوو:

ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"

د دې په پام کې نیولو سره چې سکریپټ په شبکه کې پیل شوی، تاسو باید په یاد ولرئ د اجرا کولو پالیسي، او نور "-NoLogo -NoProfile -NonInteractive" هم مه هیروئ ، کوم چې ما د غوره کوډ لوستلو وړتیا لپاره پریښود.

د پایلې په توګه، د اجنټ ترتیب یو څه داسې ښکاري:

#
# NetXMS agent configuration file
# Created by agent installer at Thu Jun 13 11:24:43 2019
#
 
MasterServers = netxms.corp.testcompany.ru
ConfigIncludeDir = C:NetXMSetcnxagentd.conf.d
LogFile = {syslog}
FileStore = C:NetXMSvar
SubAgent = ecs.nsm
SubAgent = filemgr.nsm
SubAgent = ping.nsm
SubAgent = logwatch.nsm
SubAgent = portcheck.nsm
SubAgent = winperf.nsm
SubAgent = wmi.nsm
 
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"

له دې وروسته ، تاسو اړتیا لرئ تشکیل خوندي کړئ او اجنټ بیا پیل کړئ. تاسو کولی شئ دا د NetXMS کنسول څخه ترسره کړئ: تشکیل خلاص کړئ (د اجنټ ترتیب فایل ایډیټ کړئ) ، سم کړئ ، خوندي کړئ او پلي کړئ ، د پایلې په توګه ، په حقیقت کې ورته شی به پیښ شي. بیا بیا تنظیمات ولولئ (ټولنه> ترتیب)، که تاسو د انتظار کولو ځواک نلرئ. د دې ګامونو وروسته، تاسو باید وړتیا ولرئ چې زموږ دودیز پیرامیټر اضافه کړئ.

په NetXMS کنسول کې لاړ شئ د معلوماتو راټولولو ترتیب تجرباتي سرور چې موږ یې د سندونو څارنه کوو او هلته یو نوی پیرامیټر رامینځته کوو (په راتلونکي کې ، د تنظیم کولو وروسته ، دا د ټیمپلیټونو ته د لیږدولو معنی لري). له لیست څخه HTTPS.CertificateExpireDateSimple غوره کړئ، د روښانه نوم سره توضیحات دننه کړئ، ډول یې په انټیجر کې تنظیم کړئ او د رایې ورکولو وقفه تنظیم کړئ. د ډیبګ کولو اهدافو لپاره ، دا د لنډې کولو لپاره معنی لري ، د مثال په توګه 30 ثانیې. هرڅه چمتو دي، د اوس لپاره بس.

تاسو کولی شئ وګورئ ... نه، دا ډیر وخت دی. اوس، البته، موږ به هیڅ شی ترلاسه نکړو. یوازې د دې لپاره چې سکریپټ لا تر اوسه نه دی لیکل شوی. راځئ چې دا نیمګړتیا سمه کړو. سکریپټ به په ساده ډول یو شمیر ښکاره کړي، د سند پای ته رسیدو پورې د پاتې ورځو شمیر. د ټولو موجوداتو ترټولو لږ تر لږه. بېلګه رسم الخط:

try {
    # Получаем все сертификаты из хранилища сертификатов
    $lmCertificates = @( Get-ChildItem -Recurse -path 'Cert:LocalMachineMy' -ErrorAction Stop )
     
    # Если сертификатов нет, вернуть "10 лет"
    if ($lmCertificates.Count -eq 0) { return 3650 }
 
    # Получаем Expiration Date всех сертификатов
    $expirationDates = @( $lmCertificates | ForEach-Object { return $_.NotAfter } )
 
    # Получаем наиболее близкий Expiration Date из всех
    $minExpirationDate = ($expirationDates | Measure-Object -Minimum -ErrorAction Stop ).Minimum
 
    # Конвертируем наиболее близкий Expiration Date в количество оставшихся дней с округлением в меньшую сторону
    $daysLeft = [Math]::Floor( ($minExpirationDate - [DateTime]::Now).TotalDays )
 
    # Возвращаем значение
    return $daysLeft
}
catch {
    return -1
}

دا په دې ډول وګرځي:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

723 ورځې، نږدې دوه کاله د سند پای ته رسیدو پورې پاتې دي. دا منطقی دی، ځکه چې ما په دې وروستیو کې د ایکسچینج ټیسټ بنچ لپاره سندونه بیا خپاره کړل.

دا یو اسانه انتخاب و. شاید، یو څوک به له دې څخه راضي وي، مګر موږ نور غوښتل. موږ خپل ځان په سرور کې د ټولو سندونو لیست ترلاسه کولو دنده تنظیم کړه ، د نوم په واسطه ، او د هر یو لپاره ترڅو د سند پای ته رسیدو پورې د پاتې ورځو شمیر وګورو.

دوهم انتخاب، یو څه ډیر پیچلي.

یوځل بیا موږ د اجنټ تشکیل ترمیم کوو او هلته د ExternalParameter سره د کرښې پرځای ، موږ دوه نور لیکو:

ExternalList = HTTPS.CertificateNames: powershell.exe -File "serversharenetxms_CertExternalNames.ps1"
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "serversharenetxms_CertExternalParameter.ps1" -CertificateId "$1"

В بهرنی لیست موږ یوازې د تارونو لیست ترلاسه کوو. زموږ په قضیه کې، د سند نومونو سره د تارونو لیست. موږ به د سکریپټ په کارولو سره د دې لینونو لیست ترلاسه کړو. د لیست نوم - HTTPS.CertificateNames.

سکریپټ NetXMS_CertNames.ps1:

#Список возможных имен сертификатов
$nameTypeList = @(
        [System.Security.Cryptography.X509Certificates.X509NameType]::SimpleName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsFromAlternativeName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UrlName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::EmailName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UpnName
)
 
#Ищем все сертификаты, имеющие закрытый ключ
$certList = @( Get-ChildItem -Path 'Cert:LocalMachineMy' | Where-Object { $_.HasPrivateKey -eq $true } )
 
#Проходим по списку сертификатов, формируем строку "Имя сертификата - Дата - Thumbprint" и возвращаем её
foreach ($cert in $certList) {
    $name = '(unknown name)'
    try {
        $thumbprint = $cert.Thumbprint
        $dateExpire = $cert.NotAfter
        foreach ($nameType in $nameTypeList) {
            $name_temp = $cert.GetNameInfo( $nameType, $false)
            if ($name_temp -ne $null -and $name_temp -ne '') {
                $name = $name_temp;
                break;
            }
        }
        Write-Output "$($name) - $($dateExpire.ToString('dd.MM.yyyy')) - [T:$($thumbprint)]"
    }
    catch {
        Write-Error -Message "Error processing certificate list: $($_.Exception.Message)"
    }
}

او دمخه دننه خارجي پیرامیټر موږ د ExternalList لیست څخه قطارونه داخلوو، او په محصول کې موږ د هر یو لپاره ورته ورځې ترلاسه کوو. پیژندونکی د سند د ګوتو نښان دی. په یاد ولرئ چې HTTPS.CertificateExpireDate په دې ډول کې یو ستوری (*) لري. دا اړینه ده چې دا بهرني متغیرونه ومني، یوازې زموږ د سند ID.

سکریپټ NetXMS_CertExpireDate.ps1:

#Определяем входящий параметр $CertificateId
param (
    [Parameter(Mandatory=$false)]
    [String]$CertificateId
)
 
#Проверка на существование
if ($CertificateId -eq $null) {
    Write-Error -Message "CertificateID parameter is required!"
    return
}
 
#По Thumbprint из строки в $CertificateId ищем сертификат и определяем его Expiration Date 
$certId = $CertificateId;
try {
    if ($certId -match '^.*[T:(?<Thumbprint>[A-Z0-9]+)]$') {
        $thumbprint = $Matches['Thumbprint']
        $certificatePath = "Cert:LocalMachineMy$($thumbprint)"
         
        if (Test-Path -PathType Leaf -Path $certificatePath ) {
            $certificate = Get-Item -Path $certificatePath;
            $certificateExpirationDate = $certificate.NotAfter
            $certificateDayToLive = [Math]::Floor( ($certificateExpirationDate - [DateTime]::Now).TotalDays )
            Write-Output "$($certificateDayToLive)";
        }
        else {
            Write-Error -Message "No certificate matching this thumbprint found on this server $($certId)"
        }
    }
    else {
        Write-Error -Message "CertificateID provided in wrong format. Must be FriendlyName [T:<thumbprint>]"
    }
}
catch {
    Write-Error -Message "Error while executing script: $($_.Exception.Message)"
}

د سرور د معلوماتو راټولولو ترتیب کې، موږ یو نوی پیرامیټر جوړوو. په پیرامیټر کې موږ خپل انتخاب کوو HTTPS.CertificateExpirateDate(*) د لیست څخه، او (توجه!) ستوری ته بدل کړئ {مثال}. دا مهم ټکی به تاسو ته اجازه درکړي چې د هرې بیلګې (سند) لپاره جلا کاونټر جوړ کړئ. پاتې یې د تیرې نسخې په څیر ډک شوي:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

د دې لپاره چې د کاونټرونو رامینځته کولو لپاره یو څه ولرئ ، د مثال کشف ټب کې تاسو اړتیا لرئ له لیست څخه د اجنټ لیست غوره کړئ او د لیست نوم ساحه کې زموږ د بهرني لیست نوم له سکریپټ څخه دننه کړئ - HTTPS.CertificateNames.

نږدې چمتو دی، لږ انتظار وکړئ یا زور واچوئ Poll> Configuration and Poll> Instance Discovery که انتظار کول په بشپړه توګه ناممکن وي. د پایلې په توګه، موږ خپل ټول سندونه د اعتبار مودې سره ترلاسه کوو:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

څه د پکار دی؟ ښه، هو، یوازې د تکامل کیمري د کاونټر په نوم دې غیر ضروري ګوتو ته په خندا سترګو ګوري او ما ته اجازه نه راکوي چې مقاله پای ته ورسوم. د دې د تغذیه کولو لپاره ، د کاونټر ملکیتونه بیا خلاص کړئ او د مثال کشف ټب کې ، د "انسټانس کشف فلټر سکریپټ" ډګر کې ، هغه اضافه کړئ چې لیکل شوی NXSL (NetXMS داخلي ژبه) سکریپټ:

instance = $1;
 if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
 {
 return %(true, instance, $1);
 }
 return true;

کوم چې د ګوتو نښان فلټر کوي:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

او د دې فلټر شوي ښودلو لپاره ، د توضیحاتو په ډګر کې په عمومي ټب کې ، د CertificateExpireDate: {instance} ته بدل کړئ د سند د ختمیدو نیټه: {instance-name}:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

دا دی، په نهایت کې د KDPV څخه پای لیکه:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

دا ښکلا نه ده؟

ټول هغه څه چې پاتې دي د خبرتیاو تنظیم کول دي ترڅو دوی د بریښنالیک له لارې راشي کله چې سند پای ته ورسیږي.

1. لومړی موږ اړتیا لرو چې د پیښې ټیمپلیټ رامینځته کړو ترڅو دا فعال کړو کله چې د کاونټر ارزښت یو څه حد ته راټیټ شي چې موږ یې ټاکلو. IN د پیښې ترتیب راځئ چې د نومونو سره دوه نوي ټیمپلیټونه جوړ کړو د سند د ختمیدو نیټې_درېشول_فعالول د خبرتیا حالت سره:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

او ورته د سرټیفیکیټ د ختمیدو نیټې_درېشولډ_غیر فعالول د نورمال حالت سره.

2. بیا، د کاونټر ملکیتونو ته لاړ شئ او د Tresholds په ټب کې حد وټاکئ:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

چیرې چې موږ خپل رامینځته شوي پیښې د CertificateExpireDate_Threshold_Activate او CertificateExpireDate_Threshold_Deactivate غوره کوو، د نمونو (نمونو) شمیر 1 ته وټاکو (په ځانګړې توګه د دې کاونټر لپاره د نورو تنظیم کولو لپاره هیڅ معنی نشته)، ارزښت 30 (ورځو) دی، د بیلګې په توګه، او، په مهم ډول، ټاکل شوی. د پیښې د تکرار وخت. په تولید کې د سندونو لپاره ، ما دا په ورځ کې یو ځل ټاکلی (86400 ثانیې) ، که نه نو تاسو کولی شئ په خبرتیاو کې ډوب شئ (کوم چې په لاره کې یو ځل پیښ شوی ، دومره چې میل باکس د اونۍ په پای کې ډک و). د ډیبګ کولو وخت لپاره ، دا معنی لري چې دا ټیټ تنظیم کړئ ، 60 ثانیې ، د مثال په توګه.

3.In د عمل ترتیب د خبرتیا لیک ټیمپلیټ جوړ کړئ، لکه دا:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

دا ټول %m، %S، او داسې نور. - میکرو په کوم کې چې زموږ د پیرامیټر څخه ارزښتونه به ځای په ځای شي. دوی په تفصیل سره تشریح شوي دي لارښود NetXMS.

4. او په نهایت کې، د پخوانیو ټکو سره یوځای کول د پیښو پروسس کولو پالیسي یو قاعده رامینځته کړئ چې له مخې به یې الارم رامینځته شي او یو لیک به واستول شي:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

موږ پالیسي خوندي کوو، هرڅه ازموینه کیدی شي. راځئ چې د چک کولو لپاره لوړ حد وټاکو. زما ترټولو نږدې سند په 723 ورځو کې پای ته رسیږي، ما دا د چک کولو لپاره 724 ته ټاکلی، په پایله کې، موږ لاندې الارم ترلاسه کوو:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

او دا بریښنالیک خبرتیا:

په NetXMS کې په وینډوز کې د څارنې سند پای نیټې

دا ټول اوس د ډاډ لپاره دي. البته دا به ممکنه وي چې ډشبورډ تنظیم کړئ او ګرافونه رامینځته کړئ ، مګر د سندونو لپاره دا به یو څه بې معنی او ستړي کونکي مستقیم کرښې وي ، د مثال په توګه د پروسیسر یا حافظې بار ګرافونو برعکس. مګر، په دې اړه نور څه بل وخت.

سرچینه: www.habr.com

Add a comment