Mottó: A szerző nem professzionális hálózatguru, csak egy lelkes amatőr. Az itt leírtakat mindenki saját felelősségére alkalmazza!

Amikor először nézel bele az /var/log/auth.log fájlba, hirtelen úgy érzed magad, mint a Nabukodonozor legénysége: az őrszemek ezrei kaparásszák a falaidat. A botok megállás nélkül próbálnak betörni a 22-es porton, pontosan úgy, ahogy a Mátrixban az őrszemek rajzottak Zion ostrománál. Ha nem akarsz áldozatul esni, ki kell építened a saját védelmi rendszeredet.

Ha nem akarod, hogy a szervered egy botnet része legyen, kövesd ezeket az alapvető lépéseket.

1. SSH kulcspár használata (A belépőjegyed)

A jelszavas belépés az első gyenge láncszem. Hozz létre egy 4096 bites RSA vagy egy modern Ed25519 kulcspárt a saját gépeden

ssh-keygen -t ed25519 -C "vps_kulcsod"

Másold fel a publikus kulcsot a szerverre:

ssh-copy-id -i ~/.ssh/id_ed25519.pub felhasznalonev@szerver_ip

2. Saját felhasználó létrehozása - Ne légy mindig mindenható!

Legyen egy user fiókod és csak akkor légy root ha nagyon muszáj.

sudo adduser neved  # Adj neki egy erős jelszót!
sudo usermod -aG sudo neved

Másold át a kulcsodat az új usernek: Mivel a későbbi lépésekben letiltjuk a jelszavas belépést, az új felhasználódnak is szüksége van a publikus kulcsodra:

sudo mkdir -p /home/neved/.ssh
sudo cp /root/.ssh/authorized_keys /home/neved/.ssh/
sudo chown -R neved:neved /home/neved/.ssh
sudo chmod 700 /home/neved/.ssh
sudo chmod 600 /home/neved/.ssh/authorized_keys

3. Tűzfal (UFW) beállítása – Ki ne zárd magad!

Mielőtt újraindítod az SSH-t, engedélyezd az új portot a tűzfalon, különben végleg kint maradsz:

sudo ufw allow 21349/tcp # Válassz egy egyedi portot (lehetőleg 1024 és 49151 között, ami még nem foglalt).
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

4. SSH konfiguráció – A biztonság alapja

Szerkeszd az SSH konfigot:

sudo nano /etc/ssh/sshd_config.

Itt három kritikus módosítást kell elvégezned:

Port megváltoztatása: A botok 99%-a a 22-es portot támadja. Válts például a 21349-re, de nem felejtsd el feljegyezni valahova, mert ha bármilyen okból törlődne a bash history, gondban leszel ha nem jut eszedbe a portszám.

Port 21349

A jelszavas belépés tiltása, hogy csak a kulcsoddal lehessen belépni:

PasswordAuthentication no

Root belépés tiltása:

PermitRootLogin no

Vigyázz! Innentől már csak a létrehozott felhasználóddal tudsz belépni!

pl: ssh -p 21349 neved@szerver-ip

Ha ezekkel megvagy, jöhet az SSH-szolgáltatás újraindítása:

sudo systemctl restart ssh

Ha minden jól ment akkor be is léphetsz a szerveredre:

ssh -p 21349 neved@szerver-ip

💡 Pro Tipp: Mielőtt újraindítod az SSH-szolgáltatást vagy kilépsz, tarts nyitva egy élő munkamenetet! Ha elrontottál valamit a konfigurációban, ezen keresztül még javíthatod; ha bezárod, marad a nehézkes VNC-konzol. (pl: nem lesz magyar billentyűzetkiosztás).

🔗 Egy kis segítség szabad port kereséshez: TCP és UDP portszámok listája – Wikipédia

5. Fail2Ban – A kapuőr

A Fail2Ban figyeli a naplófájlokat, és ha valaki túl sokszor hibázik, kitiltja az IP-címét.

Telepítés:

sudo apt update && sudo apt install fail2ban -y

Hozz létre egy helyi konfigurációt (sudo nano /etc/fail2ban/jail.local), és add hozzá az SSH védelmet:

[sshd]
enabled = true
port = 21349
filter = sshd[mode=aggressive]
backend = systemd
maxretry = 3
findtime = 1d
bantime = 24h

5. Ellenőrzés és karbantartás

Indítsd újra a szolgáltatásokat:

sudo systemctl restart ssh
sudo systemctl restart fail2ban

Ellenőrizheted a kitiltott IP-ket:

neved@xxxxxxxxxx:~# uptime
 06:47:29 up 18 days, 20:11,  1 user,  load average: 0.01, 0.00, 0.00
