Rancid jako narzędzie do automatycznego zapisywania kopii zapasowych urządzeń sieciowych CISCO
W myśl zasady: „Zawsze pamiętaj o tworzeniu kopii zapasowych” zawsze staram się mieć kopie zapasowe konfiguracji urządzeń, którymi zarządzam. Na początku był to proces ręczny, kopie: running-config zapisywałem na swoim komputerze i robiłem notatki na temat wprowadzanych zmian. Jednym z głównych problemów w tym rozwiązaniu było to, że nie tylko ja miałem dostęp do urządzeń sieciowych i nie byłem w stanie śledzić każdej zmiany dokonywanej przez inne osoby. Musiałem poszukać narzędzia do zautomatyzowania tego procesu. Jest wiele rozwiązań pozwalających na automatyczne tworzenie kopii zapasowych konfiguracji switchy, routerów, firewalli itp. Dla firmy posiadającej budżet na zakup komercyjnego rozwiązania istnieją takie narzędzia jak Kiwi CatTools czy CISCO PRIME INFRASTRUCTURE. Ja musiałem poszukać czegoś darmowego i dlatego wybrałem oprogramowanie RANCID (Really Awsome New Cisco config Differ).
RANCID jest doskonałym narzędziem przeznaczonym do automatycznego backupu konfiguracji urządzeń sieciowych. Oprócz tego RANCID zachowuje różne wersje konfiguracji i zapisuje je za pomocą CVS (Concurrent Version System).
W skrócie RANCID działa następująco:
- Loguje sie do każdego skonfigurowanego urządzenia.
- Wykonuje różne polecenia do wydobycia informacji, które zostaną zapisane.
- Zapisuje konfigurację i zmiany do CVS.
- INSTACJA RANCIDA
Do instalacji rancida konieczny jest system operacyjny z rodziny linux, ja korzystam z Debiana (DEBIAN „squeeze” 6.0.9) i to dla tej dystrybucji opiszę proces instalacji i konfiguracji.
Rancid dostępny jest w repozytoriach debiana i jego instalacja sprowadza się do wydania polecenia:
root@debian:~# apt-get install rancid
W trakcie instalacji tworzone jest konto użytkownika “rancid” z katalogiem domowym: /var/lib/rancid. Utworzenie konta można zweryfikować wydając polecenie:
root@debian:~# cat /etc/passwd | grep rancid
Wynik polecenia powinien być podobny do tego poniżej:
rancid:x:108:112::/var/lib/rancid:/bin/false
- KONFIGURACJA GRUP RANCIDA
Następnie konieczne jest stworzenie co najmniej jednej grupy urządzeń w pliku konfiguracyjnym rancid’a w celu logicznego pogrupowania urządzeń. Urządzenia można pogrupować według swojego uznania na podstawie lokalizacji, rodzaju urządzeń, funkcji itp.. Ja pogrupowałem urządzenia w oparciu o rodzaj urządzeń: (routers, switches).
W celu stworzenia grupy urządzeń należy wyedytować plik konfiguracyjny: /etc/rancid/rancid.conf:
root@debian:~# nano /etc/rancid/rancid.conf
i dopisać do niego linijkę z wybranymi grupami rozdzielonymi znakiem spacji:
- STWORZENIE REPOZYTORIUM CVS
Domyślnie RANCID używa Concurrent Versions System – CVS do przechowywania konfiguracji urządzeń. CVS daje możliwość do śledzenia zmian w konfiguracji, oraz porównywanie wersji. Jest to bardzo ważne w środowisku, gdzie współpracujemy z innymi administratorami, którzy również mogą dokonywać zmian w konfiguracji urządzeń sieciowych, dzięki czemu zachowujemy kontrolę nad konfiguracjami urządzeń.
RANCID stworzy repozytorium CVS i strukturę katalogów bazując na grupach zdefiniowanych w punkcie 2. Komenda do stworzenia repozytorium CVS wygląda następująco:
root@debian:~# su -c /var/lib/rancid/bin/rancid-cvs -s /bin/bash -l rancid
Jeśli komenda nie zwróci błędów powinny się stworzyć nowe foldery w katalogu /var/lib/rancid:
Wśród stworzonych katalogów zostały utworzone pliki konfiguracyjne router.db, które zawierają szczegóły dotyczące urządzeń, których chcemy śledzić zmiany. Pliki te znajdują się w utworzonych katalogach. W moim przypadku: /var/lib/rancid/routers/router.db i /var/lib/rancid/switches/router.db.
- DODANIE URZĄDZEŃ
Pliki router.db zawierają informacje dotyczące urządzeń. Każde urządzenie zajmuje jedną linijkę w pliku i ma następujący format: <nazwa_urządzenia>:<typ_urządzenia>:<status_urządzenia>. Nazwa_urządzenia to nazwa hosta albo adres IP urządzenia. Typ_urządzenia to nazwa producenta sprzętu. Oprócz CISCO rancid obsługuje sprzęt innych producentów takich jak hp, juniper, czy mikrotik (pełna lista obsługiwanych urządzeń). Status urządzenia może przyjmować dwie wartości up i down. Status up oznacza, że urządzenie będzie sprawdzane, natomiast status down, że będzie ignorowane.
W moim przypadku plik router.db dla grupy switches wygląda następująco:
c2960-pietro:cisco:up c2960-parter:cisco:up c3550-rdzen:cisco:up
analogicznie plik router.db dla grupy routers:
c7200:cisco:up c3725:cisco:up
(Pliki zostały zmienione dla celów tego poradnika, bo w mojej sieci posiadam więcej niż 3 switche i 2 routery)
Jak już wspomniałem wcześniej nazwa urządzenia może być nazwą hosta albo adresem IP. W celu korzystania z nazwy hosta (tak jak ja to zrobiłem) konieczne jest dodanie odpowiednich wpisów do pliku /etc/hosts:
192.168.0.1 c2960-pietro 192.168.0.2 c2960-parter 192.168.0.254 c3550-rdzen 1.1.1.1 c7200 2.2.2.2 c3725
należy dodać wszystkie urządzenia, które chcemy mieć skonfigurowane w plikach router.db we wszystkich grupach. Oczywiście wszystkie adresy IP urządzeń muszą być osiągalne z maszyny, na której zainstalowaliśmy rancid’a.
- KONFIGURACJA CLOGIN
Rancid korzysta z cloginrc do połączenia się z urządzeniami skonfigurowanymi w plikach router.db. Do połączenia z urządzeniami konieczne jest stworzenie pliku .cloginrc w katalogu /var/lib/rancid/ :
root@debian:~# nano /var/lib/rancid/.cloginrc
a następnie jego konfiguracja w zależności od sposobu połączenia do urządzenia: SSH, telnet itd. Ja podłączam się do urządzeń za pomocą SSH zamiast telnetu ze względu na bezpieczeństwo (telnet przesyła hasła otwartym tekstem) i dlatego opiszę tylko tą metodę. Dla innego rodzaju połączeń odsyłam do dokumentacji cloginrc.
Konfiguracja pliku .cloginrc dla ssh (nazwa użytkownika:admin, hasło:admin123):
add method * ssh add user * admin add password * admin123 add autoenable * 1
Znak * w pliku .cloginrc oznacza zastosowanie danych do logowania dla każdego urządzenia z plików router.db. Opcja autoenable jest potrzebna w przypadku gdy użytkownik po uwierzytelnieniu jest w trybie uprzywilejowanym (privilege 15). Na każdym urządzeniu musi być włączone logowanie przez ssh oraz konto użytkownika admin:
(config)# line vty 0 4 (config-line)# transport input ssh (config-line)# login local (config)# username admin privilege 15 password admin123
W przypadku, gdyby dane do logowania były różne na urządzeniach zamiast * wpisujemy adres IP/ hostname urządzenia i dla każdego urządzenia zmieniamy odpowiednio metodę logowania i dane do logowania. W przypadku korzystania z hostname, konieczne jest wpisywanie ich do pliku .cloginrc wyłącznie małymi literami, w przeciwnym wypadku wystąpi błąd.
Należy być bardzo ostrożnym z uprawnieniami pliku .cloginrc gdyż przechowuje on hasła w postaci tekstowej niezaszyfrowanej. Jedyną możliwością ochrony pliku jest ograniczenie praw dostępu do pliku wyłącznie dla właściciela. Zatem ustawiamy:
root@debian:~# chmod 600 /var/lib/rancid/.cloginrc root@debian:~# chown rancid:rancid /var/lib/rancid/.cloginrc
- TESTOWANIE CLOGIN
Po skonfigurowaniu pliku .cloginrc można przetestować jego poprawność. W tym celu wybieram dowolne urządzenie (ja wybrałem router c7200) i wydajemy polecenie:
root@debian:~# /usr/lib/rancid/bin/clogin -f /var/lib/rancid/.cloginrc c7200
Jeśli plik .cloginrc jest poprawnie skonfigurowany po wydaniu powyższego polecenia powinniśmy się znaleźć w trybie uprzywilejowanym urządzenia (exec mode #).
- TESTOWANIE RANCIDA
Jeśli testowanie cloginrc przebiegło pomyślnie pora na przetestowanie rancida. W tym celu wydajemy polecenie:
root@debian:~# su -c /var/lib/rancid/bin/rancid-run -s /bin/bash -l rancid
W zależności od ilości skonfigurowanych urządzeń w plikach router.db wykonanie się powyższego polecenia może chwilę potrwać, ze względu na to, że rancid próbuję łączyć się z każdym urządzeniem i ściąga z nich konfigurację. Po wykonaniu się polecenia warto przejrzeć logi: /var/log/rancid/ w celu sprawdzenia szczegółów.
- INSTALACJA VIEWVC I KONFIGURACJA APACHE’A
Do przeglądania wyników pracy rancida możemy skorzystać z interfejsu webowego viewvc. W celu zainstalowania pakietu viewvc wydajemy polecenie:
root@debian:~# apt-get install viewvc
Przy instalacji viewvc automatycznie zainstaluje się serwer www – apache (jeśli wcześniej go nie instalowaliśmy). Domyślnie viewvc instaluje się w katalogu /usr/lib/viewvc/. Po instalacji viewvc konieczne jest skonfigurowanie Apache’a żeby z nim współpracował. Najpierw tworzymy skrót viewvc w katalogu /var/www/ wskazujący na katalog /usr/lib/viewvc:
root@debian:/var/www# ln -s /usr/lib/viewvc viewvc
Teraz konieczne jest wyedytowanie pliku: /etc/apache2/sites-available/default i dodanie następujących linijek na końcu pliku, tuż przed </VirtualHost>:
<Directory "/var/www/viewvc/cgi-bin"> AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all </Directory> Alias /viewvc /var/www/viewvc/ <Directory /var/www/viewvc/> Options +ExecCGI AddHandler cgi-script .cgi DirectoryIndex viewvc.cgi Order allow,deny Allow from all AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/apache2/password/passwords Require user admin </Directory>
Dzięki linijkom 16:20 dostęp do viewvc będzie dostępny po podaniu prawidłowego użytkownika i hasła. W moim przypadku będzie to użytkownik admin, którego hasło będzie przechowywane w pliku /etc/apache2/password/passwords. W tym celu należy stworzyć folder password w katalogu /etc/apache2:
root@debian:/var/www# mkdir password
a następnie wygenerować plik passwords używając komendy:
root@debian:/etc/apache2/password# htpasswd -c passwords admin
New password: [Wpisz hasło dla użytkownika admin]
Re-type new password: [Powtórz hasło dla użytkownika admin]
ViewVC musi wiedzieć gdzie znajduje się repozytorium CVS, żeby móc go przeglądać. W tym celu edytujemy plik: /etc/viewvc/viewvc.conf i zmieniamy linijkę zaczynającą się od: „root_partents” w następujący sposób:
Teraz pozostaje zrestartowanie Apache’a:
root@debian:~# service apache2 restart
Po restarcie apache’a możemy przeglądać zawartość repozytorium Rancid’a otwierając przeglądarkę internetową i wpisując: http://[adres_IP_serwera]/viewvc/cgi-bin , oczywiście zostaniemy poproszeni o podanie nazwy użytkownika i hasła, które skonfigurowaliśmy wcześniej.
Jeśli wszystko się powiodło naszym oczom powinien ukazać się następujący widok:
I to wszystko. Teraz możemy przeglądać konfiguracje naszych urządzeń:
W celu zobaczenia konfiguracji jakiegoś urządzenia (np. switcha c2960-parter) należy kliknąć w numer obok nazwy (1.2: Numer ten oznacza numer wersji konfiguracji i przy każdej zmianie konfiguracji urządzenia jest on podwyższany o wartość 0.1). Po kliknięciu powinna się pojawić strona z podstawowymi informacjami o switchu a pod spodem konfiguracją (running-config). Będzie to wyglądać mniej więcej tak:
Bardzo przydatną funkcją w VIEWVC jest porównywanie wersji. W tym celu na poprzedniej stronie zamiast w numer wersji klikamy w nazwę urządzenia i wybieramy wersję do porównania a następnie klikamy przycisk Get Diffs:
Po tej operacji zobaczymy zaznaczone na kolorowo zmiany pomiędzy wersjami:
Wprowadzona przeze mnie zmiana jest zaznaczona kolorem żółtym: „service password-encryption„, jednak nie jest zaznaczone kto wprowadził zmianę. W tym celu należy wyedytować plik rancid:
root@debian:~# nano /var/lib/rancid/bin/rancid
i poprzedzić linijkę: /^! (Last configuration|NVRAM config last)/ && next; znakiem # w taki sposób:
Teraz w VIEWVC mamy informację kto wprowadził zmianę w konfiguracji urządzenia.
- AUTOMATYCZNE URUCHAMIANIE RANCIDA
Najprostszą metodą automatycznego uruchamiana rancida jest wykorzystanie cyklicznych zadań cron’a. Najlepiej skonfigurować cron’a w taki sposób, żeby raz dziennie (np. w nocy) uruchamial rancida. Plik konfiguracyjny crontab edytujemy wydając polecenie:
root@debian:~# crontab -e
następnie dopisujemy linikję:
0 1 * * * /home/rancid/rancid/bin/rancid-run
Która oznacza, że codziennie o 1.00 w nocy będzie się wykonywał rancid i pobierał konfigurację z urządzeń.
Możemy dodatkowo wymusić czyszczenie logów rancida co miesiac o 1:15 w nocy dodając do cron’a linijkę:
15 1 1 * * find /var/lib/rancid/logs/ -type f -mtime +30 -exec rm -r {} \;