−25%

la planurile Windows anuale, până pe 31 oct. Vezi planurile

EQVPS
Începe

Cum configurezi un VPS cu Alpine Linux: apk, doas, OpenRC și un firewall

Primii pași pe un VPS nou cu Alpine Linux 3.21: actualizare și repornire, un utilizator doas care chiar se poate autentifica, oprirea logării SSH pentru root și cu parolă, ufw, cron și actualizări zilnice. Plus portul Docker pe care ufw nu îl blochează.

Alpine Linux este cea mai mică imagine pe care o oferim. Pe serverele noastre, un Alpine 3.21 proaspăt instalat folosea în repaus 55 MB de RAM și 153 MB de disc, față de 313 MB și 2,7 GB la Ubuntu 24.04. În schimb renunți la uneltele obișnuite. Alpine folosește apk în loc de apt, doas în loc de sudo, OpenRC în loc de systemd și musl în loc de glibc.

Pașii de mai jos sunt aceleași primele zece minute ca pe Debian sau Ubuntu, traduse pentru Alpine. Am rulat fiecare comandă pe imaginea noastră Alpine 3.21 înainte de publicare, iar două dintre ele ne-au prins prima dată. Autentifică-te ca root cu parola din panou.

1. Actualizează, apoi repornește o dată

apk update && apk upgrade
uname -r
ls /lib/modules

Serverul a instalat deja actualizările disponibile la prima pornire, așa că apk upgrade are de obicei puțin de făcut. Uită-te mai degrabă la ultimele două linii. Dacă acea primă actualizare a adus un kernel nou, kernelul care rulează (uname -r) nu mai are modulele pe disc. Tot ce încarcă un modul eșuează apoi până repornești. Pe serverul nostru de test, instalarea firewallului a afișat ERROR: Couldn't determine iptables version. Dacă cele două versiuni diferă, repornește acum:

reboot

Serverul nostru de test a revenit în mai puțin de un minut.

2. Creează un utilizator care se poate autentifica

adduser -D deploy
passwd deploy
adduser deploy wheel

Nu sări peste passwd. adduser -D creează contul fără parolă, Alpine îl marchează ca blocat, iar sshd refuză un cont blocat chiar și cu cheia corectă. În testul nostru, singurul indiciu a fost această linie din /var/log/messages:

User deploy not allowed because account is locked

Parola contează și mai târziu: pe ea o va cere doas.

Dacă ai adăugat o cheie SSH când ai comandat serverul, ea se află în authorized_keys al lui root. Copiaz-o pentru noul utilizator:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys

Nu ai încă o cheie? Creează una pe calculatorul tău și lipește partea publică în /home/deploy/.ssh/authorized_keys.

3. Fă doas să ceară parola

Alpine folosește doas în loc de sudo, iar imaginea noastră îl permite deja grupului wheel. Regula din /etc/doas.d/wheel.conf este permit nopass :wheel, deci orice membru wheel devine root fără să tasteze nimic. Fă-l să ceară parola și s-o țină minte câteva minute:

echo 'permit persist :wheel' > /etc/doas.d/wheel.conf

De acum, doas apk add nano funcționează ca sudo apt install nano pe Ubuntu.

4. SSH: doar chei, fără root

sshd citește fișierele din /etc/ssh/sshd_config.d/ în ordinea numelor și păstrează prima valoare găsită pentru fiecare setare. În imaginea noastră primul fișier este 00-eqvps.conf, care permite root și parole ca să poți intra din prima zi. Înlocuiește-i conținutul:

cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '

A treia linie contează pe Alpine. Imaginea rulează varianta OpenSSH cu PAM, iar doar cu primele două linii serverul nostru de test încă oferea autentificarea keyboard-interactive. Cu toate trei, o încercare fără cheie primește:

Permission denied (publickey).

Lasă sesiunea root deschisă. Într-un al doilea terminal, verifică dacă ssh deploy@YOUR.SERVER.IP merge (pe un plan NAT adaugă -p și portul personal din panou) și dacă doas id acceptă parola.

5. Firewall: ufw

ufw se află în depozitul community, activat deja în imaginea noastră:

apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status

limit lasă SSH să treacă, dar încetinește pe oricine deschide multe conexiuni la rând. rc-update contează aici, pentru că OpenRC nu pornește firewallul după o repornire dacă nu îl adaugi în runlevel. După repornire, serverul nostru a revenit cu Status: active. Pe un plan NAT lasă SSH pe portul 22: portul tău extern personal e redirecționat spre 22 în server. Pe un plan cu IPv4 propriu, deschide porturile web când ai nevoie (ufw allow 80/tcp, ufw allow 443/tcp). Ghidul ufw acoperă restul.

