راهنمای کانفیگ دیوار آتش (Firewall) UFW و iptables در لینوکس اوبونتو

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

UFW (مخفف Uncomplicated Firewall) در واقع یک رابط کاربری ساده و مدرن بر روی iptables است که مدیریت قوانین را برای مدیران سرور بسیار آسان می‌کند. در حالی که iptables به عنوان موتور اصلی و انعطاف‌پذیر فیلترینگ بسته‌ها در هسته لینوکس عمل می‌کند و کنترل کامل و دقیق‌تری را ارائه می‌دهد. انتخاب بین این دو ابزار به نیاز شما و میزان پیچیدگی شبکه بستگی دارد؛ اما در یک سرور اوبونتو استاندارد، ترکیب هوشمندانه UFW برای قوانین روزمره و iptables برای سناریوهای پیشرفته، بهترین نتیجه را به همراه دارد.

آشنایی با مفاهیم پایه دیوار آتش در لینوکس

قبل از اینکه شروع به وارد کردن دستورات کنید، باید درک درستی از مفاهیم اصلی داشته باشید. دیوار آتش در لینوکس بر اساس زنجیره‌ها (Chains) و قوانین (Rules) کار می‌کند. هر بسته داده‌ای که وارد سیستم می‌شود یا از آن خارج می‌گردد، بر اساس این قوانین بررسی می‌شود و مجوز عبور، رد یا حذف دریافت می‌کند. سه زنجیره اصلی در iptables وجود دارد:

  • INPUT: این زنجیره، ترافیک ورودی به سرور را کنترل می‌کند، مانند درخواست‌هایی که به وب‌سرور یا پایگاه‌داده شما ارسال می‌شود.
  • OUTPUT: این زنجیره، ترافیک خروجی از سرور را مدیریت می‌کند، مانند پاسخ‌های وب‌سرور به کاربران یا درخواست‌های به‌روزرسانی سیستم.
  • FORWARD: این زنجیره برای بسته‌هایی استفاده می‌شود که از سرور عبور می‌کنند و مقصد یا مبدأ آن‌ها سیستم دیگری است، معمولاً در سناریوهای NAT و مسیریابی کاربرد دارد.

خط مشی پیش‌فرض (Policy) هر زنجیره می‌تواند ACCEPT (پذیرش همه) یا DROP (رد همه) باشد. استاندارد طلایی امنیت، تغییر خط مشی پیش‌فرض زنجیره INPUT به DROP است تا همه اتصالات ورودی به جز مواردی که صراحتاً مجاز شده‌اند، مسدود شوند. این رویکرد که به اصل “رد پیش‌فرض، پذیرش استثنا” معروف است، سطح امنیت سرور شما را به شکل چشمگیری افزایش می‌دهد.

نصب و راه‌اندازی UFW روی اوبونتو

در اکثر توزیع‌های اوبونتو، UFW به صورت پیش‌فرض نصب شده است اما غیرفعال است. برای بررسی وضعیت آن، از دستور زیر استفاده کنید:

اگر پاسخ شما “Status: inactive” بود، یعنی UFW هنوز فعال نشده است. قبل از فعال‌سازی، جدی‌ترین اشتباهی که مدیران تازه‌کار مرتکب می‌شوند این است که بدون تعریف قوانین اولیه، فایروال را فعال می‌کنند و بلافاصله اتصال SSH خود را از دست می‌دهند. برای جلوگیری از این اتفاق، ابتدا باید پورت SSH را مجاز اعلام کنید:

حالا نوبت به فعال‌سازی فایروال رسیده است:

دستور بالا را که اجرا کنید، هشداری درباره اختلال احتمالی در اتصالات SSH دریافت خواهید کرد که طبیعی است. با تایید نهایی، فایروال فعال شده و با دستور sudo ufw status verbose می‌توانید جزئیات دقیق قوانین فعال را مشاهده کنید.

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

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

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

مدیریت و حذف قوانین UFW

گاهی اوقات نیاز دارید یک قانون خاص را حذف یا تغییر دهید. UFW ابزار مناسبی برای این کار در اختیار شما قرار می‌دهد:

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

