- কেন এটি ব্যবহার করা হচ্ছে
- কোথায় এটি কাজ করে
- কী হয় এটি চালালে
- 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 port443: 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 portmaxretry = 5: ৫ বার ভুল loginbantime = 1h: ১ ঘণ্টা IP banfindtime = 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 portPermitRootLogin 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 | ✅ |