नया खरीदा हुआ VPS बिल्कुल एक बिना ताले का दरवाज़ा है, दुनिया भर के स्क्रिप्ट किड्स इस पर दस्तक दे रहे हैं। ये लेख आपको दरवाज़ा सुरक्षित करना सिखाएगा। ताकि आपका लॉबस्टर (openclaw) यहाँ-वहाँ भागकर शैतानी न करे।

0、शुरुआत से पहले

अभी-अभी एक नया VPS खरीदा है, IP और root पासवर्ड मिलते ही आप उत्साह में हैं, फिर?

ज़्यादातर लोग क्या करते हैं: सीधे सॉफ्टवेयर इंस्टॉल करना और प्रोजेक्ट डिप्लॉय करना शुरू कर देते हैं।

ये एक खतरनाक आदत है।

आपके VPS का एक पब्लिक IP है, मतलब दुनिया में कोई भी इससे कनेक्ट करने की कोशिश कर सकता है। और डिफ़ॉल्ट कॉन्फ़िगरेशन में:

  • पोर्ट पब्लिक रूप से खुला है 22
  • यूज़रनेम सबको पता है: root
  • बस एक पासवर्ड आपकी सुरक्षा कर रहा है

हर रोज़ अनगिनत ऑटोमेटेड स्क्रिप्ट IP रेंज स्कैन कर रही हैं और आम पासवर्ड से ब्रूट-फ़ोर्स अटैक करने की कोशिश कर रही हैं। आपका सर्वर जिस पल ऑनलाइन होता है, उसी पल से अटैक हो रहा है।

इसलिए, VPS मिलते ही सबसे पहला काम सॉफ्टवेयर इंस्टॉल करना नहीं, बल्कि सुरक्षा सेटअप करना है


1、हमारा लक्ष्य

इस लेख का लक्ष्य ये है:

  • Secure remote access सेटअप करना: SSH key लॉगिन + डिफ़ॉल्ट पोर्ट को बदलना
  • ✅ एक नॉर्मल यूज़र बनाना: सीधे root का इस्तेमाल करने से बचें
  • फ़ायरवॉल कॉन्फ़िगर करना: सिर्फ़ ज़रूरी पोर्ट ही खोलें
  • नेटवर्क बूस्ट चालू करना: BBR से नेटवर्क को उड़ान दें
  • ब्रूट-फ़ोर्स अटैक रोकना: fail2ban से खतरनाक IP अपने-आप बैन करें

ये सब कर लेने के बाद, आपके VPS की नींव एकदम मज़बूत हो जाएगी और फिर आप बेफ़िक्र होकर अपनी किसी भी सर्विस को डिप्लॉय कर सकते हैं।


2. प्लान और सोच

ये सब कॉन्फ़िगरेशन करने की ज़रूरत क्यों है?

नया ख़रीदा हुआ VPS बिल्कुल उसी तरह है जैसे किसी नए मकान का खाली कच्चा कमरा:

डिफ़ॉल्ट स्थिति जोखिम हमारा समाधान
root यूज़र से सीधे लॉगिन बहुत ज़्यादा परमिशन, गलती से बड़ा नुक़सान हो सकता है नया नॉर्मल यूज़र बनाएं + sudo
पासवर्ड से लॉगिन ब्रूट-फ़ोर्स अटैक हो सकता है SSH की (key) से लॉगिन
डिफ़ॉल्ट पोर्ट 22 स्कैनर इसे सबसे पहले टारगेट करते हैं किसी नॉन-स्टैंडर्ड पोर्ट पर शिफ्ट करें
फ़ायरवॉल बंद सारे पोर्ट बाहर की दुनिया के लिए खुले UFW से सिर्फ़ ज़रूरी पोर्ट ही खोलें
नेटिव नेटवर्क पैकेट लॉस ज़्यादा, लेटेंसी भी बढ़ी हुई BBR कंजेशन कंट्रोल एल्गोरिदम

पूरा प्रोसेस

VPS初始化流程

हम इसी क्रम से सब कुछ सेट अप करेंगे, और हर स्टेप पर मैं आपको बताऊंगा कि ऐसा क्यों कर रहे हैं।

3. ऑपरेशन स्टेप्स

3.1 पहली बार लॉगिन और सिस्टम अपडेट

सर्वर का IP पता लें

VPS ख़रीदने के बाद, आपकी होस्टिंग प्रोवाइडर आपको ये चीज़ें देगी:

  • IP address: Jaise ki 192.168.1.100
  • Port: Aam taur par 22 hota hai (kuch providers isse badal dete hain)
  • Username: Aam taur par root hota hai
  • Password: Ek randomly generate kiya hua character string

VPS 服务商后台的登录信息页面

SSH Connection

Mac / Linux users: Terminal kholo, aur direct type karo:

1
2
ssh root@你的服务器IP
# 例如:ssh [email protected]

Windows users:

  • Windows 10/11 mein OpenSSH pehle se bana hota hai, toh aap upar wala command directly PowerShell ya CMD mein chala sakte ho
  • Ya fir Termius, MobaXterm jaise tools use kar sakte ho

