تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

راهنمای انتخاب بهترین سیاست فایروال برای حفاظت از سرورها


۶ اسفند ۱۴۰۳

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

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

در ادامه خواهید خواند:

  • تصمیم گیری درباره ی یک سیاست پیش فرض
  • مسدود کردن در مقابل در کردن ترافیک
  • سیاست‌های ICMP
  • محدودیت اتصال و محدودیت نرخ
  • مدیریت یکپارچه در مقابل مدیریت زنجیره‌ای
  • جمع بندی

تصمیم گیری درباره ی یک سیاست پیش فرض

هنگام پیکربندی یک فایروال، یکی از مهم‌ترین تصمیماتی که باید بگیرید، تعیین سیاست پیش فرض (Default Policy) است. این سیاست مشخص می‌کند که در صورت عدم تطابق یک ترافیک با سایر قوانین تعریف شده، چه اتفاقی برای آن بیفتد. به صورت کلی، فایروال می‌تواند یکی از دو رفتار زیر را اتخاذ کند.

  • ACCEPT (پذیرش): اجازه عبور به تمام ترافیک‌هایی که توسط قوانین قبلی مسدود نشده‌اند.
  • DROP (رد کردن): مسدود کردن تمام ترافیک‌هایی که با هیچ‌یک از قوانین قبلی تطابق ندارند.

پذیرش پیش‌فرض در مقابل رد پیش‌فرض

در سیاست ACCEPT پیش‌فرض، هر ترافیکی که در قوانین تعریف نشده باشد، اجازه عبور خواهد داشت. این روش معمولاً توصیه نمی‌شود، زیرا مدیریت آن دشوار است و نیاز به مسدود کردن تمام ترافیک‌های ناخواسته به‌صورت دستی دارد. این رویکرد لیست مسدودکننده، باعث افزایش پیچیدگی و احتمال بروز خطا در پیکربندی می‌شود و ممکن است موجب ایجاد حفره‌های امنیتی شود.

در مقابل، سیاست DROP پیش‌فرض به این معناست که هر ترافیکی که به‌طور مشخص مجاز نشده باشد، مسدود خواهد شد. این روش ممکن است در ابتدا نیاز به پیکربندی بیشتری داشته باشد، اما امنیت را افزایش می‌دهد و کنترل دقیقی بر روی ترافیک ورودی فراهم می‌کند. همچنین، بیشتر سیاست‌های پیش‌فرض از این روش پیروی می‌کنند، بنابراین می‌توان از تنظیمات موجود بهره برد.

بیشتر بخوانید: فایروال Iptables چگونه کار می‌کند؟

انتخاب بهترین سیاست فایروال

سیاست رد پیش‌فرض در مقابل قانون نهایی رد

انتخاب DROP پیش‌فرض یک تصمیم دیگر را نیز به همراه دارد. در فایروال‌هایی مانند iptables، این سیاست می‌تواند به دو روش اعمال شود:

  1. استفاده از تنظیمات داخلی فایروال برای تعیین سیاست پیش‌فرض DROP.
  2. تعریف یک قانون مسدودکننده در انتهای لیست قوانین برای مسدود کردن تمام ترافیک‌های باقی‌مانده.

تفاوت این دو روش چیست؟

  • اگر DROP پیش‌فرض را از طریق تنظیمات داخلی فایروال اعمال کنید، در صورت حذف یا ریست شدن قوانین، تمامی سرویس‌های سرور بلافاصله غیرقابل‌دسترسی خواهند شد. این روش امنیت بالاتری دارد، زیرا از قرار گرفتن سرور در معرض ترافیک ناخواسته جلوگیری می‌کند.
  • اما نقطه‌ضعف آن این است که در صورت حذف قوانین، تمامی سرویس‌های شما تا زمان بازگردانی مجوزها، برای کاربران و حتی خود شما غیرقابل‌دسترسی خواهند شد. اگر به سرور دسترسی محلی یا روش دیگری برای مدیریت آن نداشته باشید، ممکن است از آن قفل شوید.

روش جایگزین این است که سیاست پیش‌فرض را ACCEPT تنظیم کنید و یک قانون مسدودکننده کلی در انتهای لیست قوانین قرار دهید. در این حالت، اگر قوانین فایروال پاک شوند، سرور همچنان در دسترس خواهد بود اما بدون هیچ حفاظتی. اگر نگران از دست دادن دسترسی به سرور هستید، این روش می‌تواند یک راهکار احتیاطی باشد. با این حال، باید اطمینان حاصل کنید که قانون مسدودکننده نهایی همیشه در انتهای لیست باقی بماند تا امنیت سرور حفظ شود.

