Difference between revisions of "Rancid"

From HackerNet
Jump to: navigation, search
m
m
 
(20 intermediate revisions by one other user not shown)
Line 1: Line 1:
Ska sättas upp och labbas med!<br/>
+
Really Awesome New Cisco confIg Differ är ett verktyg för versionshantering av konfigurationsfiler på nätverksutrustning. Programvaran tillhandahålls av [http://www.shrubbery.net/rancid/ Shrubbery Networks].
Dokumentation
+
 
  http://www.routereflector.com/2013/09/configuration-versioning-using-rancid/
+
Rancid kan användas för följande:
  https://networklore.com/rancid-getting-started/
+
* Backup och lagring av konfigurationsfiler
  http://www.itnotes.eu/?p=365
+
* Jämförelse av konfiguration
http://www.richardyau.com/?p=11
+
* Versionsarkivering av konfiguration
 +
 
 +
Rancid kan hjälpa till i arbetet med följande frågor:
 +
* Hur vet du när en förändring sker?
 +
* Vad gör du när en förändring sker?
 +
* Kan du korrelera nätverkshändelser med ändringar?
 +
* Upprätthåller du en "basline" eller sätter en konfigurationsstandard?
 +
 
 +
==Installation==
 +
sudo apt-get -y install rancid subversion postfix
 +
Rancid-användare skapas under installationen.
 +
apt-cache show rancid | grep Version
 +
 
 +
==Konfiguration==
 +
Filer
 +
* /etc/rancid/  #Config file
 +
* /var/lib/rancid/  #Most other files
 +
* /var/lib/rancid/[gruppnamn]/router.db  #Devices list
 +
 
 +
Byt från cvs till subversion samt skapa grupper för dina enheter. Det går även använda [[Git]].
 +
sudo sed -i.bak 's/RCSSYS=cvs; export RCSSYS/RCSSYS=svn; export RCSSYS/g' /etc/rancid/rancid.conf
 +
sudo sed -i 's#CVSROOT=$BASEDIR/CVS; export CVSROOT#CVSROOT=$BASEDIR/svn; export CVSROOT#g' /etc/rancid/rancid.conf
 +
echo 'LIST_OF_GROUPS="routers switches fws"' | sudo tee -a /etc/rancid/rancid.conf
 +
 
 +
Slipp att det räknas som en ändring varje gång en loggfil ändrar storlek. Modifiera ''/var/lib/rancid/bin/rancid'' (kan behövas kommenteras ut fler beroende på enhet, man får testa sig fram)
 +
#{‘dir /all bootflash:’        => ‘DirSlotN’},
 +
#{'dir /all disk0:'            => 'DirSlotN'},
 +
 
 +
Don't strip passwords from backed up configurations
 +
sudo sed -i 's/FILTER_PWDS=YES/FILTER_PWDS=NO/g' /etc/rancid/rancid.conf
 +
 
 +
Fixa rättigheter för rancid user
 +
sudo chown -R rancid:rancid /var/lib/rancid
 +
sudo su -s /bin/bash rancid
 +
 
 +
User rancid
 +
cd && nano .cloginrc
 +
#add autoenable * 0 (tex Cisco ASA kräver manuell enable)
 +
add cyphertype * aes256-ctr,aes256-ctr,aes128-cbc,aes256-cbc
 +
add method * ssh
 +
add user * cisco
 +
add password * {cisco} {cisco}
 +
 +
chmod 600 .cloginrc
 +
 
 +
'''Testa inlogg'''
 +
/var/lib/rancid/bin/clogin 172.20.0.100
 +
 
 +
===SVN===
 +
Lagra i SVN repo. Går även att köra med cvs. Kör som user rancid.
 +
/var/lib/rancid/bin/rancid-cvs
 +
Lista filer i SVN:
 +
svn ls file:///var/lib/rancid/svn/
 +
 
 +
'''Add devices'''<br/>
 +
nano /var/lib/rancid/switches/router.db
 +
192.168.0.100:cisco:up
 +
sw01.local:cisco:up
 +
10.0.0.10:hp:up
 +
 
 +
'''Removal'''<br/>
 +
För devices raderas entryt ur router.db.<br/>
 +
För grupper görs det genom SVN (raderar alla configs under gruppen också!):
 +
svn rm file:///var/lib/rancid/svn/switches --message "Not in use"
 +
 
 +
Kör igång
 +
/usr/lib/rancid/bin/rancid-run
 +
 
 +
===Schemaläggning===
 +
su - rancid
 +
crontab -e
 +
0 * * * * /usr/lib/rancid/bin/rancid-run
 +
0 1 * * * find /opt/rancid/var/logs -type f -mtime +30 -exec rm {} \; # Slang gamla loggar
 +
 
 +
==Web GUI==
 +
'''CVSWeb''' <br/>
 +
Endast om man valde cvs.
 +
sudo apt-get -y install cvsweb
 +
 
 +
===WebSVN===
 +
  sudo apt-get -y install websvn
 +
path: /var/lib/rancid/svn<br/>
 +
repo: /var/lib/rancid/svn
 +
 
 +
sudo ln -s /etc/websvn/apache.conf /etc/apache2/conf-available/websvn.conf
 +
sudo a2enconf websvn.conf
 +
sudo service apache2 reload
 +
sudo chgrp -R www-data /var/lib/rancid/svn
 +
sudo chmod g+w -R /var/lib/rancid/svn
 +
http://172.20.0.10/websvn
 +
 
 +
'''Auth''' <br/>
 +
HTTP authentication för /websvn
 +
sudo apt-get -y install apache2-utils
 +
sudo htpasswd -c /opt/websvnpassword admin
 +
 
 +
sudo nano /etc/websvn/apache.conf
 +
AuthType Basic
 +
AuthName "Restricted Access"
 +
AuthBasicProvider file
 +
AuthUserFile /opt/websvnpassword
 +
  Require user admin
 +
 
 +
sudo service apache2 reload
 +
 
 +
'''Others''' <br/>
 +
"ln: failed to create symbolic link ‘/etc/apache2/conf.d/websvn’: No such file or directory"<br/>
 +
workaround:
 +
sudo mkdir /etc/apache2/conf.d
 +
 
 +
==Mailnotifiering==
 +
''Postfix''
 +
sudo nano /etc/aliases
 +
rancid-routers:    sysadm
 +
rancid-admin-routers:  sysadm
 +
sudo newaliases
 +
 
 +
==Slacknotifiering==
 +
Eftersom Slack har incoming webhook integration kan man skicka resultatet från backupkörning till en slackkanal. 
 +
 
 +
<syntaxhighlight lang="bash">
 +
#!/bin/sh
 +
 
 +
# This script is used to send a status report for the rancid backups to Slack channel.
 +
# It is supposed to be executed by the cron service for the rancid user after rancid-run has completed.
 +
 
 +
# Finding errors in the latest log files.
 +
for dir in $(find /var/log/rancid -mmin -60 -type f -print)
 +
do
 +
    if [ ! -z "$(cat $dir | egrep -w 'clogin|error')" ]; then
 +
        FAILEDDEVICES="$FAILEDDEVICES$(cat $dir | egrep -w 'clogin|error' | uniq)  ----- "
 +
    fi
 +
done
 +
 
 +
# Used for getting the log file error entries into a json format.
 +
ERRORMESSAGE='{"text": "Rancid report: There seems to be some issues :(", "attachments":[{"text": "'$FAILEDDEVICES'"}]}'
 +
 
 +
# Send error messages to slack
 +
[ ! -z "$FAILEDDEVICES" ] && curl -X POST --data-binary "${ERRORMESSAGE}" -H "Content-Type: application/json" https://hooks.slack.com/services/XXX/XXX/XXXXX
 +
 
 +
# If no errors was found a static message is posted to the channel
 +
[ -z "$FAILEDDEVICES" ] && curl -X POST --data '{"text":"Rancid report: No failed backups last rancid run :)"}' -H "Content-Type: application/json" https://hooks.slack.com/services/XXX/XXX/XXXXX
 +
 
 +
</syntaxhighlight>
 +
 
 +
[[Category:Guider]]

Latest revision as of 10:00, 25 May 2018

Really Awesome New Cisco confIg Differ är ett verktyg för versionshantering av konfigurationsfiler på nätverksutrustning. Programvaran tillhandahålls av Shrubbery Networks.

Rancid kan användas för följande:

  • Backup och lagring av konfigurationsfiler
  • Jämförelse av konfiguration
  • Versionsarkivering av konfiguration

Rancid kan hjälpa till i arbetet med följande frågor:

  • Hur vet du när en förändring sker?
  • Vad gör du när en förändring sker?
  • Kan du korrelera nätverkshändelser med ändringar?
  • Upprätthåller du en "basline" eller sätter en konfigurationsstandard?

Installation

sudo apt-get -y install rancid subversion postfix

Rancid-användare skapas under installationen.

apt-cache show rancid | grep Version

Konfiguration

Filer

  • /etc/rancid/ #Config file
  • /var/lib/rancid/ #Most other files
  • /var/lib/rancid/[gruppnamn]/router.db #Devices list

Byt från cvs till subversion samt skapa grupper för dina enheter. Det går även använda Git.

sudo sed -i.bak 's/RCSSYS=cvs; export RCSSYS/RCSSYS=svn; export RCSSYS/g' /etc/rancid/rancid.conf
sudo sed -i 's#CVSROOT=$BASEDIR/CVS; export CVSROOT#CVSROOT=$BASEDIR/svn; export CVSROOT#g' /etc/rancid/rancid.conf
echo 'LIST_OF_GROUPS="routers switches fws"' | sudo tee -a /etc/rancid/rancid.conf

Slipp att det räknas som en ändring varje gång en loggfil ändrar storlek. Modifiera /var/lib/rancid/bin/rancid (kan behövas kommenteras ut fler beroende på enhet, man får testa sig fram)

#{‘dir /all bootflash:’         => ‘DirSlotN’},
#{'dir /all disk0:'             => 'DirSlotN'},

Don't strip passwords from backed up configurations

sudo sed -i 's/FILTER_PWDS=YES/FILTER_PWDS=NO/g' /etc/rancid/rancid.conf

Fixa rättigheter för rancid user

sudo chown -R rancid:rancid /var/lib/rancid
sudo su -s /bin/bash rancid

User rancid

cd && nano .cloginrc
#add autoenable * 0 (tex Cisco ASA kräver manuell enable)
add cyphertype * aes256-ctr,aes256-ctr,aes128-cbc,aes256-cbc
add method * ssh
add user * cisco
add password * {cisco} {cisco}

chmod 600 .cloginrc

Testa inlogg

/var/lib/rancid/bin/clogin 172.20.0.100

SVN

Lagra i SVN repo. Går även att köra med cvs. Kör som user rancid.

/var/lib/rancid/bin/rancid-cvs

Lista filer i SVN:

svn ls file:///var/lib/rancid/svn/

Add devices

nano /var/lib/rancid/switches/router.db
192.168.0.100:cisco:up
sw01.local:cisco:up
10.0.0.10:hp:up

Removal
För devices raderas entryt ur router.db.
För grupper görs det genom SVN (raderar alla configs under gruppen också!):

svn rm file:///var/lib/rancid/svn/switches --message "Not in use"

Kör igång

/usr/lib/rancid/bin/rancid-run

Schemaläggning

su - rancid
crontab -e
0 * * * * /usr/lib/rancid/bin/rancid-run
0 1 * * * find /opt/rancid/var/logs -type f -mtime +30 -exec rm {} \; # Slang gamla loggar

Web GUI

CVSWeb
Endast om man valde cvs.

sudo apt-get -y install cvsweb

WebSVN

sudo apt-get -y install websvn

path: /var/lib/rancid/svn
repo: /var/lib/rancid/svn

sudo ln -s /etc/websvn/apache.conf /etc/apache2/conf-available/websvn.conf
sudo a2enconf websvn.conf
sudo service apache2 reload
sudo chgrp -R www-data /var/lib/rancid/svn
sudo chmod g+w -R /var/lib/rancid/svn

http://172.20.0.10/websvn

Auth
HTTP authentication för /websvn

sudo apt-get -y install apache2-utils
sudo htpasswd -c /opt/websvnpassword admin
sudo nano /etc/websvn/apache.conf
AuthType Basic
AuthName "Restricted Access"
AuthBasicProvider file
AuthUserFile /opt/websvnpassword
Require user admin
sudo service apache2 reload

Others
"ln: failed to create symbolic link ‘/etc/apache2/conf.d/websvn’: No such file or directory"
workaround:

sudo mkdir /etc/apache2/conf.d

Mailnotifiering

Postfix

sudo nano /etc/aliases
rancid-routers:     sysadm
rancid-admin-routers:   sysadm
sudo newaliases

Slacknotifiering

Eftersom Slack har incoming webhook integration kan man skicka resultatet från backupkörning till en slackkanal.

#!/bin/sh

# This script is used to send a status report for the rancid backups to Slack channel. 
# It is supposed to be executed by the cron service for the rancid user after rancid-run has completed.

# Finding errors in the latest log files. 
for dir in $(find /var/log/rancid -mmin -60 -type f -print)
do
    if [ ! -z "$(cat $dir | egrep -w 'clogin|error')" ]; then
        FAILEDDEVICES="$FAILEDDEVICES$(cat $dir | egrep -w 'clogin|error' | uniq)  -----  "
    fi
done

# Used for getting the log file error entries into a json format. 
ERRORMESSAGE='{"text": "Rancid report: There seems to be some issues :(", "attachments":[{"text": "'$FAILEDDEVICES'"}]}'

# Send error messages to slack
[ ! -z "$FAILEDDEVICES" ] && curl -X POST --data-binary "${ERRORMESSAGE}" -H "Content-Type: application/json" https://hooks.slack.com/services/XXX/XXX/XXXXX

# If no errors was found a static message is posted to the channel
[ -z "$FAILEDDEVICES" ] && curl -X POST --data '{"text":"Rancid report: No failed backups last rancid run :)"}' -H "Content-Type: application/json" https://hooks.slack.com/services/XXX/XXX/XXXXX