neved@xxxxxxxxxx:~# sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     1170751
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     1
   `- Banned IP list:

Szóval 18 nap alatt csaknem egymillió-kétszázezer próbálkozás egy noname, jelentéktelen szerverrel szemben.

Miért nem várhatsz a védelemmel? (A számok nem hazudnak)

Sokan gondolják: “Ki akarná az én kis szerveremet bántani?”. Nos, lefuttattam egy gyors parancsot (köszi Gemini), hogy megnézzem, hány sikertelen próbálkozás történt és itt a top versenyző:

Bash

grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -n 1
624410 75.xxx.xxx.xxx

❗ Az eredmény brutális: Egyetlen IP-címről (ami történetesen egy francia adatközpontban van) több mint 624 000 alkalommal próbálták kitalálni a jelszót.

Sokan azt hiszik, ha egy neves szolgáltatónál van a gépük, a belső hálózat védett. De a logokból hamar kiderült: a támadó ugyanannál a szolgáltatónál bérelt gépet, ahol én (pl: tracepath IP és meg is lesz támadó szerver szolgáltatója).

❗ Update -avagy ne higgy a szemednek!

Megnyugodtam, hátradőlve hagytam, hogy a Fail2Ban tegye a dolgát. Egy héttel később ránézek, hogy hogyan dolgozik, hát sehogy. A sudo fail2ban-client status sshd parancs után a Total Banned: 1 db IP, ami túl szép volt, hogy igaz legyen.

Kiderült, hogy régen minden Linuxon az rsyslog uralkodott, ami egyszerű szöveges fájlokba (/var/log/auth.log) írta az eseményeket. A Fail2Ban alapértelmezés szerint még mindig ezt keresi, mert ez a “legkisebb közös többszörös” minden Unix-szerű rendszeren. A modern Linux rendszerek (Debian 12, Ubuntu 22.04+, Fedora…) viszont már a systemd-journald-t használják, ami nem szövegfájl, hanem egy bináris adatbázis.

Mivel a /var/log/auth.log dátumformátuma sokszor eltér a Fail2Ban által várt mintától, a szoftver egyszerűen “megvakul” és nem látja a támadásokat. A megoldás a backend = systemd és a mode = aggressive bekapcsolása volt a jail.local fájlban. Ezzel a Fail2Ban már nem egy szöveges fájlt bogarászik, hanem közvetlenül a rendszer belső naplójából (journal) kapja az adatokat.

Amint átírtam a konfigurációt és nyomtam egy restartot, a kép megváltozott. A Journal matches sor megjelent, és azonnal megérkeztek az első kitiltott IP-címek is a listába!

[sshd]
enabled = true
port = 21349 #Természetesen a portszámot a saját választottadra cseréld.
filter = sshd[mode=aggressive]
backend = systemd
neved@xxxxxxx:~# sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 4
   |- Total banned:     4
   `- Banned IP list:   172.xxx.xxx.xxx 172.xxx.xxx.xxx 172.xxx.xxx.xxx 173.xxx.xxx.xxx

Azt az IP-t ahonnan egy bot folyamatosan bombázta a szerveremet véglegesen kibannoltam, biztos ami biztos alapon:

UFW

sudo ufw insert 1 deny from 173.xxx.xxx.xxx to any

Tesztelés:

sudo iptables -L INPUT -n -v | grep 173.xxx.xxx.xxx
15509  930K DROP       0    --  *      *       173.xxx.xxx.xxx      0.0.0.0/0
  • 15509 ennyi próbálkozás
  • 927K forgalom megérkeztek
  • DROP ez a státusz igazolja hogy a szerver egyáltalán nem válaszolt neki
tail -f /var/log/fail2ban.log
2026-xx-xx xx:xx:xx,xxx fail2ban.filter         [3090861]: INFO      findtime: 86400
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: INFO      banTime: 86400
2026-xx-xx xx:xx:xx,xxx fail2ban.filter         [3090861]: INFO      encoding: UTF-8
2026-xx-xx xx:xx:xx,xxx fail2ban.jail           [3090861]: INFO    Jail 'sshd' started
2026-xx-xx xx:xx:xx,xxx fail2ban.filtersystemd  [3090861]: INFO    [sshd] Jail is in operation now (process new journal entries)
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: NOTICE  [sshd] Restore Ban 172.xxx.xxx.xxx
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: NOTICE  [sshd] Restore Ban 172.xxx.xxx.xxx
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: NOTICE  [sshd] Restore Ban 172.xxx.xxx.xxx
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: NOTICE  [sshd] Restore Ban 173.xxx.xxx.xxx
2026-xx-xx xx:xx:xx,xxx fail2ban.actions        [3090861]: NOTICE  [sshd] Unban 172.xxx.xxx.xxx

Összegzés és tapasztalatok

A nyitva hagyott 22-es port vagy a jelszavas hitelesítés azonnali kockázatot jelent. A logok alapján látható, hogy rövid időn belül ~ 624 000 betörési kísérlet bizonyítja, hogy az automatizált botok nem válogatnak: minden IP-re lőnek, amit elérnek.

Ami nálam alapvető beállítás egy új VPS indításakor:

  • SSH kulcs alapú hitelesítés (jelszó tiltva).

  • User létrehozása (hogy csak akkor legyünk benn rootként ha indokolt)

  • Egyedi port (hogy a botok 99%-a lepattanjon).

  • UFW (szigorú szabályokkal).

  • Fail2Ban (hosszú kitiltási idővel a visszaesőknek).

A legfontosabb tanulság pedig: amíg a konfigurációt piszkálod, ne zárd be a terminált. Mindig legyen egy menekülőút, mert ha kizárod magad, a VNC konzol minden lesz, csak nem barátságos.

A biztonságodért te felelsz, nem a szolgáltatód!