oxidized config backup
Zitat von Der Texta am 13. April 2018, 9:46 UhrUm die Konfigurationen von Netzwerkkomponenten zu sichern, habe ich in der Vergangenheit rancid verwendet. Da seit Langem das CVS-Webfrontend in meiner Lieblings-Server-Distro (Ubuntu) nicht mehr zur Verfügung steht, habe ich mir einmal Oxidized angesehen.
Die Installation hinter einem Proxy gestaltet sich etwas unkommod, leider ist das Oxidized-Projekt für meinen Geschmack auch etwas nerdy...
Allerdings konnte ich auf Anhieb und ohne Änderung an Patterndateien Konfigurationen von bis zu 12 Jahre alten bis zu aktuellen Komponenten der folgenden Herstellern sichern:
- Cisco Switches (Cat2950 bis 3850, IOS 12.1-IOS 15, Telnet /ssh, autoenable)
- Cisco Router bzw. L3-Switch: 4500-X
- Cisco ASA (8/9, failover active und standby)
- Cisco WLAN Controller 2504 (lässt gegenüber rancid sogar die diffs von Temperatur und fan status weg 🙂 )
- HP Procurve 2650
- Brocade Fc-Switches
Auf meinem Ubuntu finden sich unter /var/lib/gems/2.3.0/gems/oxidized-0.21.0/lib/oxidized/model/ jede Menge an Herstellern, die unterstützt werden. Testen kann ich leider nur die Komponenten, die bei mir im Einsatz sind :-).
Die Installation
Zunächst habe ich auf einem blanken Ubuntu 16.04 Server die Abhängigkeiten installiert, der Einfachheit halber arbeite ich hier als root:
#apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config git cmake build-essential libssh2-1-dev tree
Um die ruby-Pakete herunterzuladen, benötigt die aktuelle shell die http_proxy Variable:
#export http_proxy=http://proxyuser:proxypasswd@proxyserver:proxyport
Download und Installation der Programmpakete:
#gem install oxidized
#gem install oxidized-script oxidized-web
Anlegen des Users und des Home-Verzeichnisses, unter dem die Software läuft:
#useradd -m -d /opt/oxidized oxidized
Wechsel zum neuen User und Erzeugen der Startumgebung:
#su - oxidized
oxidized@host:~$oxidized
oxidized@host:~$oxidized
Das zweite Ausführen des binary erzeugt eine umfangreichere Beispielkonfiguration.
Die Konfiguration
Editier als User oxidized nun die Konfigurationsdatei ~/.config/oxidized/config
Achtung! Beachte die Einrückungen in der Datei - Untereinträge erhalten immer 2 spaces!
--- username: backup password: mybackuppw model: junos interval: 3600 use_syslog: true log: "/opt/oxidized/.config/oxidized/logs/" debug: false threads: 30 timeout: 60 retries: 1 prompt: !ruby/regexp /^([w.@-]+[#>]s?)$/ rest: 0.0.0.0:8888 next_adds_job: false vars: {} groups: {} models: {} pid: "/opt/oxidized/.config/oxidized/pid" input: default: ssh, telnet debug: false ssh: secure: false output: default: git user: oxidized email: name@mail.org repo: "/opt/oxidized/configrepo" git: user: Oxidized email: o@example.com repo: "/opt/oxidized/.config/oxidized/oxidized.git" hooks: push_to_remote: type: githubrepo events: [post_store] remote_repo: urltogitrepo.git source: default: csv csv: file: "/opt/oxidized/.config/oxidized/router.db" delimiter: !ruby/regexp /:/ map: name: 0 model: 1 gpg: false model_map: cisco: ios juniper: junos hp: procurve wlc: aireos asa: asa models: asa: username: admin password: mypass vars: enable: myenablepassWenn die Konfiguration passt (zum Test debug: true), dann findest Du unter der URL http://deine-ip:8888 das Webfrontend, auf dem du die Konfigs und deren Historie:
[caption id="attachment_490" align="aligncenter" width="300"] Oxidized Web[/caption]
Oxidized Export auf gitlab
in der Konfig habe ich noch zwei hooks hinterlegt - einer ist oben bereits angedeutet.
- push to remote: schiebt die diffs auch auf github/gitlab.
hooks: push_to_remote: type: githubrepo events: [post_store] remote_repo: git@gitlabserver:repo-owner/repo-name.git publickey: /opt/oxidized/.ssh/id_rsa.pub privatekey: /opt/oxidized/.ssh/id_rsa
Nun habe ich nur den ssh-push auf einen gitlabserver getestet, nachdem ich bei dem User, mit dem ich importiere, im Gitlabserver den public-Key des oxidized-users dafür hinterlegt:
[caption id="attachment_492" align="aligncenter" width="300"] GitLab SSH-Keys[/caption]
Oxidized Mailversand
Der andere Hook ist der Mailversand bei Fehlern und neuer Konfig. Voraussetzung ist die Speicherung der Konfigs in git!
Aufgrund verschiedener Events kann das Tool auch Mails versenden. Sinnvoll ist eine Mail zum Beispiel, wenn unser Tool eine neue Konfiguration importiert oder auf einen Fehler läuft. Dafür sind ein kleines Shellskript, das in der Konfig referenziert wird und ein Stück Konfig notwendig:
hooks: ... email_output: type: exec events: [post_store, node_fail] cmd: '/opt/oxidized/.config/oxidized/oxidized-report-git-commits.sh | mail -s "Oxidized updates for ${OX_NODE_NAME}" du@deinemailadresse.tld' async: true timeout: 120Das Shellskript muss für den oxidized-User ausführbar sein!
Dies ist keine vollständige Anleitung zur Installation und zum Betrieb - dafür kann dieses Werkzeug zuviel. Hier sind lediglich einige Features davon beschrieben, die ich im Alltag benötige.
Wenn Du Interesse an einer Alternative zu rancid suchst, dann besuch doch mal das Github-Repo des Projekts.
Für Rückfragen zum Artikel stehe ich Dir gerne zur Verfügung!
Um die Konfigurationen von Netzwerkkomponenten zu sichern, habe ich in der Vergangenheit rancid verwendet. Da seit Langem das CVS-Webfrontend in meiner Lieblings-Server-Distro (Ubuntu) nicht mehr zur Verfügung steht, habe ich mir einmal Oxidized angesehen.
Die Installation hinter einem Proxy gestaltet sich etwas unkommod, leider ist das Oxidized-Projekt für meinen Geschmack auch etwas nerdy...
Allerdings konnte ich auf Anhieb und ohne Änderung an Patterndateien Konfigurationen von bis zu 12 Jahre alten bis zu aktuellen Komponenten der folgenden Herstellern sichern:
- Cisco Switches (Cat2950 bis 3850, IOS 12.1-IOS 15, Telnet /ssh, autoenable)
- Cisco Router bzw. L3-Switch: 4500-X
- Cisco ASA (8/9, failover active und standby)
- Cisco WLAN Controller 2504 (lässt gegenüber rancid sogar die diffs von Temperatur und fan status weg 🙂 )
- HP Procurve 2650
- Brocade Fc-Switches
Auf meinem Ubuntu finden sich unter /var/lib/gems/2.3.0/gems/oxidized-0.21.0/lib/oxidized/model/ jede Menge an Herstellern, die unterstützt werden. Testen kann ich leider nur die Komponenten, die bei mir im Einsatz sind :-).
Die Installation
Zunächst habe ich auf einem blanken Ubuntu 16.04 Server die Abhängigkeiten installiert, der Einfachheit halber arbeite ich hier als root:
#apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config git cmake build-essential libssh2-1-dev tree
Um die ruby-Pakete herunterzuladen, benötigt die aktuelle shell die http_proxy Variable:
#export http_proxy=http://proxyuser:proxypasswd@proxyserver:proxyport
Download und Installation der Programmpakete:
#gem install oxidized
#gem install oxidized-script oxidized-web
Anlegen des Users und des Home-Verzeichnisses, unter dem die Software läuft:
#useradd -m -d /opt/oxidized oxidized
Wechsel zum neuen User und Erzeugen der Startumgebung:
#su - oxidized
oxidized@host:~$oxidized
oxidized@host:~$oxidized
Das zweite Ausführen des binary erzeugt eine umfangreichere Beispielkonfiguration.
Die Konfiguration
Editier als User oxidized nun die Konfigurationsdatei ~/.config/oxidized/config
Achtung! Beachte die Einrückungen in der Datei - Untereinträge erhalten immer 2 spaces!
--- username: backup password: mybackuppw model: junos interval: 3600 use_syslog: true log: "/opt/oxidized/.config/oxidized/logs/" debug: false threads: 30 timeout: 60 retries: 1 prompt: !ruby/regexp /^([w.@-]+[#>]s?)$/ rest: 0.0.0.0:8888 next_adds_job: false vars: {} groups: {} models: {} pid: "/opt/oxidized/.config/oxidized/pid" input: default: ssh, telnet debug: false ssh: secure: false output: default: git user: oxidized email: name@mail.org repo: "/opt/oxidized/configrepo" git: user: Oxidized email: o@example.com repo: "/opt/oxidized/.config/oxidized/oxidized.git" hooks: push_to_remote: type: githubrepo events: [post_store] remote_repo: urltogitrepo.git source: default: csv csv: file: "/opt/oxidized/.config/oxidized/router.db" delimiter: !ruby/regexp /:/ map: name: 0 model: 1 gpg: false model_map: cisco: ios juniper: junos hp: procurve wlc: aireos asa: asa models: asa: username: admin password: mypass vars: enable: myenablepass
Wenn die Konfiguration passt (zum Test debug: true), dann findest Du unter der URL http://deine-ip:8888 das Webfrontend, auf dem du die Konfigs und deren Historie:
[caption id="attachment_490" align="aligncenter" width="300"] Oxidized Web[/caption]
Oxidized Export auf gitlab
in der Konfig habe ich noch zwei hooks hinterlegt - einer ist oben bereits angedeutet.
- push to remote: schiebt die diffs auch auf github/gitlab.
hooks: push_to_remote: type: githubrepo events: [post_store] remote_repo: git@gitlabserver:repo-owner/repo-name.git publickey: /opt/oxidized/.ssh/id_rsa.pub privatekey: /opt/oxidized/.ssh/id_rsa
Nun habe ich nur den ssh-push auf einen gitlabserver getestet, nachdem ich bei dem User, mit dem ich importiere, im Gitlabserver den public-Key des oxidized-users dafür hinterlegt:
[caption id="attachment_492" align="aligncenter" width="300"] GitLab SSH-Keys[/caption]
Oxidized Mailversand
Der andere Hook ist der Mailversand bei Fehlern und neuer Konfig. Voraussetzung ist die Speicherung der Konfigs in git!
Aufgrund verschiedener Events kann das Tool auch Mails versenden. Sinnvoll ist eine Mail zum Beispiel, wenn unser Tool eine neue Konfiguration importiert oder auf einen Fehler läuft. Dafür sind ein kleines Shellskript, das in der Konfig referenziert wird und ein Stück Konfig notwendig:
hooks: ... email_output: type: exec events: [post_store, node_fail] cmd: '/opt/oxidized/.config/oxidized/oxidized-report-git-commits.sh | mail -s "Oxidized updates for ${OX_NODE_NAME}" du@deinemailadresse.tld' async: true timeout: 120
Das Shellskript muss für den oxidized-User ausführbar sein!
Dies ist keine vollständige Anleitung zur Installation und zum Betrieb - dafür kann dieses Werkzeug zuviel. Hier sind lediglich einige Features davon beschrieben, die ich im Alltag benötige.
Wenn Du Interesse an einer Alternative zu rancid suchst, dann besuch doch mal das Github-Repo des Projekts.
Für Rückfragen zum Artikel stehe ich Dir gerne zur Verfügung!