−25%

στα Windows με ετήσια χρέωση, έως 31/10. Δείτε τα πακέτα

EQVPS
Ξεκινήστε

Πώς να στήσετε ένα VPS με Alpine Linux: apk, doas, OpenRC και τείχος προστασίας

Τα πρώτα βήματα σε ένα νέο VPS με Alpine Linux 3.21: ενημέρωση και επανεκκίνηση, χρήστης doas που μπορεί πραγματικά να συνδεθεί, απενεργοποίηση σύνδεσης SSH για root και με κωδικό, ufw, cron και καθημερινές ενημερώσεις. Μαζί και η θύρα του Docker που το ufw δεν μπλοκάρει.

Το Alpine Linux είναι το μικρότερο image που προσφέρουμε. Στους servers μας ένα νέο Alpine 3.21 σε αδράνεια χρησιμοποιούσε 55 MB RAM και 153 MB δίσκου, έναντι 313 MB και 2,7 GB για το Ubuntu 24.04. Το τίμημα είναι ότι αφήνετε τα γνώριμα εργαλεία. Το Alpine χρησιμοποιεί apk αντί για apt, doas αντί για sudo, OpenRC αντί για systemd και musl αντί για glibc.

Τα παρακάτω βήματα είναι τα ίδια πρώτα δέκα λεπτά όπως στο Debian ή στο Ubuntu, προσαρμοσμένα στο Alpine. Τρέξαμε κάθε εντολή στο image μας με Alpine 3.21 πριν τη δημοσίευση, και δύο από αυτές μας ξάφνιασαν την πρώτη φορά. Συνδεθείτε ως root με τον κωδικό από τον πίνακα ελέγχου.

1. Ενημερώστε και κάντε μία επανεκκίνηση

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

Ο server σας εγκατέστησε ήδη τις διαθέσιμες ενημερώσεις στην πρώτη εκκίνηση, οπότε το apk upgrade συνήθως έχει λίγα να κάνει. Κοιτάξτε καλύτερα τις δύο τελευταίες γραμμές. Αν εκείνη η πρώτη ενημέρωση έφερε νέο πυρήνα, ο πυρήνας που τρέχει (uname -r) δεν έχει πλέον τα modules του στον δίσκο. Ό,τι φορτώνει module αποτυγχάνει μέχρι να κάνετε επανεκκίνηση. Στον δοκιμαστικό μας server η εγκατάσταση του τείχους προστασίας τύπωσε ERROR: Couldn't determine iptables version. Αν οι δύο εκδόσεις διαφέρουν, κάντε επανεκκίνηση τώρα:

reboot

Ο δοκιμαστικός μας server επέστρεψε σε λιγότερο από ένα λεπτό.

2. Δημιουργήστε χρήστη που μπορεί να συνδεθεί

adduser -D deploy
passwd deploy
adduser deploy wheel

Μην παραλείψετε το passwd. Το adduser -D δημιουργεί τον λογαριασμό χωρίς κωδικό, το Alpine τον σημειώνει ως κλειδωμένο και το sshd απορρίπτει κλειδωμένο λογαριασμό ακόμη και με σωστό κλειδί. Στη δοκιμή μας η μόνη ένδειξη ήταν αυτή η γραμμή στο /var/log/messages:

User deploy not allowed because account is locked

Ο κωδικός χρειάζεται και αργότερα: αυτόν θα ζητάει το doas.

Αν προσθέσατε κλειδί SSH όταν παραγγείλατε τον server, βρίσκεται στο authorized_keys του root. Αντιγράψτε το στον νέο χρήστη:

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

Δεν έχετε ακόμη κλειδί; Δημιουργήστε ένα στον υπολογιστή σας και επικολλήστε το δημόσιο μέρος στο /home/deploy/.ssh/authorized_keys.

3. Βάλτε το doas να ζητάει κωδικό

Το Alpine χρησιμοποιεί doas αντί για sudo, και το image μας το επιτρέπει ήδη στην ομάδα wheel. Ο κανόνας στο /etc/doas.d/wheel.conf είναι permit nopass :wheel, άρα κάθε μέλος του wheel γίνεται root χωρίς να πληκτρολογήσει τίποτα. Κάντε το να ζητάει τον κωδικό και να τον θυμάται για λίγα λεπτά:

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

