−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

Alpine Linux VPS nasıl kurulur: apk, doas, OpenRC ve güvenlik duvarı

Yeni bir Alpine Linux 3.21 VPS'te ilk adımlar: güncelleyip yeniden başlatmak, gerçekten giriş yapabilen bir doas kullanıcısı oluşturmak, root ve parolayla SSH girişini kapatmak, ufw eklemek, cron ve günlük güncellemeleri açmak. ufw'nin engellemediği Docker portu da dahil.

Alpine Linux sunduğumuz en küçük imaj. Sunucularımızda yeni kurulmuş bir Alpine 3.21 boşta 55 MB RAM ve 153 MB disk kullandı; Ubuntu 24.04 ise 313 MB ve 2,7 GB. Bunun karşılığında alışık olduğunuz araçlardan vazgeçersiniz. Alpine, apt yerine apk, sudo yerine doas, systemd yerine OpenRC ve glibc yerine musl kullanır.

Aşağıdaki adımlar, Debian ya da Ubuntu üzerindeki ilk on dakikanın Alpine'e uyarlanmış hâli. Yayımlamadan önce her komutu Alpine 3.21 imajımızda çalıştırdık ve ikisi ilk seferde bizi şaşırttı. Panelinizdeki parolayla root olarak giriş yapın.

1. Güncelleyin, sonra bir kez yeniden başlatın

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

Sunucunuz mevcut güncellemeleri ilk açılışta zaten kurdu, bu yüzden apk upgrade genellikle pek bir şey yapmaz. Bunun yerine son iki satıra bakın. O ilk güncelleme yeni bir çekirdek getirdiyse, çalışan çekirdeğin (uname -r) modülleri artık diskte değildir. Modül yükleyen her şey yeniden başlatana kadar hata verir. Test sunucumuzda güvenlik duvarı kurulumu ERROR: Couldn't determine iptables version yazdı. İki sürüm farklıysa şimdi yeniden başlatın:

reboot

Test sunucumuz bir dakikadan kısa sürede geri geldi.

2. Giriş yapabilen bir kullanıcı oluşturun

adduser -D deploy
passwd deploy
adduser deploy wheel

passwd adımını atlamayın. adduser -D hesabı parolasız oluşturur, Alpine onu kilitli olarak işaretler ve sshd kilitli bir hesabı doğru anahtarla bile reddeder. Testimizde tek ipucu /var/log/messages içindeki şu satırdı:

User deploy not allowed because account is locked

Parola daha sonra da gerekir: doas onu soracak.

Sunucuyu sipariş ederken bir SSH anahtarı eklediyseniz, root'un authorized_keys dosyasındadır. Yeni kullanıcıya kopyalayın:

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

Henüz anahtarınız yok mu? Bilgisayarınızda bir tane oluşturun ve açık kısmını /home/deploy/.ssh/authorized_keys içine yapıştırın.

3. doas parola sorsun

Alpine, sudo yerine doas kullanır ve imajımız wheel grubuna bunu zaten izin verir. /etc/doas.d/wheel.conf içindeki kural permit nopass :wheel olduğundan, wheel grubundaki herkes hiçbir şey yazmadan root olur. Parola sormasını ve birkaç dakika hatırlamasını sağlayın:

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

Artık doas apk add nano, Ubuntu'daki sudo apt install nano gibi çalışır.

4. SSH: yalnızca anahtar, root yok

sshd, /etc/ssh/sshd_config.d/ içindeki dosyaları ad sırasıyla okur ve her ayar için bulduğu ilk değeri tutar. İmajımızda ilk dosya 00-eqvps.conf'tur; ilk gün girebilmeniz için root ve parolayla girişe izin verir. İçeriğini değiştirin:

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

Üçüncü satır Alpine'de önemlidir. İmaj OpenSSH'nin PAM'li sürümünü kullanır ve yalnızca ilk iki satırla test sunucumuz hâlâ keyboard-interactive girişi sunuyordu. Üçü birlikteyken anahtarsız bir giriş denemesi şunu alır:

Permission denied (publickey).

root oturumunuzu açık tutun. İkinci bir terminalde ssh deploy@YOUR.SERVER.IP komutunun çalıştığını (NAT paketinde -p ve paneldeki kişisel portu ekleyin) ve doas id komutunun parolayı kabul ettiğini kontrol edin.

5. Güvenlik duvarı: ufw

ufw, imajımızda zaten etkin olan community deposunda bulunur:

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

limit, SSH'ye izin verir ama art arda çok sayıda bağlantı açanı yavaşlatır. rc-update burada önemlidir, çünkü OpenRC güvenlik duvarını runlevel'a eklemediğiniz sürece yeniden başlatmadan sonra çalıştırmaz. Yeniden başlatmanın ardından sunucumuz Status: active ile geri geldi. NAT paketinde SSH'yi 22 numaralı portta bırakın: kişisel dış portunuz sunucunun içinde 22'ye yönlendirilir. Kendi IPv4'ü olan pakette web portlarını gerektiğinde açın (ufw allow 80/tcp, ufw allow 443/tcp). Gerisi ufw rehberinde.

