Secure the Server
App deploy করার আগে server secure করা বাধ্যতামূলক। এই page-এ শিখবেন নিরাপদ user তৈরি করতে, SSH key দিয়ে login করতে, password login বন্ধ করতে এবং firewall চালু করতে।
Why Secure First?
১. Non-root user (queen): Root বা admin হিসেবে সরাসরি কাজ করা ঝুঁকিপূর্ণ। কারণ root হিসেবে একটি সামান্য টাইপিং ভুলে পুরো সার্ভার মুছে যেতে পারে। আমরা একটি সাধারণ ইউজার তৈরি করব যা প্রয়োজনে sudo দিয়ে admin-এর কাজ করতে পারবে।
২. SSH Key Authentication: পাসওয়ার্ডের চেয়ে SSH Key অনেক বেশি নিরাপদ। এটি একটি cryptographic key pair:
- Private Key: এটি আপনার নিজের চাবির মতো, যা শুধু আপনার নিজের কম্পিউটারে থাকবে। কাউকে এটি দেবেন না।
- Public Key: এটি একটি তালার মতো, যা আমরা সার্ভারে রেখে দেব। সার্ভারে লগিন করার সময় আপনার কম্পিউটার নিজের Private key দিয়ে সার্ভারের Public key-এর সাথে ম্যাচ করে। এটি পাসওয়ার্ডের চেয়ে অনেক শক্তিশালী এবং হ্যাকারদের পক্ষে ব্রেক করা প্রায় অসম্ভব।
Contabo / Standard VPS Setup
আপনি যদি Contabo বা অন্য কোনো সাধারণ VPS ব্যবহার করেন তবে এই ধাপগুলো অনুসরণ করুন।
Login as Root
প্রথমে আপনার কম্পিউটারের টার্মিনাল থেকে root হিসেবে লগিন করুন:
ssh root@YOUR_SERVER_IPCreate Queen User
সার্ভারে একটি নতুন ইউজার তৈরি করুন:
adduser queenপাসওয়ার্ড সেট করুন এবং বাকি তথ্যগুলো Enter চেপে স্কিপ করুন। এখন এই ইউজারকে sudo পারমিশন দিন:
usermod: User Modify.
-aG: Append to Group (ইউজারকে তার আগের গ্রুপগুলো থেকে বাদ না দিয়েই নতুন গ্রুপে যুক্ত করা)।
usermod -aG sudo queenGenerate SSH Key (Local)
সার্ভারে কী পাঠানোর আগে আপনার নিজের কম্পিউটারে (Local Machine) একটি key pair তৈরি করতে হবে। আপনার টার্মিনালে এই কমান্ডটি দিন:
ssh-keygen -t ed25519 -C "your_email@example.com"যা যা ঘটবে:
এই কমান্ডটি চালানোর পর আপনার কম্পিউটারের ~/.ssh/ ডিরেক্টরিতে দুটি ফাইল তৈরি হবে:
id_ed25519(Private Key): এটি আপনার গোপন চাবি। এটি কক্ষনো কাউকে দেবেন না বা কোথাও শেয়ার করবেন না।id_ed25519.pub(Public Key): এটি আপনার পাবলিক কী। এই ফাইলটির ভেতরের লেখাটুকু আমরা সার্ভারে পাঠাব যাতে সার্ভার আপনাকে চিনতে পারে।
Setup SSH Key Authentication
এখন আপনার তৈরি করা Public Key সার্ভারে পাঠাতে হবে যাতে সার্ভার আপনার কম্পিউটারকে চিনতে পারে। এর জন্য আমরা ssh-copy-id টুলটি ব্যবহার করব:
Pro Tip: প্রফেশনাল এনভায়রনমেন্টে প্রতিটি ডেভেলপারের নিজস্ব আলাদা SSH Key থাকে। এতে করে কোনো অঘটন ঘটলে কে কখন সার্ভারে লগিন করেছে তা সহজে ট্র্যাক করা যায়।
ssh-copy-id কী? এটি আপনার কম্পিউটারের পাবলিক কী-টিকে স্বয়ংক্রিয়ভাবে সার্ভারের ~/.ssh/authorized_keys ফাইলে কপি করে দেয়। ফলে আপনাকে ম্যানুয়ালি ফাইল এডিট করতে হয় না।
ssh-copy-id -i ~/.ssh/id_ed25519.pub queen@YOUR_SERVER_IPপাসওয়ার্ড চাইলে queen এর পাসওয়ার্ড দিন। এখন পাসওয়ার্ড ছাড়াই লগিন করা যাচ্ছে কিনা চেক করুন:
ssh queen@YOUR_SERVER_IPDisable Password Login
পাসওয়ার্ড লগিন বন্ধ করা অত্যন্ত জরুরি। সার্ভারে থাকাকালীন নিচের ফাইলটি এডিট করুন:
sudo nano /etc/ssh/sshd_configনিচের লাইন দুটি খুঁজে বের করুন এবং পরিবর্তন করুন:
PasswordAuthentication no
PermitRootLogin noCtrl+O, Enter দিয়ে সেভ করুন এবং Ctrl+X দিয়ে বের হয়ে আসুন। এরপর SSH রিস্টার্ট দিন:
sudo systemctl restart sshdConfigure Firewall (UFW)
শুধু প্রয়োজনীয় পোর্টগুলো (২২, ৮০, ৪৪৩) ওপেন রাখুন:
# SSH allow নিশ্চিত করুন
sudo ufw allow OpenSSH
# Web traffic
sudo ufw allow 80
sudo ufw allow 443
# Firewall চালু করুন
sudo ufw enableসার্ভার এখন নিরাপদ।
AWS EC2 Setup
আপনি যদি AWS EC2 Free Tier ব্যবহার করেন তবে এই ধাপগুলো অনুসরণ করুন।
Login as Ubuntu
AWS-এর ডিফল্ট ইউজার ubuntu এবং আপনার .pem ফাইল ব্যবহার করে লগিন করুন:
ssh -i ~/.ssh/myapp-key.pem ubuntu@YOUR_EC2_IPCreate Queen User
নতুন ইউজার তৈরি করুন এবং তাকে sudo পারমিশন দিন:
usermod: User Modify.
-aG: Append to Group.
sudo adduser queen
sudo usermod -aG sudo queenGenerate SSH Key (Local)
যদি আপনার কম্পিউটারে আগে থেকে SSH Key না থাকে, তবে নিচের কমান্ডটি দিয়ে এক জোড়া কী তৈরি করে নিন:
ssh-keygen -t ed25519 -C "your_email@example.com"এটি আপনার জন্য দুটি ফাইল তৈরি করবে: একটি Private Key (যা আপনার কাছে থাকবে) এবং অন্যটি Public Key (যা আমরা এখন সার্ভারে আপলোড করব)।
Setup SSH Key Authentication
AWS-এ ssh-copy-id সরাসরি কাজ করে না কারণ আপনি .pem ফাইল দিয়ে কানেক্ট আছেন। তবে কিছু ফ্ল্যাগ ব্যবহার করে আমরা এটি করতে পারি। প্রথমে আপনার তৈরি করা Public Key (id_ed25519.pub) ubuntu ইউজারের কাছে পাঠান:
প্রশ্ন হতে পারে: AWS তো নিজেই একটি .pem ফাইল দেয়, তাহলে নতুন কী কেন?
উত্তর: AWS-এর .pem ফাইলটি অনেকটা “মাস্টার কি”-র মতো। কিন্তু প্রোডাকশনে সিকিউরিটির খাতিরে আমরা সেটি সব ইউজারকে দিই না। আপনার নিজস্ব জেনারেট করা কী ব্যবহার করা একটি ইন্ডাস্ট্রি স্ট্যান্ডার্ড এবং অনেক বেশি নিরাপদ।
এখানে ssh-copy-id ব্যবহার করা হচ্ছে যাতে ম্যানুয়ালি কী কপি করার ঝামেলা পোহাতে না হয়। এটি আপনার লোকাল পাবলিক কী-কে সার্ভারের ubuntu ইউজারের অনুমোদিত তালিকার শুরুতে যোগ করে দেবে।
# আপনার local public key copy করুন
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile ~/.ssh/myapp-key.pem" ubuntu@YOUR_EC2_IPএখন সার্ভারের ভেতর থেকে ওই কী-টি queen ইউজারের হোমে কপি করতে হবে:
# queen-এর জন্য .ssh ফোল্ডার তৈরি করুন
sudo mkdir -p /home/queen/.ssh
# ubuntu ইউজার থেকে অলরেডি অথরাইজড কী-গুলো queen-এ কপি করুন
sudo cp ~/.ssh/authorized_keys /home/queen/.ssh/
# ফোল্ডার ও ফাইলের মালিকানা queen ইউজারকে দিয়ে দিন
sudo chown -R queen:queen /home/queen/.ssh
# ফোল্ডার এবং ফাইলের সিকিউর পারমিশন সেট করুন (নইলে SSH কাজ করবে না)
sudo chmod 700 /home/queen/.ssh
sudo chmod 600 /home/queen/.ssh/authorized_keysএখন আপনার লোকাল কম্পিউটার থেকে সরাসরি queen হিসেবে লগিন চেক করুন:
ssh queen@YOUR_EC2_IPDisable Password Login
AWS-এ ডিফল্টভাবে পাসওয়ার্ড অফ থাকলেও, নতুন ইউজার queen-এর জন্য এটি নিশ্চিত করা প্রয়োজন:
sudo nano /etc/ssh/sshd_configনিচে পরিবর্তন করুন:
PasswordAuthentication noPermitRootLogin no
এরপর SSH রিস্টার্ট দিন: sudo systemctl restart sshd।
Configure Firewall (UFW + Security Group)
প্রথমে সার্ভারে UFW সেটআপ করুন:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enableএরপর AWS Console-এ গিয়ে নিশ্চিত করুন যে Security Group-এ এই পোর্টগুলো (22, 80, 443) আগে থেকেই allow করা আছে (যা আমরা server তৈরি করার সময় সেট করেছিলাম)।
UFW বনাম Security Group: আপনার মনে প্রশ্ন আসতে পারে—উভয় জায়গায় কেন পোর্ট ওপেন করছি?
- AWS Security Group হলো আপনার সার্ভারের “বাইরের গেট” (Cloud Level)।
- UFW হলো আপনার সার্ভারের “নিজের দরজা” (OS Level)। প্রফেশনাল সিকিউরিটির জন্য উভয় স্তরেই ফায়ারওয়াল থাকা জরুরি। একে বলা হয় “Defense in Depth”। এর ফলে হাগের কোনো সিকিউরিটি লেভেলে ত্রুটি থাকলেও অন্যটি আপনার সার্ভারকে সুরক্ষিত রাখে।
যদি কোনো পোর্ট আগের ধাপে বাদ পড়ে থাকে, তবে এখনই “Edit inbound rules”-এ গিয়ে সেগুলো যোগ করে নিন।
Quick Check
-
queenuser তৈরি হয়েছে এবংsudogroup-এ আছে? - SSH key দিয়ে
queenuser হিসেবে পাসওয়ার্ড ছাড়াই লগিন হচ্ছে? - পাসওয়ার্ড দিয়ে লগিন করার চেষ্টায়
Permission deniedআসছে? -
sudo ufw statusদেখাচ্ছে port 22, 80, 443 open? - AWS ব্যবহারকারী: Security Group-এও এই রুলগুলো আছে?
CyberSec Note
এই পেজে আপনি যা করলেন তাকে বলে Server Hardening। এটি একটি স্ট্যান্ডার্ড সিকিউরিটি প্র্যাকটিস। পেনিট্রেশন টেস্টাররা যখন কোনো সার্ভারে অ্যাটাক করার চেষ্টা করেন, তারা প্রথমেই দেখেন কোনো ভুল কনফিগারেশন আছে কিনা (যেমন: রুট লগিন অন রাখা বা উইক পাসওয়ার্ড)। আপনি এই ধাপগুলো সম্পন্ন করার মধ্য দিয়ে আপনার সার্ভারের সিকিউরিটি লেভেল অনেক বাড়িয়ে নিয়েছেন।
পরবর্তী → Nginx & Reverse Proxy