Pehli baar connect karne par fingerprint confirmation prompt dikhega:

1
2
3
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Yeh basically pooch raha hai: “Main is machine ko nahi jaanta, kya tum sure ho ki tumhe isse connect karna hai?”

yes type karo aur Enter dabao. Uske baad password type karo (dhyaan rakhna: type karte waqt screen par kuch nahi dikhega, yeh normal security feature hai), aur Enter dabao.

首次 SSH 连接的完整过程,包含指纹确认

Agar aapko is tarah ka prompt dikhe, toh iska matlab login successful hai:

1
2
3
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)
...
root@hostname:~#

💡 Fingerprint confirm kyun zaroori hai?

Yeh “Man-in-the-Middle attack” se bachne ke liye hai. Pehli baar connect karte waqt server ka fingerprint note kar lijiye. Agar baad mein connect karne par fingerprint badal gaya hai, toh iska matlab hai ki shayad koi aapke server ka nakli roop dhaar kar raha hai.

登录成功了

Apne server se pehchaan karein

Login karne ke baad, pehle is machine ki basic haalat samajh lijiye:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看系统版本
cat /etc/os-release

# 查看内核版本
uname -r

# 查看 CPU 核心数和型号
nproc
lscpu | grep "Model name"

# 查看内存
free -h

# 查看磁盘
df -h

服务器基本信息输出

Yi sab info yaad rakhiye, aage chal kar koi problem troubleshoot karne time kaam aayegi.

System Update

Server ki info check karne ke baad, sabse pehla kaam hai system ko update karna. Naya server purana image use kar raha ho sakta hai, aur is dauraan kai security patches release ho chuke honge:

1
2
# 更新软件包列表 + 升级所有软件 + 清理
apt update && apt full-upgrade -y && apt autoremove -y && apt autoclean

Parameters ka matlab:

  • apt update: Package index update karta hai
  • apt full-upgrade: Saare software upgrade karta hai, kernel bhi isme shamil hai
  • -y: Automatically confirm karta hai, manually ‘yes’ type karne ki zaroorat nahi
  • apt autoremove: Jo dependencies ab zaroorat nahi unhe delete kar deta hai
  • apt autoclean: Download kiye gaye install packages ke cache ko saaf kar deta hai

apt update 和 apt upgrade 执行过程

⏱️ Is step mein kuch minute lag sakte hain, depend karta hai kitne updates hain. Beech mein kabhi-kabhi confirm karne ko bole toh, basically jo uski logic ho wahi follow kar lijiye.

Reboot zaroorat check karein

Kernel update ke baad aam taur par effect dikhane ke liye reboot karna padta hai:

1
2
# 检查是否需要重启
cat /var/run/reboot-required 2>/dev/null && echo ">>> 需要重启" || echo ">>> 无需重启"

是否需要重启

Agar reboot karne ko kahe:

1
reboot

Reboot ke baad aapko dobara SSH connection establish karna hoga.

Common tools install karein

1
apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch

ये टूल्स किस काम आते हैं:

टूल काम
sudo सामान्य यूज़र्स को एडमिन कमांड चलाने दें
curl / wget फ़ाइलें डाउनलोड करना
git वर्शन कंट्रोल
vim टेक्स्ट एडिटर
htop बेहतरीन लगने वाला प्रोसेस मॉनिटर
tree डायरेक्टरी स्ट्रक्चर ट्री व्यू में दिखाना
net-tools नेटवर्क टूल्स (ifconfig, netstat आदि)
ufw आसान और बढ़िया फ़ायरवॉल
fail2ban ब्रूट-फ़ोर्स अटैक रोकना
neofetch सिस्टम जानकारी सुंदर तरीके से दिखाना
neofetch 显示的系统信息

3.2 Non-root user banayein

Root ka direct use kyun na karein?

Root user ke paas bohot zyada permissions hote hain, ek chhoti si galti se rm -rf / sab khatam ho sakta hai. Daily tasks ke liye ek normal user use karna chahiye, aur jab admin wali permissions ki zaroorat ho, tabhi sudo ka use karein.

Lobster (openclaw) toh ek monster hai, isko root access kaise de sakte hain?

User banayein

1
2
# 创建用户(把 ittinker 换成你想要的用户名)
adduser ittinker

System aapse password aur kuch aur details set karne ko kahega:

1
2
3
4
5
6
7
8
New password:              # 输入密码(不会显示)
Retype new password: # 再输入一次
Full Name []: # 可以直接回车跳过
Room Number []: # 回车跳过
Work Phone []: # 回车跳过
Home Phone []: # 回车跳过
Other []: # 回车跳过
Is the information correct? [Y/n] # 输入 Y 确认

adduser 创建用户的完整交互过程

Sudo permissions dein

1
2
# 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户
usermod -aG sudo ittinker

Check kar lein:

1
2
3
4
5
# 切换到新用户 ittinker 换成你自己上面创建的那个用户
su - ittinker