Από εδώ και πέρα το doas apk add nano λειτουργεί όπως το sudo apt install nano στο Ubuntu.

4. SSH: μόνο κλειδιά, χωρίς root

Το sshd διαβάζει τα αρχεία στο /etc/ssh/sshd_config.d/ με σειρά ονόματος και κρατά την πρώτη τιμή που βρίσκει για κάθε ρύθμιση. Στο image μας το πρώτο αρχείο είναι το 00-eqvps.conf, που επιτρέπει root και κωδικούς ώστε να μπείτε την πρώτη μέρα. Αντικαταστήστε το περιεχόμενό του:

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) '

Η τρίτη γραμμή μετράει στο Alpine. Το image τρέχει την έκδοση του OpenSSH με PAM, και μόνο με τις δύο πρώτες γραμμές ο δοκιμαστικός μας server εξακολουθούσε να προσφέρει σύνδεση keyboard-interactive. Με όλες τις τρεις, μια προσπάθεια σύνδεσης χωρίς κλειδί παίρνει:

Permission denied (publickey).

Κρατήστε ανοιχτή τη συνεδρία root. Σε δεύτερο τερματικό ελέγξτε ότι το ssh deploy@YOUR.SERVER.IP λειτουργεί (σε πακέτο NAT προσθέστε -p και την προσωπική θύρα από τον πίνακα ελέγχου) και ότι το doas id δέχεται τον κωδικό.

5. Τείχος προστασίας: ufw

Το ufw βρίσκεται στο αποθετήριο community, που είναι ενεργό στο image μας:

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

Το limit επιτρέπει το SSH αλλά επιβραδύνει όποιον ανοίγει πολλές συνδέσεις στη σειρά. Το rc-update μετράει εδώ, γιατί το OpenRC δεν ξεκινά το τείχος μετά από επανεκκίνηση αν δεν το προσθέσετε στο runlevel. Μετά την επανεκκίνηση ο server μας επέστρεψε με Status: active. Σε πακέτο NAT αφήστε το SSH στη θύρα 22: η προσωπική εξωτερική σας θύρα προωθείται στην 22 μέσα στον server. Σε πακέτο με δική του IPv4 ανοίξτε θύρες web όταν τις χρειαστείτε (ufw allow 80/tcp, ufw allow 443/tcp). Τα υπόλοιπα στον οδηγό για το ufw.

6. Ενεργοποιήστε το cron και τις καθημερινές ενημερώσεις

Ένας νέος server με Alpine δεν τρέχει καθόλου cron. Ενεργοποιήστε το:

rc-update add crond default
rc-service crond start

Το crontab του root στο Alpine τρέχει ήδη ό,τι υπάρχει στο /etc/periodic/daily στις 02:00. Βάλτε εκεί ένα script ενημέρωσης:

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

Η τελευταία εντολή δείχνει τα scripts που θα τρέξει το cron, και το δικό σας πρέπει να είναι στη λίστα. Έτσι παίρνετε τις διορθώσεις για την 3.21. Η μετάβαση στην επόμενη έκδοση του Alpine είναι ξεχωριστό, χειροκίνητο βήμα. Οι ενημερώσεις πυρήνα θέλουν πάντα επανεκκίνηση: επαναλαμβάνετε πότε πότε τον έλεγχο uname -r / ls /lib/modules από το βήμα 1.

7. Το OpenRC σε έναν πίνακα

Αν ξέρετε systemd, αυτά είναι σχεδόν όλα όσα αλλάζουν:

ΕργασίαsystemdAlpine (OpenRC)
Εκκίνηση υπηρεσίαςsystemctl start nginxrc-service nginx start
Εκκίνηση με το σύστημαsystemctl enable nginxrc-update add nginx default
Κατάστασηsystemctl status nginxrc-service nginx status
Τι τρέχειsystemctl list-unitsrc-status
Αρχείο καταγραφήςjournalctl/var/log/messages

8. Docker, και η θύρα που το ufw δεν μπλοκάρει

Το Alpine είναι καλός host για Docker, γιατί το ίδιο το σύστημα σχεδόν δεν ενοχλεί:

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