6. cron'u ve günlük güncellemeleri açın

Yeni bir Alpine sunucusu hiç cron çalıştırmaz. Açın:

rc-update add crond default
rc-service crond start

Alpine'de root'un crontab'ı /etc/periodic/daily içindeki her şeyi saat 02:00'de zaten çalıştırır. Oraya bir güncelleme betiği koyun:

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

Son komut cron'un çalıştıracağı betikleri listeler; sizinki de listede olmalı. Böylece 3.21 düzeltmelerini alırsınız. Sonraki Alpine sürümüne geçmek ayrı ve elle yapılan bir adımdır. Çekirdek güncellemeleri yine yeniden başlatma ister: 1. adımdaki uname -r / ls /lib/modules kontrolünü arada bir tekrarlayın.

7. Tek tabloda OpenRC

systemd biliyorsanız değişenlerin çoğu bunlar:

İşsystemdAlpine (OpenRC)
Servisi başlatsystemctl start nginxrc-service nginx start
Açılışta başlatsystemctl enable nginxrc-update add nginx default
Durumsystemctl status nginxrc-service nginx status
Neler çalışıyorsystemctl list-unitsrc-status
Sistem günlüğüjournalctl/var/log/messages

8. Docker ve ufw'nin engellemediği port

Alpine iyi bir Docker sunucusudur, çünkü sistemin kendisi pek araya girmez:

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

Sunucumuzda bu, indirme dahil 12 saniye sürdü. Docker hizmeti çalışırken kullanılan bellek 57 MB'tan 124 MB'a çıktı.

Yalnızca Alpine'e özgü olmayan bir tuzak: Docker kendi güvenlik duvarı kurallarını yazar. ufw yalnızca SSH'ye izin verirken nginx'i -p 8080:80 ile başlattık ve sunucunun dışından 8080 portundan ona ulaştık. ufw engellemedi. Bir konteynere yalnızca aynı sunucudaki bir ters vekil üzerinden erişilecekse onu localhost'ta yayımlayın:

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

Hangi paket

Alpine, RAM'in neredeyse tamamını kendi yazılımınıza bırakır. Nano paketi (2 vCPU, 1 GB, 15 GB, ayda $3) küçük bir servis ya da birkaç konteyner için yeterli. Bu bir NAT paketi, yani SSH kişisel bir porttan gelir. 80 ve 443 portlarının internete açık olması gerekiyorsa Nano-IP ayda $8'a kendi IPv4'ünü verir. Daha ağır Docker yığınları için Micro ayda $5'a 2 GB sunar.

Alpine 3.21, Alpine VPS sayfasında ve VPS bölümündeki tüm Linux paketlerinde mevcut. Ödeme Base, Ethereum veya Polygon ağlarında USDT, USDC veya ETH ile yapılır; kimlik ve kart gerekmez.

SSS

Alpine neden Ubuntu ya da Debian'dan bu kadar küçük?

glibc yerine musl, temel komutlar için BusyBox ve systemd yerine OpenRC kullanır. Sunucularımızda yeni kurulmuş bir Alpine 3.21 boşta 55 MB RAM ve 153 MB disk kullandı. Ubuntu 24.04 ise 313 MB ve 2,7 GB kullandı.

Anahtar doğru olduğu hâlde yeni kullanıcım neden "account is locked" alıyor?

adduser -D hesabı parolasız oluşturur, Alpine onu kilitli olarak işaretler ve sshd bu kullanıcıyı geçerli bir anahtarla bile reddeder. Günlükteki satır "User deploy not allowed because account is locked" şeklindedir. passwd ile kullanıcıya bir parola verin, anahtarla giriş çalışmaya başlar.

Alpine'de SSH tüneli neden çalışmıyor?

Alpine'in varsayılan /etc/ssh/sshd_config dosyası AllowTcpForwarding no ayarını içerir, bu yüzden ssh -L yönlendirmeleri reddedilir. Tünele ihtiyacınız varsa bu dosyada değeri yes yapın ve rc-service sshd restart çalıştırın.

Programım Alpine'de çalışır mı?

Alpine depolarındaki her şey çalışır; herhangi bir temel imaj üzerine kurulmuş Docker konteynerleri de öyle. glibc için derlenmiş hazır Linux ikili dosyaları musl üzerinde çoğu zaman başlamaz. Alpine ya da musl sürümü arayın veya programı Docker'da çalıştırın. gcompat paketi bazı basit glibc ikili dosyalarında işe yarar.

Alpine için hangi paket yeterli?

Ayda $3'lık 1 GB'lık Nano paketi bol bol yeter: sistemin kendisi yaklaşık 55 MB kullanır. 80 ve 443 portlarının internete açık olması gerekiyorsa, kendi IPv4'ü olan ayda $8'lık Nano-IP'yi seçin.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.