# 测试 sudo 是否生效
sudo whoami

Agar output root aata hai, toh iska matlab sudo successfully configure ho gaya hai.
测试sudo

💡 Pro Tip

exit type karke aap wapas root user mein switch kar sakte hain. Aage ke setup steps hum root use karke complete karenge, aur jab sab kuch ho jaye, tab wapas normal user par switch kar lenge.


3.3 SSH Key login setup karein

Key authentication vs Password authentication

SSH密钥认证原理

Key authentication password se kaafi zyada secure hota hai:

  • Passwords ko brute-force kiya ja sakta hai, keys ko lagbhag nahi
  • Baar-baar password daalne ki zaroorat nahi, kaafi convenient hai
  • Agar password leak bhi ho jaye, toh bhi private key ke bina login nahi hoga

Step 1: Local par key pair generate karein

अपने अपने कंप्यूटर (सर्वर नहीं) पर ये रन करो:

1
2
# 生成 ED25519 密钥(推荐,更安全更快)
ssh-keygen -t ed25519 -C "[email protected]"

ये प्रॉम्प्ट आएगा:

1
Enter file in which to save the key (/Users/你/.ssh/id_ed25519):

बस Enter मारकर डिफ़ॉल्ट पाथ इस्तेमाल कर लो। हमने यहाँ ./ittinker इस्तेमाल किया है, मतलब फ़ाइल तुम्हारी मौजूदा डायरेक्टरी में ittinker नाम से सेव हो जाएगी।

1
Enter passphrase (empty for no passphrase):

तुम चाहो तो की के लिए पासवर्ड सेट कर सकते हो (एक एक्स्ट्रा लेयर सिक्योरिटी के लिए), या फिर सीधा Enter मारकर इसे खाली छोड़ सकते हो।

本地生成 SSH 密钥的过程

जनरेट हो जाने के बाद, तुम्हें ~/.ssh/ डायरेक्टरी में दो फ़ाइलें दिखेंगी (नीचे डिफ़ॉल्ट नाम दिए हैं, अगर आगे तुमने सीधा Enter मारा तो ऐसे ही बनेंगी):

  • id_ed25519: प्राइवेट की, इसे किसी भी कीमत पर लीक नहीं करना!
  • id_ed25519.pub: पब्लिक की, इसे सर्वर पर अपलोड करना है

💡 ed25519 vs RSA

ed25519 फ़िलहाल सबसे ज़्यादा रेकमेंडेड अल्गोरिदम है, ये पुराने RSA से ज़्यादा सिक्योर है और इसकी की भी छोटी होती है। अगर तुम्हारा सिस्टम बहुत पुराना है और इसे सपोर्ट नहीं करता, तो तुम ssh-keygen -t rsa -b 4096 का इस्तेमाल कर सकते हो।

एक छोटी सी बात, ed25519 से बनी की काफी छोटी होती है, जबकि RSA की फ़ाइल काफी बड़ी होती है। मैंने AI से पूछा तब पता चला, साइज़ से कोई मतलब नहीं है, ये अल्गोरिदम पर निर्भर करता है।

स्टेप दो: पब्लिक की को सर्वर पर अपलोड करो

तरीका A: ssh-copy-id का इस्तेमाल (रेकमेंडेड)

1
2
# 在你的电脑上执行
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP

पासवर्ड डालते ही, तुम्हारी पब्लिक की अपने-आप सर्वर पर कॉपी हो जाएगी।

ssh-copy-id 执行成功

तरीका B: मैन्युअली कॉपी करना

अगर ssh-copy-id काम नहीं कर रहा है, तो आप इसे मैन्युअली भी कर सकते हैं:

1
2
# 1. 在你的电脑上,查看公钥内容
cat ~/.ssh/id_ed25519.pub

आउटपुट में जो कंटेंट मिलेगा उसे कॉपी कर लें (एक लंबा टेक्स्ट जो ssh-ed25519 से शुरू होता है)।

1
2
3
4
5
6
7
8
9
10
11
# 2. 在服务器上,为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名
mkdir -p /home/ittinker/.ssh
chmod 700 /home/ittinker/.ssh

# 3. 创建 authorized_keys 文件并粘贴公钥
vim /home/ittinker/.ssh/authorized_keys
# 按 i 进入编辑模式,粘贴公钥,按 Esc,输入 :wq 保存退出

# 4. 设置正确的权限
chmod 600 /home/ittinker/.ssh/authorized_keys
chown -R ittinker:ittinker /home/ittinker/.ssh

⚠️ परमिशन बहुत मायने रखती है!

SSH फ़ाइल परमिशन को लेकर काफी स्ट्रिक्ट होता है:

  • .ssh डायरेक्टरी: 700 (सिर्फ यूजर ही एक्सेस कर सकता है)
  • authorized_keys फ़ाइल: 600 (सिर्फ यूजर ही पढ़ और लिख सकता है)

अगर परमिशन गलत हुए, तो SSH की लॉगिन करने से मना कर देगा।

