W poniższym poradniku opiszemy, jak wykorzystać Raspbian Lite OS jako NAS z dwoma dyskami 320 GB Western Digital Pi Drives spiętymi w macierz RAID-1. Następnie przyjrzymy się jak poprawić wydajność takiego systemu wykorzystując do tego narzędzia takie jak np. Docker.
Czy Raspberry Pi nadaje się do budowy NAS? oto kilka argumentów
Przeciwko:
* Słabe I/O - brak SATA, ograniczone pasmo USB.
* Brak RAMu ECC
* Nie nadaje się pod ZFS
* Zawodne bootowanie z karty SD.
Za:
* Bardzo niski koszt zakupu i działania 24/7 z uwagi na niskie wymagania co do zasilania.
* Przenośny - można go nawet zasilać z baterii.
* Łatwo do instalacji z wykorzystaniem dostępnych narzędzi.
* Dobra wprawka i nauka dla DevOpsingu
* Pozwala na szkolenie swoich umiejętności technicznych i sieciowych już za 5..25 dolarów.
Wymagania wstępne:
* Domyślny podstawowy Raspbian OS - taki system jest bezpieczniejszy i zapewnia nam o wiele więcej kontroli nad komputerem niż dedykowany obraz pobrany z jakiejś, ciężko słabo zadokumentowanej, strony itp.
* Wykorzystanie programowego RAID-1 dla redundancji dysków
* Rekonfigurowany Docker, który będzie przechowywał swoje dane w macierzy RAID - da nam do poprawę wydajności systemu, dzięki pominięciu karty SD.
* Co najmniej jedna usługa udostępniania danych w sieci: Samba (łatwa do obsłużenia dla Windowsów, ale o słabej wydajności, FTP (dobra wydajność, ale brak szyfrowania), SSH/SFTP/SCP (bezpieczne i wbudowane niemalże w każdy Linux lub inny system oparty na Unixie). BFS (nieszyfrowany, ale szybszy niż Samba dla klientów Unixowych; może zostać podmontowany po sieci jako dysk lokalny),
* Możliwość robienia kopii zapasowych przez rsync. Temu zagadnieniu nie przyjrzymy się zbyt dokładnie, ale zaprezentowana zostanie integracja rsynca z NFS i SSH.
Potrzebny sprzęt
2 x Dysk Western Digital 314 GB PiDrive lub podobny.
3 x Zasilacz 5 V, 2 A każdy.
1 x Komputer Raspoberry Pi 2 lub Pi 3.
1 x Karta SD.
W poniższym przykładzie wykorzystane zostaną dwa dyski WD Pi Drive po 314 GB (jak 3,14 - liczba pi). Dyski te dostępne są także w wersji o pojemności 1 GB. Każdy z dysków będzie niezależnie zasilany z własnego zasilacza USB poprzez dedykowany kabel typu Y, dostarczany przez producenta. Trzeci zasilacz podłączony będzie do RPi.
Warto zadbać, aby zasilacze miały dobrą wydajność prądową. Rekomenduje się wykorzystanie oficjalnych zasilaczy o wydajności 2,4 A.
Zmiany w instalacji i uruchamianie NASa
Najpierw dodać musimy nowego użytkownika do systemu i skasować domyślne konto pi - poprawi to bezpieczeństwo działania układu. W konsoli piszemy na przukład:
Użytkownik dodany został do grupy sudo, aby mógł korzystać z zwiększonych uprawnień. Nadal konieczne będzie podawanie za każdym razem hasła. To zachowanie kontrolowane jest w linii:
Jeśli chcemy wyłączyć pytanie o hasło, to możemy zmienić powyższy wpis na:
Po stworzeniu nowego użytkownika i nadaniu mu hasła możemy się przelogować i usunąć domyślne konto:
Optymalizacja pracy GPU i podziału pamięci
Poniższe zabiegi pozwolą na optymalizację podziału pamięci w systemie. Konieczny będzie reset po drodze, aby sprawdzić efekty. Najpierw wpisujemy komendę, która pozwoli nam sprawdzić ilość wolnej pamięci RAM:
Zmiany dodajemy wpisując:
Po resecie możemy ponownie sprawdzić ilość wolnej pamięci RAM.
Zmiana nazwy hosta
Musimy zmienić nazwę hosta naszego NASa. Wykorzystujemy edytor, np. nano, do zmiany w /etc/hosts i /etc/hostname po czym resetujemy komputer.
Konfiguracja statycznego adresu IP dla RPi
Raspberry Pi najpewniej otrzyma z serwera DHCP w routerze numer IP. Dobrze jest przypisać komputerowi stałe IP. Musimy wybrać jakieś IP - najlepiej dosyć wysokie, aby mieć pewność, że nie zostanie przydzielone innemu urządzeniu. Czy dane IP jet wolne możemy sprawdzić pingając je:
Teraz w etc/dhcpcd.conf dodajemy następujący wpis (upewniając się czy nasz router w sieci nadaje IP w zakresie 192.168.0.0/24 czy w 192.168.1.0/24):
Możemy teraz zresetować Komputer. Podany powyżej DNS pochodzi od Google.
Wyłączenie logowania hasłem po SSH
Przy odpowiednio długim czasie i słabym haśle możliwe jest brute-forceowe uzyskanie dostępu poprzez SSH do naszego Raspberry Pi. Dlatego też warto wyłączyć ro zagrożenie, tak aby nie możliwe było logowanie loginem i hasłem, a konieczne było wykorzystanie pliku z kluczem.
najpierw korzystając z ssh-keygen generujemy klucz (z domyślnymi parametrami), następnie kopiujemy go na Raspberry Pi przy pomocy ssh-copy-id. Teraz możemy już zalogować się poprzez SSH na naszą maszynę bez konieczności podawania hasła i loginu.
Teraz dodać musimy w pliku konfiguracyjnym SSHD linijkę:
I już możemy zresetować komputer, aby sprawdzić czy zdalny dostęp po SSH działa poprawnie.
Odetnij się od Internetu
Internet to niebezpieczne miejsce. Najlepiej jest odizolować nasz NAS od ogólnodostępnej przestrzeni. Nawet jeżeli system jest poprawnie zabezpieczony, to odpieranie ataków będzie zabierało czas procesora.
Jeśli jednak chcemy sprawdzić czy to co napisano powyżej to prawda, to możemy wystawić na świat (poza NAT) port 22 do logowania po SSH. Możemy po jakimś czasie sprawdzić logi SSH, aby zobaczyć czy i ile zostało przeprowadzonych ataków:
Analogicznie, aby sprawdzić logi demona Dockera, zamiast sshd wpisujemy dockerd.
Instalacja macierzy RAID
Teraz możemy podpiąć dyski twarde do zasilania oraz do komputera. W pierwszej kolejności musimy zidentyfikować dyski w systemie. Najlepiej komendą lsblk:
Podłączone dyski oznaczone zostały sda i sdb; karta SD ro mmcblk0.
Tworzenie partycji
Teraz tworzymy na obu dyskach partycje z wykorzystaniem fdisk. Korzystamy z poniższego opisu:
Analogicznie postępujemy dla drugiego dysku (sdb).
Instalacja narzędzi do RAID
Do zestawienia macierzy wykorzystujemy oprogramowanie mdadm, które instalujemy wpisując:
Po instalacji pojawi się niebieski ekran z kilkoma pytaniami - na wszystkie odpowiadamy twierdząco (yes).
Tworzenie macierzy RAID-1
W konsoli wpisujemy:
Macierz pojawi się jako /dev/md0, które możemy zamontować:
Aby dyski były zamontowane na stałe musimy dodać je do fstab-a:
Przed resetem pozostało nam jedynie aktualizować plik konfiguracyjny mdadm:
Docker
Dockera na Raspberry Pi instaluje się jednym skryptem. Po co Docker? Jak twierdzą eksperci aplikacje oparte na kontenerach są bezpieczniejsze. Aby zainstalować Dockera wpisujemy w konsoli:
Następnie poprzez CLI musimy dodać dostęp naszemu użytkownikowi do demona Dockerowego, aby nie było konieczne pisanie każdej komendy z sudo z przodu:
Teraz przystąpić możemy do edytowania Dockerowego systemd, aby wykorzystywał on macierz RAID. Kluczowym jest wpisanie -g /mnt/raid1/ co poinformuje Dockera, że tej lokalizacji ma używać. Edytujemy plik etc/systemd/system/docker.service.d/overlay.conf:
A następnie resetujemy komputer.
Wzmocnienie zabezpieczeń
Teraz przystąpić możemy do poprawy zabezpieczeń naszego systemu wykorzystując profile Seccomp, AppArmor czy SELinux. Aby zwiększyć poziom zabezpieczeń można część lub nawet wszystkie usługi systemowe realizować przez kontenery Dockera. Zapewnia to powtarzalne i izolowane środowisko.
Jeśli jesteśmy zaawansowanym użytkownikiem możemy do poprawy działania usług systemowych w Dockerze wykorzystać profile Seccomp, aktywując je z pomocą parametru --security-opt. Więcej poczytać o tym możemy na blogu Dockera tutaj oraz tutaj.
Kopie zapasowe
Do realizacji kopii zapasowych wykorzystamy rsync. Dzięki temu będziemy mogli synchronizować różne foldery w sieci na naszym NAS, robiąc kopie zapasowe. Rsync wykorzystuje do pracy NFS lub SSH, a zainstalować go można np. z pomocą apt-get. Następnie, wystarczy w terminalu wpisać:
aby skopiować zdalną lokalizację poprzez NFS, albo też:
by skopiować ją przez SSH.
Podsumowanie
Raspberry Pi z programowym RAIDem nie jest może idealną platformą na NAS, jako że nie jest to najszybszy system, ale nie jest to rozwiązanie bez sensu. Szczególnie, że zastosowanie dysków mechanicznych daje nam istotnie większą niezawodność niż wykorzystanie do przechowywania np. karty SD.
http://blog.alexellis.io/hardened-raspberry-pi-nas/
Czy Raspberry Pi nadaje się do budowy NAS? oto kilka argumentów
Przeciwko:
* Słabe I/O - brak SATA, ograniczone pasmo USB.
* Brak RAMu ECC
* Nie nadaje się pod ZFS
* Zawodne bootowanie z karty SD.
Za:
* Bardzo niski koszt zakupu i działania 24/7 z uwagi na niskie wymagania co do zasilania.
* Przenośny - można go nawet zasilać z baterii.
* Łatwo do instalacji z wykorzystaniem dostępnych narzędzi.
* Dobra wprawka i nauka dla DevOpsingu
* Pozwala na szkolenie swoich umiejętności technicznych i sieciowych już za 5..25 dolarów.
Wymagania wstępne:
* Domyślny podstawowy Raspbian OS - taki system jest bezpieczniejszy i zapewnia nam o wiele więcej kontroli nad komputerem niż dedykowany obraz pobrany z jakiejś, ciężko słabo zadokumentowanej, strony itp.
* Wykorzystanie programowego RAID-1 dla redundancji dysków
* Rekonfigurowany Docker, który będzie przechowywał swoje dane w macierzy RAID - da nam do poprawę wydajności systemu, dzięki pominięciu karty SD.
* Co najmniej jedna usługa udostępniania danych w sieci: Samba (łatwa do obsłużenia dla Windowsów, ale o słabej wydajności, FTP (dobra wydajność, ale brak szyfrowania), SSH/SFTP/SCP (bezpieczne i wbudowane niemalże w każdy Linux lub inny system oparty na Unixie). BFS (nieszyfrowany, ale szybszy niż Samba dla klientów Unixowych; może zostać podmontowany po sieci jako dysk lokalny),
* Możliwość robienia kopii zapasowych przez rsync. Temu zagadnieniu nie przyjrzymy się zbyt dokładnie, ale zaprezentowana zostanie integracja rsynca z NFS i SSH.
Potrzebny sprzęt
2 x Dysk Western Digital 314 GB PiDrive lub podobny.
3 x Zasilacz 5 V, 2 A każdy.
1 x Komputer Raspoberry Pi 2 lub Pi 3.
1 x Karta SD.
W poniższym przykładzie wykorzystane zostaną dwa dyski WD Pi Drive po 314 GB (jak 3,14 - liczba pi). Dyski te dostępne są także w wersji o pojemności 1 GB. Każdy z dysków będzie niezależnie zasilany z własnego zasilacza USB poprzez dedykowany kabel typu Y, dostarczany przez producenta. Trzeci zasilacz podłączony będzie do RPi.
Warto zadbać, aby zasilacze miały dobrą wydajność prądową. Rekomenduje się wykorzystanie oficjalnych zasilaczy o wydajności 2,4 A.
Zmiany w instalacji i uruchamianie NASa
Najpierw dodać musimy nowego użytkownika do systemu i skasować domyślne konto pi - poprawi to bezpieczeństwo działania układu. W konsoli piszemy na przukład:
Kod: Bash
Użytkownik dodany został do grupy sudo, aby mógł korzystać z zwiększonych uprawnień. Nadal konieczne będzie podawanie za każdym razem hasła. To zachowanie kontrolowane jest w linii:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALLJeśli chcemy wyłączyć pytanie o hasło, to możemy zmienić powyższy wpis na:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL) NOPASSWD: ALLPo stworzeniu nowego użytkownika i nadaniu mu hasła możemy się przelogować i usunąć domyślne konto:
Kod: Bash
Optymalizacja pracy GPU i podziału pamięci
Poniższe zabiegi pozwolą na optymalizację podziału pamięci w systemie. Konieczny będzie reset po drodze, aby sprawdzić efekty. Najpierw wpisujemy komendę, która pozwoli nam sprawdzić ilość wolnej pamięci RAM:
Kod: Bash
Zmiany dodajemy wpisując:
Kod: Bash
Po resecie możemy ponownie sprawdzić ilość wolnej pamięci RAM.
Zmiana nazwy hosta
Musimy zmienić nazwę hosta naszego NASa. Wykorzystujemy edytor, np. nano, do zmiany w /etc/hosts i /etc/hostname po czym resetujemy komputer.
Konfiguracja statycznego adresu IP dla RPi
Raspberry Pi najpewniej otrzyma z serwera DHCP w routerze numer IP. Dobrze jest przypisać komputerowi stałe IP. Musimy wybrać jakieś IP - najlepiej dosyć wysokie, aby mieć pewność, że nie zostanie przydzielone innemu urządzeniu. Czy dane IP jet wolne możemy sprawdzić pingając je:
Kod: Bash
Teraz w etc/dhcpcd.conf dodajemy następujący wpis (upewniając się czy nasz router w sieci nadaje IP w zakresie 192.168.0.0/24 czy w 192.168.1.0/24):
interface eth0
static ip_address=192.168.0.240/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8Możemy teraz zresetować Komputer. Podany powyżej DNS pochodzi od Google.
Wyłączenie logowania hasłem po SSH
Przy odpowiednio długim czasie i słabym haśle możliwe jest brute-forceowe uzyskanie dostępu poprzez SSH do naszego Raspberry Pi. Dlatego też warto wyłączyć ro zagrożenie, tak aby nie możliwe było logowanie loginem i hasłem, a konieczne było wykorzystanie pliku z kluczem.
najpierw korzystając z ssh-keygen generujemy klucz (z domyślnymi parametrami), następnie kopiujemy go na Raspberry Pi przy pomocy ssh-copy-id. Teraz możemy już zalogować się poprzez SSH na naszą maszynę bez konieczności podawania hasła i loginu.
Teraz dodać musimy w pliku konfiguracyjnym SSHD linijkę:
Kod: Bash
I już możemy zresetować komputer, aby sprawdzić czy zdalny dostęp po SSH działa poprawnie.
Odetnij się od Internetu
Internet to niebezpieczne miejsce. Najlepiej jest odizolować nasz NAS od ogólnodostępnej przestrzeni. Nawet jeżeli system jest poprawnie zabezpieczony, to odpieranie ataków będzie zabierało czas procesora.
Jeśli jednak chcemy sprawdzić czy to co napisano powyżej to prawda, to możemy wystawić na świat (poza NAT) port 22 do logowania po SSH. Możemy po jakimś czasie sprawdzić logi SSH, aby zobaczyć czy i ile zostało przeprowadzonych ataków:
Kod: Bash
Analogicznie, aby sprawdzić logi demona Dockera, zamiast sshd wpisujemy dockerd.
Instalacja macierzy RAID
Teraz możemy podpiąć dyski twarde do zasilania oraz do komputera. W pierwszej kolejności musimy zidentyfikować dyski w systemie. Najlepiej komendą lsblk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 292.5G 0 disk
└─sda1 8:1 0 292.5G 0 part
sdb 8:16 0 292.5G 0 disk
└─sdb1 8:17 0 292.5G 0 part
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 63M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part /Podłączone dyski oznaczone zostały sda i sdb; karta SD ro mmcblk0.
Tworzenie partycji
Teraz tworzymy na obu dyskach partycje z wykorzystaniem fdisk. Korzystamy z poniższego opisu:
sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): o
Created a new DOS disklabel with disk identifier 0x6624690f.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-613355519, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-613355519, default 613355519):
Created a new partition 1 of type 'Linux' and of size 292.5 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks. Analogicznie postępujemy dla drugiego dysku (sdb).
Instalacja narzędzi do RAID
Do zestawienia macierzy wykorzystujemy oprogramowanie mdadm, które instalujemy wpisując:
Kod: Bash
Po instalacji pojawi się niebieski ekran z kilkoma pytaniami - na wszystkie odpowiadamy twierdząco (yes).
Tworzenie macierzy RAID-1
W konsoli wpisujemy:
Kod: Bash
Macierz pojawi się jako /dev/md0, które możemy zamontować:
Kod: Bash
Aby dyski były zamontowane na stałe musimy dodać je do fstab-a:
Kod: Bash
Przed resetem pozostało nam jedynie aktualizować plik konfiguracyjny mdadm:
Kod: Bash
Docker
Dockera na Raspberry Pi instaluje się jednym skryptem. Po co Docker? Jak twierdzą eksperci aplikacje oparte na kontenerach są bezpieczniejsze. Aby zainstalować Dockera wpisujemy w konsoli:
Kod: Bash
Następnie poprzez CLI musimy dodać dostęp naszemu użytkownikowi do demona Dockerowego, aby nie było konieczne pisanie każdej komendy z sudo z przodu:
Kod: Bash
Teraz przystąpić możemy do edytowania Dockerowego systemd, aby wykorzystywał on macierz RAID. Kluczowym jest wpisanie -g /mnt/raid1/ co poinformuje Dockera, że tej lokalizacji ma używać. Edytujemy plik etc/systemd/system/docker.service.d/overlay.conf:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -g /mnt/raid1/ --storage-driver overlay -H fd://'A następnie resetujemy komputer.
Wzmocnienie zabezpieczeń
Teraz przystąpić możemy do poprawy zabezpieczeń naszego systemu wykorzystując profile Seccomp, AppArmor czy SELinux. Aby zwiększyć poziom zabezpieczeń można część lub nawet wszystkie usługi systemowe realizować przez kontenery Dockera. Zapewnia to powtarzalne i izolowane środowisko.
Jeśli jesteśmy zaawansowanym użytkownikiem możemy do poprawy działania usług systemowych w Dockerze wykorzystać profile Seccomp, aktywując je z pomocą parametru --security-opt. Więcej poczytać o tym możemy na blogu Dockera tutaj oraz tutaj.
Kopie zapasowe
Do realizacji kopii zapasowych wykorzystamy rsync. Dzięki temu będziemy mogli synchronizować różne foldery w sieci na naszym NAS, robiąc kopie zapasowe. Rsync wykorzystuje do pracy NFS lub SSH, a zainstalować go można np. z pomocą apt-get. Następnie, wystarczy w terminalu wpisać:
Kod: Bash
aby skopiować zdalną lokalizację poprzez NFS, albo też:
Kod: Bash
by skopiować ją przez SSH.
Podsumowanie
Raspberry Pi z programowym RAIDem nie jest może idealną platformą na NAS, jako że nie jest to najszybszy system, ale nie jest to rozwiązanie bez sensu. Szczególnie, że zastosowanie dysków mechanicznych daje nam istotnie większą niezawodność niż wykorzystanie do przechowywania np. karty SD.
http://blog.alexellis.io/hardened-raspberry-pi-nas/
Kod: text
Kod: text
Fajne? Ranking DIY