A modern informatikai rendszerekben a távoli hozzáférés elengedhetetlen. Legyen szó szerverek adminisztrációjáról, szoftverfejlesztésről vagy akár otthoni fájlmegosztásról, a távoli elérés lehetősége alapvető. Azonban a puszta funkcionalitás nem elegendő: a biztonság kritikus szempont. A nyílt hálózaton keresztül történő kommunikáció során a titkosítatlan adatok könnyen lehallgathatók, módosíthatók, ami súlyos biztonsági kockázatot jelent.
Az SSH (Secure Shell) protokoll kulcsfontosságú szerepet játszik a biztonságos távoli hozzáférés megvalósításában, mivel titkosított csatornát biztosít a kliens és a szerver között.
Az SSH titkosítja a kommunikációt, megakadályozva, hogy harmadik fél hozzáférjen az érzékeny adatokhoz, például jelszavakhoz, parancsokhoz és fájlokhoz. Ezen kívül az SSH hitelesítési mechanizmusokat is kínál, amelyek biztosítják, hogy csak az arra jogosult felhasználók férhessenek hozzá a rendszerhez. A jelszavas hitelesítés mellett az SSH támogatja a kulcspáros hitelesítést is, amely sokkal biztonságosabb módszer a jelszó alapú bejelentkezésnél.
Az SSH használata nem korlátozódik a parancssori felületre. Lehetővé teszi a biztonságos fájlátvitelt (scp, sftp) és a port továbbítást (port forwarding), ami számos egyéb alkalmazási területet nyit meg. Például, biztonságosan hozzáférhetünk egy adatbázishoz, vagy titkosított alagutat hozhatunk létre két hálózat között.
Az SSH protokoll alapjai: Működési elv és cél
Az SSH, vagyis a Secure Shell protokoll alapvető célja, hogy biztonságos csatornát biztosítson két számítógép közötti kommunikációhoz egy nem biztonságos hálózaton keresztül. Ez azt jelenti, hogy az adatokat titkosítva küldi és fogadja, megakadályozva, hogy illetéktelen személyek lehallgassák vagy módosítsák azokat.
Működési elve a kliens-szerver architektúrára épül. A kliens (például a felhasználó számítógépe) kezdeményezi a kapcsolatot a szerverrel (a távoli géppel, amelyhez hozzáférést szeretne). Az SSH protokoll ezután egy biztonságos csatornát hoz létre a két gép között, amelyen keresztül a felhasználó parancsokat küldhet, fájlokat másolhat és egyéb műveleteket végezhet.
A biztonság kulcsa a kriptográfia. Az SSH különböző titkosítási algoritmusokat használ, mint például az AES, a Blowfish és a ChaCha20, a kommunikáció védelmére. Emellett kulcscsere mechanizmusokat is alkalmaz, mint a Diffie-Hellman, amelyek lehetővé teszik, hogy a kliens és a szerver megállapodjanak egy közös titkos kulcsban a kommunikáció megkezdése előtt, anélkül, hogy ezt a kulcsot a hálózaton keresztül küldenék el.
Az SSH protokoll alapvető célja tehát, hogy biztonságos távoli hozzáférést biztosítson a számítógépekhez, lehetővé téve a felhasználók számára, hogy biztonságosan kezeljék a távoli rendszereket, mintha fizikailag a gép előtt ülnének.
Az SSH nem csupán egy egyszerű távoli bejelentkezési eszköz. Számos egyéb funkciót is kínál, mint például a portforwarding (amely lehetővé teszi, hogy biztonságosan továbbítsunk más alkalmazások forgalmát is), a fájlátvitel (SCP, SFTP), és a VPN-szerű alagútak létrehozása.
Az SSH protokoll verziói: SSH-1 és SSH-2 összehasonlítása
Az SSH protokollnak két fő verziója létezik: SSH-1 és SSH-2. Bár az SSH-1 volt az első, ma már szinte teljesen elavult, és nem ajánlott a használata jelentős biztonsági hiányosságai miatt.
Az SSH-1 fő problémája a kriptográfiai algoritmusok gyengeségében rejlik. Például, a CRC-32 integritás ellenőrzése nem nyújt elegendő védelmet a támadásokkal szemben, és sebezhető a man-in-the-middle (MITM) támadásokra. Ezenkívül az SSH-1 támogatja a régi és gyenge kriptográfiai algoritmusokat, mint például a DES, amelyek könnyen feltörhetőek.
Az SSH-2 sokkal biztonságosabb alternatíva. Számos fontos fejlesztést tartalmaz, amelyek kiküszöbölik az SSH-1 gyengeségeit. Támogatja az erősebb kriptográfiai algoritmusokat, mint például az AES, a Blowfish és a 3DES, és használja a biztonságosabb hash algoritmusokat, mint például az SHA-256.
Az SSH-2 protokoll architektúrája is modulárisabb, ami lehetővé teszi a jövőbeli algoritmusok könnyebb integrálását és a protokoll frissítését a legújabb biztonsági fenyegetésekkel szemben.
A legfontosabb különbség az SSH-1 és SSH-2 között a biztonság szintje. Az SSH-2 jelentősen erősebb kriptográfiát használ, és védelmet nyújt a támadások szélesebb köre ellen, ezért mindenképpen az SSH-2 használata javasolt.
A legtöbb modern SSH kliens és szerver alapértelmezés szerint az SSH-2-t használja, és az SSH-1 támogatása gyakran ki van kapcsolva. Ellenőrizze a konfigurációs fájlokat (pl. /etc/ssh/sshd_config
szerver oldalon), hogy az SSH-2 engedélyezve van-e, és az SSH-1 le van-e tiltva. Például, a Protocol 2
sor biztosítja az SSH-2 használatát.
Titkosítási algoritmusok az SSH-ban: Szimmetrikus, aszimmetrikus titkosítás és hashesek
Az SSH biztonságának alapját a különböző titkosítási algoritmusok képezik. Ezek biztosítják, hogy a kliens és a szerver közötti kommunikáció titkosított, és így védett legyen a lehallgatástól. Három fő típust használ az SSH: szimmetrikus titkosítást, aszimmetrikus titkosítást és hash függvényeket.
A szimmetrikus titkosítás során mind a kliens, mind a szerver ugyanazt a titkos kulcsot használja az adatok titkosítására és visszafejtésére. Ilyen algoritmusok például az AES (Advanced Encryption Standard) és a ChaCha20. Az SSH kezdeti fázisában, a kulcscsere után jön létre egy közös titkos kulcs, amivel a további kommunikáció zajlik. A sebességük miatt ezek az algoritmusok alkalmasak nagy mennyiségű adat titkosítására.
Az aszimmetrikus titkosítás (vagy nyilvános kulcsú titkosítás) két kulcspárt használ: egy nyilvános kulcsot és egy privát kulcsot. A nyilvános kulcs szabadon terjeszthető, míg a privát kulcsot szigorúan titokban kell tartani. Például, ha a szerver nyilvános kulcsával titkosítunk egy üzenetet, azt csak a szerver privát kulcsával lehet visszafejteni. Az SSH kulcscseréjéhez gyakran használt algoritmusok például az RSA, a DSA és az ECDSA. Ezek az algoritmusok lassabbak a szimmetrikus titkosításnál, de kulcsfontosságúak a biztonságos kulcscsere megvalósításához.
A hash függvények egyirányú függvények, amelyek bármilyen méretű bemenetet egy fix méretű hash értékké alakítanak. Fontos tulajdonságuk, hogy gyakorlatilag lehetetlen a hash értékből az eredeti bemenetet visszaállítani, és nagyon valószínűtlen, hogy két különböző bemenet ugyanazt a hash értéket eredményezze (ütközés). Az SSH-ban a hash függvényeket az adatok integritásának ellenőrzésére használják. Például az SHA-256 és az SHA-512 algoritmusokat használják gyakran az üzenetek hitelesítésére.
Az SSH biztonsága nagymértékben függ a használt algoritmusok erősségétől és a kulcscsere protokollok helyes implementációjától. Elavult vagy gyenge algoritmusok használata jelentősen csökkentheti a rendszer biztonságát.
A modern SSH implementációk folyamatosan fejlesztik az algoritmusok támogatását, hogy a legújabb biztonsági követelményeknek megfeleljenek. A konfiguráció során érdemes a legbiztonságosabb, elérhető algoritmusokat preferálni.
SSH kulcscsere: A Diffie-Hellman és ECDH algoritmusok
Az SSH kulcscsere során a kliens és a szerver biztonságosan egyeznek meg egy titkos kulcsban, amelyet a kommunikáció titkosítására használnak. Ebben a folyamatban kulcsszerepet játszanak a Diffie-Hellman (DH) és az Elliptikus Görbe Diffie-Hellman (ECDH) algoritmusok.
A Diffie-Hellman egy kulcscsere protokoll, amely lehetővé teszi két fél számára, hogy egy nem biztonságos csatornán keresztül közösen létrehozzanak egy titkos kulcsot anélkül, hogy azt ténylegesen kicserélnék. A DH algoritmus egy nyilvános moduluson (p) és egy generátoron (g) alapul. Mindkét fél generál egy véletlenszerű titkos számot (a és b), majd kiszámítják a nyilvános kulcsaikat (ga mod p és gb mod p), amelyeket kicserélnek. A kapott értékek és a saját titkos számuk segítségével mindketten ugyanarra a titkos kulcsra jutnak.
Az ECDH a Diffie-Hellman algoritmus elliptikus görbékre adaptált változata. Az elliptikus görbék használata lehetővé teszi rövidebb kulcsok használatát ugyanolyan biztonsági szint mellett, mint a hagyományos DH esetében. Ez különösen fontos a mobil eszközökön és a korlátozott erőforrásokkal rendelkező rendszereken.
A Diffie-Hellman és ECDH algoritmusok nélkülözhetetlenek az SSH biztonságos működéséhez, mivel ezek teszik lehetővé a titkosított kommunikációt a kliens és a szerver között anélkül, hogy a titkos kulcsot a hálózaton keresztül kellene küldeni.
Az SSH kliens és szerver a kulcscsere során különböző DH és ECDH variánsokat kínálhatnak fel. A kliens és a szerver a legbiztonságosabb és leggyorsabb közös algoritmust választják ki. A használt algoritmusok erőssége befolyásolja a kapcsolat biztonságát, ezért fontos a naprakész SSH konfiguráció és a gyenge algoritmusok letiltása.
Az SSH kliens és szerver felépítése
Az SSH működésének alapja egy kliens-szerver architektúra. Két fő komponens alkotja: az SSH kliens és az SSH szerver. A kliens a felhasználó gépén fut, és a távoli szerverhez való kapcsolódást kezdeményezi. A szerver pedig a távoli gépen fut, és fogadja a kliens kapcsolódási kísérleteit, majd hitelesíti a felhasználót.
A kliens oldalon az SSH kliens szoftver (pl. OpenSSH kliens) felelős a kapcsolat létrehozásáért, a titkosításért és a parancsok elküldéséért a szerver felé. A kliens azonosítja a szervert, és titkosított csatornát hoz létre. Ez a csatorna biztosítja, hogy a kommunikációt ne lehessen lehallgatni vagy manipulálni.
A szerver oldalon az SSH szerver szoftver (pl. OpenSSH szerver) figyeli a bejövő kapcsolódási kéréseket egy meghatározott porton (alapértelmezetten a 22-es porton). Miután a szerver fogadott egy kapcsolódási kérést, megpróbálja hitelesíteni a felhasználót. A hitelesítés történhet jelszóval, nyilvános kulcsú hitelesítéssel (ami sokkal biztonságosabb), vagy egyéb módszerekkel.
A biztonság szempontjából kulcsfontosságú, hogy az SSH kliens és szerver közötti kommunikáció teljes mértékben titkosított legyen. Ez megakadályozza, hogy illetéktelenek hozzáférjenek a továbbított adatokhoz, beleértve a felhasználóneveket, jelszavakat és a végrehajtott parancsokat.
Az SSH kliens és szerver együttes működése biztosítja a biztonságos távoli hozzáférést. A kliens kezdeményezi a kapcsolatot, titkosítja a kommunikációt, a szerver pedig fogadja a kapcsolatot, hitelesíti a felhasználót és végrehajtja a parancsokat. Mindkét komponens helyes konfigurálása elengedhetetlen a rendszer biztonságának megőrzéséhez.
Az SSH kapcsolat felépítése: A háromfázisú kézfogás
Az SSH kapcsolat kiépítése egy biztonságos, háromfázisú kézfogással kezdődik, melynek célja a kliens és a szerver közötti titkosított kommunikáció megalapozása. Ez a folyamat biztosítja, hogy illetéktelenek ne hallgathassák le a jelszavakat és egyéb érzékeny adatokat a kapcsolat létesítésekor.
Az első fázisban a kliens felveszi a kapcsolatot a szerverrel. A kliens elküldi a szervernek, hogy mely titkosítási algoritmusokat (pl. titkosítás, tömörítés, kulcscsere) támogatja. Ez egyfajta „bemutatkozás”, ahol a kliens elmondja, milyen „nyelveken” tud beszélni.
A második fázisban a szerver kiválaszt egy, a kliens által is támogatott algoritmust mindegyik kategóriából (titkosítás, tömörítés, kulcscsere). A szerver emellett elküldi a kliensnek a saját nyilvános kulcsát is. Ez a kulcs fogja lehetővé tenni a kliens számára a szerver azonosságának ellenőrzését.
A harmadik, és talán legfontosabb fázis a kulcscsere. Ebben a lépésben a kliens és a szerver a kiválasztott kulcscsere algoritmus segítségével egy közös, titkos kulcsot hoznak létre. Ez a kulcs soha nem kerül átvitelre a hálózaton, hanem a felek a nyilvánosan cserélt adatokból számítják ki. A jövőben ez a közös titkos kulcs fogja titkosítani a teljes kommunikációt.
A kulcscsere után a kliens hitelesítheti magát (pl. jelszóval, nyilvános kulccsal). Ezt az eljárást már a létrehozott titkosított csatornán keresztül teszi, így a jelszó nem kerül nyilvánosságra. Fontos megjegyezni, hogy a kulcscsere során használt algoritmusok erőssége kritikus fontosságú a kapcsolat biztonsága szempontjából. Gyengébb algoritmusok sebezhetőek lehetnek a támadásokkal szemben.
Felhasználói hitelesítés SSH-n: Jelszavas és kulcsalapú hitelesítés
Az SSH kapcsolatok biztonságának alapja a felhasználói hitelesítés. Két fő módszer létezik: a jelszavas és a kulcsalapú hitelesítés. A jelszavas hitelesítés a legegyszerűbb, de egyben a legkevésbé biztonságos is. A felhasználó beírja a felhasználónevét és a jelszavát, amit a szerver ellenőriz. Bár könnyen beállítható, sebezhető a brute-force támadásokkal szemben, ahol a támadó automatikusan próbálgat jelszavakat.
Ezzel szemben a kulcsalapú hitelesítés sokkal biztonságosabb. Ebben az esetben egy nyilvános és egy privát kulcspárt generálunk. A nyilvános kulcsot feltöltjük a szerverre a ~/.ssh/authorized_keys
fájlba, míg a privát kulcsot a kliens oldalon tároljuk. Amikor a felhasználó csatlakozik, a szerver egy titkosított üzenetet küld a kliensnek, amit a kliens a privát kulcsával dekódol, így bizonyítva a személyazonosságát. A jelszó helyett tehát a kulcspárt használjuk.
A kulcsalapú hitelesítés előnyei:
- Magasabb biztonság: A kulcspárok sokkal nehezebben törhetők fel, mint a jelszavak.
- Automatizálás: Lehetővé teszi a szkriptek és automatizált feladatok futtatását jelszó megadása nélkül.
- Kényelem: Miután beállítottuk, nem kell minden alkalommal jelszót beírnunk.
A kulcsalapú hitelesítés beállítása a következő lépésekből áll:
- Kulcspár generálása a kliens gépen (például
ssh-keygen
paranccsal). - A nyilvános kulcs másolása a szerverre (például
ssh-copy-id
paranccsal). - A szerver konfigurálása, hogy engedélyezze a kulcsalapú hitelesítést (a
/etc/ssh/sshd_config
fájlban aPubkeyAuthentication yes
beállítással). - Opcionálisan: a jelszavas hitelesítés letiltása a
/etc/ssh/sshd_config
fájlban (PasswordAuthentication no
). Ez tovább növeli a biztonságot.
A kulcsalapú hitelesítés használata erősen ajánlott minden SSH kapcsolat esetében, mivel jelentősen csökkenti a biztonsági kockázatokat.
Fontos megjegyezni, hogy a privát kulcsot gondosan kell védeni, mert ha illetéktelen kezekbe kerül, bárki hozzáférhet a szerverhez a felhasználó nevében. Használhatunk jelszót is a privát kulcsunk védelmére (passphrase), ami egy extra biztonsági réteget ad hozzá.
SSH kulcspárok generálása: A `ssh-keygen` használata
Az SSH kulcspárok generálása a ssh-keygen
parancs segítségével történik. Ez a parancs létrehoz egy titkos kulcsot és egy nyilvános kulcsot. A titkos kulcsot gondosan kell őrizni, soha nem szabad megosztani senkivel! A nyilvános kulcsot viszont elhelyezhetjük a távoli szerveren, ahová szeretnénk jelszó nélkül bejelentkezni.
A legegyszerűbb használat a ssh-keygen
parancs futtatása a terminálban. Alapértelmezés szerint az SSH kulcsok az ~/.ssh
könyvtárba kerülnek, id_rsa
(titkos kulcs) és id_rsa.pub
(nyilvános kulcs) néven.
A parancs futtatása közben kérdezni fog, hogy hova szeretnénk menteni a kulcsokat, és beállíthatunk egy jelszót (passphrase) a titkos kulcshoz. A jelszó használata extra biztonsági réteget ad, mivel még a titkos kulcs ellopása esetén is szükség lesz a jelszóra a használathoz.
Azonban, ha gyakran használjuk az SSH-t, a jelszó nélküli kulcsok kényelmesebbek lehetnek, de ilyenkor fokozottan ügyeljünk a titkos kulcs védelmére!
A ssh-keygen
parancs különböző algoritmusokat is támogat, mint például az RSA, DSA, ECDSA és Ed25519. Az Ed25519 kulcsok általában rövidebbek és biztonságosabbak, ezért ajánlott ezt a típust használni, ha a rendszerünk támogatja. Ezt a ssh-keygen -t ed25519
paranccsal hozhatjuk létre.
SSH kulcsok biztonságos tárolása és kezelése
Az SSH kulcsok biztonságos tárolása kritikus fontosságú a rendszereink védelme szempontjából. Ha egy támadó hozzáfér a privát kulcsunkhoz, azzal gyakorlatilag a jelszavunkat adtuk át neki, lehetővé téve a távoli szervereinkhez való korlátlan hozzáférést.
A legfontosabb lépés a privát kulcsunk titkosítása. A kulcs generálásakor használjunk erős jelszót (passphrase), ami megvédi a kulcsot abban az esetben, ha az illetéktelen kezekbe kerülne. Ne felejtsük el, hogy ez a jelszó nem ugyanaz, mint a felhasználói jelszavunk, és sokkal erősebbnek kell lennie!
A privát kulcsot tároljuk a ~/.ssh
könyvtárban, és győződjünk meg róla, hogy a megfelelő jogosultságokkal rendelkezik. A chmod 700 ~/.ssh
és chmod 600 ~/.ssh/id_rsa
parancsokkal biztosíthatjuk, hogy csak a tulajdonos férhessen hozzá. Soha ne osszuk meg a privát kulcsunkat senkivel!
A privát kulcs biztonságos tárolása és a hozzá kapcsolódó erős jelszó (passphrase) használata a legfontosabb védelmi vonal a távoli hozzáférések során.
Fontoljuk meg SSH agent használatát a kulcsok kezelésére. Az agent tárolja a dekódolt privát kulcsot a memóriában, így nem kell minden egyes alkalommal megadnunk a jelszót. Az ssh-add
paranccsal adhatjuk hozzá a kulcsot az agenthez. Ügyeljünk arra, hogy az agentet is megfelelően védjük, például képernyőzár használatával.
A nyilvános kulcsokat (~/.ssh/authorized_keys
) is érdemes rendszeresen felülvizsgálni. Távolítsuk el azokat a kulcsokat, amelyek már nincsenek használatban, vagy amelyekhez a hozzáférés már nem szükséges. Az authorized_keys
fájlban korlátozásokat is beállíthatunk az egyes kulcsokhoz, például csak bizonyos parancsok futtatását engedélyezhetjük.
A `authorized_keys` fájl szerepe és formátuma
Az authorized_keys
fájl a kulcsfontosságú elem az SSH kulcs alapú hitelesítésében. Ez a fájl tartalmazza azon nyilvános kulcsok listáját, amelyekkel a felhasználó bejelentkezhet a szerverre jelszó megadása nélkül. Minden sor egy nyilvános kulcsot reprezentál, és a fájl a felhasználó .ssh
könyvtárában található (pl. /home/felhasználónév/.ssh/authorized_keys
).
A sorok formátuma általában a következő: ssh-rsa AAAAB3Nz... kommentár
. Az elemek jelentése:
ssh-rsa
: A kulcs típusa (pl. ssh-rsa, ssh-ed25519).AAAAB3Nz...
: A nyilvános kulcs bináris reprezentációja, Base64 kódolással.kommentár
: Opcionális kommentár, ami segíthet a kulcs azonosításában (pl. a gép neve, ahonnan a kulcs származik).
A authorized_keys
fájlban található kulcsok engedélyezik a hozzáférést a szerverhez. Ha egy privát kulcs párosodik egy authorized_keys
fájlban lévő nyilvános kulccsal, akkor a felhasználó be tud jelentkezni a szerverre jelszó nélkül.
Fontos, hogy a .ssh
könyvtár és az authorized_keys
fájl megfelelő jogosultságokkal rendelkezzenek (általában 700
a könyvtárra és 600
a fájlra), hogy az SSH biztonságosan működjön. Helytelen jogosultságok esetén az SSH megtagadhatja a kulcs alapú bejelentkezést.
SSH konfigurációs fájlok: `ssh_config` (kliens) és `sshd_config` (szerver)
Az SSH kliens és szerver működésének finomhangolása a konfigurációs fájlokon keresztül történik. Két fő konfigurációs fájl létezik: az ssh_config
a kliens oldali beállításokért felelős, míg az sshd_config
a szerver oldali beállításokat tartalmazza.
Az ssh_config
fájlt a kliens használja, amikor SSH kapcsolódást kezdeményez. Ezzel állíthatjuk be például a használandó felhasználónevet, a preferred autentikációs módszert, vagy akár a használandó portot is egy adott szerverhez. Ez a fájl jellemzően a ~/.ssh/config
helyen található a felhasználó saját könyvtárában, de létezik egy globális beállításokat tartalmazó fájl is a /etc/ssh/ssh_config
helyen.
Az sshd_config
fájl a szerver oldalon található, és meghatározza, hogy a szerver hogyan fogadja a bejövő SSH kapcsolatokat. Ebben a fájlban engedélyezhetjük vagy tilthatjuk a jelszavas autentikációt, megváltoztathatjuk az SSH szerver alapértelmezett portját (22), beállíthatjuk a szerver által elfogadott titkosítási algoritmusokat, és szabályozhatjuk a bejelentkezési kísérletek számát. A szerver konfigurációs fájlja általában a /etc/ssh/sshd_config
helyen található.
A sshd_config
helyes konfigurálása kritikus fontosságú a szerver biztonsága szempontjából. A nem megfelelő beállítások könnyen sebezhetővé tehetik a rendszert a támadásokkal szemben.
Mindkét konfigurációs fájl soronként értelmezi a beállításokat, és a sor elején található kulcsszó határozza meg a beállítás típusát. A #
karakterrel kezdődő sorok megjegyzések, melyeket a program figyelmen kívül hagy.
A konfigurációs fájlok módosítása után mindig újra kell indítani az SSH szervert (sudo systemctl restart sshd
) vagy klienst (ha releváns) ahhoz, hogy a változtatások érvénybe lépjenek.
Gyakori SSH konfigurációs beállítások: Port, ListenAddress, Protocol, PermitRootLogin
Az SSH szerver (általában /etc/ssh/sshd_config
fájlban) konfigurálásakor néhány beállítás alapvetően befolyásolja a biztonságot és a hozzáférhetőséget. Nézzük a leggyakoribbakat:
- Port: Alapértelmezésben az SSH a 22-es porton hallgat. A port megváltoztatása (pl. egy kevésbé ismert portra) csökkentheti az automatikus támadások, port szkennelések esélyét. A
Port 2222
sor átállítja a portot. Fontos: ne felejtsük el a tűzfalat is ennek megfelelően konfigurálni! - ListenAddress: Ez a beállítás határozza meg, hogy az SSH melyik IP címen hallgasson. Hasznos lehet, ha a szervernek több IP címe van, és csak egy adott címen szeretnénk fogadni a kapcsolatokat. Például a
ListenAddress 192.168.1.10
csak a 192.168.1.10 IP címen engedélyezi a bejövő SSH kapcsolatokat. - Protocol: Meghatározza az SSH protokoll verzióját. A
Protocol 2
a biztonságosabb, és erősen ajánlott csak ezt használni. A régebbiProtocol 1
verzió sebezhető, ezért kerülni kell a használatát. - PermitRootLogin: Ez a beállítás szabályozza, hogy a root felhasználó közvetlenül bejelentkezhet-e SSH-n keresztül.
A PermitRootLogin no
beállítás a legfontosabb lépés a szerver biztonságának növelésében, mivel megakadályozza a root felhasználó közvetlen belépését. Ehelyett a felhasználók először egy normál fiókkal jelentkeznek be, majd sudo
segítségével szereznek root jogosultságokat.
A PermitRootLogin
beállításnak többféle értéke lehet:
yes
: A root felhasználó bejelentkezhet. (Nem ajánlott!)no
: A root felhasználó nem jelentkezhet be.prohibit-password
: A root felhasználó bejelentkezhet kulcs alapú autentikációval, de jelszóval nem.forced-commands-only
: A root felhasználó csak parancsokat futtathat, de nem kap interaktív shellt.
Ezeknek a beállításoknak a helyes konfigurálása elengedhetetlen a biztonságos SSH hozzáféréshez. Ne felejtsük el az SSH szerver újraindítását a konfigurációs fájl módosítása után (pl. sudo systemctl restart sshd
).
SSH port forwarding: Lokális, távoli és dinamikus port továbbítás
Az SSH port forwarding egy rendkívül hasznos technika, amellyel biztonságosan irányíthatunk át hálózati forgalmat SSH alagúton keresztül. Ez különösen akkor jön jól, ha olyan szolgáltatáshoz kell hozzáférnünk, amely közvetlenül nem érhető el, vagy ha titkosítani szeretnénk a kommunikációt.
Három fő típusa létezik a port forwardingnak:
- Lokális port továbbítás: Ezzel a módszerrel a helyi géped egy portját irányítod át az SSH szerveren keresztül egy távoli gép egy adott portjára. A parancs általában valahogy így néz ki:
ssh -L helyi_port:távoli_gép:távoli_port felhasználónév@ssh_szerver
. Például, ha a helyi géped 8080-as portját át akarod irányítani a távoli szerver 80-as portjára, akkor assh -L 8080:localhost:80 felhasználó@szerver
parancsot használhatod. - Távoli port továbbítás: Ebben az esetben a távoli SSH szerver egy portját irányítod át a helyi géped egy portjára. Ezt gyakran használják arra, hogy tűzfal mögötti szolgáltatásokat elérhetővé tegyenek. A parancs:
ssh -R távoli_port:helyi_gép:helyi_port felhasználónév@ssh_szerver
. - Dinamikus port továbbítás: Ez egy helyi SOCKS proxy-t hoz létre az SSH szerveren keresztül. Ezzel az összes alkalmazásod forgalmát átirányíthatod az SSH alagúton keresztül. Hasznos, ha több különböző portot is használnod kell, vagy ha nem tudod előre, mely portokra lesz szükséged. A parancs:
ssh -D helyi_port felhasználónév@ssh_szerver
. Ezután a böngésződben vagy más alkalmazásban be kell állítanod a SOCKS proxy-t (általában a localhost és a megadott helyi port).
A port forwarding lényege, hogy egy biztonságos csatornát hozzunk létre az SSH segítségével, amin keresztül más hálózati szolgáltatásokat használhatunk biztonságosan.
A port forwarding beállításakor figyeljünk a tűzfal konfigurációjára is, hogy a szükséges portok nyitva legyenek. Továbbá, a biztonság érdekében érdemes erős jelszavakat vagy kulcs alapú azonosítást használni az SSH-hoz.
A megfelelő port forwarding típus kiválasztása a konkrét feladattól függ. Gondold át, hogy honnan hova szeretnél forgalmat irányítani, és válaszd a legmegfelelőbb módszert.
SSH tunneling: Biztonságos csatorna létrehozása nem titkosított protokollok számára
Az SSH tunneling, más néven port forwarding, egy rendkívül hasznos technika, amellyel biztonságos csatornát hozhatunk létre nem titkosított protokollok számára. Képzeljük el, hogy egy régi alkalmazásunk van, amelyik a nyílt HTTP protokollt használja. Ebben az esetben az adataink könnyen lehallgathatóak lennének. Az SSH tunneling segítségével ezt a forgalmat egy titkosított SSH csatornán keresztül irányíthatjuk.
Az SSH tunneling lényege, hogy egy helyi portot a távoli szerver egy másik portjához kapcsoljuk, és a kettő között az adatforgalom titkosítva zajlik.
Ez azt jelenti, hogy a helyi gépen futó alkalmazásunk a helyi porton keresztül kommunikál, az SSH kliens pedig ezt a forgalmat titkosítva elküldi a távoli szervernek. A szerveren az SSH démon fogadja a forgalmat, visszafejti, és továbbítja a célportra. Visszafelé ugyanez történik.
A gyakorlatban ez azt jelenti, hogy a nem titkosított protokoll forgalma titkosítottá válik az SSH alagúton belül. Például, egy nem titkosított VNC kapcsolatot is védhetünk SSH tunnelinggel. Ehhez a helyi gépen a VNC kliens a helyi porton keresztül csatlakozik, az SSH pedig a távoli szerveren a VNC szerver portjára irányítja a forgalmat.
Az SSH tunnelingnek három fő típusa van: helyi port forwarding, távoli port forwarding, és dinamikus port forwarding. A helyi port forwarding a leggyakoribb, amikor a helyi gépről a távoli szerverre irányítunk forgalmat. A távoli port forwarding esetén a távoli szerverről a helyi gépre irányítunk forgalmat, a dinamikus port forwarding pedig egy SOCKS proxy szervert hoz létre.
SSH és a tűzfal: A 22-es port védelme és egyedi portok használata
Az SSH szerver alapértelmezés szerint a 22-es porton figyel. Ez a port a támadók számára is jól ismert, ezért kiemelt fontosságú a védelme. A tűzfal konfigurálása elengedhetetlen! Engedélyezzük a bejövő SSH forgalmat csak azokról az IP címekről, amelyekről rendszeresen csatlakozunk. Minden más forgalmat tiltsunk le!
Egy másik hatékony módszer a biztonság növelésére az, ha megváltoztatjuk az alapértelmezett portot. Ez a támadók dolgát jelentősen megnehezíti, mivel nem számíthatnak arra, hogy az SSH a 22-es porton fog futni.
A portszám megváltoztatása a /etc/ssh/sshd_config
fájlban történik. Keressük meg a Port 22
sort, és módosítsuk egy magasabb, nem használt portszámra (pl. 2222). A változtatás után indítsuk újra az SSH szervert!
A tűzfal beállításait is ennek megfelelően kell módosítani. Engedélyezzük az új porton a forgalmat, és tiltsuk le a 22-es portot, ha már nem használjuk.
SSH hardening: Biztonsági intézkedések a szerver védelmére
Az SSH szerver biztonságossá tétele elengedhetetlen a rendszerünk védelméhez. Több intézkedéssel is erősíthetjük a biztonságot. Az egyik legfontosabb lépés a jelszavas bejelentkezés letiltása és a kulcspáros azonosítás használata. Ezáltal a brute-force támadások hatékonysága jelentősen csökken.
Érdemes továbbá a root bejelentkezést is tiltani SSH-n keresztül. A felhasználó először egy másik felhasználói fiókkal jelentkezzen be, majd használja a sudo
parancsot root jogosultságok eléréséhez.
A /etc/ssh/sshd_config
fájlban található Port
direktívával megváltoztathatjuk az alapértelmezett 22-es portot egy kevésbé ismert portra. Ez csökkenti az automatizált szkennelésekből származó támadások kockázatát. Azonban ne feledjük, hogy ez nem helyettesíti a valódi biztonsági intézkedéseket!
A tűzfal konfigurálása is kritikus fontosságú! Csak a szükséges IP címekről engedélyezzük az SSH portot, ezzel korlátozva a potenciális támadók körét.
Emellett érdemes a MaxAuthTries
direktívával korlátozni a sikertelen bejelentkezési kísérletek számát. A ClientAliveInterval
és ClientAliveCountMax
direktívák segítségével pedig beállíthatjuk, hogy az SSH szerver rendszeresen ellenőrizze a kliens kapcsolatát, és szakítsa meg a tétlen kapcsolatokat.
Végül, de nem utolsósorban, rendszeresen frissítsük az SSH szervert a legújabb verzióra, hogy elkerüljük a ismert sebezhetőségeket. A naplófájlok rendszeres ellenőrzése is segíthet a gyanús tevékenységek azonosításában.
Brute-force támadások elleni védekezés: Fail2ban konfigurálása
A Fail2ban egy hatékony eszköz az SSH szerverek elleni brute-force támadások kivédésére. Lényege, hogy figyeli a log fájlokat (pl. /var/log/auth.log), és ha valaki túlságosan sok sikertelen bejelentkezési kísérletet hajt végre rövid időn belül, automatikusan blokkolja az IP címét tűzfallal (általában iptables vagy nftables segítségével).
A Fail2ban telepítése után konfigurálni kell a /etc/fail2ban/jail.conf fájlt (vagy inkább a /etc/fail2ban/jail.local fájlt, hogy a frissítések ne írják felül a beállításokat!). Ebben a fájlban definiálhatjuk a „jail”-eket, amelyek lényegében szabályok arra, hogy mely log fájlokat figyeljük, milyen minták alapján azonosítjuk a sikertelen bejelentkezési kísérleteket, és milyen akciót hajtsunk végre (pl. IP cím blokkolása).
A legfontosabb, hogy a [sshd] szekcióban engedélyezzük a jail-t (enabled = true), és beállítsuk a bantime (blokkolási időtartam), findtime (az időtartam, amelyen belül a sikertelen próbálkozásokat számoljuk), és maxretry (a maximális sikertelen próbálkozások száma) paramétereket.
Például:
- bantime = 3600 (1 óra)
- findtime = 600 (10 perc)
- maxretry = 5 (5 sikertelen kísérlet)
Ez azt jelenti, hogy ha valaki 10 perc alatt 5-ször sikertelenül próbál bejelentkezni SSH-n keresztül, akkor 1 órára blokkoljuk az IP címét.
A konfiguráció módosítása után újra kell indítani a Fail2ban szolgáltatást: sudo systemctl restart fail2ban
. Ezt követően a Fail2ban automatikusan védi az SSH szervert a brute-force támadásoktól.
SSH naplózás: A naplófájlok elemzése és a gyanús tevékenységek felderítése
Az SSH naplózás elengedhetetlen része a biztonságos távoli hozzáférésnek. A naplófájlok – általában a /var/log/auth.log vagy /var/log/secure alatt találhatók – rögzítik az SSH szerverrel kapcsolatos eseményeket, beleértve a sikeres és sikertelen bejelentkezéseket, a kulcscseréket és egyéb fontos tevékenységeket. A naplófájlok rendszeres elemzése segít azonosítani a gyanús tevékenységeket.
Mire kell figyelni a naplókban? Elsősorban a sikertelen bejelentkezési kísérletekre, különösen, ha azok szokatlan forrásokból vagy nagy gyakorisággal érkeznek. Ezek bruteforce támadásokra utalhatnak. Figyeljünk a szokatlan felhasználónevekre is, amelyekkel megpróbálnak bejelentkezni. A sikeres bejelentkezések után végrehajtott parancsok is árulkodóak lehetnek, ha nem egyeznek a felhasználó szokásos tevékenységével.
A naplófájlok rendszeres elemzése és a gyanús tevékenységek időbeni felderítése kulcsfontosságú a rendszer biztonságának megőrzéséhez.
Számos eszköz és technika létezik a naplók elemzésére. Egyszerű szövegszerkesztőkkel is átnézhetjük a fájlokat, de hatékonyabb, ha speciális naplóelemző szoftvereket használunk, amelyek automatikusan kiemelik a releváns információkat és riasztásokat generálnak. Ilyen eszközök például a Logwatch, az AIDE és a Fail2ban, amelyek automatizálják a naplóelemzést és a gyanús tevékenységekre való reagálást.