Difference between revisions of "Rancid"

From HackerNet
Jump to: navigation, search
m
 
(10 intermediate revisions by one other user not shown)
Line 1: Line 1:
Really Awesome New Cisco confIg Differ är ett verktyg för versionshantering av konfigurationsfiler på nätverksutrustning. Programvaran är skapad av Shrubbery Networks.
+
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].
  
 
Rancid kan användas för följande:
 
Rancid kan användas för följande:
Line 13: Line 13:
  
 
==Installation==
 
==Installation==
  sudo apt-get install rancid subversion postfix
+
  sudo apt-get -y install rancid subversion postfix
 
Rancid-användare skapas under installationen.
 
Rancid-användare skapas under installationen.
 +
apt-cache show rancid | grep Version
  
 
==Konfiguration==
 
==Konfiguration==
 
Filer
 
Filer
* /etc/rancid/ # Config file
+
* /etc/rancid/ #Config file
* /var/lib/rancid/ # Most other files
+
* /var/lib/rancid/ #Most other files
* /var/lib/rancid/[gruppnamn]/router.db # Devices list
+
* /var/lib/rancid/[gruppnamn]/router.db #Devices list
Byt från cvs till subversion samt skapa grupper för dina enheter
+
 
 +
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.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
 
  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
+
  echo 'LIST_OF_GROUPS="routers switches fws"' | sudo tee -a /etc/rancid/rancid.conf
Skapa rancid-användare
+
 
 +
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 chown -R rancid:rancid /var/lib/rancid
 
  sudo su -s /bin/bash rancid
 
  sudo su -s /bin/bash rancid
 +
 
User rancid
 
User rancid
 
  cd && nano .cloginrc
 
  cd && nano .cloginrc
  add autoenable * 1
+
  #add autoenable * 0 (tex Cisco ASA kräver manuell enable)
 +
add cyphertype * aes256-ctr,aes256-ctr,aes128-cbc,aes256-cbc
 
  add method * ssh
 
  add method * ssh
 
  add user * cisco
 
  add user * cisco
  add password * cisco cisco
+
  add password * {cisco} {cisco}
 +
 
  chmod 600 .cloginrc
 
  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/>
 
'''Add devices'''<br/>
Line 42: Line 64:
 
  10.0.0.10:hp:up
 
  10.0.0.10:hp:up
  
'''Testa inlogg'''
+
'''Removal'''<br/>
  /var/lib/rancid/bin/clogin 172.20.0.100
+
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"
  
===SVN===
 
Lagra i SVN repo. Går även att köra med cvs.
 
su – rancid
 
/var/lib/rancid/bin/rancid-cvs
 
 
Kör igång
 
Kör igång
 
  /usr/lib/rancid/bin/rancid-run
 
  /usr/lib/rancid/bin/rancid-run
  
==Schemaläggning==
+
===Schemaläggning===
 
  su - rancid
 
  su - rancid
 
  crontab -e
 
  crontab -e
  0 * * * * /opt/rancid/bin/rancid-run
+
  0 * * * * /usr/lib/rancid/bin/rancid-run
 
  0 1 * * * find /opt/rancid/var/logs -type f -mtime +30 -exec rm {} \; # Slang gamla loggar
 
  0 1 * * * find /opt/rancid/var/logs -type f -mtime +30 -exec rm {} \; # Slang gamla loggar
  
==CVSWeb==
+
==Web GUI==
 +
'''CVSWeb''' <br/>
 
Endast om man valde cvs.
 
Endast om man valde cvs.
  sudo apt-get install cvsweb
+
  sudo apt-get -y install cvsweb
  
==WebSVN==
+
===WebSVN===
  sudo apt-get install websvn
+
  sudo apt-get -y install websvn
 
path: /var/lib/rancid/svn<br/>
 
path: /var/lib/rancid/svn<br/>
 
repo: /var/lib/rancid/svn
 
repo: /var/lib/rancid/svn
  
  ln -s /etc/websvn/apache.conf /etc/apache2/conf-available/websvn.conf
+
  sudo ln -s /etc/websvn/apache.conf /etc/apache2/conf-available/websvn.conf
  a2enconf websvn.conf
+
  sudo a2enconf websvn.conf
  service apache2 reload
+
  sudo service apache2 reload
  chgrp -R www-data /var/lib/rancid/svn
+
  sudo chgrp -R www-data /var/lib/rancid/svn
  chmod g+w -R /var/lib/rancid/svn
+
  sudo chmod g+w -R /var/lib/rancid/svn
 
http://172.20.0.10/websvn
 
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==
 
==Mailnotifiering==
Line 81: Line 121:
 
  sudo newaliases
 
  sudo newaliases
  
===Dokumentation===
+
==Slacknotifiering==
http://www.routereflector.com/2013/09/configuration-versioning-using-rancid/
+
Eftersom Slack har incoming webhook integration kan man skicka resultatet från backupkörning till en slackkanal. 
  https://networklore.com/rancid-getting-started/
+
 
http://www.itnotes.eu/?p=365
+
<syntaxhighlight lang="bash">
http://www.richardyau.com/?p=11
+
#!/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]]
 
[[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