6. Pornește cron și actualizările zilnice

Un Alpine proaspăt instalat nu rulează deloc cron. Pornește-l:

rc-update add crond default
rc-service crond start

crontab-ul lui root din Alpine rulează deja tot ce se află în /etc/periodic/daily la 02:00. Pune acolo un script de actualizare:

cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily

Ultima comandă listează scripturile pe care le va rula cron, iar al tău ar trebui să fie printre ele. Așa primești remedierile pentru 3.21. Trecerea la următoarea versiune Alpine este un pas separat, manual. Actualizările de kernel tot cer repornire: repetă din când în când verificarea uname -r / ls /lib/modules din pasul 1.

7. OpenRC într-un tabel

Dacă știi systemd, cam asta se schimbă:

AcțiunesystemdAlpine (OpenRC)
Pornește un serviciusystemctl start nginxrc-service nginx start
Pornire la bootsystemctl enable nginxrc-update add nginx default
Staresystemctl status nginxrc-service nginx status
Ce ruleazăsystemctl list-unitsrc-status
Jurnalul sistemuluijournalctl/var/log/messages

8. Docker și portul pe care ufw nu îl blochează

Alpine este o gazdă bună pentru Docker, pentru că sistemul însuși nu stă în cale:

apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world

Pe serverul nostru a durat 12 secunde, cu tot cu descărcarea. Cu daemonul Docker pornit, memoria folosită a crescut de la 57 MB la 124 MB.

O capcană care nu ține doar de Alpine: Docker își scrie propriile reguli de firewall. Cu ufw permițând doar SSH, am pornit nginx cu -p 8080:80 și l-am accesat din afara serverului pe portul 8080. ufw nu l-a blocat. Dacă un container trebuie să fie accesibil doar printr-un reverse proxy de pe același server, publică-l pe localhost:

docker run -d -p 127.0.0.1:8080:80 nginx:alpine

Ce plan

Alpine lasă aproape toată memoria RAM pentru software-ul tău. Planul Nano (2 vCPU, 1 GB, 15 GB, $3/lună) ajunge pentru un serviciu mic sau câteva containere. Este un plan NAT, deci SSH intră printr-un port personal. Dacă ai nevoie de porturile 80 și 443 deschise spre internet, Nano-IP are IPv4 propriu pentru $8/lună. Pentru stive Docker mai grele, Micro îți dă 2 GB pentru $5/lună.

Alpine 3.21 este pe pagina Alpine VPS și disponibil pe toate planurile Linux din VPS. Plata se face în USDT, USDC sau ETH pe Base, Ethereum sau Polygon, fără act de identitate și fără card.

Întrebări frecvente

De ce este Alpine mult mai mic decât Ubuntu sau Debian?

Folosește musl în loc de glibc, BusyBox pentru comenzile de bază și OpenRC în loc de systemd. Pe serverele noastre, un Alpine 3.21 proaspăt instalat folosea în repaus 55 MB de RAM și 153 MB de disc. Ubuntu 24.04 folosea 313 MB și 2,7 GB.

De ce noul utilizator primește „account is locked” deși cheia e corectă?

adduser -D creează contul fără parolă, Alpine îl marchează ca blocat, iar sshd refuză acel utilizator chiar și cu o cheie validă. Linia din jurnal este „User deploy not allowed because account is locked”. Setează o parolă cu passwd și autentificarea cu cheie începe să meargă.

De ce nu funcționează un tunel SSH pe Alpine?

Fișierul implicit /etc/ssh/sshd_config din Alpine setează AllowTcpForwarding no, așa că redirecționările ssh -L sunt refuzate. Dacă ai nevoie de tuneluri, schimbă valoarea în yes în acel fișier și rulează rc-service sshd restart.

Va rula programul meu pe Alpine?

Tot ce vine din depozitele Alpine rulează, la fel și containerele Docker construite pe orice imagine de bază. Binarele Linux precompilate pentru glibc adesea nu pornesc pe musl. Caută o versiune pentru Alpine sau musl ori rulează programul în Docker. Pachetul gcompat ajută la unele binare glibc simple.

Ce plan ajunge pentru Alpine?

Planul Nano de 1 GB la $3 pe lună are spațiu din belșug: sistemul însuși folosește cam 55 MB. Dacă ai nevoie de porturile 80 și 443 deschise spre internet, alege Nano-IP la $8 pe lună, cu IPv4 propriu.

Comentarii

Încă nu există comentarii. Fii primul.

Lasă un comentariu

Comentariile sunt moderate înainte să apară.