स्टेप 3: की लॉगिन टेस्ट करना

एक नया टर्मिनल विंडो खोलें (पुराना विंडो बंद मत करना, अगर कॉन्फ़िग में कुछ गलती हो जाए तो पछाड़ लेने के लिए), और की लॉगिन टेस्ट करें:

1
ssh ittinker@你的服务器IP

अगर बिना पासवर्ड डाले लॉगिन हो जाता है, तो समझ लो आपकी की सफलतापूर्वक कॉन्फ़िगर हो गई है! 🎉

(अगर आपने प्राइवेट की पर कोई passphrase सेट किया है, तो वह प्राइवेट की का पासवर्ड डालने के लिए कहेगा, यह बिल्कुल नॉर्मल है)
使用密钥成功登录(无需服务器密码)

यहाँ हमने एक -i पैरामीटर जोड़ा है, क्योंकि इस की को हमने डिफ़ॉल्ट पाथ पर नहीं, बल्कि मौजूदा पाथ में रखा है। अगर हम इसे स्पेसिफाई नहीं करेंगे, तो सिस्टम डिफ़ॉल्ट की का इस्तेमाल करेगा।


3.4 SSH सुरक्षा हार्डनिंग (Hardening)

अब जबकि की लॉगिन काम करने लगा है, तो चलिए SSH को और सुरक्षित करते हैं:

  1. डिफ़ॉल्ट पोर्ट बदलें (ताकि स्कैन होने से बच सकें)
  2. पासवर्ड लॉगिन डिसेबल करें
  3. root का डायरेक्ट लॉगिन बंद करें

SSH कॉन्फ़िग फ़ाइल एडिट करना

1
2
3
4
5
# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑配置
nano /etc/ssh/sshd_config

修改前

नीचे दिए गए सेटिंग्स को ढूँढकर उन्हें मॉडिफ़ाई कर लें (कुछ कॉमेंट आउट हो सकते हैं, तो आगे लगा # हटा दें):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 修改端口(选一个 1024-65535 之间的数字)
Port 22000

# 禁止 root 登录
PermitRootLogin no

# 允许密钥登录
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 禁止密码登录(确保密钥登录测试成功后再改!)
PasswordAuthentication no

# 使用更安全的 SSH2 协议
Protocol 2

# 最大认证尝试次数
MaxAuthTries 3

# 客户端超时设置
ClientAliveInterval 300
ClientAliveCountMax 2

修改后的 sshd_config 关键配置

फ़ाइल सेव करके बाहर निकल जाएँ (ctrl + o)।

Nano में सेव करने के लिए ctrl + o दबाएँ, यह फ़ाइल का नाम पूछेगा तो बस एंटर दबा दें, और बाहर निकलने के लिए ctrl + x दबाएँ।

SSH सर्विस रीस्टार्ट करना

1
systemctl restart sshd.service

⚠️ ज़रूरी चेतावनी!

मौजूदा टर्मिनल विंडो बंद मत करना! पहले एक नई विंडो खोलकर टेस्ट कर लें कि नई सेटिंग्स से लॉगिन हो पा रहा है या नहीं:

1
ssh -p 22000 yourname@你的服务器IP

अगर लॉगिन हो जाता है, तभी पुरानी विंडो बंद करें। अगर लॉगिन नहीं हो पा रहा है, तो आप पुरानी विंडो से ही कॉन्फ़िग ठीक कर सकते हैं।

अगर आपने लाइटवेट सर्वर लिया है, तो ज़्यादातर इस पोर्ट को बदला नहीं जा सकता, जबकि पारंपरिक ECS में इसे मॉडिफ़ाई किया जा सकता है, इसलिए इस बात का ध्यान रखें।


3.5 UFW फ़ायरवॉल सेटअप करना

UFW防火墙规则

UFW (Uncomplicated Firewall) Ubuntu का डिफ़ॉल्ट फ़ायरवॉल टूल है, इसका सेटअप बहुत आसान है लेकिन यह काफ़ी पावरफुल है।

बेसिक सेटअप

1
2
3
4
5
6
7
8
9
10
11
# 设置默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 允许 SSH(使用你设置的端口)
ufw allow 22000/tcp comment 'SSH'
ufw allow 22/tcp comment 'SSH' # 如果是轻量服务器,还是开22端口

# 允许 HTTP 和 HTTPS
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

फ़ायरवॉल चालू करना

1
ufw enable

यह प्रॉम्प्ट करेगा:

1
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

कन्फ़र्म करने के लिए y टाइप करें।

स्टेटस चेक करना

1
ufw status verbose

ufw status 的输出结果

23022 मेरी टाइपिंग की गलती थी, आप लोग अपनी实际情况 के हिसाब से ही सेट कर लेना

आउटपुट कुछ ऐसा आएगा:

1
2
3
4
5
6
7
8
9
10
11
12
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)

