بازگشت به مجله
امنیتتیم فنی هایوهاست۱۰ دقیقه مطالعه

پیکربندی فایروال UFW در اوبونتو و دبیان

از قوانین پایه تا محدود کردن نرخ اتصال و آن نکته ای که درباره داکر و دور زدن فایروال باید بدانید.

فایروال

هر سرویسی که روی سرور بالا می آید، یک در جدید به بیرون باز میکند. پایگاه داده، پنل مدیریت، سرویس کش و حتی ابزارهای مانیتورینگ اگر بدون محدودیت روی اینترنت باز باشند، دیر یا زود پیدا میشوند. UFW لایه ای است که تصمیم میگیرد چه چیزی از بیرون به سرور شما برسد و کار با آن به مراتب ساده تر از نوشتن مستقیم قوانین iptables است.

1

UFW چیست و چرا از iptables ساده تر است

پشت صحنه، فیلترینگ بسته ها در لینوکس با netfilter انجام میشود و ابزارهایی مثل iptables یا nftables با آن حرف میزنند. مشکل اینجاست که نوشتن مستقیم آن قوانین، هم طولانی است و هم اشتباه در آن گران تمام میشود. UFW یک پوسته ساده روی همین سیستم است که کارهای رایج را با دستورهای قابل خواندن انجام میدهد.

در اوبونتو معمولا از قبل نصب است اما فعال نیست. در دبیان اغلب باید خودتان نصبش کنید.

نصب و بررسی وضعیت اولیه
sudo apt update
sudo apt install ufw
sudo ufw status verbose
2

قبل از فعال سازی حتما SSH را باز کنید

این مهمترین جمله کل این مقاله است. سیاست پیشفرض UFW رد کردن تمام اتصال های ورودی است. اگر فایروال را بدون اجازه دادن به SSH فعال کنید، همان لحظه ارتباط شما قطع میشود و اگر کنسول سرور را در دسترس نداشته باشید، راه برگشتی نمی ماند.

اگر پورت SSH را تغییر داده اید، به جای پروفایل آماده، شماره پورت خودتان را باز کنید.

روی پورت پیشفرض ۲۲
sudo ufw allow OpenSSH
اگر پورت را تغییر داده اید
sudo ufw allow 2222/tcp
3

تعیین سیاست های پیشفرض

منطق درست یک فایروال این است که همه چیز بسته باشد مگر آنچه صراحتا اجازه داده اید. خروجی معمولا باز میماند تا سرور بتواند به روز رسانی بگیرد و به سرویس های بیرونی وصل شود.

سیاست پایه
sudo ufw default deny incoming
sudo ufw default allow outgoing
فعال سازی فایروال
sudo ufw enable
4

باز کردن سرویس ها به روش های مختلف

UFW برای بسته های پرکاربرد پروفایل آماده دارد. با فهرست گرفتن از پروفایل ها میتوانید ببینید چه گزینه هایی روی سرور شما تعریف شده است. استفاده از پروفایل خواناتر است، اما باز کردن مستقیم پورت هم کاملا درست است.

نکته مهم تر این است که لازم نیست هر سرویس را برای کل اینترنت باز کنید. پایگاه داده، ردیس یا پنل های مدیریتی بهتر است فقط برای آدرس های مشخص باز باشند.

دیدن پروفایل های موجود
sudo ufw app list
sudo ufw app info 'Nginx Full'
چند نمونه رایج
sudo ufw allow 'Nginx Full'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 6000:6007/tcp
محدود کردن یک سرویس به یک آدرس مشخص
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
5

محدود کردن نرخ تلاش برای اتصال

قابلیت limit اجازه میدهد اگر یک آدرس در بازه کوتاه بیش از شش بار تلاش برای اتصال کند، موقتا مسدود شود. برای پورت SSH این تنظیم ارزش زیادی دارد و جلوی بخش بزرگی از حمله های تکراری را میگیرد.

اعمال محدودیت نرخ روی SSH
sudo ufw limit ssh
sudo ufw limit 2222/tcp
6

مدیریت، بازبینی و حذف قوانین

بعد از مدتی فهرست قوانین شلوغ میشود. بهترین راه حذف، استفاده از شماره گذاری است؛ چون حذف بر اساس متن قانون گاهی نتیجه دلخواه را نمیدهد.

دقت کنید که بعد از حذف یک قانون، شماره های بعدی جابجا میشوند. اگر چند قانون را پشت سر هم حذف میکنید، هر بار دوباره فهرست را بگیرید.

مشاهده قوانین با شماره
sudo ufw status numbered
حذف بر اساس شماره
sudo ufw delete 3
بازنشانی کامل در صورت نیاز
sudo ufw reset
خروجی نمونه دستور ufw status verbose در ترمینال
خروجی نمونه؛ ستون From نشان میدهد هر قانون برای چه آدرسی فعال است.
7

نکته ای که کمتر گفته میشود: داکر UFW را دور میزند

اگر روی سرور داکر دارید، این بخش را جدی بگیرید. داکر قوانین خودش را مستقیم به زنجیره های iptables اضافه میکند و این قوانین قبل از قوانین UFW بررسی میشوند. نتیجه این است که اگر کانتینری پورتی را منتشر کند، آن پورت از بیرون در دسترس است؛ حتی اگر در UFW آن را بسته باشید.

ساده ترین راه حل این است که پورت کانتینر را فقط به لوکال هاست متصل کنید و دسترسی بیرونی را از طریق یک ریورس پروکسی مدیریت کنید.

به جای انتشار روی همه رابط ها
ports:
  - "8080:80"
فقط روی لوکال هاست منتشر کنید
ports:
  - "127.0.0.1:8080:80"
  • بعد از هر تغییر، خروجی sudo ufw status verbose را یک بار مرور کنید.
  • پورت هایی که دیگر استفاده نمیشوند را ببندید؛ فهرست کوتاه تر یعنی خطای کمتر.
  • برای بررسی واقعی پورت های باز، از بیرون سرور اسکن بگیرید نه از داخل آن.

پرسش های پرتکرار

بعد از فعال کردن UFW دسترسی SSH قطع میشود؟

اگر قبل از فعال سازی، پورت SSH را باز نکرده باشید بله. سیاست پیشفرض رد کردن تمام اتصال های ورودی است، پس همیشه اول قانون SSH را اضافه کنید و بعد فایروال را فعال کنید.

چرا با وجود بستن پورت در UFW، کانتینر داکر از بیرون در دسترس است؟

داکر قوانین خودش را مستقیم به iptables اضافه میکند و این قوانین قبل از قوانین UFW بررسی میشوند. راه حل این است که پورت کانتینر را روی 127.0.0.1 منتشر کنید.

تفاوت allow و limit در UFW چیست؟

دستور allow اتصال را بدون محدودیت اجازه میدهد، اما limit اگر یک آدرس در بازه کوتاه بیش از شش بار تلاش برای اتصال کند، آن را موقتا مسدود میکند.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه