SSH hardening-এর গোড়া: key, root login বন্ধ ও fail2ban

SSH আপনার server-এর দরজা, আর bot সারাদিন সেখানে কড়া নাড়ে। কয়েকটি সেটিং ঢোকা অনেক কঠিন করে।

চাবি ও প্রহরীসহ একটি server-এর দরজা

SSH দিয়ে আপনি দূর থেকে server-এ login করেন। Public IP-যুক্ত যেকোনো server স্বয়ংক্রিয় login চেষ্টা ক্রমাগত পায়, তাই server বানানোর পর SSH নিরাপদ করা প্রথম কাজগুলোর একটি।

১. Password নয়, SSH key ব্যবহার করুন

Key pair-এ একটি private key (আপনার কম্পিউটারে থাকে, শেয়ার হয় না) ও একটি public key (server-এ বসানো) থাকে।

ssh-keygen -t ed25519 -C "you@example.com"      # key pair বানান; passphrase দিন
ssh-copy-id user@server                          # public key server-এ বসান

Private key ফাইল সুরক্ষিত রাখুন (chmod 600) এবং passphrase দিন, যাতে চুরি যাওয়া ল্যাপটপ server দিয়ে না দেয়।

২. SSH server-এর সেটিং বদলান

/etc/ssh/sshd_config (বা /etc/ssh/sshd_config.d/-এর একটি ফাইল) সম্পাদনা করুন। কাজের সেটিং:

PasswordAuthentication no        # শুধু key
PermitRootLogin no               # সাধারণ user হিসেবে login, তারপর sudo
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers deploy admin          # শুধু এই user-রা login করতে পারবে
X11Forwarding no

ফাইল যাচাই করে reload করুন:

sudo sshd -t                     # কনফিগারেশন পরীক্ষা
sudo systemctl reload ssh        # কিছু সিস্টেমে service-এর নাম "sshd"

৩. নিজেকে লক আউট করবেন না

  • পরীক্ষার সময় বর্তমান session খোলা রাখুন।
  • প্রথমটি বন্ধ করার আগে দ্বিতীয় terminal খুলে key দিয়ে login করা যায় কি না নিশ্চিত করুন।
  • Password ও root login বন্ধ করার আগে আপনার public key বসানো এবং user-এর sudo অধিকার আছে নিশ্চিত করুন।
  • Cloud provider-এ থাকলে উদ্ধারের জন্য web console কীভাবে পাবেন জানুন।

৪. Firewall ব্যবহার করুন

শুধু দরকারি port অনুমতি দিন। যেমন ufw দিয়ে:

sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

Firewall চালু করার আগে SSH অনুমতি দিন। স্থির IP থাকলে SSH তাতে সীমিত করুন। অনেক cloud firewall (security group)-ও এটি করতে পারে।

৫. fail2ban দিয়ে আক্রমণকারীকে ধীর করুন

fail2ban log পড়ে এবং বহুবার login ব্যর্থ করা IP অস্থায়ীভাবে বন্ধ করে।

sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

শুধু key থাকলে password আন্দাজ কাজ করতে পারে না, কিন্তু fail2ban noise ও load কমায়।

৬. অন্যান্য ভালো অভ্যাস

  • সিস্টেম হালনাগাদ রাখুন (security update, সম্ভব হলে স্বয়ংক্রিয়)।
  • প্রতি মানুষ ও device-এর আলাদা key রাখুন, চলে যাওয়া মানুষের key সরান (~/.ssh/authorized_keys)।
  • SSH-এ two-factor বা VPN বা bastion host-এর মধ্য দিয়ে access ভাবুন।
  • 22 থেকে port বদল log-এর noise কমায় কিন্তু আসল নিরাপত্তা নয়। Key ও firewall-ই আসল।
  • last ও journalctl -u ssh দিয়ে login কার্যকলাপ দেখুন।
  • Private key কখনো শেয়ার করবেন না, chat বা repository-তে পেস্ট করবেন না।

দ্রুত checklist

  • শুধু key, password বন্ধ।
  • Root login বন্ধ, sudo-সহ নামযুক্ত user।
  • AllowUsers সেট।
  • Firewall চালু, শুধু দরকারি port খোলা।
  • fail2ban চলছে।
  • Update চালু, পুরোনো key সরানো।
  • দ্বিতীয় terminal থেকে পরীক্ষিত।

মূল কথা: password-এর বদলে key, root login বন্ধ, firewall ও fail2ban SSH-এর বেশিরভাগ আক্রমণ ঠেকায়, আর দ্বিতীয় terminal-এ পরীক্ষা নিজেকে লক আউট হওয়া থেকে বাঁচায়।


Linux ও DevOps সিরিজ, পর্ব ১ (server ও container): 5 নম্বর (মোট 5)। আগের লেখা: Docker-এর গোড়া: image, container ও প্রথম Dockerfile.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া