اگر سرور اوبونتو یا 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 به صورت پیشفرض نصب شده است اما غیرفعال است. برای بررسی وضعیت آن، از دستور زیر استفاده کنید:
1 | sudo ufw status verbose |
اگر پاسخ شما “Status: inactive” بود، یعنی UFW هنوز فعال نشده است. قبل از فعالسازی، جدیترین اشتباهی که مدیران تازهکار مرتکب میشوند این است که بدون تعریف قوانین اولیه، فایروال را فعال میکنند و بلافاصله اتصال SSH خود را از دست میدهند. برای جلوگیری از این اتفاق، ابتدا باید پورت SSH را مجاز اعلام کنید:
1 2 3 | sudo ufw allow OpenSSH # یا اگر پورت SSH را تغییر دادهاید: sudo ufw allow 2222/tcp |
حالا نوبت به فعالسازی فایروال رسیده است:
1 | sudo ufw enable |
دستور بالا را که اجرا کنید، هشداری درباره اختلال احتمالی در اتصالات SSH دریافت خواهید کرد که طبیعی است. با تایید نهایی، فایروال فعال شده و با دستور sudo ufw status verbose میتوانید جزئیات دقیق قوانین فعال را مشاهده کنید.
تعریف قوانین دسترسی پایه در UFW
پس از فعالسازی اولیه، باید سرویسهای ضروری سرور را به صورت دستی باز کنید. برای یک وبسرور استاندارد، تنظیمات زیر پیشنهاد میشود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # اجازه دسترسی به پورتهای وب sudo ufw allow 80/tcp sudo ufw allow 443/tcp # اجازه دسترسی به DNS sudo ufw allow 53 # اجازه دسترسی به پورت ایمیل (در صورت نیاز) sudo ufw allow 25/tcp sudo ufw allow 587/tcp # رد کردن همه اتصالات ورودی دیگر sudo ufw default deny incoming sudo ufw default allow outgoing |
توجه کنید که تعیین خط مشی پیشفرض deny incoming یک اقدام ضروری است. این دستور تضمین میکند که هر پورت باز دیگری که بدون مجوز شما فعال شده باشد، از بیرون قابل دسترسی نباشد.
مدیریت و حذف قوانین UFW
گاهی اوقات نیاز دارید یک قانون خاص را حذف یا تغییر دهید. UFW ابزار مناسبی برای این کار در اختیار شما قرار میدهد:
1 2 3 4 5 6 7 8 | # نمایش قوانین به صورت شمارهدار sudo ufw status numbered # حذف یک قانون بر اساس شماره sudo ufw delete 3 # حذف یک قانون بر اساس مشخصات دقیق sudo ufw delete allow 8080/tcp |
همچنین اگر نیاز به محدود کردن دسترسی به یک IP خاص دارید، میتوانید به سادگی این کار را انجام دهید. به عنوان مثال، اگر فقط میخواهید IP اداره خودتان اجازه اتصال به پورت SSH را داشته باشد:
1 | sudo ufw allow from 203.0.113.10 to any port 22 proto tcp |
این نوع محدودیتسازی، سطح امنیت بسیار بالاتری نسبت به باز گذاشتن SSH روی همه IPها ایجاد میکند.
پیکربندی پیشرفته iptables برای حرفهایها
اگرچه UFW برای مدیریت روزمره فوقالعاده است، اما در سناریوهای پیچیده مانند ساخت مسیرهای ترافیکی چندگانه، NAT پیشرفته، یا فیلترینگ بر اساس وضعیت اتصال، iptables میتواند از آنجا که به شما کنترل کامل سطح هسته را میدهد، به ابزار قدرتمندی تبدیل شود. برای مشاهده قوانین فعلی iptables و مدیریت آنها از دستورات زیر استفاده میشود:
1 2 3 4 5 | # مشاهده همه قوانین sudo iptables -L -n -v # مشاهده قوانین با جزئیات کامل sudo iptables -S |
یکی از مهمترین قابلیتهای iptables که در UFW به صورت پیشفرض مدیریت نمیشود، قابلیت حالتمند (Stateful) آن است. با استفاده از ماژول conntrack، میتوانید به سرور بگویید فقط بستههایی را که بخشی از یک اتصال از قبل برقرار شده هستند، بپذیرد. این کار حملههای مبتنی بر جعل بسته (Packet Spoofing) را تقریباً غیرممکن میکند.
پیادهسازی قوانین Stateful در iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # پاک کردن قوانین قبلی sudo iptables -F # تنظیم خط مشی پیشفرض sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # اجازه ترافیک لوکال هاست sudo iptables -A INPUT -i lo -j ACCEPT # پذیرش اتصالات جدید و مرتبط sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # باز کردن پورت SSH sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # باز کردن پورتهای وب sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW -j ACCEPT |
این ساختار دقیقاً همان چیزی است که یک فایروال حرفهای در سطح سازمانی باید داشته باشد. بسته به وضعیت اتصال (Connection State) تصمیمگیری کنید، نه صرفاً بر اساس پورت و IP.
ذخیرهسازی و بازیابی قوانین iptables
یکی از نکات مهم درباره iptables این است که قوانین آن به صورت پیشفرض پس از ریبوت سرور پاک میشوند. برای حفظ دائمی قوانین، باید آنها را ذخیره کنید. دو روش رایج برای این کار وجود دارد:
| ابزار | دستور ذخیرهسازی | دستور بازیابی | مناسب برای |
|---|---|---|---|
| iptables-persistent | sudo netfilter-persistent save | sudo netfilter-persistent reload | سیستمهای استیبل و سرورهای دائمی |
| iptables-save | sudo iptables-save > /etc/iptables/rules.v4 | sudo iptables-restore < /etc/iptables/rules.v4 | اسکریپتهای اتوماسیون و دیباگ |
برای نصب ابزار iptables-persistent در اوبونتو، دستور زیر را اجرا کنید:
1 2 | sudo apt update sudo apt install iptables-persistent |
با انجام این کار، قوانین شما پس از هر بار ریبوت به صورت خودکار بارگذاری میشوند و هیچ نگرانی بابت فراموشی ذخیرهسازی نخواهید داشت.
مقایسه UFW و iptables: کدام را انتخاب کنیم؟
برای اینکه تصمیم بهتری بگیرید، بیایید به صورت شفاف این دو ابزار را با هم مقایسه کنیم. واقعیت این است که در زیرساختهای مدرن، هر دو ابزار جایگاه خاص خود را دارند و انتخاب نهایی به نیازهای شما بستگی دارد.
| معیار مقایسه | UFW | iptables |
|---|---|---|
| سطح پیچیدگی | ساده و مبتدیپسند | پیچیده و نیازمند دانش شبکه |
| قابلیت 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 را ارائه میدهد:
1 2 3 4 5 6 | # فعالسازی IP Forwarding برای سناریوهای NAT echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-forwarding.conf sudo sysctl -p /etc/sysctl.d/99-forwarding.conf # اعمال قوانین حفاظتی پیشرفته برای جلوگیری از حملات SYN Flood sudo iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT |
این سطح از تنظیمات در سرورهای با ترافیک بالا، تفاوت محسوسی در پایداری و امنیت ایجاد میکند.
جمعبندی و نتیجهگیری
در این راهنمای جامع کانفیگ دیوار آتش، قدمبهقدم یاد گرفتید که چگونه 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 ذخیره کنید تا در بوتهای بعدی به صورت خودکار بازیابی شوند.