راهاندازی اولیه و امنسازی سرور اوبونتو
سرور تازه با دسترسی root و رمز عبور تحویل داده میشود و در عرض چند ساعت هدف اسکن رباتها قرار میگیرد. این چکلیست دهدقیقهای پایهٔ امنیت و سلامت هر سرور جدید است.
۱بهروزرسانی سیستم
اولین کار: بستهها و پچهای امنیتی را نصب کنید و در صورت نیاز ریبوت کنید.
apt update && apt upgrade -y
apt install -y curl ufw fail2ban unattended-upgrades
[ -f /var/run/reboot-required ] && reboot۲ساخت کاربر غیر root با دسترسی sudo
کار روزمره را با کاربر عادی انجام دهید و root را فقط در صورت نیاز با sudo استفاده کنید.
adduser deploy
usermod -aG sudo deploy
id deploy۳کلید SSH و غیرفعال کردن رمز عبور
روی کامپیوتر خودتان کلید بسازید، به سرور کپی کنید و پیش از هر تغییر دیگر مطمئن شوید ورود با کلید کار میکند.
# روی کامپیوتر شما
ssh-keygen -t ed25519 -C "me@laptop"
ssh-copy-id deploy@SERVER_IP
ssh deploy@SERVER_IP # باید بدون رمز وارد شوید۴امنسازی SSH
بعد از اطمینان از ورود با کلید (و باز نگه داشتن یک نشست SSH دیگر)، رمز عبور و ورود مستقیم root را غیرفعال کنید.
sudo nano /etc/ssh/sshd_config.d/99-hardening.conf
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
sudo sshd -t && sudo systemctl reload sshقبل از بستن نشست فعلی، در یک ترمینال جدید ورود با کلید را تست کنید؛ اشتباه در این مرحله سرور را قفل میکند.
۵فایروال ufw
فقط پورتهای لازم را باز کنید. اول SSH را مجاز کنید و بعد فایروال را فعال کنید.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseپیش از ufw enable مطمئن شوید OpenSSH مجاز است وگرنه دسترسی شما قطع میشود.
۶fail2ban برای جلوگیری از حدس رمز
بعد از چند تلاش ناموفق IP مهاجم بهطور موقت مسدود میشود. تنظیم را در jail.local بنویسید.
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd۷بهروزرسانی امنیتی خودکار
پچهای امنیتی را خودکار نصب کنید تا آسیبپذیریهای جدید مدت طولانی باز نماند.
sudo dpkg-reconfigure -plow unattended-upgrades
systemctl status unattended-upgrades --no-pager۸منطقهٔ زمانی، NTP و نام سرور
ساعت درست برای لاگها، cron و گواهی SSL ضروری است.
sudo timedatectl set-timezone Asia/Tehran
sudo timedatectl set-ntp true
sudo hostnamectl set-hostname web-01
timedatectl۹بررسی نهایی
پورتهای باز و وضعیت فایروال و سرویسها را یک بار مرور کنید.
sudo ss -tlnp
sudo ufw status
systemctl --failed
last -n 5پرسشهای پرتکرار دربارهٔ راهاندازی اولیه و امنسازی سرور اوبونتو
آیا باید پورت SSH را عوض کنم؟
تغییر پورت فقط نویز لاگ رباتها را کم میکند و امنیت واقعی نمیدهد. مهمتر از آن ورود با کلید، غیرفعال کردن رمز و fail2ban است. اگر پورت را عوض کردید ابتدا آن را در ufw باز کنید.