مسدود کردن در مقابل در کردن ترافیک

چندین روش مختلف برای جلوگیری از رسیدن یک بسته (Packet) به مقصد مورد نظر آن وجود دارد. انتخاب بین این روش ها تاثیر مستقیمی بر درک کاربر از تلاش برای اتصال و همچنین سرعت تشخیص این موضوع دارد که درخواست او پذیرفته نخواهد شد.

اولین روش برای رد کردن بسته ها استفاده از DROP است. DROP می‌تواند به عنوان یک سیاست پیش فرض یا یک هدف برای قوانین تطبیق استفاده شود. وقتی یک بسته DROP می‌شود، iptables آن را به‌سادگی کنار می‌گذارد، بدون اینکه پاسخی به کلاینت ارسال کند یا نشان دهد که اصلاً بسته‌ای دریافت شده است. این یعنی کلاینت‌ها، چه قانونی و چه غیرقانونی، هیچ تأییدی مبنی بر دریافت بسته‌هایشان دریافت نخواهند کرد.

در اتصال‌های TCP (مانند ارتباطات ایجاد شده توسط مرورگرهای وب)، این وضعیت باعث می‌شود که اتصال تا زمان رسیدن به حد آستانه تایم‌اوت در حالت معلق باقی بماند. نبود پاسخ برای کلاینت‌های UDP حتی مبهم‌تر است. در واقع، عدم دریافت یک بسته UDP اغلب نشان‌دهنده این است که بسته پذیرفته شده است. اگر کلاینت UDP نیاز به تأیید دریافت داشته باشد، مجبور خواهد شد بسته‌ها را مجدداً ارسال کند تا مشخص کند که آیا بسته پذیرفته شده، در مسیر از بین رفته یا رد شده است. این روش می‌تواند مدت‌زمانی که یک مهاجم برای جمع‌آوری اطلاعات درباره وضعیت پورت‌های سرور نیاز دارد را افزایش دهد، اما درعین‌حال ممکن است مشکلاتی برای ترافیک قانونی ایجاد کند.

جایگزین دیگر برای DROP، رد کردن بسته‌ها به‌طور صریح با استفاده از REJECT است.
ICMP یا پروتکل پیام کنترل اینترنت، یک متا‌پروتکل است که در سراسر اینترنت برای ارسال پیام‌های وضعیت، عیب‌یابی و خطا بین میزبان‌ها استفاده می‌شود. این پروتکل به‌عنوان یک کانال خارج از باند (out-of-band) عمل می‌کند و به پروتکل‌های ارتباطی معمول مانند TCP یا UDP وابسته نیست.

وقتی از REJECT به‌جای DROP استفاده می‌شود، ترافیک رد شده و یک بسته ICMP به فرستنده ارسال می‌شود تا به او اطلاع دهد که بسته دریافت شده اما پذیرفته نخواهد شد. همچنین می‌توان یک پیام وضعیت را برای توضیح دلیل رد بسته ضمیمه کرد.

این موضوع پیامدهای متعددی دارد:

  • اگر ترافیک ICMP به کلاینت برسد، او بلافاصله متوجه خواهد شد که ترافیکش مسدود شده است.
  • برای کلاینت‌های قانونی، این یعنی می‌توانند با مدیر سیستم تماس بگیرند یا تنظیمات اتصال خود را بررسی کنند تا مطمئن شوند که به پورت صحیح متصل شده‌اند.
  • برای کاربران مخرب، این یعنی آن‌ها می‌توانند سریع‌تر اسکن‌های خود را تکمیل کنند و نقشه‌ای از پورت‌های باز، بسته و فیلترشده را به‌دست آورند.

در انتخاب بین DROP و REJECT عوامل زیادی باید در نظر گرفته شود. یکی از نکات مهم این است که بیشتر ترافیک‌های مخرب توسط اسکریپت‌های خودکار اجرا می‌شوند. از آنجا که این اسکریپت‌ها معمولاً تحت نظارت مستقیم نیستند، رد کردن ترافیک غیرقانونی با DROP تأثیر زیادی روی آن‌ها نخواهد داشت، اما ممکن است تأثیرات منفی برای کاربران قانونی داشته باشد.

جدول مقایسه DROP و REJECT در پاسخ‌دهی

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

نوع بسته کلاینتدستور nmapسیاست پورتپاسخ سروروضعیت پورت (بر اساس پاسخ کلاینت)
TCP`nmap [-sT-sS] -Pn <server>`AcceptTCP SYN/ACK
TCP`nmap [-sT-sS] -Pn <server>`Drop(هیچ پاسخی ارسال نمی‌شود)
TCP`nmap [-sT-sS] -Pn <server>`RejectTCP RESET
UDPnmap -sU -Pn <server>Accept(هیچ پاسخی ارسال نمی‌شود)باز یا فیلترشده (Open or Filtered)
UDPnmap -sU -Pn <server>Drop(هیچ پاسخی ارسال نمی‌شود)باز یا فیلترشده (Open or Filtered)
UDPnmap -sU -Pn <server>RejectICMP Port Unreachableبسته (Closed)

ستون اول نوع بسته ارسال‌شده توسط کلاینت را نشان می‌دهد.
ستون دوم دستوراتnmap را برای آزمایش هر سناریو نشان می‌دهد.
ستون سوم سیاست پورت اعمال‌شده را مشخص می‌کند.
ستون چهارم پاسخ سرور را نشان می‌دهد.
ستون پنجم چیزی است که کلاینت می‌تواند بر اساس پاسخ دریافتی در مورد وضعیت پورت استنباط کند.

سیاست‌های ICMP

همان‌طور که هنگام تصمیم‌گیری درباره DROP یا REJECT برای ترافیک غیرمجاز، گزینه‌هایی برای پذیرش (Accept) یا رد (Reject) بسته‌های ICMP نیز وجود دارد.

ICMP یک پروتکل است که برای اهداف مختلفی استفاده می‌شود. همان‌طور که قبلا اشاره شد، اغلب برای ارسال اطلاعات وضعیت درباره درخواست هایی که از طریق سایر پروتکل‌ها انجام شده‌اند، استفاده می‌شود. یمی از رایج ترین کاربردهای ICMP، ارسال و دریافت پینگ های شبکه برای بررسی قابلیت اتصال به میزبان های از راه دور است. با این حال، ICMP موارد استفاده دیگری نیز دارد که شاید کمتر شناخته شده باشند اما همچنان مفید هستند.

سیاست‌های ICMP

ساختار بسته‌های ICMP براساس “نوع” (Type) و سپس “کد” (Code) سازماندهی می‌شوند.

  • نوع (Type) نشان‌دهنده مفهوم کلی پیام است. برای مثال، Type 3 یعنی مقصد غیرقابل دسترس است.
  • کد (Code) اطلاعات دقیق‌تری درباره نوع پیام ارائه می‌دهد. برای مثال:
    • ICMP Type 3 Code 3: یعنی پورت مقصد در دسترس نیست.
    • ICMP Type 3 Code 0: یعنی شبکه مقصد قابل دسترسی نیست.

برخی از انواع ICMP منسوخ شده‌اند و می‌توان آن‌ها را بدون قید و شرط مسدود کرد. از جمله این موارد می‌توان به ICMP Source Quench (نوع 4، کد 0) و ICMP Alternate Host (نوع 6) اشاره کرد. همچنین انواع 1، 2، 7 و تمامی انواع 15 به بالا یا منسوخ شده‌اند، یا برای استفاده‌های آینده رزرو شده‌اند، و یا آزمایشی هستند. بسیاری از قالب‌های فایروال پیش‌فرض این بسته‌ها را به‌طور خودکار مسدود می‌کنند.

انواع ICMP که باید بسته به پیکربندی شبکه مسدود شوند

برخی از انواع ICMP در برخی شبکه‌ها مفید هستند اما در برخی دیگر می‌توانند خطرناک باشند و بهتر است مسدود شوند.

1. ICMP Redirect Messages (نوع 5)

ICMP Redirect برای اصلاح طراحی‌های نادرست شبکه استفاده می‌شود.

  • این پیام زمانی ارسال می‌شود که یک مسیر بهتر به‌طور مستقیم در دسترس کلاینت باشد.
  • مثلاً اگر یک روتر بسته‌ای را دریافت کند که باید به میزبان دیگری در همان شبکه ارسال شود، یک پیام ICMP Redirect برای کلاینت می‌فرستد تا در آینده مستقیماً بسته‌ها را از طریق آن میزبان ارسال کند.

در شبکه‌های امن و مورد اعتماد، این قابلیت می‌تواند برای بهینه‌سازی مسیرهای شبکه مفید باشد، اما در شبکه‌های ناامن، مهاجمان می‌توانند از آن برای دستکاری مسیرهای مسیریابی سوءاستفاده کنند.

2. ICMP Router Advertisement (نوع 9) و Router Solicitation (نوع 10)

  • این پیام‌ها بخشی از پروتکل ICMP برای کشف روترهای اینترنتی (IRDP) هستند و به کلاینت‌ها اجازه می‌دهند هنگام روشن شدن یا پیوستن به یک شبکه، به‌طور خودکار روترهای موجود را پیدا کنند.
  • در بیشتر موارد، بهتر است میزبان‌ها مسیرهای استاتیک برای دروازه‌های خود داشته باشند و به این بسته‌ها نیازی ندارند.

