Nagy fába vágom a fejszémet, megpróbálom bemutatni, hogyan tehetjük a meglévő rendszerünket biztonságosabbá. Hazánkban a legtöbbet használt open source okos otthon megoldás a Home Assistant (ez derült ki az előző blog postomból), így ezt installálom egy debian 11 operációs rendszerre, majd ezen keresztül megnézzük, mit kell módosítanunk a default telepítésen a biztonság növelése érdekében. Ehhez hozzátartozik a routerünk konfigurálása is, aminek a bemutatása szinte lehetetlen, mert ahány gyártó, annyi menüstruktúra, de a fő szabályok általánosságban alkalmazandók.
Először is szükségünk van egy operációs rendszerre, amin majd a HomeAssistant-ot futtatni szeretnénk. A kutatásomból az látszott, hogy debian és ubuntu rendszereken futtatjuk leggyakrabban, feltételezem azért, mert így egyéb felhasználása is lehetséges a rendszerünknek, így a folyamatot egy debian 11 telepítésével kezdem. Sokszor hallom, hogy a default telepítés elegendő, de ez egy operációs rendszernél nem tudom mennyire igaz, hisz már a lemezek particionálásánál is választanunk kell. Az lvm jó választás, de ahhoz már érteni kell a beállításához, hogy a későbbiekben szükség esetén növelni tudjuk a méreteket (de ez lenne a helyes választás). Aztán jön a következő választásunk, hogy minden egy partícióra kerüljön, vagy legyen külön a /home, /var és /log partíciónk (szintén ez a jó választás). A külön particiók azért jók, mert ha lvm-re tesszük ezeket és a későbbiekben látjuk, hogy fogy a hely az adott partíción, meg tudjuk növelni azt (ezért már előre gondolkodva nem osztjuk ki a telepítéskor az összes helyet a kötetünkből). A telepítéseknél fő szabályként elmondható, hogy csak a minimális/szükséges szolgáltatásokat telepítsük, mert ezzel kevesebb támadási felületet adunk a hackerek számára. Ha tudjuk, hogy nem kell grafikus felület, akkor ne is telepítsük azt. Távolról (ide tartozik a helyi hálózatunk is) viszont szeretnénk elérni a gépünket, így szükséges az ssh szolgáltatás telepítése. A jelszavak megadásánál figyeljünk oda, hogy kellő bonyolultságú (kisbetű, nagybetű, szám és legalább egy speciális karakter) és hosszúságú (minimum 12 karakter) legyen és ne a Jelszo.12345 -öt adjuk meg ;)
A sikeres telepítést követően már van egy alap beállításokkal rendelkező debian 11 operációs rendszerünk, ssh szolgáltatással a távoli elérés érdekében. Ha belépünk a frissen telepített leendő szerverünkre és megnézzük, hogy milyen portokat nyit meg (ezeket a portokat lehet távolról megszólítani), egyelőre ez csak két port lesz. Ehhez az alábbi parancsot adjuk ki, ami a nyitott tcp és udp portokat is listázza.
ss -lanptu
Az alap debian telepítésben nincs benne a sudo csomag, így azt utólag kell felrakjuk. Nekem linux alatt a kedvenc szerkesztőm az mcedit, így azt is installálni szoktam, de ez már a saját kényelmem miatt van, mások a nano-ra esküdnek és ne feledkezzünk meg a vi rajongókról sem.
apt install sudo mc
A sudo csomagra azért van szükségünk, mert a root usert nem használjuk. Egyszerű felhasználóként lépünk be a rendszerbe és a sudo-t felhasználva installálunk és módosítunk a fájlokon. Az alap debian 11-ben a root ssh hozzáférése is tiltva van, ami nagyon helyes, ne is akarjunk távolról root-ként belépni. Nem gondolom, hogy az a plusz egy parancs kiadása helyett érdemesebb egy jó nagy támadási felületet megnyitni a rendszerünk felé. Ha fenn van a sudo csomag, akkor a telepítés során létrehozott felhasználónkat adjuk hozzá a sudo csoporthoz. Ha ezt már ssh kapcsolaton keresztül végezzük, akkor az alábbi parancsokat kell kiadjuk:
# a belépett felhasználóról lépjünk át a root userre
su - root
# adjuk hozzá a felhasználónkat a sudo csoporthoz
usermod -a -G sudo a_mi_felhasználónk
# lépjünk ki a root sessionből, majd a rendszerből is és ssh-zzunk be újra, mert csak ezt követően fog működni a sudo parancs a felhasználónkkal.
De melyik HA verziót telepítsük? Van ugye a Core és a Supervised. A másikat szoktam, mert a Core eléggé alap, szeretem, ha minden lehetőségem megvan, amit egy rendszer biztosíthat. Most mind a két verziót megcsinálom. Akit inkább a Supervised telepítése érdekel, ezt a részt át is ugorhatja.
Home Assistant Core telepítése
Következő lépésként jöjjön a Home Assistant Core telepítése a gyári leírás szerint. A parancsokat azért ideteszem és a képernyőképeket is a folyamatról.
sudo apt update
sudo apt upgrade
sudo apt install -y python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5 libturbojpeg0 tzdata
sudo useradd -rm homeassistant
sudo mkdir /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant
sudo -u homeassistant -H -s
cd /srv/homeassistant
python3.9 -m venv .
source bin/activate
python3 -m pip install wheel
pip3 install homeassistant
hass
Home Assistant Supervised telepítése
Többször olvasom, hogy felraktam a HA-t, de nincs meg a Supervisor menüpont. Igen, ez akkor fordul elő, ha a core verziót telepítjük, nem pedig a Supervised-et, de kezdjünk is bele, melyhez először a függőségeit kell installálnunk.
Először a docker-ce csomagjait telepítsük:
sudo apt install apt-transport-https ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Végül ellenőrizzük, hogy a docker szolgáltatásunk elindult -e:
sudo systemctl status docker
Hiányzik még a függőségek közül a network manager és a jq csomag, így hát telepítsük azokat is:
sudo apt install network-manager
sudo apt install jq
Ha megvagyunk minden előfeltétellel, következhet maga a Home Assistant Supervised telepítése a gyári leírás alapján.
sudo -s
curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh
bash installer.sh --machine generic-x86-64
Innentől a Core és a Supervised verzióban is ugyanazt kell beállítanunk a rendszer első üzembe helyezésekor.
Ha megvagyunk mindennel, újra szoktam indítani a teljes rendszert, hogy lássam, minden szolgáltatás magától elindul -e. Ha igen, nyissuk meg böngészőben a Home Assistant szerverünk 8123-as portján elérhető szolgáltatását és végezzük el az alap beállításokat.
Weboldal első indítás, alap beállítások megadása
Itt ismét figyeljünk a jelszó bonyolultságára, mert az egyszerű és könnyen kitalálható jelszavakkal fognak a támadóink először bepróbálkozni. Kerüljük az admin, root, administrator felhasználóneveket is, nevesítsünk mindenkit, aki a rendszerünkbe belép.
Következő ablakban nevezhetjük el a rendszerünket. Ide azért ne adjunk túl egyértelmű nevet. De miért is mondom ezt? Később rávilágítok erre is.
A következő ablakban kell beállítani, milyen anonim adatok átadásával segítjük a fejlesztést. Egy kicsit öncélú, de nem adok át adatot a rendszerem védelmében. Sokszor olvassuk, hogy megtörik a céges rendszereket és ellopnak belőle adatokat. Akár mennyire is anonymizált az adat, lehet mégis csak vissza tudják követni, kitől/honnan származik.
Utolsó lépésként már most felrakhatunk integrációs szolgáltatásokat, amit most nem teszek meg, mert ez egy demó célú telepítés, úgyhogy fejezzük is be.
A core vagy a supervised rendszer immáron működőképes, csak egy menüpont a látszólagos különbség, de mi látszana most belőle, ha így kiraknánk az internetre, hogy távolról is elérjük?
A shodan.io találati listájában az alábbi adatok jelennek meg. Írtam a rendszer elnevezésénél, hogy ne legyünk túl bőbeszédűek, mert a Location Name részen ez is megjelenik. (Nem a most telepített verzióról készült a kép, hisz azt még nem is raktuk ki az internetre.)
HACS telepítése
Hogy teljes legyen a Home Assistant telepítésünk, utolsó lépésben élesszük fel hozzá a HACS modult. Lépjünk be a gépünkbe ssh kapcsolaton (windows alól használhatjuk a putty programot), váltsunk ár root userre és installáljuk a gyári leírás alapján. Ide is csak a parancsokat teszem fel és a képernyőképeket.
wget -O - https://get.hacs.xyz | bash -
Ha sikeresen installáltuk, indítsuk újra a gépet, majd folytassuk a HA weblapjának megnyitásával. A Konfiguráció menüpont alatt tudjuk felvenni a HACS-ot, mint integrációt.
Az integráció hozzáadása gomb megnyomását követően a kereső mezőben írjuk be a HACS szót, majd a találati listában kattintsunk rá a telepítéshez.
Pár kérdést kapunk a folyamat során, melyeket tudomásul kell vennünk.
Ha továbbjutottunk, létre kell hozzunk egy github fiókot, mert a HACS integrációkat a github-ról tölti le a rendszer.
Ehhez egy új böngésző ablakban nyissuk meg a github.com-ot és regisztráljunk magunknak egy új fiókot.
![]() |
![]() |
![]() |
A sikeres regisztrációt követően lépjünk be a github fiókunkba, majd a HA HACS oldalán megjelenő linkre kattintsunk.
A HACS által adott kódot adjuk meg ezen az oldalon.
Szépen vezet az installációs folyamat, csak várnunk kell kicsit a visszajelzésekre.
A github-on a sikeres device regisztráció folyamat vége:
Ekkor a HA oldal is továbbjut a végéig, ahol területhez rendelhetjük az integrációnkat.
Végezetül az integrációk között és a bal oldali menüben is megjelenik a HACS integráció.
Ha most a gépünkben megnézzük, milyen portok vannak nyitva (tcp és udp), az alábbiakat látjuk (a rendszeren belül kiadva a parancsot). Ebből a listából két portról van tudomásunk, amit szerettünk volna, hogy elérhető legyen:
- 22 - ssh (ezen érjük el távolról a gépet)
- 8123 - HomeAssistan web port
Ha most védelem nélkül kitennénk a rendszerünket a nyílt internetre, akkor a többi port is elérhető.
De mi látható kívülről a gépünkből? Ehhez egy másik gépet használok, amin a Kali linux operációs rendszer fut. A portok ellenőrzéséhez az nmap nevű programcsomagot fogom használni.
nmap -p- -A -sV -sC -Pn --script=vuln 10.0.2.15 -oA ha-init-check -vvv
Ha a tcp portokat vizsgáljuk, látjuk távolról is a három nyitott portot, a szolgáltatást és a verzió információkat is.
Számunkra ezek ismert információk, de ha ezt a rendszert így kirakjuk a netre, akkor mások is ezen információkat egy egyszerű parancs kiadásával megismerhetik. A futtatott szoftververziók tudatában sérülékenységet kereshetnek a rendszerünk támadásához.
Egy ismert támadási forma, amikor közbeékelődünk a kommunikációba és lehallgatjuk azt. Ha nem titkosított, akkor könnyen szerezhetünk szenzitív információkat, mint felhasználónév és jelszó. Ha a most elindított rendszerünkkel folytatott kommunikációba belehallgatunk, akkor a belépés közben az adott információkat lehet megszerezni:
Eljutottunk odáig, hogy van egy működő rendszerünk, ami biztonságosnak tűnik, van bejelentkezési képernyő is. Funkcionálisan teljes értékű és sokan ebben az állapotában már kiteszik az internetre, de lássuk be, hogy biztonság tekintetében a beállításokkal itt még nem végeztünk. A szoftver verziók könnyen kinyerhetők távolról, egy közbeékelődéses támadással a jelszavunk is megszerezhető, mivel a HA alapból nem titkosított protokollt használ. A következő részben az eddig telepített rendszerünket fogjuk bizotnságosabbá tenni és megpróbálom bemutatni a kedves olvasónak, hogy milyen kockázatokat vállal, ha helytelen beállítások mellet internet irányából elérhetővé teszi a rendszerét.