Automatyczne monitorowanie aktualizacji oprogramowania na mikrotiku z zabbixa

Niestety, nie da się mieć bezpiecznego (każda aktualizacja MOŻE zawierać poprawki bezpieczeństwa) systemu/sieci bez monitorowania czy nie ma jakiejś aktualizacji oprogramowania w naszym sprzęcie – w tym przypadku w mikrotiku.

Zacząłem od tego, że stworzyłem usera i klucz SSH i dałem możliwość logowania się po SSH zabbixowi na usera o username zabbix.

Następnie na zabbixie napisałem taki skrypt:

#!/usr/bin/env python3
# Special script for zabbix to check upgrade

from netmiko import ConnectHandler
import argparse

parser = argparse.ArgumentParser(description="This script check in zabbix via SSH upgrade of your mikrotik")
parser.add_argument("host", help="IP Address")
parser.add_argument("sshkey", help="SSH Key File")
args = parser.parse_args()

def check_upgrade(host, sshkey):
    device = {
        'device_type': 'mikrotik_routeros',
        'host' : host,
        'username':'zabbix',
        'key_file': sshkey,
        'port': 22
    }

    connection = ConnectHandler(**device)
    try:
        output = connection.send_command('/system package update check-for-updates')
        if "New version is available" in output:
            result = 1
            connection.disconnect()
            return result
        else:
            result = 0
            connection.disconnect()
            return result

    except Exception as e:
        print("Error with connection to device")
        return -1


if __name__ == "__main__":
    print(check_upgrade(args.host, args.sshkey))

PS: tak pomógł mi ChatGPT…

Trzeba mieć – ścieżkę do klucza prywatnego, oraz adres IP mikrotika.

Wkleiłem ten skrypt do katalogu:

/usr/lib/zabbix/externalscripts

u mnie pod nazwą MikrotikUpdateZabbix.py

na serwerze zabbix, oraz ustawiłem mu usera:grupę zabbix: i uprawnienia do wykonywania

chown zabbix: /usr/lib/zabbix/externalscripts
chmod 755 /usr/lib/zabbix/externalscripts

Można sprawdzić czy skrypt działa poprzez wpisanie:

/usr/lib/zabbix/externalscripts/MikrotikUpdateZabbix.py <IP_mikrotika> <ścieżka_do_klucza_prywatnego>

Jeżeli nie masz odpowiednich bibliotek należy je zainstalować poprzez np.:

pip3 install netmiko

Teraz przechodzimy do zabbixa naciskamy:

Data Collections -> Templates 

Dajemy „Import Templates” i wklejamy ten template (lub plik)

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>7.2</version>
    <template_groups>
        <template_group>
            <uuid>b2cad4fa4a6b4a409c164c5af668d6b2</uuid>
            <name>Custom</name>
        </template_group>
    </template_groups>
    <templates>
        <template>
            <uuid>b276b2cddd764da68d1e8fba21a996c1</uuid>
            <template>CustomMikrotikTemplate</template>
            <name>CustomMikrotikTemplate</name>
            <groups>
                <group>
                    <name>Custom</name>
                </group>
            </groups>
            <items>
                <item>
                    <uuid>b8b3066827cd47968e2d47efc9afce61</uuid>
                    <name>isNewFirmware</name>
                    <type>EXTERNAL</type>
                    <key>MikrotikUpdateZabbix.py[&quot;{HOST.IP}&quot;,&quot;/etc/zabbix/ssh-keys/id_ed25519&quot;]</key>
                    <delay>2h</delay>
                    <triggers>
                        <trigger>
                            <uuid>fea2755ef4084a6aa2e544e59fb6f239</uuid>
                            <expression>last(/CustomMikrotikTemplate/MikrotikUpdateZabbix.py[&quot;{HOST.IP}&quot;,&quot;/etc/zabbix-ssh-keys/id_ed25519&quot;])=1</expression>
                            <name>isNewFirmware on Mikrotik {HOST.NAME}</name>
                            <priority>HIGH</priority>
                        </trigger>
                    </triggers>
                </item>
            </items>
        </template>
    </templates>
</zabbix_export>

W moim przypadku klucz SSH dla zabbixa jest w /etc/zabbix-ssh-keys/ i jest to klucz id_ed25519 ale każdy możę mieć inną ścieżkę dlatego też należy zmienić na odpowiednią, pamiętając o tym, że user zabbix musi umieć się tam dostać.

później należy po prostu dodać template do naszego hosta od mikrotika i gotowe. Można cieszyć się monitorowaną wersją oprogramowania w mikrotiku i czy czasami nie ma nowej, a jak jest nowa to dostaniemy odpowiednie powiadomienie z zabbixa .

Dziękuję za uwagę, komentarze są dla mnie bardzo cenne, także jak macie jakąś uwagę, proszę o komentarz. Postaram się pomóc.