Skip to Content

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 হিসেবে লগিন করুন:

LOCAL — Terminal
ssh root@YOUR_SERVER_IP

Create Queen User

সার্ভারে একটি নতুন ইউজার তৈরি করুন:

SERVER — Terminal
adduser queen

পাসওয়ার্ড সেট করুন এবং বাকি তথ্যগুলো Enter চেপে স্কিপ করুন। এখন এই ইউজারকে sudo পারমিশন দিন:

usermod: User Modify.
-aG: Append to Group (ইউজারকে তার আগের গ্রুপগুলো থেকে বাদ না দিয়েই নতুন গ্রুপে যুক্ত করা)।

SERVER — Terminal
usermod -aG sudo queen

Generate SSH Key (Local)

সার্ভারে কী পাঠানোর আগে আপনার নিজের কম্পিউটারে (Local Machine) একটি key pair তৈরি করতে হবে। আপনার টার্মিনালে এই কমান্ডটি দিন:

LOCAL — Terminal
ssh-keygen -t ed25519 -C "your_email@example.com"

যা যা ঘটবে: এই কমান্ডটি চালানোর পর আপনার কম্পিউটারের ~/.ssh/ ডিরেক্টরিতে দুটি ফাইল তৈরি হবে:

  1. id_ed25519 (Private Key): এটি আপনার গোপন চাবি। এটি কক্ষনো কাউকে দেবেন না বা কোথাও শেয়ার করবেন না।
  2. id_ed25519.pub (Public Key): এটি আপনার পাবলিক কী। এই ফাইলটির ভেতরের লেখাটুকু আমরা সার্ভারে পাঠাব যাতে সার্ভার আপনাকে চিনতে পারে।

Setup SSH Key Authentication

এখন আপনার তৈরি করা Public Key সার্ভারে পাঠাতে হবে যাতে সার্ভার আপনার কম্পিউটারকে চিনতে পারে। এর জন্য আমরা ssh-copy-id টুলটি ব্যবহার করব:

Pro Tip: প্রফেশনাল এনভায়রনমেন্টে প্রতিটি ডেভেলপারের নিজস্ব আলাদা SSH Key থাকে। এতে করে কোনো অঘটন ঘটলে কে কখন সার্ভারে লগিন করেছে তা সহজে ট্র্যাক করা যায়।

ssh-copy-id কী? এটি আপনার কম্পিউটারের পাবলিক কী-টিকে স্বয়ংক্রিয়ভাবে সার্ভারের ~/.ssh/authorized_keys ফাইলে কপি করে দেয়। ফলে আপনাকে ম্যানুয়ালি ফাইল এডিট করতে হয় না।

LOCAL — Terminal
ssh-copy-id -i ~/.ssh/id_ed25519.pub queen@YOUR_SERVER_IP

পাসওয়ার্ড চাইলে queen এর পাসওয়ার্ড দিন। এখন পাসওয়ার্ড ছাড়াই লগিন করা যাচ্ছে কিনা চেক করুন:

LOCAL — Terminal
ssh queen@YOUR_SERVER_IP

Disable Password Login

পাসওয়ার্ড লগিন বন্ধ করা অত্যন্ত জরুরি। সার্ভারে থাকাকালীন নিচের ফাইলটি এডিট করুন:

SERVER — Terminal
sudo nano /etc/ssh/sshd_config

নিচের লাইন দুটি খুঁজে বের করুন এবং পরিবর্তন করুন:

SERVER — /etc/ssh/sshd_config
PasswordAuthentication no PermitRootLogin no

Ctrl+O, Enter দিয়ে সেভ করুন এবং Ctrl+X দিয়ে বের হয়ে আসুন। এরপর SSH রিস্টার্ট দিন:

SERVER — Terminal
sudo systemctl restart sshd

Configure Firewall (UFW)

শুধু প্রয়োজনীয় পোর্টগুলো (২২, ৮০, ৪৪৩) ওপেন রাখুন:

SERVER — Terminal
# 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 ফাইল ব্যবহার করে লগিন করুন:

LOCAL — Terminal
ssh -i ~/.ssh/myapp-key.pem ubuntu@YOUR_EC2_IP

Create Queen User

নতুন ইউজার তৈরি করুন এবং তাকে sudo পারমিশন দিন:

usermod: User Modify.
-aG: Append to Group.

SERVER — Terminal
sudo adduser queen sudo usermod -aG sudo queen

Generate SSH Key (Local)

যদি আপনার কম্পিউটারে আগে থেকে SSH Key না থাকে, তবে নিচের কমান্ডটি দিয়ে এক জোড়া কী তৈরি করে নিন:

LOCAL — Terminal
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 — Terminal
# আপনার local public key copy করুন ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile ~/.ssh/myapp-key.pem" ubuntu@YOUR_EC2_IP

এখন সার্ভারের ভেতর থেকে ওই কী-টি queen ইউজারের হোমে কপি করতে হবে:

SERVER — Terminal
# 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 হিসেবে লগিন চেক করুন:

LOCAL — Terminal
ssh queen@YOUR_EC2_IP

Disable Password Login

AWS-এ ডিফল্টভাবে পাসওয়ার্ড অফ থাকলেও, নতুন ইউজার queen-এর জন্য এটি নিশ্চিত করা প্রয়োজন:

SERVER — Terminal
sudo nano /etc/ssh/sshd_config

নিচে পরিবর্তন করুন:

  • PasswordAuthentication no
  • PermitRootLogin no

এরপর SSH রিস্টার্ট দিন: sudo systemctl restart sshd

Configure Firewall (UFW + Security Group)

প্রথমে সার্ভারে UFW সেটআপ করুন:

SERVER — Terminal
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

  • queen user তৈরি হয়েছে এবং sudo group-এ আছে?
  • SSH key দিয়ে queen user হিসেবে পাসওয়ার্ড ছাড়াই লগিন হচ্ছে?
  • পাসওয়ার্ড দিয়ে লগিন করার চেষ্টায় Permission denied আসছে?
  • sudo ufw status দেখাচ্ছে port 22, 80, 443 open?
  • AWS ব্যবহারকারী: Security Group-এও এই রুলগুলো আছে?

CyberSec Note

এই পেজে আপনি যা করলেন তাকে বলে Server Hardening। এটি একটি স্ট্যান্ডার্ড সিকিউরিটি প্র্যাকটিস। পেনিট্রেশন টেস্টাররা যখন কোনো সার্ভারে অ্যাটাক করার চেষ্টা করেন, তারা প্রথমেই দেখেন কোনো ভুল কনফিগারেশন আছে কিনা (যেমন: রুট লগিন অন রাখা বা উইক পাসওয়ার্ড)। আপনি এই ধাপগুলো সম্পন্ন করার মধ্য দিয়ে আপনার সার্ভারের সিকিউরিটি লেভেল অনেক বাড়িয়ে নিয়েছেন।

পরবর্তী → Nginx & Reverse Proxy

server hardening bangla, ssh key setup bangla, ufw firewall bangla, aws security group bangla, disable password login ssh, queen user linux bangla, server security bangla tutorial, contabo ubuntu setup

Last updated on