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

فایروال لینوکس چیست و چگونه کار می‌کند؟

در هسته لینوکس، مدیریت بسته‌های شبکه توسط زیرسیستمی به نام netfilter انجام می‌شود. ابزارهایی مانند iptables و جانشین مدرن‌تر آن nftables، رابط‌هایی برای تنظیم قوانین این زیرسیستم هستند. UFW نیز که مخفف Uncomplicated Firewall است، یک لایه ساده‌سازی روی iptables محسوب می‌شود که کار را برای مدیران سرور بسیار آسان‌تر می‌کند.

به بیان ساده، هر بسته شبکه که وارد سرور می‌شود یا از آن خارج می‌شود، در برابر مجموعه‌ای از قوانین بررسی می‌شود. اگر بسته با قانونی مطابقت داشته باشد، عملیات مشخص‌شده (پذیرش، حذف یا رد) روی آن اعمال می‌شود. اصل کلیدی در تنظیم فایروال لینوکس، سیاست «رد پیش‌فرض» (Default Deny) است: هر چیزی که صراحتاً مجاز نشده باشد، مسدود است.

تفاوت DROP و REJECT

  • DROP: بسته را بی‌صدا دور می‌اندازد؛ فرستنده هیچ پاسخی دریافت نمی‌کند و پورت انگار ناموجود به نظر می‌رسد.
  • REJECT: بسته را رد می‌کند اما یک پیام خطا به فرستنده بازمی‌گرداند و مشخص می‌کند که دسترسی ممنوع است.

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

ترافیک ورودی، خروجی و عبوری

در تنظیم فایروال لینوکس، سه جهت ترافیک را باید از هم تفکیک کنید. ترافیک ورودی (Inbound) بسته‌هایی هستند که از بیرون به سمت سرور می‌آیند و بیشترین تمرکز امنیتی روی آن‌هاست. ترافیک خروجی (Outbound) بسته‌هایی است که سرور به بیرون می‌فرستد؛ معمولاً مجاز گذاشته می‌شود اما در محیط‌های بسیار حساس، محدود کردن آن نیز می‌تواند از نشت داده جلوگیری کند. ترافیک عبوری (Forward) مربوط به زمانی است که سرور نقش مسیریاب یا دروازه را ایفا می‌کند. در بیشتر سرورهای معمولی، تمرکز اصلی روی کنترل ترافیک ورودی است.

شروع کار با UFW برای تنظیم فایروال لینوکس

UFW در اوبونتو و دبیان معمولاً از پیش نصب است. اگر نبود، به‌سادگی نصب می‌شود:

sudo apt update
sudo apt install ufw -y
sudo ufw status

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

sudo ufw default deny incoming
sudo ufw default allow outgoing
هشدار امنیتی: پیش از فعال کردن UFW حتماً پورت SSH را مجاز کنید. اگر این کار را نکنید و فایروال را فعال کنید، بلافاصله ارتباط SSH شما قطع می‌شود و از سرور بیرون می‌مانید. این یکی از رایج‌ترین اشتباهات مدیران تازه‌کار است.

باز کردن پورت‌های ضروری

حالا پورت‌های مورد نیاز را مجاز کنید. برای یک وب‌سرور معمولی، پورت‌های SSH، HTTP و HTTPS کافی هستند:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

UFW از نام سرویس‌ها نیز پشتیبانی می‌کند، بنابراین می‌توانید به‌جای شماره پورت از نام استفاده کنید:

sudo ufw allow ssh
sudo ufw allow 'Nginx Full'

گزینه Nginx Full هر دو پورت ۸۰ و ۴۴۳ را همزمان باز می‌کند. برای دیدن فهرست پروفایل‌های موجود از دستور sudo ufw app list استفاده کنید.

فعال کردن و بررسی فایروال

sudo ufw enable
sudo ufw status verbose

خروجی دستور status باید فهرست قوانین فعال را نشان دهد. توصیه می‌شود از حالت numbered برای مدیریت آسان‌تر قوانین استفاده کنید:

sudo ufw status numbered

قوانین پیشرفته در UFW

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

sudo ufw allow from 203.0.113.5 to any port 22 proto tcp

یا می‌توانید یک زیرشبکه کامل را مجاز کنید:

sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp

محدودسازی نرخ اتصال (Rate Limiting)

UFW قابلیت داخلی برای محدود کردن نرخ اتصال دارد که در برابر حملات brute-force بسیار مفید است. این قانون اجازه نمی‌دهد یک IP بیش از ۶ اتصال در ۳۰ ثانیه برقرار کند:

sudo ufw limit 22/tcp

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

مسدود کردن یک IP مشخص

گاهی نیاز دارید یک آدرس IP خاص را که رفتار مخرب دارد به‌طور کامل مسدود کنید. در UFW این کار با قانون deny انجام می‌شود که باید پیش از سایر قوانین allow قرار گیرد:

sudo ufw deny from 198.51.100.10
sudo ufw insert 1 deny from 198.51.100.10

دستور دوم قانون را در ابتدای فهرست (موقعیت ۱) درج می‌کند تا مطمئن شوید پیش از هر قانون مجازکننده‌ای ارزیابی می‌شود. ترتیب قوانین در فایروال بسیار مهم است، چون اولین قانون منطبق اعمال می‌شود.

حذف قوانین

برای حذف یک قانون، ابتدا شماره آن را از خروجی numbered پیدا کنید و سپس حذف کنید:

sudo ufw status numbered
sudo ufw delete 3

کار مستقیم با iptables

گرچه UFW برای اکثر کاربردها کافی است، درک iptables برای سناریوهای پیچیده و عیب‌یابی ضروری است. iptables از مفهوم «زنجیره» (Chain) استفاده می‌کند. سه زنجیره اصلی در جدول filter عبارتند از INPUT (ترافیک ورودی به سرور)، OUTPUT (ترافیک خروجی) و FORWARD (ترافیک عبوری).

برای مشاهده قوانین فعلی iptables با جزئیات کامل:

sudo iptables -L -v -n --line-numbers

ساخت یک مجموعه قوانین پایه با iptables

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

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -P INPUT DROP

قانون conntrack بسیار مهم است؛ این قانون تضمین می‌کند که پاسخ‌های مربوط به اتصالاتی که خود سرور آغاز کرده (مانند به‌روزرسانی‌ها) مجاز باشند.

جدول مقایسه دستورهای رایج

عملیاتمعادل UFWمعادل iptables
مجاز کردن پورت ۸۰ufw allow 80/tcpiptables -A INPUT -p tcp --dport 80 -j ACCEPT
رد پیش‌فرض ورودیufw default deny incomingiptables -P INPUT DROP
مشاهده قوانینufw statusiptables -L -n
حذف یک قانونufw delete NUMiptables -D INPUT NUM

ذخیره‌سازی دائمی قوانین iptables

یکی از تفاوت‌های مهم iptables با UFW این است که قوانین iptables به‌صورت پیش‌فرض پس از ری‌استارت سرور از بین می‌روند. برای دائمی کردن آن‌ها باید از پکیج iptables-persistent استفاده کنید:

sudo apt install iptables-persistent -y
sudo netfilter-persistent save

هر بار که قوانین را تغییر می‌دهید، باید دوباره ذخیره کنید. UFW این کار را به‌صورت خودکار انجام می‌دهد و به همین دلیل برای مدیریت روزمره راحت‌تر است.

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

آشنایی با nftables؛ جانشین مدرن iptables

در توزیع‌های جدید لینوکس، nftables به‌تدریج جایگزین iptables می‌شود. nftables با یک نحو یکپارچه‌تر و کارایی بهتر، مدیریت قوانین را ساده‌تر می‌کند و پشتیبانی بهتری از IPv4 و IPv6 به‌صورت همزمان دارد. در بسیاری از سیستم‌ها، دستور iptables در واقع یک لایه سازگاری روی nftables است. برای مشاهده قوانین nftables:

sudo nft list ruleset

اگر تازه شروع می‌کنید و نیاز به کنترل سطح پایین دارید، یادگیری nftables به‌جای iptables سرمایه‌گذاری بهتری برای آینده است. با این حال برای مدیریت روزمره، UFW همچنان ساده‌ترین و سریع‌ترین راه محسوب می‌شود و بیشتر مدیران سرور به آن نیاز خواهند داشت.

لاگ‌گیری از ترافیک مسدودشده

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

