Előfeltételek
Ha még nem rendelkezik domain névvel, vásárolnia kell egyet egy domain név regisztrátortól, és képesnek kell lennie a domain DNS-ének frissítésére. Erre a célra kifejezetten ajánljuk a Cloudflare DNS-szolgáltatását, de megfelelő ha a regisztrátor biztosítja a dns szervert. (pl. mikrovps.hu)
Új DigitalOcean Droplet létrehozása a webszerver számára
Ebben a bemutatóban nem fogom részletezni a kezdeti VPS létrehozási folyamatot, mivel a DigitalOcean saját dokumentációval rendelkezik, de ebben a cikkben részletes leírom hogyan tudsz létrehozni DO VPS-t. Az új DigitalOcean Droplet létrehozásakor azonban az Ubuntu 22.04 LTS-t kell választania Linux disztribúciónak:


Olyan régiót kell választania, amely a legközelebb van az alapközönségének többségéhez, hogy az új droplethez érkező kérések gyorsabbak legyenek a közönség számára. Javaslom továbbá, hogy engedélyezze a Monitoring opciót. A DigitalOcean beépített felügyeleti eszközei nagyon jól fognak jönni, ha már WordPress webhelyet üzemeltetsz.
Végül pedig a “Hitelesítés” résznél a Jelszó opciót javasoljuk kiválasztani, hogy root felhasználóként léphessen be a szerverére. A DigitalOcean felsorol néhány jelszókövetelményt, amelyet érdemes betartani a biztonságos jelszó létrehozásához. A későbbiekben letiltjuk a root felhasználót és a jelszó alapú hitelesítést, valamint beállítjuk az SSH kulcsos hitelesítést, ami biztonságosabb. Egyelőre azonban a biztonságos root felhasználói jelszó létrehozása a leggyorsabb módja annak, hogy hozzáférjünk a szerverünkhöz, és elkezdhessük a telepítést.
Az első bejelentkezés
Mielőtt telepíthetnénk a WordPress-hez szükséges webszerver szoftvereket (pl. PHP, MySQL, Nginx stb.), először néhány dolgot be kell állítanunk a szerveren. Azzal kezdjük, hogy SSH-n keresztül bejelentkezünk a szerverre. A rendszer az előző lépésben kiválasztott jelszót fogja kérni.
Ha macOS-t vagy Linuxot használsz, mindezt az alapértelmezett terminálalkalmazáson keresztül teheted meg. Ha Windows-on vagy, telepítheted a PuTTY nevű SSH-szoftvert.
root@194.1*2.*8.13*
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-27-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Mon Jan 2 19:34:17 UTC 2023
System load: 0.05029296875 Processes: 108
Usage of /: 10.5% of 39.26GB Users logged in: 0
Memory usage: 6% IPv4 address for ens3: 194.1*2.*8.13*
Swap usage: 0%
A szerver nevének a beállítása (hostname)
Most, hogy bejelentkeztünk a kiszolgálóra, állítsuk be a hosztnevet és legyen teljes név.(FQDN). A hosztnévnek egyedinek kell lennie, de nem szükséges, hogy kapcsolatban álljon a hosztolt webhelyekkel, például egyesek úgy döntenek, hogy a szervereiket a görög istenekről nevezik el. Ezt a szervert én most Zeus után zeus-nak fogom hívni és wptudor.hu lesz a domain nevem, így az fqdn nevem: zeus.wptudor.hu
A hostnév és az FQDN helyes beállítása a jövőben sokkal könnyebbé teszi a szerverhez való csatlakozást, mivel nem kell minden alkalommal megjegyeznie az IP-címet. A hosztnév beállításához adja ki a következő parancsokat (a választott tartománynévvel módosítva):
# hostnamectl set-hostname zeus.wptudor.hu
Érdemes utána a DNS-be is felvenni ezt a nevet, így a későbbiekben már nem az IP címet kell megjegyeznünk:

Győződj meg róla, hogy az A rekord megegyezik a webkiszolgálón beállított hostnévvel, és hogy a webkiszolgáló IP-címe a domain nevéhez kapcsolódik. Lehet, hogy várnod kell egy kicsit, amíg a DNS-beállítások érvényre lépnek. Ez akár 1-2 nap is lehet extrém esetben.
A DNS-beállítások érvényesülése után, ha kilépsz az aktuális SSH-munkamenetből, akkor az új hostnév használatával csatlakozhatsz a kiszolgálóhoz.
root@zeus.wptudor.hu
Időzóna beállítása
A DigitalOcean az új kiszolgálót az adatközpont régiójával megegyező időzónába állítja. A szerver időzónájának beállításához a tzdata
csomagot kell konfigurálnod. Ez biztosítja, hogy a rendszer naplófájljai a helyes dátumot és időt mutassák. A következő paranccsal konfigurálhatja a tzdata
csomagot:
# dpkg-reconfigure tzdata
Egy egyszerű grafikus felhasználói felület jelenik meg, amely lehetővé teszi a földrajzi terület és az időzóna kiválasztását. Az én választásom Europa>Budapest.

