VPS

⌘K
  1. Home
  2. VPS
  3. Ubuntu
  4. VPS Initial Setup & ...
  5. 02 server security (Advance Security)

02 server security (Advance Security)

  • কেন এটি ব্যবহার করা হচ্ছে
  • কোথায় এটি কাজ করে
  • কী হয় এটি চালালে
  • Security-র দৃষ্টিকোণ থেকে এর মানে কী

এখন আমি আপনাকে দিচ্ছি একজন সফটওয়্যার ইঞ্জিনিয়ার লেভেলে
🔥 Laravel VPS Security Setup (Part 1) এর প্রতিটি কমান্ড, সম্পূর্ণ বিস্তারিত ব্যাখ্যা সহ।


🔰 PART 1: Security Hardening for Laravel VPS (OLEE ইউজার, Deep Explanation Edition)


✅ STEP 1: UFW Firewall Setup (Uncomplicated Firewall)


🔧 ১. UFW ইনস্টল করা

sudo apt update && sudo apt install ufw -y

বর্ণনা:

  • sudo apt update: প্যাকেজ ইনফো রিফ্রেশ করে (required before install)
  • sudo apt install ufw: UFW firewall ইনস্টল করে
  • -y: confirmation ছাড়াই ইনস্টল করে

➡️ 🧠 কেন দরকার?
Laravel সার্ভারে সব port খোলা রাখা ভয়ানক — firewall দিয়ে শুধু দরকারি port রাখি, বাকি ব্লক।


🔧 ২. দরকারি port allow করা (SSH, HTTP, HTTPS)

sudo ufw allow 2280/tcp     # SSH port
sudo ufw allow 80/tcp       # HTTP (Laravel app)
sudo ufw allow 443/tcp      # HTTPS (SSL encryption)

বর্ণনা:

  • ufw allow <port>/tcp: TCP প্রোটোকল দিয়ে নির্দিষ্ট port খুলে দেয়
  • 2280: SSH port (custom, bot-attack থেকে নিরাপদ)
  • 80: HTTP port
  • 443: HTTPS (SSL secured)

➡️ 🧠 কেন দরকার?
Laravel ওয়েব অ্যাপ ও SSH access চালু রাখতে এই port তিনটি ছাড়া কিছু দরকার নেই।


🔧 ৩. Firewall চালু করা

sudo ufw enable

বর্ণনা:

  • Firewall অন করে, এখন থেকে রুলগুলো enforced হবে

➡️ 🧠 সতর্কতা: SSH port allow না করে চালু করলে সার্ভার ব্লক হয়ে যেতে পারে।


🔧 ৪. Firewall স্ট্যাটাস দেখা

sudo ufw status verbose

বর্ণনা:

  • Firewall এখন কি করছে, কোন port খোলা আছে তা দেখা যায়

➡️ 🧠 কেন দরকার?
Check করতে হবে firewall ঠিকভাবে কাজ করছে কিনা।


✅ STEP 2: Fail2Ban Setup (Brute Force Attack Stopper)


🔧 ১. Fail2Ban ইনস্টল

sudo apt install fail2ban -y

বর্ণনা:

  • এটা একটি সার্ভার “intrusion prevention system”
  • SSH login এ বারবার ব্যর্থ হলে IP address ব্যান করে দেয়

➡️ 🧠 কেন দরকার?
বট বা হ্যাকার বারবার ভুল password দিয়ে লগইন চেষ্টা করে — Fail2Ban সেই IP এক ঘন্টার জন্য ব্যান করে দেয়।


🔧 ২. কনফিগ ফাইল কপি ও সম্পাদনা

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

বর্ণনা:

  • jail.conf → মূল config
  • .local → override করতে কপি করা হয়
  • nano → ফাইল এডিট করার জন্য simple টার্মিনাল editor

🔧 ৩. [sshd] সেকশন আপডেট:

[sshd]
enabled = true
port = 2280
logpath = %(sshd_log)s
maxretry = 5
bantime = 1h
findtime = 10m

বর্ণনা:

  • enabled = true: SSH জন্য Fail2Ban চালু
  • port = 2280: আপনার SSH custom port
  • maxretry = 5: ৫ বার ভুল login
  • bantime = 1h: ১ ঘণ্টা IP ban
  • findtime = 10m: ১০ মিনিটের মধ্যে ৫ বার ট্রাই করলেই ব্যান