Στον server μας αυτό πήρε 12 δευτερόλεπτα μαζί με τη λήψη. Με τον daemon του Docker σε λειτουργία, η χρησιμοποιούμενη μνήμη ανέβηκε από 57 MB σε 124 MB.

Μια παγίδα που δεν αφορά μόνο το Alpine: το Docker γράφει δικούς του κανόνες τείχους προστασίας. Ενώ το ufw επέτρεπε μόνο SSH, ξεκινήσαμε το nginx με -p 8080:80 και το φτάσαμε από έξω στη θύρα 8080. Το ufw δεν το μπλόκαρε. Αν ένα container πρέπει να είναι προσβάσιμο μόνο μέσω reverse proxy στον ίδιο server, δημοσιεύστε το στο localhost:

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

Ποιο πακέτο

Το Alpine αφήνει σχεδόν όλη τη RAM στο δικό σας λογισμικό. Το πακέτο Nano (2 vCPU, 1 GB, 15 GB, $3/μήνα) αρκεί για μια μικρή υπηρεσία ή μερικά containers. Είναι πακέτο NAT, οπότε το SSH έρχεται από προσωπική θύρα. Αν χρειάζεστε τις θύρες 80 και 443 ανοιχτές στο internet, το Nano-IP έχει δική του IPv4 για $8/μήνα. Για βαρύτερα stacks Docker, το Micro δίνει 2 GB για $5/μήνα.

Το Alpine 3.21 υπάρχει στη σελίδα Alpine VPS και σε κάθε πακέτο Linux στην ενότητα VPS. Η πληρωμή γίνεται σε USDT, USDC ή ETH στα δίκτυα Base, Ethereum ή Polygon, χωρίς ταυτότητα ή κάρτα.

Συχνές ερωτήσεις

Γιατί το Alpine είναι τόσο μικρότερο από το Ubuntu ή το Debian;

Χρησιμοποιεί musl αντί για glibc, BusyBox για τις βασικές εντολές και OpenRC αντί για systemd. Στους servers μας ένα νέο Alpine 3.21 σε αδράνεια χρησιμοποιούσε 55 MB RAM και 153 MB δίσκου. Το Ubuntu 24.04 χρησιμοποιούσε 313 MB και 2,7 GB.

Γιατί ο νέος χρήστης παίρνει «account is locked» ενώ το κλειδί είναι σωστό;

Το adduser -D δημιουργεί τον λογαριασμό χωρίς κωδικό, το Alpine τον σημειώνει ως κλειδωμένο και το sshd απορρίπτει τον χρήστη ακόμη και με έγκυρο κλειδί. Η γραμμή στο αρχείο καταγραφής είναι «User deploy not allowed because account is locked». Δώστε κωδικό στον χρήστη με το passwd και η σύνδεση με κλειδί λειτουργεί.

Γιατί δεν λειτουργεί ένα SSH tunnel στο Alpine;

Το προεπιλεγμένο /etc/ssh/sshd_config του Alpine ορίζει AllowTcpForwarding no, οπότε οι προωθήσεις ssh -L απορρίπτονται. Αν χρειάζεστε tunnels, αλλάξτε την τιμή σε yes σε αυτό το αρχείο και εκτελέστε rc-service sshd restart.

Θα τρέξει το πρόγραμμά μου στο Alpine;

Ό,τι προέρχεται από τα αποθετήρια του Alpine τρέχει, όπως και τα containers του Docker πάνω σε οποιοδήποτε βασικό image. Έτοιμα εκτελέσιμα Linux φτιαγμένα για glibc συχνά δεν ξεκινούν σε musl. Ψάξτε έκδοση για Alpine ή musl ή τρέξτε το πρόγραμμα σε Docker. Το πακέτο gcompat βοηθά με ορισμένα απλά εκτελέσιμα glibc.

Ποιο πακέτο αρκεί για το Alpine;

Το πακέτο Nano με 1 GB για $3 τον μήνα έχει άφθονο περιθώριο: το ίδιο το σύστημα χρησιμοποιεί περίπου 55 MB. Αν χρειάζεστε τις θύρες 80 και 443 ανοιχτές στο internet, πάρτε το Nano-IP για $8 τον μήνα, με δική του IPv4.

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.