−25%

Windows के सालाना भुगतान पर, 31 अक्टूबर तक। प्लान देखें

EQVPS
शुरू करें

Alpine Linux VPS कैसे सेट करें: apk, doas, OpenRC और फ़ायरवॉल

नए Alpine Linux 3.21 VPS पर पहले कदम: अपडेट करके रीबूट करना, ऐसा doas यूज़र बनाना जो सच में लॉग इन कर सके, root और पासवर्ड वाला SSH लॉगिन बंद करना, ufw लगाना, cron और रोज़ाना अपडेट चालू करना। साथ में Docker का वह पोर्ट जिसे ufw नहीं रोकता।

Alpine Linux हमारी सबसे छोटी इमेज है। हमारे सर्वरों पर नया Alpine 3.21 खाली बैठे 55 MB RAM और 153 MB डिस्क ले रहा था, जबकि Ubuntu 24.04 ने 313 MB और 2.7 GB लिए। इसके बदले आप जाने-पहचाने टूल छोड़ते हैं। Alpine में apt की जगह apk, sudo की जगह doas, systemd की जगह OpenRC और glibc की जगह musl है।

नीचे दिए कदम वही पहले दस मिनट हैं जो Debian या Ubuntu पर होते हैं, बस Alpine के हिसाब से। प्रकाशित करने से पहले हमने हर कमांड अपनी Alpine 3.21 इमेज पर चलाई, और इनमें से दो ने पहली बार हमें उलझा दिया। डैशबोर्ड वाले पासवर्ड से root के रूप में लॉग इन करें।

1. अपडेट करें, फिर एक बार रीबूट करें

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

आपके सर्वर ने पहली बार बूट होते ही उपलब्ध अपडेट इंस्टॉल कर लिए हैं, इसलिए apk upgrade के पास आमतौर पर ज़्यादा काम नहीं बचता। इसकी जगह आख़िरी दो लाइनें देखें। अगर उस पहले अपडेट में नया कर्नेल आया था, तो चल रहे कर्नेल (uname -r) के मॉड्यूल अब डिस्क पर नहीं हैं। मॉड्यूल लोड करने वाली हर चीज़ रीबूट तक फ़ेल होगी। हमारे टेस्ट सर्वर पर फ़ायरवॉल इंस्टॉल करते समय यह आया: ERROR: Couldn't determine iptables version। अगर दोनों वर्ज़न अलग हैं, तो अभी रीबूट करें:

reboot

हमारा टेस्ट सर्वर एक मिनट से कम में लौट आया।

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 की जोड़ी थी, तो वह root की authorized_keys में है। उसे नए यूज़र के लिए कॉपी करें:

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 में sudo की जगह doas है, और हमारी इमेज इसे पहले से wheel ग्रुप के लिए खोल देती है। /etc/doas.d/wheel.conf में नियम permit nopass :wheel है, यानी wheel का कोई भी सदस्य बिना कुछ टाइप किए root बन जाता है। इसे बदलें ताकि यह पासवर्ड पूछे और फिर कुछ मिनट याद रखे:

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

अब doas apk add nano वैसे ही चलता है जैसे Ubuntu पर sudo apt install nano।

4. SSH: सिर्फ़ की, root नहीं

sshd /etc/ssh/sshd_config.d/ की फ़ाइलें नाम के क्रम से पढ़ता है और हर सेटिंग के लिए पहली मिली वैल्यू रखता है। हमारी इमेज में पहली फ़ाइल 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 पर तीसरी लाइन मायने रखती है। इमेज में OpenSSH का PAM वाला बिल्ड है, और सिर्फ़ पहली दो लाइनों के साथ हमारा टेस्ट सर्वर अब भी keyboard-interactive लॉगिन दे रहा था। तीनों लाइनों के साथ बिना की के लॉगिन की कोशिश को यह मिलता है:

Permission denied (publickey).

root सेशन खुला रखें। दूसरे टर्मिनल में जाँचें कि ssh deploy@YOUR.SERVER.IP चलता है (NAT प्लान पर -p और डैशबोर्ड वाला निजी पोर्ट जोड़ें) और doas id पासवर्ड स्वीकार करता है।

5. फ़ायरवॉल: ufw

ufw community रिपॉज़िटरी में है, जो हमारी इमेज में चालू है:

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

limit SSH को आने देता है, पर लगातार बहुत से कनेक्शन खोलने वाले को धीमा कर देता है। यहाँ rc-update ज़रूरी है, क्योंकि जब तक आप फ़ायरवॉल को runlevel में न जोड़ें, OpenRC रीबूट के बाद उसे शुरू नहीं करता। रीबूट के बाद हमारा सर्वर Status: active के साथ लौटा। NAT प्लान पर SSH को पोर्ट 22 पर ही रहने दें: आपका निजी बाहरी पोर्ट सर्वर के अंदर 22 पर फ़ॉरवर्ड होता है। अपने IPv4 वाले प्लान पर वेब पोर्ट तब खोलें जब ज़रूरत हो (ufw allow 80/tcp, ufw allow 443/tcp)। बाकी ufw गाइड में है।

