فایروال اولین لایه دفاع هر سرور لینوکسی است. اما وقتی سراغ تنظیم آن میروید، با سه نام روبهرو میشوید: UFW، iptables و nftables. این سه ابزار رقیب هم نیستند؛ لایههای مختلفی از یک سیستماند. در این مقاله توضیح میدهیم رابطه آنها چیست، هرکدام چه مزایا و محدودیتهایی دارد، همان قانونها در هر سه چطور نوشته میشوند و برای سرور شما کدام انتخاب بهتری است.
فهرست مطالب
Netfilter؛ فایروال واقعی در هسته لینوکس
بستههای شبکه در لینوکس توسط زیرسیستمی در هسته به نام Netfilter فیلتر میشوند. iptables و nftables ابزارهایی هستند که قوانین را به Netfilter تحویل میدهند، و UFW یک لایه سادهتر روی آنهاست. پس سوال درست این نیست که «کدام فایروال قویتر است»، بلکه این است که «با کدام ابزار راحتتر و درستتر قانون بنویسیم».
iptables؛ ابزار کلاسیک
iptables بیش از دو دهه ابزار استاندارد فایروال لینوکس بوده است. قوانین در جدولها (filter، nat، mangle) و زنجیرهها (INPUT، OUTPUT، FORWARD) سازماندهی میشوند و به ترتیب از بالا به پایین بررسی میشوند.
- مزایا: مستندات و مثالهای بسیار زیاد، آشنایی اکثر مدیران سرور، سازگاری با ابزارهای قدیمی.
- محدودیتها: ابزارهای جداگانه برای IPv4 و IPv6 (iptables و ip6tables)، بررسی خطی قوانین که با هزاران قانون کند میشود، و نبود روش اتمیک برای جایگزینی کل مجموعه قوانین.
نکته مهم: در توزیعهای جدید مثل Ubuntu ۲۲.۰۴ به بعد و Debian ۱۱ به بعد، دستور iptables معمولاً نسخه iptables-nft است؛ یعنی همان نوشتار قدیمی را میپذیرد، اما قوانین را در nftables ثبت میکند. با iptables -V میتوانید ببینید کدام نسخه نصب است.
nftables؛ جانشین مدرن
nftables از هسته ۳٫۱۳ به لینوکس اضافه شد و اکنون فریمورک پیشفرض فایروال در اغلب توزیعهاست. ویژگیهای اصلی:
- یک ابزار برای همه: دستور
nftجایگزین iptables، ip6tables، arptables و ebtables شده است. خانوادهinetقوانین مشترک IPv4 و IPv6 را در یک جدول نگه میدارد. - Set و Map: میتوانید هزاران IP یا پورت را در یک مجموعه قرار دهید و با یک قانون بررسی کنید. جستجو در مجموعهها بسیار سریعتر از بررسی هزاران قانون جداگانه است.
- بهروزرسانی اتمیک: کل فایل قوانین با یک دستور بارگذاری میشود؛ یا همه اعمال میشوند یا هیچکدام.
- نوشتار خواناتر: قوانین در یک فایل ساختاریافته نوشته میشوند.
UFW؛ رابط ساده
UFW (Uncomplicated Firewall) ابزار پیشفرض Ubuntu است و هدفش ساده کردن کارهای رایج است. UFW خودش بستهای فیلتر نمیکند؛ دستورهای ساده شما را به قوانین iptables (که در سیستمهای جدید روی nftables اجرا میشود) تبدیل میکند.
- مزایا: یادگیری چند دقیقهای، پروفایلهای آماده برای سرویسها، محدودیت نرخ ساده با
ufw limit. - محدودیتها: برای سناریوهای پیچیده، مثل NAT، مسیریابی یا قوانین مبتنی بر Set، مناسب نیست. با Docker هم تداخل شناختهشدهای دارد که در امنیت Docker توضیح دادهایم.
جدول مقایسه
| معیار | UFW | iptables | nftables |
|---|---|---|---|
| سطح یادگیری | بسیار آسان | متوسط | متوسط تا پیشرفته |
| IPv4 و IPv6 | خودکار | ابزار جداگانه | یکپارچه در خانواده inet |
| کارایی با قوانین بسیار زیاد | وابسته به لایه زیرین | کاهش مییابد | بالا با Set و Map |
| بهروزرسانی اتمیک | ندارد | محدود | دارد |
| سناریوهای پیچیده (NAT، مسیریابی) | محدود | کامل | کامل |
| مناسب برای | سرورهای تککاربردی | سیستمهای قدیمی و اسکریپتهای موجود | سرورهای جدید و پیکربندیهای جدی |
یک سیاست، سه نوشتار
سیاست نمونه: همه ورودیها مسدود، بهجز SSH از یک IP مشخص و وب (۸۰ و ۴۴۳) برای همه.
UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
iptables
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -P INPUT DROP
# همین قوانین برای IPv6 باید جداگانه با ip6tables تکرار شوند
nftables
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
ip saddr 203.0.113.10 tcp dport 22 accept
tcp dport { 80, 443 } accept
}
}
فایل nftables را در /etc/nftables.conf قرار دهید، با sudo nft -c -f /etc/nftables.conf بررسی کنید و با sudo systemctl enable --now nftables فعال کنید.
کدام را انتخاب کنیم؟
- UFW: برای اغلب VPSهایی که یک وبسایت، اپلیکیشن یا سرویس مشخص اجرا میکنند. ساده، کافی و با احتمال خطای کم.
- nftables: برای سرورهایی با نیاز پیچیدهتر، مثل NAT، Gateway، فهرستهای بزرگ IP یا قوانین مشترک IPv4 و IPv6، و هر پیکربندی جدیدی که نیاز به کنترل کامل دارد.
- iptables: فقط وقتی اسکریپتها یا ابزارهای موجود به آن وابستهاند. برای پیکربندی جدید، nftables را انتخاب کنید.
هرگز دو ابزار را همزمان برای مدیریت قوانین به کار نبرید. مثلاً UFW را فعال نگه ندارید و همزمان فایل nftables جداگانه بارگذاری نکنید؛ نتیجه غیرقابل پیشبینی خواهد بود.
اشتباههای رایج
- قطع دسترسی SSH: قبل از فعال کردن سیاست «مسدود بهطور پیشفرض»، قانون SSH را اضافه کنید و نشست فعلی را باز نگه دارید.
- فراموش کردن IPv6: با iptables، اگر ip6tables تنظیم نشود، سرور از طریق IPv6 کاملاً باز است.
- ذخیره نکردن قوانین: قوانین iptables بعد از ریاستارت پاک میشوند، مگر با بسته
iptables-persistentذخیره شوند. - اتکا به فایروال بهجای سختسازی: فایروال جایگزین امنسازی SSH و بهروزرسانی نرمافزارها نیست.
سوالات متداول
برای یک VPS معمولی کدام را انتخاب کنیم؟
UFW. برای اغلب سرورهایی که چند پورت مشخص را باز میکنند، UFW سادهترین و کمخطاترین انتخاب است.
آیا iptables منسوخ شده است؟
نوشتار iptables هنوز پشتیبانی میشود، اما در توزیعهای جدید معمولاً روی nftables اجرا میشود. برای پیکربندیهای جدید، nftables توصیه میشود.
چطور قوانین فعلی را ببینم؟
با sudo ufw status verbose برای UFW و sudo nft list ruleset برای مشاهده همه قوانین واقعی که در هسته بارگذاری شدهاند، از جمله قوانینی که UFW یا Docker ساختهاند.
آیا فایروال سرور در برابر DDoS محافظت میکند؟
فقط در برابر حملات کوچک. حملات حجیم پهنای باند ورودی را قبل از رسیدن به سرور اشباع میکنند و باید در سطح شبکه ارائهدهنده مهار شوند. در این مورد مقاله حمله DDoS چیست را بخوانید.
امنیت شبکه در لایههای بالاتر
علاوه بر فایروال سرور، خدمات امنیت شبکه و WAF تراست هاست از سرویسهای شما در برابر حملات لایه شبکه و اپلیکیشن محافظت میکند.