To Action From
-- ------ ----
22000/tcp (SSH) ALLOW IN Anywhere
80/tcp (HTTP) ALLOW IN Anywhere
443/tcp (HTTPS) ALLOW IN Anywhere
22000/tcp (SSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (HTTP (v6)) ALLOW IN Anywhere (v6)
443/tcp (HTTPS (v6)) ALLOW IN Anywhere (v6)

कमांड्स की चीटशीट

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看状态
ufw status

# 添加规则
ufw allow 8080/tcp

# 删除规则
ufw delete allow 8080/tcp

# 允许特定 IP 访问所有端口
ufw allow from 192.168.1.100

# 禁用防火墙(不推荐)
ufw disable

# 重置所有规则
ufw reset

3.6 BBR एक्सेलेरेशन चालू करना

BBR (Bottleneck Bandwidth and Round-trip propagation time) Google द्वारा बनाया गया एक TCP कंजेशन कंट्रोल एल्गोरिदम है, जो आपके नेटवर्क की परफॉरमेंस काफी बेहतर कर देता है।

एक क्लिक में चालू करें

1
2
3
4
5
6
# 添加 BBR 配置
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 使配置生效
sysctl -p

चालू हुआ या नहीं, उसे वेरिफाई करें

1
2
# 查看当前拥塞控制算法
sysctl net.ipv4.tcp_congestion_control

आउटपुट कुछ ऐसा होना चाहिए:

1
net.ipv4.tcp_congestion_control = bbr
1
2
# 确认 BBR 模块已加载
lsmod | grep bbr

आउटपुट कुछ ऐसा आएगा:

1
tcp_bbr    20480  3

💡 BBR का असर

BBR चालू करने के बाद, खासकर तब जब नेटवर्क अस्थिर हो या लेटेंसी बहुत ज्यादा हो, आपको साफ महसूस होगा कि:

  • डाउनलोड स्पीड तेज़ हो गई है
  • SSH ऑपरेशन्स ज्यादा स्मूद हो गए हैं
  • वेबपेज जल्दी लोड हो रहे हैं

bbr 开启


3.7 ब्रूट-फोर्स अटैक रोकने के लिए fail2ban सेटअप करना

fail2ban आपके लॉग्स पर नज़र रखता है, और जिन IP से बार-बार लॉगिन फेल होता है, उन्हें अपने आप ब्लॉक कर देता है।

बेसिक कॉन्फ़िगरेशन

1
2
3
4
5
# 复制默认配置(不要直接修改 jail.conf)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 编辑配置
vim /etc/fail2ban/jail.local

[sshd] सेक्शन ढूँढ़ें, और नीचे दी गई कॉन्फ़िगरेशन सेट करें:

1
2
3
4
5
6
7
8
[sshd]
enabled = true
port = 22000 # 改成你的 SSH 端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 # 最大尝试次数
bantime = 3600 # 封禁时间(秒),这里是 1 小时
findtime = 600 # 在这个时间窗口内

fail2ban

सर्विस शुरू करना

1
2
3
4
5
# 重启 fail2ban
systemctl restart fail2ban

# 设置开机自启
systemctl enable fail2ban

स्टेटस चेक करना

1
2
3
4
5
# 查看 fail2ban 状态
fail2ban-client status

# 查看 SSH 监控状态
fail2ban-client status sshd

fail2ban-client status sshd 的输出

आउटपुट कुछ ऐसा दिखेगा:

1
2
3
4
5
6
7
8
9
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

कॉमन कमांड्स

1
2
3
4
5
6
7
8
# 手动封禁 IP
fail2ban-client set sshd banip 1.2.3.4

# 手动解封 IP
fail2ban-client set sshd unbanip 1.2.3.4

# 查看被封禁的 IP
fail2ban-client status sshd

3.8 [वैकल्पिक] SSH Config से कई सर्वर्स को मैनेज करना

अगर आपके पास कई सर्वर्स हैं, तो हर बार ssh -p 22000 user@ip टाइप करना काफी पेंच है। इसे आसान बनाने के लिए आप SSH Config का इस्तेमाल कर सकते हैं।

कॉन्फ़िग फ़ाइल

अपने लोकल कंप्यूटर पर ~/.ssh/config एडिट करें:

1
vim ~/.ssh/config

कॉन्फ़िगरेशन ऐड करें:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 第一台服务器
Host vps1
HostName 192.168.1.100
User yourname
Port 22000
IdentityFile ~/.ssh/id_ed25519

# 第二台服务器
Host vps2
HostName 192.168.1.101
User admin
Port 22222
IdentityFile ~/.ssh/id_ed25519

# 通用设置(应用于所有连接)
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes

इस्तेमाल कैसे करें

अब आप सीधे एलियास (alias) से कनेक्ट कर सकते हैं:

1
2
3
4
5
# 连接第一台服务器
ssh vps1

# 连接第二台服务器
ssh vps2

अब IP, पोर्ट और यूज़रनेम याद रखने का झंझट खत्म!


3.9 [वैकल्पिक] सिर्फ़ Cloudflare का एक्सेस देना

अगर आपकी वेबसाइट पूरी तरह से Cloudflare के पीछे है, तो आप सेट कर सकते हैं कि 80/443 पोर्ट्स पर सिर्फ़ Cloudflare के IPs का ही एक्सेस हो, इससे सिक्योरिटी बढ़ जाएगी।

⚠️ ध्यान दें: इस कॉन्फ़िगरेशन के लिए ज़रूरी है कि आपका डोमेन पहले से ही Cloudflare CDN से कनेक्ट हो।

ऑटो-कॉन्फ़िग स्क्रिप्ट

1
2
3
4
5
6
7
8
# 下载脚本
wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh

# 添加执行权限
chmod +x ~/.cloudflare-ufw.sh

# 执行脚本
~/.cloudflare-ufw.sh

यह स्क्रिप्ट ये करेगी:

  1. Cloudflare ki official site se latest IP ranges lo
  2. UFW rules add karo, taaki sirf inhi IPs ko 80/443 access mile
  3. UFW ko dobara reload karo

Scheduled Update Set Karein

Cloudflare ke IP ranges kabhi badh bhi sakte hain, isliye har hafte automatic update set kar lo:

1
2
# 添加 cron 任务(每周一凌晨执行)
(crontab -l 2>/dev/null; echo "0 0 * * 1 /root/.cloudflare-ufw.sh > /dev/null 2>&1") | crontab -

3.10 Timezone Set Karein

Default timezone shayad UTC ho, apne local timezone mein set karo taaki logs check karna aasaan ho:

1
2
3
4
5
6
7
8
# 查看当前时区
timedatectl

# 设置为上海时区(中国用户)
sudo timedatectl set-timezone Asia/Shanghai

# 验证
date

设置时区


3.11 [Optional] Automatic Security Updates Configure Karein

System ko khud hi security patches install karne do, taaki baar-baar manually karna na pade:

1
2
3
4
5
# 安装自动更新工具
sudo apt install -y unattended-upgrades

# 配置
sudo dpkg-reconfigure --priority=low unattended-upgrades

Automatic updates enable karne ke liye “Yes” select karo.

💡 Yeh feature security updates toh khud install kar deta hai, lekin kisi naye major version mein upgrade nahi karta, isliye kaafi safe hai.


4. Summary

Initialization Checklist

Upar ki saari configuration complete karne ke baad, is checklist se ek baar check kar lo:

जाँच का मद कमांड अपेक्षित रिज़ल्ट
सिस्टम अपडेट है apt update && apt list --upgradable कोई अपग्रेड के लिए पैकेज नहीं
साधारण यूज़र sudo कर सकता है sudo whoami आउटपुट root
की-बेस्ड लॉगिन काम कर रहा है ssh yourname@ip -p port बिना पासवर्ड लॉगिन
पासवर्ड लॉगिन बंद है grep PasswordAuth /etc/ssh/sshd_config PasswordAuthentication no
SSH पोर्ट बदल दिया गया है grep Port /etc/ssh/sshd_config आपके द्वारा सेट किया गया पोर्ट
फ़ायरवॉल चालू है ufw status Status: active
BBR ऑन है sysctl net.ipv4.tcp_congestion_control = bbr
fail2ban चल रहा है systemctl status fail2ban active (running)
टाइमज़ोन सेट है timedatectl Asia/Shanghai या आपका टाइमज़ोन
लोकल SSH Config cat ~/.ssh/config सर्वर उपनाम कॉन्फ़िगर है

ज़रूरी फ़ाइलों का लोकेशन

1
2
3
4
/etc/ssh/sshd_config        # SSH 服务端配置
~/.ssh/authorized_keys # 允许登录的公钥
~/.ssh/config # 本地 SSH 客户端配置(在你电脑上)
/etc/fail2ban/jail.local # fail2ban 配置

सिक्योरिटी की बेस्ट प्रैक्टिस

  1. सिस्टम को समय-समय पर अपडेट करते रहें: apt update && apt upgrade
  2. लॉगिन लॉग्स समय-समय पर चेक करें: lastb (फेल्ड लॉगिन), last (सक्सेसफुल लॉगिन)
  3. fail2ban की बैनिंग पर हमेशा नज़र रखें
  4. ज़रूरी कॉन्फ़िग फ़ाइलों को बदलने से पहले बैकअप ज़रूर लें

5. ट्रबलशूटिंग लॉग

Q1: की-बेस्ड लॉगिन फेल हो रहा है, और बार-बार पासवर्ड माँग रहा है?

संभावित कारण:

  1. अनुमति (Permission) की दिक्कत (सबसे आम कारण)

    1
    2
    3
    # 检查并修复权限
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  2. Public Key सही से कॉपी नहीं हुआ

    1
    2
    3
    # 检查 authorized_keys 内容
    cat ~/.ssh/authorized_keys
    # 应该是一行完整的公钥,以 ssh-ed25519 或 ssh-rsa 开头
  3. SELinux का रुकावट आना (CentOS/RHEL सिस्टम में)

    1
    restorecon -Rv ~/.ssh

Q2: पोर्ट बदलने के बाद कनेक्ट नहीं हो पा रहे?

ट्रबलशूटिंग के स्टेप्स:

  1. पक्का करें कि नया पोर्ट फायरवॉल में ओपन है:

    1
    ufw status | grep 你的端口
  2. सुनिश्चित करें कि SSH कॉन्फ़िगरेशन सही है:

    1
    grep Port /etc/ssh/sshd_config
  3. चेक करें कि SSH सर्विस रन कर रही है:

    1
    systemctl status sshd
  4. अगर बिल्कुल कनेक्ट नहीं हो रहे, तो अपने क्लाउड प्रोवाइडर के VNC/कंसोल का इस्तेमाल करके लॉगिन करें और ठीक करें।

Q2.5: पोर्ट बदलना बिल्कुल असर नहीं कर रहा? (क्लाउड प्रोवाइडर के लाइटवेट सर्वर में)

लक्षण: आपने /etc/ssh/sshd_config बदल दिया, सर्विस रीस्टार्ट करने के बाद भी पोर्ट 22 अब भी चालू है और नया पोर्ट काम नहीं कर रहा।

डायग्नोसिस का तरीका:

bash

1
2
# 查看是谁在监听 22 端口
netstat -lntp | grep :22

अगर आउटपुट कुछ ऐसा आता है:

1
tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init

इसका मतलब है कि पोर्ट 22 को init (PID 1) सुन रहा है, न कि sshd प्रोसेस।

वजह: कुछ क्लाउड प्रोवाइडर्स के ‘Light Application Server’ या ‘Container Instance’ का SSH पूरी तरह से प्लेटफ़ॉर्म लेयर द्वारा प्रॉक्सी किया जाता है, इसलिए आपके सर्वर के अंदर की sshd कॉन्फ़िगरेशन का कोई असर नहीं पड़ता।

समाधान:

इंस्टेंस टाइप SSH पोर्ट बदलने का तरीका
पारंपरिक ECS sshd_config में बदलाव करें ✅
लाइटवेट सर्वर शायद क्लाउड कंसोल से बदलना पड़े, या शायद यह सपोर्ट ही न करे
कंटेनर इंस्टेंस आमतौर पर बदलने का सपोर्ट नहीं होता

अगर आपका इंस्टेंस पोर्ट बदलने का सपोर्ट नहीं करता, तो बाकी सिक्योरिटी उपाय और भी ज़्यादा ज़रूरी हो जाते हैं:

  • ✅ एक नॉर्मल यूज़र बनाएं + root लॉगिन डिसेबल करें
  • ✅ SSH की (key) से लॉगिन + पासवर्ड लॉगिन डिसेबल करें
  • ✅ ब्रूट-फ़ोर्स अटैक रोकने के लिए fail2ban इस्तेमाल करें

अगर आपने इन सब उपायों को ठीक से लागू कर लिया, तो आपकी सिक्योरिटी फिर भी काफ़ी बढ़िया रहेगी।

Q3: fail2ban ने मुझे ही ब्लॉक कर दिया?

1
2
3
4
5
# 用 VNC 登录后解封
fail2ban-client set sshd unbanip 你的IP

# 把你的 IP 加入白名单,编辑 jail.local
ignoreip = 127.0.0.1/8 ::1 你的IP

Q4: UFW चालू करने के बाद वेबसाइट एक्सेस नहीं हो रही?

1
2
3
4
5
6
# 检查 80/443 是否开放
ufw status

# 如果没有,添加规则
ufw allow 80/tcp
ufw allow 443/tcp

Q5: कमांड रन करने पर sudo नहीं मिल रहा?

Debian के मिनिमल इंस्टॉलेशन में sudo पहले से नहीं होता, इसलिए root के ज़रिए इंस्टॉल करें:

1
2
apt install sudo
usermod -aG sudo ittinker

6. वन-क्लिक इनिशियलाइज़ेशन स्क्रिप्ट (हाथ बन जाने के बाद इस्तेमाल के लिए)

अगर आप ऊपर बताए गए सभी स्टेप्स से अच्छी तरह वाक़िफ़ हो चुके हैं, तो आप इस स्क्रिप्ट का इस्तेमाल करके चुटकी में इनिशियलाइज़ेशन कर सकते हैं।

⚠️ ध्यान दें: स्क्रिप्ट चलाने से पहले, पक्का कर लें कि आपके पास आपकी SSH पब्लिक की तैयार है।

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash
# VPS 初始化脚本
# 使用方法:以 root 身份运行

set -e

# === 配置区域(根据你的需求修改)===
NEW_USER="ittinker" # 新用户名
NEW_SSH_PORT="22000" # 新 SSH 端口
TIMEZONE="Asia/Shanghai" # 时区
# =====================================

echo "=== VPS 初始化脚本 ==="
echo ""

# 1. 更新系统
echo "[1/8] 更新系统..."
apt update && apt upgrade -y

# 2. 安装基础工具
echo "[2/8] 安装基础工具..."
apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch

# 3. 创建新用户
echo "[3/8] 创建用户 $NEW_USER..."
if id "$NEW_USER" &>/dev/null; then
echo "用户已存在,跳过创建"
else
adduser --gecos "" $NEW_USER
usermod -aG sudo $NEW_USER
fi

# 4. 配置 SSH 目录
echo "[4/8] 配置 SSH 目录..."
mkdir -p /home/$NEW_USER/.ssh
chmod 700 /home/$NEW_USER/.ssh
touch /home/$NEW_USER/.ssh/authorized_keys
chmod 600 /home/$NEW_USER/.ssh/authorized_keys
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER/.ssh

echo ""
echo ">>> 请将你的公钥粘贴到下面(粘贴后按 Ctrl+D 结束):"
cat >> /home/$NEW_USER/.ssh/authorized_keys
echo ""

# 5. 修改 SSH 配置
echo "[5/8] 修改 SSH 配置..."
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i "s/^#*Port .*/Port $NEW_SSH_PORT/" /etc/ssh/sshd_config
sed -i "s/^#*PermitRootLogin .*/PermitRootLogin no/" /etc/ssh/sshd_config
sed -i "s/^#*PasswordAuthentication .*/PasswordAuthentication no/" /etc/ssh/sshd_config
sed -i "s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/" /etc/ssh/sshd_config

# 6. 配置防火墙
echo "[6/8] 配置防火墙..."
ufw default deny incoming
ufw default allow outgoing
ufw allow $NEW_SSH_PORT/tcp
ufw allow 80/tcp
ufw allow 443/tcp
echo "y" | ufw enable

# 7. 开启 BBR
echo "[7/8] 开启 BBR..."
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

# 8. 设置时区
echo "[8/8] 设置时区..."
timedatectl set-timezone $TIMEZONE

# 重启 SSH
systemctl restart sshd

echo ""
echo "=========================================="
echo " ✅ 初始化完成!"
echo "=========================================="
echo ""
echo " 新 SSH 端口: $NEW_SSH_PORT"
echo " 新用户: $NEW_USER"
echo " 时区: $TIMEZONE"
echo ""
echo " 请使用以下命令登录:"
echo " ssh -p $NEW_SSH_PORT $NEW_USER@$(curl -s ifconfig.me 2>/dev/null || echo '你的IP')"
echo ""
echo " ⚠️ 重要:请先测试新配置能否登录,再关闭当前终端!"
echo ""

7. ये सब करने के बाद, सिक्योरिटी कितनी बेहतर हुई?

स्टेप क्या किया क्यों ज़रूरी है
सिस्टम अपडेट लेटेस्ट पैच इंस्टॉल किए ज्ञात वल्नरेबिलिटी (कमज़ोरियों) को फिक्स करने के लिए
नया यूज़र बनाना अब सीधे root का इस्तेमाल नहीं करेंगे गलती से कुछ गड़बड़ होने का रिस्क कम हुआ
SSH की पासवर्ड की जगह की का इस्तेमाल इसे ब्रूट-फ़ोर्स से हैक नहीं किया जा सकता
पोर्ट बदलना डिफ़ॉल्ट पोर्ट 22 से बच गए स्कैन होने के चांस कम हो गए
पासवर्ड डिसेबल करना अब सिर्फ़ की से ही लॉगिन होगा पासवर्ड अटैक का खतरा पूरी तरह खत्म
root डिसेबल करना root अब सीधे लॉगिन नहीं कर सकता हैकर्स के लिए अटैक करना और भी मुश्किल
UFW फ़ायरवॉल सिर्फ़ ज़रूरी पोर्ट्स ही खुले अटैक सरफ़ेस यानी गड़बड़ होने का एरिया कम हुआ
BBR एक्सिलरेशन नेटवर्क परफ़ॉरमेंस ऑप्टिमाइज़ की ऐक्सेस स्पीड बेहतर हुई
fail2ban मज़ाकिया/खतरनाक IP को ऑटोमैटिक ब्लॉक करता है लगातार होने वाले अटैक्स को रोकने के लिए

ये सब सेटअप कर लेने के बाद, आपके सर्वर की सिक्योरिटी 90% VPS से बेहतर हो चुकी है।


अगले आर्टिकल की झलक

अगले भाग में हम SSH की लॉगिन कॉन्फ़िगरेशन क्विक रेफ़रेंस पर बात करेंगे, जिसमें हम इन बातों को और डिटेल में देखेंगे:

  • अलग-अलग OS में की जनरेट करने का तरीका
  • कई की का मैनेजमेंट
  • SSH Agent कॉन्फ़िगरेशन
  • कुछ आम SSH क्लाइंट सेटिंग्स

इस आर्टिकल को आखिरी बार अपडेट किया गया: जनवरी 2026

इंडी डेवलपर टूलबॉक्स सीरीज़, फ़ॉलो करने के लिए आपका स्वागत है!