6. cron और रोज़ाना अपडेट चालू करें

नया Alpine सर्वर cron बिल्कुल नहीं चलाता। इसे चालू करें:

rc-update add crond default
rc-service crond start

Alpine में root का crontab पहले से /etc/periodic/daily की हर चीज़ रात 02:00 बजे चलाता है। वहाँ एक अपडेट स्क्रिप्ट रखें:

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

आख़िरी कमांड वे स्क्रिप्ट दिखाती है जिन्हें cron चलाएगा, और आपकी स्क्रिप्ट सूची में होनी चाहिए। इस तरह आपको 3.21 के सुधार मिलते रहते हैं। Alpine की अगली रिलीज़ पर जाना अलग, हाथ से किया जाने वाला कदम है। कर्नेल अपडेट को अब भी रीबूट चाहिए: कदम 1 वाली uname -r / ls /lib/modules जाँच समय-समय पर दोहराते रहें।

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, Docker के लिए अच्छा होस्ट है क्योंकि सिस्टम ख़ुद लगभग रास्ते में नहीं आता:

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

हमारे सर्वर पर डाउनलोड समेत इसमें 12 सेकंड लगे। Docker डेमन चलने पर इस्तेमाल हो रही मेमोरी 57 MB से 124 MB हो गई।

एक जाल जो सिर्फ़ Alpine का नहीं है: Docker अपने फ़ायरवॉल नियम ख़ुद लिखता है। जब ufw सिर्फ़ SSH की इजाज़त दे रहा था, हमने nginx को -p 8080:80 के साथ चलाया और सर्वर के बाहर से पोर्ट 8080 पर उस तक पहुँच गए। ufw ने नहीं रोका। अगर किसी कंटेनर तक सिर्फ़ उसी सर्वर के reverse proxy से पहुँचना है, तो उसे localhost पर पब्लिश करें:

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

कौन-सा प्लान

Alpine लगभग पूरी RAM आपके अपने सॉफ़्टवेयर के लिए छोड़ता है। Nano प्लान (2 vCPU, 1 GB, 15 GB, $3/महीना) एक छोटी सर्विस या कुछ कंटेनरों के लिए काफ़ी है। यह NAT प्लान है, इसलिए SSH एक निजी पोर्ट से आता है। अगर पोर्ट 80 और 443 इंटरनेट के लिए खुले चाहिए, तो Nano-IP में $8/महीना पर अपना IPv4 है। भारी Docker स्टैक के लिए Micro $5/महीना में 2 GB देता है।

Alpine 3.21 Alpine VPS पेज पर है और VPS के हर Linux प्लान पर उपलब्ध है। भुगतान Base, Ethereum या Polygon नेटवर्क पर USDT, USDC या ETH में होता है, बिना पहचान पत्र और कार्ड के।

सामान्य प्रश्न

Alpine, Ubuntu या Debian से इतना छोटा क्यों है?

यह glibc की जगह musl, बुनियादी कमांड के लिए BusyBox और systemd की जगह OpenRC इस्तेमाल करता है। हमारे सर्वरों पर नया 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 से यूज़र का पासवर्ड रखें, फिर की से लॉगिन चलने लगेगा।

Alpine पर SSH टनल क्यों नहीं चलती?

Alpine की डिफ़ॉल्ट /etc/ssh/sshd_config में AllowTcpForwarding no होता है, इसलिए ssh -L फ़ॉरवर्डिंग मना हो जाती है। टनल चाहिए तो इसी फ़ाइल में इसे yes करें और rc-service sshd restart चलाएँ।

क्या मेरा प्रोग्राम Alpine पर चलेगा?

Alpine रिपॉज़िटरी की हर चीज़ चलती है, और किसी भी बेस इमेज पर बने Docker कंटेनर भी। glibc के लिए बनी तैयार Linux फ़ाइलें musl पर अक्सर शुरू नहीं होतीं। Alpine या musl वाला वर्ज़न ढूँढें, या प्रोग्राम को Docker में चलाएँ। gcompat पैकेज कुछ सरल glibc फ़ाइलों में मदद करता है।

Alpine के लिए कौन-सा प्लान काफ़ी है?

$3 महीने वाला 1 GB का Nano प्लान खूब जगह देता है: सिस्टम ख़ुद लगभग 55 MB लेता है। अगर पोर्ट 80 और 443 इंटरनेट के लिए खुले चाहिए, तो $8 महीने वाला Nano-IP लें, जिसमें अपना IPv4 है।

टिप्पणियाँ

अभी तक कोई टिप्पणी नहीं। पहले बनें।

एक टिप्पणी छोड़ें

टिप्पणियाँ दिखने से पहले मॉडरेट की जाती हैं।