Kategoria: FreeBSD

FreeBSD + Rancid + ViewVC = Backup

FreeBSD czyli NAS4Free ciąg dalszy, czyli jak wykorzystać możliwości systemów BSD, zamiast wirtualizować całe systemy można oddzielać środowiska od siebie.

Potrzebujemy NAS4Free + The Brig, czyli manager jaili, albo surowy system FreeBSD zainstalowany na maszynie fizycznej lub w ostateczności na wirtualnej.

Do zapoznania się czym jest RANCID zapraszam na stronę autora: http://www.shrubbery.net/rancid/

1.Instalacja i konfiguracja RANCID

Tworzymy naszego jaila, w większości sprowadza się to do podania jego ID, nazwy oraz przydzielenia adresu IP na wybrany interfejs. Startujemy go i łączymy się po IP jaila albo IP systemu podając dane user/pass z systemu głównego. Podnosimy uprawnienia komendą su, listujemy jaile komendą jls, i łączymy się do wybranego poleceniem jexec:

nas4free.local: /# jls
   JID  IP Address      Hostname                      Path
     1  10.0.0.3     rancid.local                  /mnt/ZFS/jails/rancid
nas4free.local: /# jexec 1 /bin/csh
root@rancid:/ #

Jesteśmy zalogowani jako root w naszym podsystemie. Pierwsze co to potrzebujemy pobrać zarządcę pakietami pkg:

root@rancid:/ # pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
[rancid.local] Installing pkg-1.10.1...
[rancid.local] Extracting pkg-1.10.1: 100%
pkg: not enough arguments
Usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>|-r <rootdir>] [-C <configuration file>] [-R <repo config dir>] [-o var=value] [-4|-6] <command> [<args>]

For more information on available commands and options see 'pkg help'.
root@rancid:/ #

Uaktualniamy bazę poleceniem pkg update:

root@rancid:/ # pkg update
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
[rancid.local] Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
[rancid.local] Fetching packagesite.txz: 100%    6 MiB 498.7kB/s    00:12
Processing entries: 100%
FreeBSD repository update completed. 26289 packages processed.
All repositories are up to date.

Instalujemy RANCID poleceniem pkg install rancid3, zostanie pobrany pakiet łącznie ze wszystkimi zależnościami.

Kopiujemy plik konfiguracyjny posiłkując się dołączonym samplem takiego pliku przez autora:

cp /usr/local/etc/rancid/rancid.conf.sample /usr/local/etc/rancid/rancid.conf

Z przyzwyczajenia używam edytora nano, jeżeli nie masz go w systemie możesz go doinstalować poleceniem pkg install nano, albo korzystać z wbudowanego w system vi.

RANCID może tworzyć grupy urządzeń i katalogować je w osobnych miejscach, na potrzeby poradnika skupimy się na razie na przypadku jednej grupy. W pliku /usr/local/etc/rancid/rancid.conf odnajdujemy, zmieniamy i usuwany znak # komentarza:

#LIST_OF_GROUPS="sl joebobisp" => LIST_OF_GROUPS="backup"

Teraz logujemy się poprzez su rancid na użytkownika rancid aby utworzyć poprawnie struktury katalogów i konfigurację z poprawnymi uprawnieniami

root@rancid:/ # su rancid
$

Tworzymy plik z loginami i hasłami do urządzeń. Niestety w pliku RANCID przechowuje je otwartym tekstem, jeżeli to tylko możliwe warto stosować logowanie za pomocą kluczy SSH, jak nie ma możliwości bo urządzenie obsługuje tylko telnet, odseparować sieć aby nie było możliwe przechwycenie transmisji hasła. Zawartość pliku wygląda następująco:

$ touch /usr/local/var/rancid/.cloginrc
$ nano /usr/local/var/rancid/.cloginrc

add user 10.0.0.5 admin # dla urządzenia 10.0.0.5 dodajemy użytkownika admin
add password 10.0.0.5 hasło hasłogłówne # dla urządzenia 10.0.0.5 dodajemy hasło logowania i hasło podniesienia uprawnień jak w urządzeniach Cisco
add method 10.0.0.5 ssh # dla urządzenia 10.0.0.5 dodajemy metodę logowania, tutaj ssh
add user 10.0.0.* admininny # możemy wykorzystać gwiazdkę aby rozszerzyć zakres na więcej urządzeń, tutaj cała podsieć /24
add method mikrotik1 ssh # możemy używać nazw bardziej ludzkich albo domenowych, urządzenia muszą być albo dopisane w pliku /etc/hosts albo rozwiązywane przez serwer DNS

$ chmod 600 /usr/local/var/rancid/.cloginrc

$ ls -l /usr/local/var/rancid/.cloginrc
-rw-------  1 rancid  rancid  88 May 20 20:33 /usr/local/var/rancid/.cloginrc

Zawartość chronimy ustawiając prawa tylko do odczytu i zapisu przez właściciela pliku. Jeżeli używany swoich nazw dopisanych do pliku /etc/hosts to zalecam stosowanie tylko małych liter.

Tworzymy pliki i katalogi ręcznie uruchamiając polecenia:

$ /usr/local/bin/rancid-run
$ /usr/local/bin/rancid-cvs

No conflicts created by this import

cvs checkout: Updating backup
Directory /usr/local/var/rancid/CVS/backup/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /usr/local/var/rancid/CVS/backup/router.db,v
done
Checking in router.db;
/usr/local/var/rancid/CVS/backup/router.db,v  <--  router.db
initial revision: 1.1
done

