Do synology NAS se systémem DSM 6+ můžete nainstalovat balíčky MariaDB a PhpMyAdmin. Díky tomu získáte vlastní databázi. Pokud ale máte NAS přístupný z internetu (např. kvůli generování Let’s Encrypt certifikátům), zároveň tím zpřístupníte databázi komukoliv (komu se podaří prolomit přístup do PhpMyAdmin).
Přitom zabezpečit přístup do PhpMyAdmin proti hackerům je celkem snadné.
Nginx
První důležitá věc, kterou je potřeba si uvědomit, je, že balíček PhpMyAdmin běží vždy na serveru Nginx, který je na Synology předinstalován, nezávisle na tom, jaký server nastavíte pro Web Station.
Z toho důvodu nemůžete k zablokování použít soubor .htaccess
ani nic podobného, co běžně používáte pro Apache a jiné servery. Konfigurace Nginx totiž probíhá jinak (díky tomu je také Nginx jeden z nejrychlejších serverů).
Synology naštěstí na tuto možno pamatovalo, takže připravili složku /usr/syno/etc/packages/phpMyAdmin/nginx/
, do které můžete umístit libovolné soubory a Nginx je pak načte a použije pro konfiguraci.
Zákaz přístupu z internetu
Pokud vám stačí jednoduše zakázat přístup k Nginx z internetu a povolit jen přístup z NAS a lokální sítě, stačí ve složce /usr/syno/etc/packages/phpMyAdmin/nginx/
vytvořit soubor (např. block_internet.conf
) a zapsat do něj:
allow 192.168.10.0/24; allow 127.0.0.1; deny all;
Tím povolíte přístup z adres 192.168.10.1
až 192.168.10.255
a také 127.0.0.1
(což asi nedává smysl, ale nic tím nezkazíte). První rozsah musíte zvolit podle toho, jaké IP adresy používáte v interní síti.
Pro rozsah 255 adres (např. 192.168.0.x
nebo 172.20.0.x
) použijte /24
, pro rozsah 65 tisíc adres (např. 172.20.x.x
nebo 10.10.x.x
) použijte /16
, pro největší síť pak 10.0.0.0/8
.
Řádek allow
můžete přidat vícekrát podle toho, kolik rozsahů potřebujete zahrnout. Samozřejmě pokud chcete povolit přístup z konkrétní veřejné IP adresy, můžete ji také přidat. Jen si dejte pozor, že IP adresy běžných připojení (např. ADSL, mobilní internet, UPC, atd.) se mohou v čase měnit a museli byste pravidelně konfiguraci měnit vždy na aktuální adresu.
Nastavení hesla
Pokud chcete mít možnost přístupu z internetu, ale nevěříte login stránce PhpMyAdmin (nebo svému heslo k databázi), můžete si nastavit heslo na úrovni Nginx serveru. Ten pak bude heslo požadovat před jakýmkoliv požadavkem na webovou stránku.
Nejprve si budete muset připravit soubor, do kterého uložíte heslo (nebo hesla) pro přístup. Doporučil bych ho uložit do složky www
, ve které jsou uloženy soubory Web Station a PhpMyAdmin. Složka je umístěna ve složce podle toho, na který disk jste nainstalovali PhpMyAdmin, já budu předpokládat Volume 1. Pozor taky na to, že na některých verzích DSM se může jméno složky lišit, např. web
místo www
.
Přihlašte se na NAS přes SSH nebo Telnet a zadejte příkaz:
> echo phpmyadmin: > /volume1/www/.htpasswd
Tím jste v příslušné složce připravili soubor pro ukládání hesel a zapsali do něho jméno prvního uživatele (jménem phpmyadmin
– můžete změnit na něco bezpečnějšího). Na jménu souboru celkem nezáleží, ale měl by začínat tečkou, protože takové soubory jsou na Linuxu skryté pro běžné uživatele.
Následně musíte tomuto uživateli nastavit heslo. To můžete udělat příkazem OpenSSL
, který je na Synology (na rozdíl od běžně používaného passwd
) dostupný:
> openssl passwd -1 -salt heslo1 heslo2 >> /volume1/www/.htpasswd
V příkazu je heslo2
to, co budete zadávat při přihlášení do Nginx, takže by to mělo být hodně bezpečné (to znamená hlavně dlouhé, nemusí být ani nijak složité, např. „Potřebuju se tam rychle dostat!„). Naopak heslo1
nebudete již potřebovat a použije se pouze pro zakódování druhého hesla (tzv. salt), takže může být relativně krátké (např. „phpMyAdmin„).
Nyní máte v souboru zapsáno jméno uživatele a jeho heslo, ale soubor nemá správný formát. Zadejte tedy příkaz:
vim /volume1/www/.htpasswd
V editoru stiskněte I
(insert mode) a smažte odřádkování tak, aby jméno i heslo (tedy jeho hash) byly na jedné řádce bez mezer. Pak stiskněte ESC
, napište dvojtečku “ :
“ a zapište “ wq
“ (Write and Quit). Nakonec stiskem Enter
soubor uložte.
Pro přidání dalších uživatelů postupujte stejně, ale v prvním příkazu použijte dvě šipky “ >> /volume1/www/.htpasswd
„.
Teď musíte soubor s hesly použít.
Ve složce /usr/syno/etc/packages/phpMyAdmin/nginx/
vytvořte soubor (např. password.conf) a zapsat do něj:
auth_basic "Administrator Login"; auth_basic_user_file /volume1/www/.htpasswd;
Pak celý NAS restartujte a vyzkoušejte.