Megoldandó problémánk: szükségünk van egy interneten elérhető, akár élesben is használható szerverre. Választott oprendszerünk a Debian.
Először is keressünk egy európai VPS-szolgáltatót1 (pl. Hetzner, OVHcloud, Scaleway), és hozzunk létre egy virtuális gépet.2 Már van is egy működő Debian-szerverünk, ideális esetben ez egy <5s művelet.
A Debian alábbiakban leírt konfigurálását Ansible segítségével automatizálhatjuk, a jobb VPS-szolgáltatók pedig biztosítanak API-t, így akár a teljes procedúra szkriptelhető.
Saját user
Friss Debian VPS-nél általában root usert kapunk. Ha mi installáljuk a Debiant, és nem adunk meg root jelszót, akkor a root user zárolt (mint az Ubuntunál), és az install során létrejön a sudo userünk. Új sudo user létrehozásához használjuk a sudo, wheel vagy hasonló csoportot.
# adduser myuser
# groupadd wheel
# usermod -aG wheel myuser
Szerkesszük az /etc/sudoers
konfigot visudo-val, és szúrjuk be az alábbi sorokat.
# EDITOR=/bin/nano visudo
Defaults timestamp_timeout=0
%wheel ALL=(ALL:ALL) ALL
%wheel ALL=(ALL:ALL) NOPASSWD: /sbin/reboot,/sbin/shutdown
A pontos útvonallal megadott parancsokat jelszó nélkül hívhatjuk, a többit mindig jelszóval, nincs ideiglenes megjegyzés. A jelszókérés elsősorban saját magunktól véd. Ha bízunk magunkban (és persze lusták vagyunk), elég egy NOPASSWD:ALL sor.
Nano
Valaki a vi/vim-et, más a joe/jmacs-ot szereti, én a nano-t. A ~/.profile
-ba lökjünk be egy EDITOR változót, aztán szerkesszük a konfigot.
$ nano ~/.profile
export EDITOR=nano
Lokalizáció
Csekkoljuk a rendelkezésre álló lokalizációkat.
$ locale -a
Ha kell, szerkesszük tetszés szerint a konfigot, majd generáljuk a lokalizációkat.
# nano /etc/locale.gen
# locale-gen
A dátum (és egyéb) formátum eltérhet az alapértelmezett nyelvtől.
# nano /etc/default/locale
LANG="en_US.UTF-8"
LC_TIME="hu_HU.UTF-8"
LC_NUMERIC="hu_HU.UTF-8"
LC_MEASUREMENT="hu_HU.UTF-8"
Nincs szükség NTP-démonra (amit emlékeim szerint régebben telepíteni kellett), a systemd-timesyncd működik NTP-kliensként. Állítsuk be az időzónát is.
# systemctl status systemd-timesyncd
$ timedatectl status
# timedatectl set-timezone Europe/Budapest
Alapvető eszközök
Az alábbiakra bármikor szükség lehet, én legalábbis rendszeresen használom őket:
# apt install curl dnsutils git htop mc pwgen rsync unzip whois
Biztonság
ufw
Publikus VPS-t nem érdemes üzemeltetni tűzfal és fail2ban nélkül. Az előbbi esetünkben az ufw (Uncomplicated Firewall), amely egy frontend az nftables-hez.
# apt install ufw
# ufw allow ssh
# ufw enable
fail2ban
Minden publikus VPS-re igaz: botok folyamatosan próbálkoznak az ssh-bejelentkezéssel, de a fail2ban jelentősen lassítja őket, gyakorlatilag lehetetlenné teszi a brute force betörést.
# apt install fail2ban
Például jó fail2ban beállítás lehet az alábbi: ha 1 napon belül 5 hibás próbálkozás történik, akkor 2 hétre tiltólistára kerül az IP-cím. A permaban nem jó ötlet.
# nano /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
filter = sshd
maxretry = 5
findtime = 1d
bantime = 2w
ignoreip = 127.0.0.1/8
Így nézhetjük meg a jail állapotát:
# fail2ban-client status sshd
ssh
Ha működik az új userrel az ssh és a sudo, tiltsuk a root ssh-t.
# nano /etc/ssh/sshd_config
# systemctl restart sshd
PermitRootLogin no
A jelszavas ssh logint viszont ne tiltsuk le, főleg ha csak egy RSA/ECDSA kulcsot adunk meg, ugyanis ha a privát kulcsunk valamiért elszáll, soha többé nem lépünk be a VPS-re. Ehelyett adjunk meg valami hosszú jelszót, amit tároljunk biztonságos helyen (értsd KeePassXC vagy Bitwarden).
Az alapértelmezett ssh-port (22) megváltoztatása nagyságrendekkel vetheti vissza a botpróbálkozások számát, ezért hasznos lehet, de nem biztonsági inzézkedés. Megváltoztatáskor viszont ügyeljünk az ufw-szabályokra, mert kizárhatjuk magunkat!
unattended-upgrades
# apt install unattended-upgrades
-
A magyar szolgáltatók eléggé alulmaradnak az árversenyben, ezért nem jönnek számításba. (Pl. a DotRoll KVM-1G havi 9,6 EUR, a hozzá hasonlítható, de mégis jobb paraméterekkel rendelkező Hetzner CX11 havi 4,8 EUR bruttóban.) ↩︎
-
Általában óra alapú a számlázás, ilyen esetben pedig 3-4 Ft/óra díjazásról van szó. Tehát bátran kipróbálhatjuk, tesztelhetjük a VPS-t, és amikor végeztünk, töröljük. ↩︎