Przechodzimy do katalogu gdzie pojawiły się nasze pliki, nazwa będzie różna, w zależności od nazwy grupy czy grup jakie podawaliśmy w pliku /usr/local/etc/rancid/rancid.conf.

$ cd /usr/local/var/rancid/backup

Edytujemy plik router.db, gdzie podajemy urządzenia które mają odpytane o konfigurację. Ma on składnię IP;rodzaj_urządzenia;status(up,down)

10.0.250.1;mikrotik;up # urządzenie typu mikrotik, kopia będzie wykonana
10.0.250.2;Cisco;up # urządzenie typu Cisco, kopia będzie wykonana
10.0.250.3;mikrotik;down # urządzenie typu mikrotik, kopia nie będzie wykonana

Ostatnim krokiem będzie dodanie wpisu do crona, aby kopie były tworzone regularnie o równej godzinie co godzinę:

$ crontab -e
Wciskamy klawisz i
Wklejamy zawartość poniżej:
0 * * * * /usr/local/bin/rancid-run

Wciskamy klawisz ESC
Wpisujemy :wq i zatwierdzamy ENTER
/tmp/crontab.pcMtf5FHDq: 1 lines, 36 characters.
crontab: installing new crontab
$

Log dla odpowiedniej grupy znajduje się w katalogu: /usr/local/var/rancid/logs/, gdzie można sprawdzić jak przebiega proces tworzenia kopii zapasowych i rozwiązywać występujące problemy.

2.Instalacja ViewVC do przeglądania konfiguracji poprzez przeglądarkę WWW.

Aby wygodniej przeglądać zmiany w konfiguracji zainstalujemy w systemie ViewVC poleceniem pkg install viewvc.

root@rancid:~ # pkg install viewvc

Doinstaluje się nam serwer WWW apache jako zależność, jednak w zupełności wystarczy nam serwer WWW wbudowany.

Konfiguracja ViewVC znajduje się w pliku: /usr/local/viewvc/viewvc.conf edytujemy go i zmieniamy podane linie.

root@rancid:~ # nano /usr/local/viewvc/viewvc.conf

cvs_roots = backup: /usr/local/var/rancid/backup/CVS/
root_parents = /usr/local/var/rancid/CVS/ : cvs
default_root = backup
use_localtime = 1

Dodajemy do pliku /etc/rc.conf polecenia dla ViewVC:

root@rancid:~ # nano /etc/rc.conf

viewvc_enable="YES"
viewvc_user="rancid"
viewvc_flags="-h 10.0.0.3 -p 10080"

Czyli uruchamiamy ViewVC jako użytkownik rancid, serwer WWW będzie uruchomiony na IP 10.0.0.3 i porcie 10080

ViewVC startujemy poleceniem:

root@rancid:~ # /usr/local/etc/rc.d/viewvc start
Starting viewvc.

I uruchamiamy przeglądarkę i przechodzimy na adres: http://10.0.0.3:10080/viewvc

 

MRTG FreeBSD Nginx

Potrzebujemy komputer z zainstalowanym FreeBSD 10.2 oraz dostęp do superużytkownika. Moje środowisko to system NAS4FREE uruchamiany z pendrajwa a na nim tworzone „jaile” w których testuję różne rozwiązania, programy czy skrypty.

1.Instalujemy MRTG

pkg update
pkg install mrtg

Pierwsza komenda uaktualnia bazę pakietów, druga instaluje nam mrtg w systemie razem z zależnościami.

Następnie edytujemy plik w programie vi albo nano (jeżeli nie mamy nano instalujemy go tak samo jak mrtg) /etc/rc.conf i dodajemy linijkę:

mrtg_daemon_enable="YES"

Edytujemy crona aby uruchamiał nam MRTG co 5 min i zbierał statystyki.

crontab -e

Wciskamy „i” i potem wklejamy:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg

Generujemy plik konfiguracyjny programem cfgmaker

/usr/local/bin/cfgmaker --output=/usr/local/etc/mrtg/mrtg.cfg public@192.168.1.1

gdzie public to jest community na urządzeniu, 192.168.1.1 to ip urządzenia na którym chcemy monitorować ruch.

Ważne jest ustawić popranie ścieżkę WorkDir, zmienić język wyświetlania na stronach na polski i w większości operujemy na bitach przy monitorowaniu prędkości interfejsów.

WorkDir: /usr/local/www/nginx
Options[_]: growright, bits
Language: polish

2.Instalujemy Nginx’a

pkg install nginx

Tak jak w przypadku mrtg, instalujemy pakiet razem z zależnościami. Następnie dodajemy do pliku /etc/rc.conf linijkę:

nginx_enable="YES"

Katalog /usr/local/www/nginx jest dowiązaniem symbolicznym do /usr/local/www/nginx-dist dlatego kasuję to dowiązanie i tworzę normalny katalog obok katalogu nginx-dist i nadaje mu prawa dla mrtg.

rm /usr/local/www/nginx
mkdir /usr/local/www/nginx
chown mrtg:mrtg /usr/local/www/nginx

Tak wygląda plik konfiguracyjny nginx,

worker_processes  1;
events {
    worker_connections  256;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
            }
        }
    }
}

Uruchamiamy serwer www poleceniem

/usr/local/etc/rc.d/nginx start

Następnie na innym komputerze otwieramy przeglądarkę z adresem IP na którym mamy uruchomiony nasz monitoring i:mrtg