اگر از سرویس‌هایی مانندrdisc استفاده نمی‌کنید که این پیام‌ها را مدیریت کنند، می‌توانید آن‌ها را به‌صورت ایمن مسدود کنید.

انواع ICMP که معمولاً ایمن هستند

برخی از انواع ICMP معمولاً بی‌خطر هستند، اما اگر بخواهید سطح امنیتی بالاتری داشته باشید، می‌توانید آن‌ها را غیرفعال کنید.

  • نوع 8 – Echo Request: این بسته‌ها برای درخواست ping به سرور شما ارسال می‌شوند. معمولاً مجاز بودن این بسته‌ها مشکلی ایجاد نمی‌کند (مسدود کردن آن‌ها باعث مخفی شدن سرور شما نمی‌شود، زیرا روش‌های دیگری برای بررسی فعال بودن آن وجود دارد)، اما در صورت تمایل می‌توانید آن‌ها را مسدود کنید یا آدرس‌های مبدأ مجاز برای پاسخ را محدود نمایید.
  • نوع 13 – Timestamp Request: این بسته‌ها برای بررسی زمان تأخیر (Latency) استفاده می‌شوند. همچنین ممکن است در تکنیک‌های شناسایی سیستم‌عامل (OS Fingerprinting) مورد استفاده قرار بگیرند، بنابراین می‌توانید آن‌ها را مسدود کنید یا محدوده آدرس‌هایی که به آن‌ها پاسخ می‌دهید را محدود نمایید.

انواعی که معمولاً بدون نیاز به قوانین صریح مجاز هستند

این بسته‌ها معمولاً نیازی به قوانین جداگانه ندارند و با تنظیم صحیح فایروال، در صورتی که پاسخی به درخواست‌های ارسال‌شده باشد، به‌طور خودکار مجاز خواهند شد. برای این کار می‌توانید از ماژول conntrack برای اجازه دادن به ترافیک ESTABLISHED و RELATED استفاده کنید:

  • نوع 0 – Echo Reply: این بسته‌ها پاسخ به درخواست‌های ping هستند.
  • نوع 3 – Destination Unreachable: این بسته‌ها زمانی ارسال می‌شوند که یک درخواست ایجادشده توسط سرور شما به مقصد نرسد.
  • نوع 11 – Time Exceeded: اگر بسته‌ای که توسط سرور شما ارسال شده باشد و قبل از رسیدن به مقصد TTL آن تمام شود، این پیام خطا بازگردانده می‌شود.
  • نوع 12 – Parameter Problem: زمانی ارسال می‌شود که یک بسته خروجی از سرور شما ناقص یا نادرست باشد.
  • نوع 14 – Timestamp Response: این بسته‌ها پاسخ به درخواست‌های Timestamp هستند که از سرور شما ارسال شده‌اند.

برخی از کارشناسان امنیتی همچنان مسدود کردن کامل ترافیک ورودی ICMP را توصیه می‌کنند، اما امروزه بسیاری از متخصصان سیاست‌های هوشمندانه‌تری برای پذیرش ICMP پیشنهاد می‌دهند.

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

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

همینطور می‌توانید بخوانید: نحوه بررسی و تست پیکربندی فایروال با Nmap و Tcpdump

محدود کردن تعداد اتصالات (Connection Limiting)

با استفاده از افزونه‌هایی مانند connlimit می‌توان بررسی کرد که یک کلاینت چه تعداد اتصال فعال دارد. این روش امکان محدود کردن تعداد اتصالات همزمان را فراهم می‌کند. در این روش باید تصمیم بگیرید که:

  • محدودیت را بر اساس هر آدرس IP، یک شبکه خاص یا کل سرور اعمال کنید؟
  • این محدودیت را برای یک سرویس خاص تنظیم کنید یا برای کل سرور؟

اتصالات می‌توانند به‌صورت هر کلاینت جداگانه، یک بخش خاص از شبکه (مثلاً محدوده‌ای از آدرس‌های IP)، یا به‌طور کلی برای سرور یا یک سرویس خاص محدود شوند. ترکیب این روش‌ها نیز امکان‌پذیر است.

محدود کردن نرخ ارسال درخواست‌ها (Rate Limiting)