این نوع محدودیت‌سازی، سطح امنیت بسیار بالاتری نسبت به باز گذاشتن SSH روی همه IPها ایجاد می‌کند.

پیکربندی پیشرفته iptables برای حرفه‌ای‌ها

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

یکی از مهم‌ترین قابلیت‌های iptables که در UFW به صورت پیش‌فرض مدیریت نمی‌شود، قابلیت حالت‌مند (Stateful) آن است. با استفاده از ماژول conntrack، می‌توانید به سرور بگویید فقط بسته‌هایی را که بخشی از یک اتصال از قبل برقرار شده هستند، بپذیرد. این کار حمله‌های مبتنی بر جعل بسته (Packet Spoofing) را تقریباً غیرممکن می‌کند.

پیاده‌سازی قوانین Stateful در iptables

این ساختار دقیقاً همان چیزی است که یک فایروال حرفه‌ای در سطح سازمانی باید داشته باشد. بسته به وضعیت اتصال (Connection State) تصمیم‌گیری کنید، نه صرفاً بر اساس پورت و IP.

ذخیره‌سازی و بازیابی قوانین iptables

یکی از نکات مهم درباره iptables این است که قوانین آن به صورت پیش‌فرض پس از ریبوت سرور پاک می‌شوند. برای حفظ دائمی قوانین، باید آن‌ها را ذخیره کنید. دو روش رایج برای این کار وجود دارد:

ابزاردستور ذخیره‌سازیدستور بازیابیمناسب برای
iptables-persistentsudo netfilter-persistent savesudo netfilter-persistent reloadسیستم‌های استیبل و سرورهای دائمی
iptables-savesudo iptables-save > /etc/iptables/rules.v4sudo iptables-restore < /etc/iptables/rules.v4اسکریپت‌های اتوماسیون و دیباگ

برای نصب ابزار iptables-persistent در اوبونتو، دستور زیر را اجرا کنید:

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

مقایسه UFW و iptables: کدام را انتخاب کنیم؟

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

معیار مقایسهUFWiptables
سطح پیچیدگیساده و مبتدی‌پسندپیچیده و نیازمند دانش شبکه
قابلیت Statefulمدیریت خودکارکنترل دستی و دقیق
سرعت پردازشکمی سربار اضافه داردعملکرد خام و بهینه
پشتیبانی از NATمحدودکامل و پیشرفته
معرفی برای تازه‌کارانبسیار مناسبمناسب برای افراد حرفه‌ای

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

بهترین شیوه‌های امنیتی و مدیریت خطا

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

  • همیشه یک نشست زنده SSH را حفظ کنید: قبل از اعمال تغییرات فایروال روی سرور راه دور، یک ترمینال دوم باز کنید و به آن متصل بمانید. اگر به اشتباه دسترسی خود را بستید، می‌توانید از نشست دوم برای رفع عیب استفاده کنید.
  • پورت SSH را تغییر دهید: تغییر پورت پیش‌فرض 22 به یک پورت غیرمعمول، تعداد حملات Brute Force را به شدت کاهش می‌دهد، حتی اگر این کار امنیت مطلق ایجاد نکند.
  • از محدودیت‌های IP بر اساس کشور استفاده کنید: برای سرویس‌های مدیریتی، دسترسی را به IP کشور محل استقرار خود محدود کنید.
  • گزارش‌های فایروال را مانیتور کنید: با استفاده از ابزارهایی مانند netstat و بررسی لاگ‌های /var/log/، الگوهای حمله مشکوک را شناسایی کنید.
  • به‌روزرسانی منظم هسته را انجام دهید: فایروال فقط بخشی از امنیت است؛ همیشه هسته لینوکس را به روز نگه دارید تا از آسیب‌پذیری‌های جدید در امان بمانید.

یکی از رایج‌ترین دلایل از دست رفتن اتصال به سرور، تعیین دستور sudo ufw default deny incoming قبل از باز کردن پورت SSH است. اگر این اتفاق افتاد و امکان دسترسی از طریق KVM یا پنل مدیریتی ارائه‌دهنده را داشتید، از آن استفاده کنید و قانون SSH را اضافه کنید. در غیر این صورت، سرور خود را ریبوت کنید؛ زیرا قوانین UFW تا زمانی که enable نشوند، دائمی نیستند.

سرویس‌های میزبانی و اهمیت فایروال مناسب

در دنیای زیرساخت‌های ابری امروز، انتخاب یک سرویس‌دهنده مناسب می‌تواند نقش تعیین‌کننده‌ای در امنیت نهایی سرور شما داشته باشد. به عنوان یک کارشناس زیرساخت، همیشه توصیه می‌کنم روی سرورهایی کار کنید که قابلیت اختصاص IP و شبکه در سطح بالا را دارند. اگر به دنبال یک VPS قدرتمند مبتنی بر فناوری KVM با دسترسی کامل به هسته لینوکس و پشتیبانی از iptables هستید، بررسی مشخصات سرویس‌های ابری معتبر ایرانی و خارجی را فراموش نکنید. سرویسی که امکان نصب پنل‌های مدیریت سرور مانند HestiaCP یا Virtualmin را به راحتی بدهد، معمولاً انتخاب مناسبی است. نکته مهم این که، فایروال نرم‌افزاری فقط تکمیل‌کننده امنیت زیرساختی است که از سرویس‌دهنده خود دریافت می‌کنید؛ بنابراین سطح امنیت شبکه و دیتاسنتر میزبان را همیشه در نظر داشته باشید.

اگر زیرساخت شما روی یک VPS پرسرعت با NVMe و منابع اختصاصی اجرا می‌شود، بهتر است از تنظیمات پیشنهادی my fault زیر استفاده کنید که ترکیبی از سادگی UFW و قدرت iptables را ارائه می‌دهد:

این سطح از تنظیمات در سرورهای با ترافیک بالا، تفاوت محسوسی در پایداری و امنیت ایجاد می‌کند.

جمع‌بندی و نتیجه‌گیری

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

پرسش‌های متداول درباره کانفیگ دیوار آتش UFW و iptables

آیا UFW و iptables هر دو باید همزمان فعال باشند؟

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

چرا پس از فعال‌سازی UFW اتصال SSH من قطع شد؟

این اتفاق معمولاً به این دلیل رخ می‌دهد که قبل از اجرای دستور sudo ufw enable، قانون اجازه دسترسی به پورت SSH را تعریف نکرده‌اید. برای رفع این مشکل، از طریق کنسول وب ارائه‌دهنده سرور یا دیتاسنتر (KVM/IPMI) وارد سیستم شوید و با دستور sudo ufw allow OpenSSH یا sudo ufw allow 22/tcp پورت SSH را مجاز اعلام کنید.

بهترین روش برای ریست کامل قوانین iptables چیست؟

اگر می‌خواهید همه قوانین را پاک کنید و از یک وضعیت تمیز شروع کنید، از دستورات sudo iptables -F برای پاک کردن زنجیره‌ها و سپس sudo iptables -P INPUT ACCEPT و sudo iptables -P OUTPUT ACCEPT برای تنظیم خط مشی‌های پیش‌فرض روی پذیرش استفاده کنید. این کار از قطعی کامل ارتباط شما جلوگیری می‌کند.

آیا تغییر پورت پیش‌فرض SSH به امنیت سرور کمک می‌کند؟

بله، تغییر پورت پیش‌فرض SSH از پورت 22 به یک پورت دلخواه دیگر، باعث کاهش چشمگیر تلاش‌های خودکار برای ورود به سرور می‌شود؛ زیرا اکثر اسکنرهای رباتیک فقط پورت 22 را هدف قرار می‌دهند. با این حال، این روش جایگزین استفاده از احراز هویت با کلید عمومی (SSH Key) و فایروال سخت‌گیرانه نمی‌شود.

چگونه مطمئن شوم قوانین UFW پس از ریبوت سرور حفظ می‌شوند؟

به لطف سرویس systemd در اوبونتو، قوانین UFW ذاتاً پس از ریبوت حفظ می‌شوند، به شرطی که فایروال را با sudo ufw enable فعال کرده باشید. برای iptables، باید بسته iptables-persistent را نصب کنید و قوانین را با sudo netfilter-persistent save ذخیره کنید تا در بوت‌های بعدی به صورت خودکار بازیابی شوند.