ইনট্রোডাকশন: কেন Linux VPS-এ SSH সিকিউরিটি অত্যন্ত গুরুত্বপূর্ণ?
বর্তমান ডিজিটাল যুগে ক্লাউড কম্পিউটিং এবং ভিপিএস (Virtual Private Server)-এর ব্যবহার ব্যাপক হারে বৃদ্ধি পেয়েছে। একটি Linux VPS Server সেটআপ করার পর প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ কাজ হলো তার নিরাপত্তা নিশ্চিত করা। ওয়েবে যুক্ত যেকোনো সার্ভার প্রতিনিয়ত বিভিন্ন ধরনের সাইবার আক্রমণের শিকার হতে পারে। এর মধ্যে সবচেয়ে বেশি ঘটে Automated Bot Attack এবং Brute Force Attack।
ডিফল্টভাবে, একটি নতুন Linux Server-এ SSH (Secure Shell) সার্ভিস প্রোটোকল ২২ (Port 22)-এ চালু থাকে এবং সাধারণত Root ইউজার দিয়ে লগইন করার সুযোগ থাকে। হ্যাকাররা তাদের বট নেটওয়ার্ক ব্যবহার করে প্রতিনিয়ত এই ডিফল্ট পোর্ট এবং Root ইউজারকে লক্ষ্য করে হাজার হাজার পাসওয়ার্ড কম্বিনেশন ট্রাই করতে থাকে। যদি আপনার পাসওয়ার্ড দুর্বল হয় কিংবা সিকিউরিটি পলিসি সঠিক না থাকে, তবে খুব সহজেই সার্ভারের নিয়ন্ত্রণ অন্যের হাতে চলে যেতে পারে। তাই এই ব্লগে আমরা বিস্তারিত আলোচনা করব কীভাবে আপনার Linux VPS-এর SSH Security সর্বোচ্চ স্তরে নিয়ে যাওয়া যায়।
১. অপারেটিং সিস্টেম এবং প্যাকেজ আপডেট রাখা
যেকোনো সিকিউরিটি কনফিগারেশনের প্রথম ধাপ হলো সার্ভারের বিদ্যমান সিস্টেম সফটওয়্যারগুলোকে সর্বশেষ সংস্করণে আপডেট করা। পুরাতন বা আউটডেটেড সফটওয়্যারে পরিচিত সিকিউরিটি ভলনারেবিলিটি (Security Vulnerabilities) থাকে, যা ব্যবহার করে আক্রমণকারীরা সহজেই সার্ভারে অনুপ্রবেশ করতে পারে।
Ubuntu বা Debian ভিত্তিক সার্ভারের জন্য নিচের কমান্ডটি চালান:
sudo apt update && sudo apt upgrade -y
CentOS, RHEL বা AlmaLinux-এর জন্য নিচের কমান্ডটি ব্যবহার করুন:
sudo dnf update -y
নিয়মিত সিস্টেম আপডেট করলে নতুন আবিষ্কৃত সিকিউরিটি প্যাচগুলো ইনস্টল হয়ে যায়, যা সার্ভারকে সুরক্ষিত রাখতে সাহায্য করে।
২. নতুন Non-Root ইউজার তৈরি এবং Root Login ডিসেবল করা
Linux সিস্টেমের Root User হলো সর্বোচ্চ ক্ষমতাসম্পন্ন অ্যাকাউন্ট। সরাসরি Root ইউজার হিসেবে SSH-এর মাধ্যমে লগইন করা অত্যন্ত ঝুঁকিপূর্ণ। কোনো কারণে যদি হ্যাকার এই অ্যাকাউন্টের অ্যাক্সেস পেয়ে যায়, তবে সে পুরো সার্ভারের নিয়ন্ত্রণ পেয়ে যাবে। তাই নিরাপত্তা বৃদ্ধির জন্য একজন সাধারণ ইউজার তৈরি করে তাকে Sudo প্রিভিলেজ প্রদান করতে হবে এবং সরাসরি Root লগইন বন্ধ করতে হবে।
নতুন ইউজার তৈরি করার নিয়ম:
sudo adduser myadminuser
এরপর নতুন তৈরি করা ইউজারকে Sudo গ্রুপে যুক্ত করুন যাতে প্রয়োজনে Administrative কাজ করা যায়:
sudo usermod -aG sudo myadminuser (Ubuntu/Debian-এর জন্য)
sudo usermod -aG wheel myadminuser (CentOS/AlmaLinux-এর জন্য)
Root Login ডিসেবল করা:
এবার SSH কনফিগারেশন ফাইলটি ওপেন করতে হবে:
sudo nano /etc/ssh/sshd_config
ফাইলে PermitRootLogin লাইনটি খুঁজে বের করুন এবং এর মান no করে দিন:
PermitRootLogin no
এর ফলে কোনো আক্রমণকারী যদি Root পাসওয়ার্ড জেনেও ফেলে, তবুও সে SSH দিয়ে সরাসরি লগইন করতে পারবে না।
৩. SSH Key-Based Authentication নিশ্চিত করা (Password Access বন্ধ করা)
পাসওয়ার্ডভিত্তিক লগইন প্রথা সবসময়ই ব্রুট ফোর্স আক্রমণের ঝুঁকিতে থাকে। হ্যাকাররা ডিকশনারি অ্যাটাক চালিয়ে দুর্বল পাসওয়ার্ড ভেঙে ফেলতে পারে। এর সমাধান হলো SSH Key Authentication ব্যবহার করা। এটি Cryptographic Public-Private Key Pair-এর ওপর ভিত্তি করে কাজ করে, যা হ্যাক করা প্রায় অসম্ভব।
SSH Key Pair তৈরি করার নিয়ম (আপনার লোকাল কম্পিউটারে):
আপনার লোকাল টার্মিনাল বা PowerShell-এ নিচের কমান্ডটি দিন (এডভান্সড ও সেকিউর Ed25519 অ্যালগরিদম ব্যবহারের জন্য):
ssh-keygen -t ed25519 -C "your_email@example.com"
এটি একটি Public Key (id_ed25519.pub) এবং একটি Private Key (id_ed25519) তৈরি করবে। Private Key-টি আপনার লোকাল পিসিতে অতি গোপনে রাখতে হবে এবং Public Key-টি VPS সার্ভারে আপলোড করতে হবে।
সার্ভারে Public Key কপি করা:
ssh-copy-id myadminuser@your_server_ip
পাসওয়ার্ড লগইন সম্পূর্ণরূপে বন্ধ করা:
SSH Key দিয়ে সফলভাবে লগইন করতে পারলে, পাসওয়ার্ড দিয়ে লগইন করার সুবিধাটি স্থায়ীভাবে বন্ধ করে দিন। এজন্য সার্ভারের /etc/ssh/sshd_config ফাইল পরিবর্তন করুন:
PasswordAuthentication no
PubkeyAuthentication yes
এর ফলে SSH Key ছাড়া বিশ্বের কোনো প্রান্ত থেকে আপনার সার্ভারে কেউ লগইন করার চেষ্টা করলেও সিস্টেম পাসওয়ার্ড দেওয়ার কোনো সুযোগ দেবে না।
৪. ডিফল্ট SSH Port (Port 22) পরিবর্তন করা
ইন্টারনেটে ঘুরে বেড়ানো অটোমেটেড বটগুলো সাধারণত ডিফল্ট পোর্ট 22-কে স্ক্যান করে। পোর্ট পরিবর্তন করলে শতভাগ নিরাপত্তা নিশ্চিত না হলেও, প্রায় ৯৫% বট স্ক্যানার থেকে সার্ভারকে আড়াল করা সম্ভব হয়। একে সিকিউরিটি পরিভাষায় Security through Obscurity বলা হয়।
পোর্ট পরিবর্তন করতে /etc/ssh/sshd_config ফাইলটি ওপেন করুন এবং Port 22 লাইনটি পরিবর্তন করে একটি আনকমন পোর্ট (যেমন: 2244 বা 49152 থেকে 65535-এর মধ্যে যেকোনো খালি পোর্ট) নির্ধারণ করুন:
Port 2244
মনে রাখবেন, নতুন পোর্ট সেট করার পর ফায়ারওয়ালে সেই পোর্টটি অবশ্যই এলাও (Allow) করতে হবে, তা না হলে আপনি নিজেই সার্ভার থেকে লকড-আউট হয়ে যেতে পারেন।
৫. Firewall কনফিগার করা (UFW / FirewallD)
সার্ভারের নিরাপত্তায় নেটওয়ার্ক ফায়ারওয়ালের ভূমিকা অপরিসীম। একটি সঠিকভাবে কনফিগার করা ফায়ারওয়াল শুধুমাত্র নির্দিষ্ট পোর্টগুলো খোলা রাখে এবং বাকি সব ইনকামিং ট্রাফিক ব্লক করে দেয়।
Ubuntu/Debian-এ UFW (Uncomplicated Firewall) ব্যবহার:
প্রথমে নিশ্চিত করুন যে ফায়ারওয়াল ইনকামিং সব ট্রাফিক ব্লক করে এবং আউটগোয়িং এলাও করে:
sudo ufw default deny incoming
sudo ufw default allow outgoing
এবার আপনার নতুন কাস্টম SSH পোর্ট (উদাহরণস্বরূপ 2244) এলাও করুন:
sudo ufw allow 2244/tcp
ওয়েব সার্ভার চালু থাকলে HTTP ও HTTPS পোর্ট এলাও করুন:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
অবশেষে ফায়ারওয়াল সক্রিয় করুন:
sudo ufw enable
৬. Fail2ban ইনস্টল এবং কনফিগার করা
যদি আপনার সার্ভারে কোনো কারণে পাসওয়ার্ড লগইন অন রাখতেও হয় (যা অনুচিত), কিংবা অনাকাঙ্ক্ষিত কোনো আইপি বারবার ভুল লগইন ট্রাই করে, তবে Fail2ban সফটওয়্যারটি অটোমেটিকভাবে সেই আইপি সাময়িকভাবে বা স্থায়ীভাবে ব্লক করে দেয়।
এটি সার্ভারের লগ ফাইল (যেমন: /var/log/auth.log) রিয়েল-টাইমে বিশ্লেষণ করে এবং পর পর নির্দিষ্ট সংখ্যকবার ব্যর্থ চেষ্টার পর আক্রমণকারীর IP Address-কে Firewall Rules-এর মাধ্যমে ব্যান করে দেয়।
Fail2ban ইনস্টলেশন (Ubuntu/Debian):
sudo apt install fail2ban -y
ইনস্টল করার পর কাস্টম কনফিগারেশন তৈরির জন্য ফাইল কপি করুন:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local ফাইলে [sshd] সেকশনে গিয়ে নিয়মগুলো কাস্টমাইজ করুন:
enabled = true
port = 2244 (আপনার কাস্টম SSH পোর্ট)
maxretry = 3 (সর্বোচ্চ ৩ বার ভুল চেষ্টা করার সুযোগ)
bantime = 3600 (১ ঘণ্টার জন্য IP ব্যান হয়ে যাবে)
কনফিগারেশন শেষে সার্ভিসটি রিস্টার্ট করুন:
sudo systemctl restart fail2ban
৭. নির্দিষ্ট IP Address whitelisting (AllowUsers Restriction)
আপনার যদি একটি নির্দিষ্ট বা Static IP Address থাকে, তবে আপনি SSH কনফিগারেশনে এমন নিয়ম চালু করতে পারেন যেন শুধুমাত্র আপনার নির্দিষ্ট আইপি থেকেই সার্ভারে লগইন করা যায়। অন্যান্য সকল আইপি থেকে আসা কানেকশন রিকোয়েস্ট রিজেক্ট হয়ে যাবে।
/etc/ssh/sshd_config ফাইলে নিচের লাইনটি যোগ করুন:
AllowUsers myadminuser@203.0.113.5
এখানে 203.0.113.5-এর জায়গায় আপনার নিজস্ব পাবলিক IP ব্যবহার করুন। একাধিক ইউজার বা আইপি থাকলে স্পেস দিয়ে যুক্ত করা যায়।
৮. SSH Session Timeout নির্ধারণ করা
অনেক সময় ডেভেলপার বা এডমিনরা SSH সেসন চালু রেখে পিসি ছেড়ে উঠে যান। এটি সিকিউরিটি রিস্ক তৈরি করতে পারে। যদি নির্দিষ্ট সময় পর সার্ভার নিজে থেকেই অলস (Idle) কানেকশন বন্ধ করে দেয়, তবে নিরাপত্তা অনেক বৃদ্ধি পায়।
/etc/ssh/sshd_config ফাইলে নিচের প্যারামিটারগুলো সেট করুন:
ClientAliveInterval 300 (প্রতি ৩০০ সেকেন্ড বা ৫ মিনিট পর সার্ভার ক্লায়েন্টকে চেক করবে)
ClientAliveCountMax 2 (সর্বোচ্চ ২ বার উত্তর না পেলে কানেকশন কেটে দেবে)
এর ফলে ৫-১০ মিনিট নিষ্ক্রিয় থাকলে স্বয়ংক্রিয়ভাবে SSH সেসন বিচ্ছিন্ন হয়ে যাবে।
৯. Two-Factor Authentication (2FA) সক্রিয় করা
উচ্চ নিরাপত্তার জন্য SSH Key-এর পাশাপাশি Two-Factor Authentication (2FA) যুক্ত করা বুদ্ধিমানের কাজ। এর ফলে সঠিক SSH Key থাকার পরও মোবাইলের Google Authenticator অ্যাপ থেকে পাওয়া ৬ ডিজিটের ওটিপি (OTP) দিতে হবে।
এর জন্য libpam-google-authenticator প্যাকেজটি ইনস্টল করে কনফিগার করতে হয়:
sudo apt install libpam-google-authenticator
কমান্ড google-authenticator চালিয়ে স্ক্রিনের QR Code-টি ফোনে স্ক্যান করতে হয় এবং নির্দেশনাবলী অনুসরণ করে PAM (Pluggable Authentication Modules) কনফিগারেশন আপডেট করতে হয়।
১০. SSH Configuration রিলোড এবং টেস্ট করা
উপরে উল্লিখিত /etc/ssh/sshd_config ফাইলের যেকোনো পরিবর্তনের পর সার্ভিসটি রিস্টার্ট বা রিলোড করা আবশ্যক। তবে রিস্টার্ট করার আগে কনফিগারেশনে কোনো সিনট্যাক্স ভুল আছে কিনা তা পরীক্ষা করে নেওয়া উচিত।
কনফিগারেশন টেস্ট করার কমান্ড:
sudo sshd -t
যদি টার্মিনালে কোনো এরর আউটপুট না আসে, তবে বুঝবেন কনফিগারেশন সঠিক আছে। এবার সার্ভিস রিস্টার্ট করুন:
sudo systemctl restart sshd
গুরুত্বপূর্ণ টিপস: রিস্টার্ট দেওয়ার পর বর্তমান SSH টার্মিনালটি বন্ধ করবেন না! একটি নতুন টার্মিনাল উইন্ডো বা ট্যাব ওপেন করে নতুন পোর্টে এবং নতুন নিয়মে লগইন হচ্ছে কিনা তা নিশ্চিত হয়ে নিন। যদি কোনো কারণে লগইন না হয়, তবে খোলা থাকা আগের টার্মিনাল ব্যবহার করে ভুল সংশোধন করতে পারবেন।
উপসংহার: নিয়মিত সিকিউরিটি অডিট
Linux VPS Server-এর নিরাপত্তা কোনো একক পদক্ষেপের বিষয় নয়, এটি একটি ধারাবাহিক প্রক্রিয়া। আপনার SSH প্রোটোকলকে সুরক্ষিত করার মাধ্যমে আপনি সার্ভারের আক্রমণের প্রধান প্রবেশদ্বারটি বন্ধ করে দিতে পারেন। উপরোক্ত ধাপগুলো যেমন—Root Login ডিসেবল করা, SSH Key ব্যবহার করা, কাস্টম পোর্ট সেট করা, Firewall ও Fail2ban কনফিগার করা সঠিকভাবে বাস্তবায়ন করলে আপনার Linux VPS সার্ভারটি সর্বোচ্চ স্তরে সুরক্ষিত থাকবে। নিয়মিত সার্ভারের auth.log চেক করা এবং সিকিউরিটি অডিট করার অভ্যাস গড়ে তোলা উচিত।
Share your opinion here!