محدود کردن نرخ ارسال درخواست‌ها به شما این امکان را می‌دهد که قوانینی برای میزان ترافیک قابل قبول تعریف کنید. چندین افزونه در فایروال برای این کار استفاده می‌شوند، از جمله limit, hashlimit, recent. نوع افزونه‌ای که انتخاب می‌کنید بستگی به نحوه‌ای دارد که می‌خواهید ترافیک را محدود کنید.

recent: این افزونه به‌صورت پویا آدرس IP کلاینت‌ها را در یک لیست ثبت کرده و بررسی می‌کند که آیا ترافیک آن‌ها باید محدود شود یا خیر. همچنین می‌توان تعداد درخواست‌ها در یک بازه زمانی خاص را تنظیم کرد. اگر کلاینت از حد تعیین‌شده تجاوز کند، فایروال می‌تواند بازه زمانی را مجدداً تنظیم کند و تا زمانی که کلاینت ترافیک خود را کاهش ندهد، درخواست‌هایش مسدود خواهند شد.

limit: این افزونه تا زمانی که مقدار تعیین‌شده به حداکثر نرسد، اجازه عبور بسته‌ها را می‌دهد و سپس بسته‌های اضافی را رد می‌کند. به‌عنوان مثال، مقدار 5/sec یعنی تنها 5 بسته در هر ثانیه پذیرفته می‌شوند و باقی رد خواهند شد. این روش برای تنظیم یک محدودیت کلی روی سرویس مناسب است. همچنین می‌توان از ابزارهایی مانند Fail2ban برای جلوگیری از تلاش‌های مکرر برای اتصال استفاده کرد.

hashlimit: این افزونه انعطاف‌پذیرتر بوده و می‌تواند بسته‌ها را بر اساس آدرس مبدأ، پورت مبدأ، آدرس مقصد، پورت مقصد یا ترکیبی از آن‌ها محدود کند. همچنین می‌تواند محدودیت را بر اساس تعداد بسته‌ها یا میزان داده دریافتی (بر حسب بایت) تنظیم کند. این ویژگی امکان اعمال محدودیت بر اساس هر کلاینت یا هر سرویس را فراهم می‌کند.

مدیریت یکپارچه در مقابل مدیریت زنجیره‌ای

تمام سیاست‌های فایروال در iptables و nftables اساساً بر گسترش زنجیره‌های داخلی (built-in chains) استوار هستند. در ساده‌ترین حالت، این کار معمولاً شامل تغییر سیاست پیش‌فرض (default policy) برای زنجیره‌های موجود و افزودن قوانین جدید است. اما در فایروال‌های پیچیده‌تر، اغلب ایده خوبی است که چارچوب مدیریت (management framework) را با ایجاد زنجیره‌های اضافی گسترش دهید.

زنجیره‌های ایجاد شده توسط کاربر

زنجیره‌هایی که توسط کاربر ایجاد می‌شوند، به زنجیره‌ای که از آن فراخوانی شده‌اند (calling chain) وابسته هستند. این زنجیره‌ها سیاست پیش‌فرض ندارند، به این معنی که اگر یک بسته (packet) در این زنجیره ارزیابی شود اما هیچ قانونی روی آن اعمال نشود، به زنجیره مادر (calling chain) بازمی‌گردد و روند پردازش ادامه می‌یابد.

با توجه به این موضوع، زنجیره‌های کاربر عمدتاً برای سازماندهی بهتر قوانین، ساده‌تر کردن مدیریت شرایط تطبیق (matching conditions)، و خوانایی بهتر قوانین فایروال استفاده می‌شوند.

چرا باید زنجیره‌های اضافی ایجاد کنیم؟

اگر متوجه شدید که یک الگوی تطبیق خاص را در تعداد زیادی از قوانین تکرار می‌کنید، بهتر است یک قانون پرش (jump rule) ایجاد کنید که دارای الگوی تطبیق مشترک باشد و بسته‌ها را به یک زنجیره جدید هدایت کند. سپس می‌توانید قوانین موردنظر را بدون نیاز به تکرار معیارهای تطبیق در زنجیره جدید تعریف کنید.

کدام روش بهتر است؟

اینکه همه قوانین خود را مستقیماً در زنجیره‌های داخلی قرار دهید یا زنجیره‌های اضافی ایجاد کنید، بستگی به میزان پیچیدگی مجموعه قوانین (rule set) شما دارد. اگر تعداد قوانین کم و ساده است، می‌توان از زنجیره‌های داخلی استفاده کرد. اما در فایروال‌های پیچیده، استفاده از زنجیره‌های اضافی به مدیریت بهتر، کاهش تکرار و بهبود عملکرد کمک می‌کند.

همچنین بخوانید: سرور مجازی چیست؟

مدیریت یکپارچه در مقابل مدیریت زنجیره‌ای

جمع بندی

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