Tag: 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

 

Logowanie za pomocą klucza SSH

Logowanie za pomocą klucza SSH jest o wiele bezpieczniejsze od logowania się zwykłym hasłem, oraz można wykorzystać je do zautomatyzowania procesu logowania. Takiego sposobu logowania używam praktycznie wszędzie. Czy to serwer z Linuksem, FreeBSD czy innym Uniksem wszędzie gdzie mogę loguję się kluczami SSH. No to zaczynamy:

  1. Górne menu i Access -> Users and Groups, klikamy czerwony plus i dodajemy użytkownika do systemu. Podajemy nazwę, pełną nazwę konta i hasło. Wybieramy mu powłokę, Shell -> bash (ja preferuję bash’a ze względu, że wszędzie gdzie pracuję jest podstawową powłoką). Pamiętamy dodać użytkownikowi dodatkową grupę sshd umożliwiającą logowanie się do usługi SSH. Zapisujemy i zatwierdzamy zmiany.
  2. Logujemy się do systemu za pomocą nowego użytkownika.
    Welcome to NAS4Free!
    [sshuser@piecyk ~]$
  3. Tworzymy katalog domowy dla naszego użytkownika gdzie będziemy trzymać nasz klucz SSH oraz przechodzimy od razu do niego. DATA to jest nasz dysk czy macierz z danymi w systemie.
    [sshuser@piecyk ~]$ mkdir -p /mnt/DATA/sshuser/.ssh
    [sshuser@piecyk ~]$ cd /mnt/DATA/sshuser/.ssh
  4. Generujemy parę kluczy, prywatny oraz publiczny.
    [sshuser@piecyk ~/DATA/sshuser/.ssh]$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/mnt/.ssh/id_rsa): /mnt/DATA/sshuser/.ssh/id_rsa
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /mnt/DATA/sshuser/.ssh/id_rsa.
    Your public key has been saved in /mnt/DATA/sshuser/.ssh/id_rsa.pub.
    The key fingerprint is:
    28:84:8a:0a:e3:5e:d5:50:dc:20:d5:80:ae:82:cd:66 sshuser@piecyk.local
    The key's randomart image is:
    +--[ RSA 2048]----+
    |     .+==        |
    |   . .o. o       |
    |  . o.           |
    |.. . .o.         |
    |*o  o...S        |
    |=oE...           |
    |.+..             |
    |. .              |
    | .               |
    +-----------------+
  5. Tworzymy plik authorized_keys czyli plik z kluczami publicznymi, za pomocą których możemy się logować do systemu. Tutaj akurat tworzymy go z klucza publicznego naszego klucza prywatnego bo za jego pomocą będziemy się logować.
    [sshuser@piecyk ~/DATA/sshuser/.ssh]$ cp id_rsa.pub authorized_keys
  6. Kopiujemy plik z kluczem prywatnym na nasz docelowy komputer za pomocą SCP, FTP, SMB czy jak nam wygodnie.
  7. Przechodzimy jeszcze raz do Access -> Users and Groups i edytujemy naszego użytkownika. Dodajemy mu katalog domowy, u mnie odpowiednio jest to /mnt/DATA/sshuser
  8. Na komputerze z którego łączę się do serwerów korzystam z programu Putty. Nasz klucz należy przekonwertować programem puttygen na odpowiedni. Menu Conversions -> Import Key. Zmieniamy komentarz, możemy klucz zabezpieczyć hasłem jeżeli nie służy do zautomatyzowanych działań. Zapisujemy go przyciskiem Save private key.
  9. Zapisany klucz ppk podajemy w kategorii SSH -> Auth putty
  10. Jeżeli popranie podaliśmy adres IP oraz port to powita nas zapytanie o nazwę użytkownika. Jeżeli podamy nazwę naszego użytkownika to nastąpi automatyczne logowanie za pomocą klucza prywatnego i uzyskamy dostęp do systemu.
    login as: sshuser
    Authenticating with public key "NAS4FREE Piecyk.local"
    Last login: Tue Feb 23 21:06:25 2016 from 10.0.250.2
    Welcome to NAS4Free!
    [sshuser@piecyk ~]$
  11. Możemy zautomatyzować proces podając na zakładce Data  w polu Auto-login username nasz login, to wtedy putty zaloguje nas automatycznie lub jeżeli podaliśmy hasło do klucza, zapyta o nie.

Możliwości jest bardzo wiele, ustawiając sobie wszystko w Puttym, zapisując sesje i logując się do maszyn kluczami bez haseł można uprościć sobie proces do skrótu na pulpicie. Czyli tworzymy skrót do programu Putty np. na pulpicie. Klikamy PPM na niego i dodajemy w wierszu Element docelowy

C:\programy\putty.exe -load "nazwa_sesji"

Zmieniamy sobie nazwę skrótu na dowolny i teraz uruchamiając taki skrót od razu logujemy się do wybranej maszyny.

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