sudo ufw logging on
sudo tail -f /var/log/ufw.log

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

مدیریت فایروال برای IPv6

یک نکته مهم که اغلب فراموش می‌شود، فایروال IPv6 است. اگر سرور شما آدرس IPv6 دارد اما فایروال شما فقط قوانین IPv4 را اعمال کرده باشد، عملاً یک در پشتی باز باقی می‌ماند که مهاجمان می‌توانند از آن استفاده کنند. خوشبختانه UFW به‌صورت پیش‌فرض قوانین را برای هر دو نسخه اعمال می‌کند، اما باید مطمئن شوید که این قابلیت فعال است. فایل /etc/default/ufw را بررسی کنید و مقدار زیر را تأیید کنید:

IPV6=yes

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

عیب‌یابی و اشتباهات رایج در تنظیم فایروال لینوکس

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

  • فراموش کردن مجاز کردن SSH: رایج‌ترین اشتباه که منجر به قطع دسترسی می‌شود. همیشه ابتدا SSH را مجاز کنید.
  • باز گذاشتن پورت دیتابیس: پورت‌هایی مانند 3306 (MySQL) یا 5432 (PostgreSQL) نباید روی اینترنت عمومی باز باشند.
  • نبستن پورت‌های موقت: پورت‌هایی که برای تست باز کرده‌اید را فراموش نکنید ببندید.
  • عدم ذخیره قوانین iptables: که باعث می‌شود پس از ری‌استارت همه‌چیز از بین برود.

برای اطمینان از اینکه فایروال شما درست کار می‌کند، می‌توانید از سیستم دیگری با ابزار nmap پورت‌های باز سرور را اسکن کنید و مطمئن شوید فقط پورت‌های مورد نظر باز هستند. یک فایروال درست پیکربندی‌شده در کنار سایر اقدامات امنیتی، پایه‌ای محکم برای سرور شما می‌سازد. یک عادت خوب این است که پیکربندی فایروال خود را مستند کنید؛ یعنی برای هر قانونی که اضافه می‌کنید دلیل و تاریخ آن را یادداشت کنید. با گذشت زمان و افزایش تعداد قوانین، این مستندسازی به شما کمک می‌کند بدانید کدام قانون برای چه هدفی وجود دارد و کدام قوانین دیگر ضروری نیستند. فایروالی که قوانینش شفاف و مستند باشند، هم امن‌تر است و هم نگهداری آن آسان‌تر خواهد بود. برای مطالعه بیشتر می‌توانید به سایر مقالات رپیدو سرور مراجعه کنید.

سوالات متداول

UFW بهتر است یا iptables؟

UFW و iptables رقیب هم نیستند؛ UFW در واقع یک رابط ساده روی iptables است. برای اکثر کاربران و کاربردهای معمول، UFW به‌دلیل سادگی و ذخیره خودکار قوانین گزینه بهتری است. iptables برای سناریوهای پیچیده، NAT و کنترل دقیق‌تر مناسب است.

آیا فعال کردن فایروال روی عملکرد سرور تأثیر می‌گذارد؟

در حالت عادی و با تعداد معقول قوانین، تأثیر فایروال بر کارایی سرور تقریباً صفر است. netfilter در سطح هسته بسیار بهینه عمل می‌کند. تنها در مقیاس‌های بسیار بزرگ با هزاران قانون ممکن است تأثیر جزئی محسوس شود که آن هم با nftables بهبود می‌یابد.

چطور مطمئن شوم فایروال درست کار می‌کند؟

از یک سیستم دیگر با ابزار nmap پورت‌های سرور را اسکن کنید و بررسی کنید که فقط پورت‌های مجاز باز باشند. همچنین دستور sudo ufw status verbose یا sudo iptables -L -n وضعیت قوانین فعال را نشان می‌دهد.

اگر با فایروال از سرور بیرون بمانم چه کنم؟

در این حالت باید از طریق کنسول VNC یا پنل مدیریتی سرور مجازی که مستقل از شبکه SSH کار می‌کند وارد شوید و قانون مسدودکننده را حذف یا فایروال را موقتاً غیرفعال کنید. به همین دلیل داشتن دسترسی کنسول اضطراری بسیار مهم است.