पहले 30 मिनट: VPS हार्डनिंग चेकलिस्ट
एक नए VPS को IP मिलते ही पहला SSH प्रोब कुछ ही मिनटों में आ जाता है। यह वह सटीक क्रम है जो मैं हर नए बॉक्स पर चलाता हूं — Debian 13 के लिए कॉपी-पेस्ट तैयार, अंत में एक चेकलिस्ट तालिका के साथ।
मान्यताएं: आपके VPSRento तैनाती से एक नया Debian 13 इमेज, आप root के रूप में SSH पर लॉग इन हैं, और उदाहरण IP 185.220.101.14 है — अपना बदलें। कुल समय: लगभग आधा घंटा। चरणों को क्रम में करें; यदि आप जल्दबाजी करते हैं तो चरण 2 आपको बाहर कर सकता है।
1. अपना sudo उपयोगकर्ता बनाएं
रूट के रूप में काम करना वह तरीका है जिससे टाइपो घटनाएं बन जाती हैं। एक वास्तविक उपयोगकर्ता बनाएं, उसे sudo दें, और सब कुछ वहां से करें:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
इस बिंदु के बाद सब कुछ ops के रूप में चलता है जब तक अन्यथा न कहा जाए।
2. केवल SSH कुंजियां — कोई पासवर्ड नहीं, कोई रूट लॉगिन नहीं
पासवर्ड प्रमाणीकरण इंटरनेट-सामने वाले बॉक्स पर सबसे बड़ा छेद है। बॉट पोर्ट 22 पर क्रेडेंशियल सूचियों के साथ दिन-रात हथौड़ा मारते हैं। कुंजियां पूरे हमले की श्रेणी को अप्रासंगिक बना देती हैं। आपकी स्थानीय मशीन पर:
# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"
# push the public key to the server
ssh-copy-id [email protected]
कॉन्फ़िगरेशन को छूने से पहले एक नए टर्मिनल — ssh [email protected] —। मौजूदा रूट सत्र को अपने बचाव द्वार के रूप में खुला रखें। फिर /etc/ssh/sshd_config:
# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh
prohibit-password को संपादित करें, एक फ्लैट no के बजाय जानबूझकर रूट के लिए: रूट अभी भी आपके वर्कस्टेशन से कुंजी के साथ प्रमाणित कर सकता है, जो प्रदाता-कंसोल पुनर्प्राप्ति के लिए कभी-कभी उपयोगी होता है — लेकिन कोई पासवर्ड कभी काम नहीं करेगा, किसी के लिए, कहीं से भी। sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
के साथ पुष्टि करें।
3. फ़ायरवॉल: डिफ़ॉल्ट अस्वीकार, केवल वही अनुमति दें जो आप चलाते हैं
apt update && apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'
# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw enable
ufw status verbose
Debian का ufw nftables के ऊपर एक पतली, समझदार परत है। नीति सुरक्षा है; नियम केवल इसके अपवाद हैं:
आपके द्वारा खोला गया हर पोर्ट का एक नाम और एक कारण होना चाहिए। यदि आप नहीं बता सकते कि पोर्ट किस लिए है, तो उसे नियम नहीं मिलता।
4. fail2ban: बॉट्स को धीमा करें
apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
systemctl enable --now fail2ban
# watch it work
fail2ban-client status sshd
पासवर्ड प्रमाणीकरण अक्षम होने पर, ब्रूट फोर्स पहले ही मर चुका है — लेकिन fail2ban आपके लॉग को पठनीय रखता है और उन स्कैनरों पर प्रतिबंध लगाता है जो बाकी सब कुछ खोदते हैं:
5. स्वचालित सुरक्षा अपडेट
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
अनपैच किया गया CVE रीबूट से बड़ा जोखिम है। Debian का unattended-upgrades सुरक्षा अपडेट अपने आप इंस्टॉल करता है: /etc/apt/apt.conf.d/50unattended-upgrades में डिफ़ॉल्ट कॉन्फ़िगरेशन केवल सुरक्षा सूट से खींचता है — जो आप एक सर्वर पर चाहते हैं: सुरक्षा फिक्स स्वचालित रूप से, बाकी सब जब आप चुनें।
6. जो आप नहीं चलाते उसे बंद करें
हर चल रही सेवा हमले की सतह है जिसे आपको पैच करना है। देखें कि वास्तव में क्या सुन रहा है:
# who is listening, on what, as which process
ss -tulpn
# everything enabled at boot
systemctl list-unit-files --state=enabled
# example: you don't run a print server — nobody does
systemctl disable --now cups
नियम: यदि आप नहीं बता सकते कि एक लिसनर क्या करता है, तो उसे जीवित रखने से पहले पता करें। एक न्यूनतम VPSRento इमेज पर sshd और आपके अपने एप्लिकेशन के अलावा बहुत कम होना चाहिए।
7. वैकल्पिक लेकिन अनुशंसित: एक WireGuard प्रबंधन प्लेन
SSH सुरक्षा का सबसे मजबूत संस्करण वह SSH है जो इंटरनेट का सामना ही नहीं करता। बॉक्स पर WireGuard चलाएं, SSH को केवल टनल के अंदर अनुमति दें, और पोर्ट 22 पृथ्वी के हर स्कैनर से गायब हो जाता है:
apt install -y wireguard
# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820
# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp
systemctl enable --now wg-quick@wg0
उसके बाद आप ssh [email protected] टनल के माध्यम से करें, और सार्वजनिक IP केवल एक UDP पोर्ट पर उत्तर देता है। पूरा WireGuard वॉकथ्रू — कुंजियाँ, पीयर, क्लाइंट कॉन्फ़िग, फ़ोन QR कोड — साथी गाइड.
10-बिंदु चेकलिस्ट
हर नई डिप्लॉय के बाद इस तालिका को चलाएं, और हर सेवा जोड़ने के बाद फिर से:
| # | आइटम | यह कहाँ रहता है | इससे सत्यापित करें |
|---|---|---|---|
| 1 | गैर-रूट sudo उपयोगकर्ता | /etc/passwd | id ops |
| 2 | केवल-कुंजी SSH प्रमाणीकरण | sshd_config | sshd -T | grep passwordauth |
| 3 | रूट पासवर्ड लॉगिन अक्षम | sshd_config | sshd -T | grep permitrootlogin |
| 4 | फ़ायरवॉल डिफ़ॉल्ट-अस्वीकार इनकमिंग | ufw | ufw status verbose |
| 5 | केवल नामित पोर्ट खुले | ufw | ufw status numbered |
| 6 | fail2ban sshd जेल सक्रिय | jail.local | fail2ban-client status sshd |
| 7 | सुरक्षा अपडेट स्वचालित | apt | systemctl status unattended-upgrades |
| 8 | कोई अस्पष्टीकृत लिसनर नहीं | — | ss -tulpn |
| 9 | WireGuard पर प्रबंधन (वैकल्पिक) | wg0.conf | wg show |
| 10 | हार्डनिंग के बाद स्नैपशॉट | क्लाइंट क्षेत्र ऐड-ऑन, $1.99/माह | सेवाएँ → आपका VPS → स्नैपशॉट |
आइटम 10 एक वाक्य का हकदार है: पहले हार्डन करें, दूसरे स्नैपशॉट लें, उसी क्रम में — एक साफ, हार्डन किए गए बॉक्स का स्नैपशॉट हर भविष्य की गलती के लिए आपका रोलबैक है। दैनिक ऑफसाइट स्नैपशॉट एक $1.99/माह ऐड-ऑन है क्लाइंट क्षेत्र में। तीस मिनट की रोकथाम, एक क्लिक का बीमा।