Fail2ban لاگهای سرویسهای شما را زیر نظر میگیرد و آدرسهای IP که رفتار سوءاستفادهگرانه دارند (تلاشهای مکرر SSH، اسکنهای HTTP و غیره) را بهطور موقت مسدود میکند. این ابزار مکملی مفید برای فایروال UFW و پیکربندی امن SSH است.
پیشنیازها
- Ubuntu/Debian (یا مشتقات آن) با
sudo - سرویسی که باید محافظت شود از قبل برقرار باشد (مثلاً
sshd،nginx)
نصب
Bashsudo apt update && sudo apt install -y fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
پیکربندی پایه
فایلهای سفارشی در /etc/fail2ban/jail.d/ قرار میگیرند تا با بهروزرسانیها بازنویسی نشوند.
فایل /etc/fail2ban/jail.d/local.conf را بسازید:
INI1[DEFAULT] 2bantime = 1h 3findtime = 10m 4maxretry = 5 5ignoreip = 127.0.0.1/8 ::1 6 7[sshd] 8enabled = true 9port = ssh 10logpath = %(sshd_log)s 11backend = %(sshd_backend)s
اگر پورت SSH را تغییر دادهاید، port = ssh را با پورت خود جایگزین کنید (مثلاً port = 2222).
Fail2ban را بارگذاری مجدد کنید:
Bashsudo systemctl restart fail2ban sudo fail2ban-client status sudo fail2ban-client status sshd
محافظت از Nginx (فیلتر HTTP بیشازحد سختگیر)
در صورت نیاز (بسته به توزیع) بسته فیلترها را نصب کنید، سپس برای نمونه این را اضافه کنید:
INI[nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log
مسیرهای لاگ را با نصب خود تطبیق دهید.
بهترین روشها
- IP ثابت خود را در
ignoreipاضافه کنید تا هنگام آزمایش خودتان مسدود نشوید. - پس از استقرار،
sudo fail2ban-client status sshdرا زیر نظر داشته باشید. - مسدودسازیها موقت هستند (
bantime)؛ بر اساس میزان تحمل خود تنظیم کنید.
رفع مسدودیت دستی یک IP
Bashsudo fail2ban-client set sshd unbanip 198.51.100.10
عیبیابی
- هیچ مسدودسازی انجام نمیشود: بررسی کنید
enabled = trueباشد، مسیرlogpathدرست باشد و سرویس، تلاشهای ناموفق را لاگ کند. - خودتان مسدود شدهاید: از کنسول پنل ارائهدهنده میزبانی / IPMI یا یک IP دیگر برای اتصال استفاده کنید و
ignoreipرا تنظیم کنید یا مسدودیت را بردارید.