Egy internetre kapcsolt szerver SSH portjára az üzembe helyezés után perceken belül megérkeznek az első automatizált bejelentkezési kísérletek. Ez a cikk sorra veszi a legfontosabb védelmi lépéseket, és azt is, hogyan ellenőrizheti, hogy a beállítás valóban érvényes-e. Az SSH alapjairól a Linux Secure Shell (SSH) cikk szól.
A lépéseket AlmaLinux 10.2, Ubuntu 24.04 és Debian 12 rendszeren próbáltuk ki, a disztribúciók saját cloud image-éből telepített virtuális gépeken. A parancsokat root felhasználóként vagy sudo-val futtassa.
Mielőtt bármit módosít
- Hagyjon nyitva egy működő SSH-kapcsolatot, amíg egy új kapcsolatban ki nem próbálta az új beállítást. Az sshd újraindítása a már felépült kapcsolatokat nem bontja, így ha valami elromlik, abból javíthat.
- Ellenőrizze a szintaxist minden újraindítás előtt:
sudo sshd -t. Ha nincs kimenete, a fájl rendben van. - Tudja, hogyan éri el a szervert SSH nélkül (VPS-en a vezérlőpult konzolja), arra az esetre, ha mégis kizárná magát.
Hova írja a beállításokat?
A fő beállításfájl a /etc/ssh/sshd_config, de mindhárom tesztrendszeren ennek elején egy Include /etc/ssh/sshd_config.d/*.conf sor áll. Az sshd egy beállításnál az első előfordulást veszi figyelembe, ezért a könyvtárban lévő fájlok felülírják a fő fájlt.
Ez meglepetést okozhat: a cloud image-ekből telepített gépeken a cloud-init egy 50-cloud-init.conf fájlt tesz ide, például PasswordAuthentication no sorral. A teszten a fő sshd_config végére írt PasswordAuthentication yes hatástalan maradt, mert a drop-in fájl előbb állította be.
Ezért a saját beállításait tegye egy külön fájlba a könyvtárban, a cloud-init fájljánál előbbre rendeződő névvel, például:
sudo nano /etc/ssh/sshd_config.d/10-biztonsag.conf
Hogy végül mi érvényes, azt nem a fájlokból kell kitalálni: a sshd -T kiírja a ténylegesen használt értékeket.
sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication) '
A teszten az alapértékek AlmaLinux 10-en és Ubuntu 24.04-en: port 22, permitrootlogin without-password (a root csak kulccsal léphet be), passwordauthentication no (ezt a cloud-init állította be).
1. Kulcsos belépés, jelszó tiltása
A legfontosabb lépés: jelszó helyett kulccsal lépjen be, és a jelszavas belépést tiltsa le. A saját gépén:
ssh-keygen -t ed25519
ssh-copy-id felhasznalo@szervercime
Próbálja ki egy új terminálban, hogy jelszó nélkül belép. Ha igen, a szerveren a 10-biztonsag.conf fájlba:
PasswordAuthentication no
KbdInteractiveAuthentication no
Ezután:
sudo sshd -t && sudo systemctl restart sshd # Ubuntu, Debian: ssh
Jelszavas próbálkozásra a szerver ezután ezt válaszolja: Permission denied (publickey…). A kulcskezelésről Windows alól is a VPS SSH-csatlakozási útmutatója ír.
2. A root belépés tiltása
Előbb hozzon létre egy saját felhasználót sudo joggal, és próbálja ki vele a belépést (lásd: Felhasználó létrehozása és sudo jog adása). Ezután:
PermitRootLogin no
A teszten a 10-biztonsag.conf fájlba írt sor után a sshd -T már permitrootlogin no értéket mutatott. Ha a root belépés tiltása helyett csak a jelszavas root belépést szeretné kizárni, a PermitRootLogin prohibit-password (más néven without-password) a megfelelő, ez a tesztrendszerek alapértéke is.
3. Az SSH port módosítása
A port megváltoztatása nem tesz biztonságosabbá egy gyenge jelszót, de a naplókban sokkal kevesebb lesz az automatizált próbálkozás. Az új portot írja a drop-in fájlba, és amíg ki nem próbálta, hagyja meg a 22-est is:
Port 22
Port 2255
A további teendő disztribúciónként eltér.
AlmaLinux, Rocky Linux: SELinux és firewalld
A SELinux csak az ssh_port_t típusú portokon engedi figyelni az sshd-t. Ha ezt kihagyja, az sshd elindul, de az új porton nem figyel; a naplóban Bind to port 2255 … failed: Permission denied áll. A semanage parancs a policycoreutils-python-utils csomagban van, amely a cloud image-en nem volt telepítve:
sudo dnf install policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2255
sudo systemctl restart sshd
Ha a firewalld fut (sudo firewall-cmd --state), engedélyezze az új portot is:
sudo firewall-cmd --permanent --add-port=2255/tcp
sudo firewall-cmd --reload
Ubuntu 24.04: socket-aktiválás
Ubuntu 24.04-en a 22-es porton nem az ssh szolgáltatás, hanem a ssh.socket figyel. A teszten a portváltás után a systemctl restart ssh hatástalan volt, továbbra is csak a 22-es port élt. A port a daemon-reload és a socket újraindítása után változik:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Ha az ufw be van kapcsolva (a teszten alapból nem volt), engedélyezze a portot: sudo ufw allow 2255/tcp.
Debian
Debianon elég az újraindítás: sudo systemctl restart ssh.
Ellenőrzés
sudo ss -tlnp | grep sshd
Csatlakozzon egy új terminálból az új portra (ssh -p 2255 felhasznalo@szervercime). Ha működik, a Port 22 sor törölhető, és a tűzfalon is lezárható a 22-es port.
4. A próbálkozások korlátozása
A Fail2ban a naplókat figyeli, és a sok hibás belépést küldő IP-címeket egy időre kitiltja a tűzfalon. Telepítését és a csapdáit (például hogy AlmaLinuxon a firewalld-nak futnia kell, különben a tiltás hatástalan) a Fail2ban telepítése és beállítása cikk írja le. cPanel szerveren a cPHulk és a CSF/LFD látja el ugyanezt.
Az egy kapcsolaton belüli próbálkozások számát a MaxAuthTries korlátozza (alapértéke a teszten 6 volt), például MaxAuthTries 3.
5. Frissítések
Az OpenSSH biztonsági javításai a rendszerfrissítésekkel érkeznek (a teszten AlmaLinux 10-en az OpenSSH 9.9, Ubuntu 24.04-en a 9.6 volt). Kapcsolja be az automatikus biztonsági frissítéseket, lásd: Rendszerfrissítés: dnf, apt és automatikus frissítések.
aWh szerverek
A KVM VPS-eken a fenti beállítások mindegyike az Ön kezében van. A cPanel tárhelyeinken az SSH a 4231-es porton fut, és csak kulccsal lehet belépni; a kulcs feltöltéséről a SSH kulcs létrehozása vagy feltöltése cPanel szerverre cikk szól.
