Difference between revisions of "Rancid"

From HackerNet
Jump to: navigation, search
m
 
(16 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:
* Backing and storing configuration files
+
* Backup och lagring av konfigurationsfiler
* Configuration comparison
+
* Jämförelse av konfiguration
* Configuration version archival
+
* Versionsarkivering av konfiguration
  
 
Rancid kan hjälpa till i arbetet med följande frågor:
 
Rancid kan hjälpa till i arbetet med följande frågor:
* How do you know when a change occurs?
+
* Hur vet du när en förändring sker?
* What do you do when a change occurs?  
+
* Vad gör du när en förändring sker?
* Can you correlate network events with changes?
+
* Kan du korrelera nätverkshändelser med ändringar?
* Do you enforce a baseline or set configuration standard?
+
* Upprätthåller du en "basline" eller sätter en konfigurationsstandard?
  
 
==Installation==
 
==Installation==
  sudo apt-get install rancid
+
  sudo apt-get -y install rancid subversion postfix
sudo nano /etc/rancid/rancid.conf
+
Rancid-användare skapas under installationen.
  # list of rancid groups
+
  apt-cache show rancid | grep Version
LIST_OF_GROUPS="routers switches"
 
  
 +
==Konfiguration==
 
Filer
 
Filer
  /var/lib/rancid/ # Most files
+
* /etc/rancid/ #Config file
/etc/rancid/ # Config file
+
* /var/lib/rancid/ #Most other files
/var/rancid/[gruppnamn]/router.db # Add devices
+
* /var/lib/rancid/[gruppnamn]/router.db #Devices list
  
===CVS===
+
Byt från cvs till subversion samt skapa grupper för dina enheter. Det går även använda [[Git]].
Lagra i CVS repo. Går även att köra med subversion.
+
sudo sed -i.bak 's/RCSSYS=cvs; export RCSSYS/RCSSYS=svn; export RCSSYS/g' /etc/rancid/rancid.conf
su – rancid  
+
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
 
  /var/lib/rancid/bin/rancid-cvs
 +
Lista filer i SVN:
 +
svn ls file:///var/lib/rancid/svn/
  
==Schemaläggning==
+
'''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
 
  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==
sudo apt-get install cvsweb
+
'''CVSWeb''' <br/>
sudo cp /etc/cvsweb/cvsweb.conf /etc/cvsweb/cvsweb.conf.ORIGINAL
+
Endast om man valde cvs.
sudo nano /etc/cvsweb/cvsweb.conf
+
  sudo apt-get -y install cvsweb
@CVSrepositories = (
 
'Rancid' => ['Rancid Repository', '/usr/local/rancid/var/CVS'],
 
  );
 
  
  ln -s /usr/share/cvsweb /var/www/cvsweb
+
===WebSVN===
You need to restart your server, before you can see the repository.
+
  sudo apt-get -y install websvn
Access CVSweb
+
path: /var/lib/rancid/svn<br/>
http://server_url/cgi-bin/cvsweb
+
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==
 
==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
  
===Dokumentation===
+
</syntaxhighlight>
http://www.routereflector.com/2013/09/configuration-versioning-using-rancid/
 
https://networklore.com/rancid-getting-started/
 
http://www.itnotes.eu/?p=365
 
http://www.richardyau.com/?p=11
 
  
[[:Category:Guider]]
 
 
[[Category:Guider]]
 
[[Category:Guider]]

Latest revision as of 11: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