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["{HOST.IP}","/etc/zabbix/ssh-keys/id_ed25519"]</key>
<delay>2h</delay>
<triggers>
<trigger>
<uuid>fea2755ef4084a6aa2e544e59fb6f239</uuid>
<expression>last(/CustomMikrotikTemplate/MikrotikUpdateZabbix.py["{HOST.IP}","/etc/zabbix-ssh-keys/id_ed25519"])=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.