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

  1. 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.) ↩︎

  2. Á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. ↩︎