Ha ez megtörtént, az újonnan kiválasztott időzóna megjelenik az aktuális idővel és dátummal együtt:
Current default time zone: 'Europe/Budapest'
Local time is now: Mon Jan 2 20:46:38 CET 2023.
Universal Time is now: Mon Jan 2 19:46:38 UTC 2023.
Operációs rendszer csomagjainak a frissítése
Bár még csak most lett új vps-ed, valószínű, hogy egyes szoftvercsomagok elavultak. Biztosítsuk, hogy a legfrissebb csomagokat használd, így először a csomaglisták (repo) frissítésével kezdjük:
# apt update
Ha elkészült, frissítsük az összes jelenleg telepített csomagot. A rendszer jeleznini fogja, hogy mennyi helyet foglalnak a frissítések.
# apt upgrade
A frissítések befejeztével megjelenik, hogy mely csomagok lettek telepítve, és hogy mely csomagokra nincs már szüksége a rendszernek.
Az elavult csomagokat a következő paranccsal távolíthatja el:
# apt autoremove

Ezt érdemes majd havonta elvégezni, természetesen egy snapshot készítése után.
Új felhasználó hozzáadása
Ezek voltak az alapbeállítások. A következő lépés ebben az útmutatóban egy új felhasználó hozzáadása a kiszolgálóhoz. Erre két okból kerül sor:
- Később ebben a fejezetben letiltjuk a root felhasználó SSH hozzáférését, ami azt jelenti, hogy egy másik felhasználói fiókra van szükséged a szerver eléréséhez.
- A root felhasználó nagyon széleskörű jogosultságokkal rendelkezik, amelyek lehetővé teszik potenciálisan pusztító parancsok végrehajtását. Ezért a mindennapi használathoz ajánlatos egy új felhasználói fiókot létrehozni, korlátozottabb jogosultságokkal.
Ez az új felhasználó a sudo csoportba kerül, így a root jogosultságot igénylő parancsokat csak akkor tudja végrehajtani, ha jelszóval azonosítjuk magunkat.
Először is hozd létre az új felhasználót:
# adduser nemetkr
A rendszer kéri, hogy adj meg néhány alapvető felhasználói adatot, és egy erős jelszót. Mint korábban említettük, ennek a jelszónak összetettnek kell lennie:

Ezután hozzá kell adni az új felhasználót a sudo
csoporthoz:
# usermod -a -G sudo nemetkr
Most ellenőrizze, hogy az új fiókja működik-e, és jelentkezzen ki a jelenlegi SSH-munkamenetből, majd kezdeményezzen egy újat:
# exit
nemetkr@zeus.wptudor.hu
SSH kulcspár generálása
Ezen a ponton az új felhasználó készen áll a használatra. A fokozott biztonság érdekében nyilvános kulcsos hitelesítést fogunk beállítani. Mivel a WordPress-t erre a szerverre tervezed telepíteni, ez azt jelenti, hogy nyilvánosan elérhető lesz, és így lehetséges célpontja lesz a támadóknak. Nem fogom részletezni, hogyan kell SSH kulcspárt létrehozni (a itt van egy informatív cikk a folyamatról), de ha még nincs ilyen kulcspárod, írd be a következő parancsot a helyi gépeden:
$ ssh-keygen -t ed25519 -C "nemetkr@linuxtudor"
Helyettesítsd a „nemetkr@linuxtudor” szót valamivel, ami segít azonosítani ezt az SSH-kulcsot (nem kell, hogy e-mail cím legyen).
Egy olyan üzenetet kell kapnod, mint az alábbiakban, csak nyomja meg az enter gombot, hogy elfogadja az alapértelmezett helyet. Ezután egy jelszó megadására lesz szükség (opcionális), amelyhez minden alkalommal meg kell adnia egy jelszót, amikor ezzel a kulcspárral bejelentkezik:
nemetkr@zeus:~$ ssh-keygen -t ed25519 -C "nemetkr@linuxtudor"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/nemetkr/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nemetkr/.ssh/id_ed25519
Your public key has been saved in /home/nemetkr/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:MJQjkS+x/ZVkYzL2NfDqeqOUzcwyBzITKsngIY7UBfU nemetkr@linuxtudor
The key's randomart image is:
+--[ED25519 256]--+
| .+=.. .. |
| . =.+ + =.o |
|oo . *+E B +.. |
|*o..o.o+ +. |
|.o+ ..+.S.. |
| . +.O |
| = B |
| . =o |
| oo . |
+----[SHA256]-----+
nemetkr@zeus:~$ ll /home/nemetkr/.ssh/
total 20
drwx------ 2 nemetkr nemetkr 4096 Jan 3 00:01 ./
drwxr-x--- 5 nemetkr nemetkr 4096 Jan 2 21:05 ../
-rw------- 1 nemetkr nemetkr 411 Jan 3 00:01 id_ed25519
-rw-r--r-- 1 nemetkr nemetkr 100 Jan 3 00:01 id_ed25519.pub
Két új fájlt kellett kapnod a /home/nemetkr/.ssh/
könyvtárban:
- id_ed25519 – ez lesz a privát kulcsod, ezt kell őrizned és erről a szerverről eltávolítani, ezt majd neked kell megadnod, ha be szeretnél lépni a gépre.
- id_ed25519.pub – ez a nyilvános kulcsod, ezt bárkinek meadhatod, használhatod további gépeken is.
Ha windows alól szeretnéd elérni a vps-ed, akkor még további teendőd lesz a privát kulcsoddal. (Link)
Nyilvános kulcsod elhelyezése
Ha a szerveren hoztad létre a kulcsaid, akkor már létezik a .ssh könyvtárad a korábban létrehozott felhasználó home könyvtárában (nekem /home/nemetkr/.ssh), ha nem akkor a következőt kell tenned
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
Az .ssh
könyvtárban létre kell hozni egy új fájlt authorized_keys
néven, amely tartalmazza a helyi gépéről másolt nyilvános kulcsot vagy az itt található id_ed25519.pub fájl tartalmát:
cat /home/nemetkr/.ssh/id_ed25519.pub > /home/nemetkr/.ssh/authorized_keys
Majd érdemes neki egy 600-s jogosultságot beállítani:
$ chmod 600 ~/.ssh/authorized_keys
Ha most kijelentkezel az aktuális SSH-munkamenetből, és megpróbálsz újra csatlakozni, nem kell többé megadni a felhasználói jelszót. Ne feledd, hogy ha az SSH-kulcs létrehozásakor beállítottál egy jelszót, akkor azt kérésre meg kell adnia. (Ez a kulcshoz tartozó jelszó, nem a felhasználóhoz!)
Az útmutató hátralévő részében észre fogod venni, hogy minden parancs előtt sudo-t
használok, hogy növeljem a parancs jogosultságait. Ez lehetővé teszi a „normál” felhasználóm számára, hogy „root” felhasználói szintű módosításokat hajtson végre.
SSH alapkonfiguráció szigorítása
Az új felhasználó létrehozása után itt az ideje, hogy az SSH konfigurálásával tovább növeljük a szerver biztonságát. Az első dolog, amit tenni kell, hogy letiltod a root felhasználó SSH hozzáférését, ami nem fogja többé lehetővé tenni, hogy SSH-n keresztül bejelentkezz a szerverre a root felhasználóval. (Előtte viszont ellenőrizd, hogy a vps-ed eléred DO konzolon!) Nyisd meg az SSH konfigurációs fájlt a nano segítségével:
sudo nano /etc/ssh/sshd_config
Két értéket fogunk megváltoztatni:
- a
PermitRootLogin yes
sort, és változtassa megPermitRootLogin no
-ra. - a
PasswordAuthentication yes
sortPasswordAuthentication no
-ra
Az első a root login bejelentkezését tiltja SSH-n keresztül, konzolon továbbra is be tudunk majd jelentkezni. A második pedig a jelszó alapú azonosítást, így csak kulcspárral fogunk tudni belépni.
Mentsük el a változásokat és indítsuk újra az ssh szolgáltatást:
sudo systemctl restart ssh
Most, mielőtt kijelentkezik a kiszolgálóról, tesztelje az új konfigurációt. Ehhez nyisson egy új terminálablakot anélkül, hogy bezárod az aktuális SSH munkamenetet, és próbálj meg csatlakozni. Próbálj meg root-tal is belépni, ennek nem kell sikerülnie.
Helyi tűzfal beállítása (ufw)
A tűzfal a bejövő hálózati forgalom blokkolásával további biztonsági réteget biztosít a kiszolgáló számára. Az iptables
tűzfalat fogjuk megismerni, amely a leggyakrabban használt Linux-szerte, és alapértelmezés szerint telepítve van. Annak érdekében, hogy leegyszerűsítsem a szabályok hozzáadását a tűzfalhoz, szeretem az ufw
nevű csomagot használni, ami az Uncomplicated Firewall rövidítése. Az ufw
csomag általában alapértelmezés szerint telepítve van, de ha nincs, akkor telepítsd a következő paranccsal:
sudo apt install ufw
Most, hogy hozzáférsz az ufw
-hoz, elkezdheted hozzáadni az alapértelmezett szabályokhoz, amelyek minden bejövő forgalmat megtagadnak, és minden kimenő forgalmat engedélyeznek. Egyelőre az SSH (tcp 22), a HTTP (tcp 80) és a HTTPS (tcp 443) portokat adjuk hozzá:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
A tűzfalhoz hozzáadandó szabályok áttekintéséhez add meg a következő parancsot:
sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
A tűzfalszabályok engedélyezése előtt győződj meg róla, hogy az SSH portja szerepel a hozzáadott szabályok listáján – különben nem tudsz csatlakozni a szerverhez! (csak konzolon root-tal.) Az alapértelmezett port a 22-es. Ha minden megfelelőnek tűnik, folytassa és engedélyezze a konfigurációt:
sudo ufw enable
Érdemes ezután egy új ssh kapcsolatot indítani, úgy , hogy ezt még ne zárd be!
A Fail2ban beállítása
A Fail2ban egy olyan eszköz, amely a tűzfal mellett működik. Figyeli a szerverre irányuló behatolási kísérleteket, és meghatározott időre blokkolja a támadó hostot/IP-t. Ezt úgy éri el, hogy a rosszindulatú tevékenységet mutató IP-címeket hozzáadja a tűzfal szabályaihoz. Nagyon ajánlott telepíteni valami olyasmit, mint a Fail2ban, azokra a szerverekre, amelyeken WordPress telepítés fog futni, különösen, ha harmadik féltől származó bővítményeket kíván telepíteni.
A Fail2ban program alapértelmezés szerint nincs telepítve, ezért most telepítsük:
sudo apt install fail2ban
Az alapértelmezett konfigurációt én gyengének találom, amely 6 sikertelen SSH bejelentkezési kísérlet után 10 percre letiltja a gépet, ezért ezt szigorúbbra állítjuk be. Mentsük el a konfigurációs fájlt más néven:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ebben a jail.local fájlban fogjuk felülbírálni az alapértékeket:
- bantime = 1d – 1 napra tiltjuk ki a próbálkozókat
- findtime és maxrety – A maxretry változó határozza meg, hogy hányszor próbálkozzon egy ügyfél a findtime által meghatározott időablakon belül a hitelesítéssel, mielőtt kitiltásra kerülne. Az alapértelmezett beállításokkal a fail2ban szolgáltatás letiltja azt az ügyfelet, aki 10 percen belül 5 alkalommal sikertelenül próbál bejelentkezni.
A fájl lentebbi részén a JAILS szekcióban található az SSH beállítás, ezt az alábbiak szerint állítsuk be:
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
enabled = true
mode = aggressive
port = ssh
logpath = %(sshd_log)s
#backend = %(sshd_backend)s
backend = systemd
Mentsük el a változtatásokat és indítsuk újra a fail2ban szolgáltatást:
sudo systemctl restart fail2ban
Megnézve 3 óra múlva már pontosan 14 IP van tiltás alatt:
sudo iptables -S | grep f2b | wc -l
14
Most már van egy biztonságos szervered a WordPress webszerver építésének megkezdéséhez, és megtetted a szükséges lépéseket az illetéktelen hozzáférés megakadályozására. Fontos azonban megjegyezni, hogy a biztonság egy folyamatos folyamat, és a következő pontokat érdemes szem előtt tartanod:
- Csak a szükséges szoftvereket, csomagokat (pl. Nginx vagy Apache, PHP, MySQL/MariaDB) telepítsd megbízható csomagtárolókból.
- Rendszeresen telepítsd a szoftverfrissítéseket és biztonsági javításokat, azaz havonta
- Erős jelszavak alkalmazása (12-15 karakter, kis-nagybetű, szám, különleges karakterek)