➡️ 🧠 সিকিউরিটি লক্ষ্য: login brute-force থেকে সুরক্ষা


🔧 ৪. Fail2Ban চালু ও Enable

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

বর্ণনা:

  • enable: boot এর সময় চালু হবে
  • restart: এখনি চালু হবে

🔧 ৫. ব্যান রিপোর্ট দেখা

sudo fail2ban-client status sshd

বর্ণনা:

  • Fail2Ban এর মাধ্যমে কোন IP ব্যান হয়েছে তা দেখা যায়

✅ STEP 3: SSH Port পরিবর্তন ও সিকিউর করা


🔧 SSH কনফিগ সম্পাদনা

sudo nano /etc/ssh/sshd_config

🔄 পরিবর্তন করুন:

Port 2280
PermitRootLogin no
PasswordAuthentication no

বর্ণনা:

  • Port 2280: SSH bot-attack থেকে বাঁচার জন্য custom port
  • PermitRootLogin no: root login বন্ধ (highly recommended)
  • PasswordAuthentication no: শুধুমাত্র SSH key দিয়ে লগইন

➡️ 🧠 শুধু আপনার olee key দিয়ে লগইন সম্ভব — অন্য কেউ পারবে না।


🔧 SSH সার্ভিস রিস্টার্ট

sudo systemctl restart ssh

বর্ণনা:

  • নতুন কনফিগারেশন কার্যকর করতে সার্ভিস রিস্টার্ট করতে হয়

✅ STEP 4: Timezone ও Locale ঠিক করা


🔧 Timezone সেট (Asia/Dhaka)

sudo timedatectl set-timezone Asia/Dhaka

বর্ণনা:

  • সার্ভারের সময়কে বাংলাদেশ সময় এ সেট করে

➡️ 🧠 Laravel queue, log, cron — সব সঠিক টাইমস্ট্যাম্প ব্যবহার করবে


🔧 Check করুন:

timedatectl

Output দেখাবে:

Time zone: Asia/Dhaka (BDT, +0600)

✅ STEP 5: Unused Services বন্ধ করা


🔧 সার্ভারে চালু থাকা সার্ভিস দেখা:

sudo systemctl list-units --type=service

🔧 উদাহরণ: Apache থাকলে stop ও disable করুন

sudo systemctl stop apache2
sudo systemctl disable apache2

বর্ণনা:

  • Stop: এখনই বন্ধ
  • Disable: সার্ভার রিবুট হলে আবার চালু হবে না

➡️ 🧠 Laravel Nginx ব্যবহার করে — Apache দরকার নেই।


✅ STEP 6: Root Shell History Disable (Optional)

echo 'export HISTFILE=/dev/null' >> ~/.bashrc

বর্ণনা:

  • root ইউজার যা কিছু টাইপ করে তা আর history তে সংরক্ষিত হবে না

➡️ 🧠 কিছু প্রোডাকশন সিস্টেমে সিকিউরিটির জন্য এটা দরকার হতে পারে।


✅ STEP 7: ICMP Ping Disable (Optional)

echo "net.ipv4.icmp_echo_ignore_all = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

বর্ণনা:

  • ping করলে VPS “dead” দেখাবে, scan tool বুঝতে পারবে না VPS active আছে কিনা

➡️ 🧠 DDoS বা bot scan থেকে রক্ষা করতে সাহায্য করে।


✅ STEP 8: Auto Security Updates চালু করা

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

বর্ণনা:

  • Critical & security update গুলো নিজে নিজে apply করবে

➡️ 🧠 আপনাকে প্রতিবার update করতে হবে না, সময়মত patching হবে


✅ সারাংশ: কীভাবে Laravel-Ready VPS একদম Bulletproof করবেন

সিকিউরিটি বিষয়করা হয়েছে?
🔐 Custom SSH Port
👤 Only olee user login
🔥 UFW Firewall
🛡️ Fail2Ban brute-force protection
❌ Root login বন্ধ
🕒 Timezone ঠিক
📥 Auto security updates
❌ Unused service disable

How can we help?