
به اشتراک بگذارید
در دنیای هاستینگ و مدیریت سرور، امنیت اولین حرف را میزند. شاید نام ابزارهایی مثل UFW یا Firewalld را شنیده باشید، اما آموزش iptables به شما این قدرت را میدهد که کنترل دقیقتری روی هر “بسته” (Packet) داشته باشید. در واقع، iptables حکم نگهبان ورودی یک مجتمع بزرگ را دارد که نه تنها کارت شناسایی، بلکه محتویات جیب هر فرد را هم بازرسی میکند.
| ویژگی | iptables (پیشرفته) | UFW / Firewalld (ساده) |
|---|---|---|
| سطح کنترل | بسیار دقیق و لایهای | کلی و سادهسازی شده |
| فیلترینگ Stateful | عالی (با ماژول Conntrack) | پایه |
| مقاومت در برابر DDoS | بسیار بالا با Rate Limiting | ضعیف |
| پیچیدگی یادگیری | متوسط به بالا | پایین |
یک ابزار خط فرمان برای پیکربندی فایروال هسته لینوکس (Netfilter) است که اجازه میدهد ترافیک شبکه را بر اساس قوانین خاص، فیلتر یا هدایت کنید.
- ✅ پایداری بالا در سرورهای تولیدی (Production)
- ✅ قابلیت اجرا در تمام توزیعهای لینوکس
حتماً زمانی که این مقاله را باز کردهاید، به دنبال راهی هستید تا امنیت سرور مجازی خود را از حالت پیشفرض خارج کرده و جلوی حملات مزاحم را بگیرید. ما در این راهنمای گامبهگام، از صفر مطلق یعنی مفاهیم جداول شروع کرده و تا نوشتن اسکریپتهای ضد DDoS پیش میرویم. پس همراه ما باشید تا یک بار برای همیشه، پرونده پیکربندی فایروال لینوکس را ببندیم. 😉
آنچه در این مقاله میخوانید:

معماری و جریان بسته (Packet Flow) در iptables چیست؟
برای درک آموزش iptables پیشرفته، ابتدا باید بدانید که این فایروال مثل یک سیستم لولهکشی پیچیده است. ترافیک از یک سمت وارد شده و پس از عبور از فیلترهای مختلف، یا به مقصد میرسد یا دور ریخته میشود. قلب این سیستم، “جداول” و “زنجیرهها” هستند.
جداول (Tables) اصلی:
- Filter Table: جدول پیشفرض برای تصمیمگیری درباره اجازه ورود یا خروج.
- NAT Table: برای تغییر آدرسهای IP (مثل فوروارد کردن پورت).
- Mangle Table: برای تغییرات خاص در سربرگ بستهها.
زنجیرهها (Chains) و مسیر حرکت:
- اینترنت ➡️ [PREROUTING] ➡️ {تصمیمگیری مسیر} ➡️ [INPUT] ➡️ سرور شما
- سرور شما ➡️ [OUTPUT] ➡️ [POSTROUTING] ➡️ اینترنت
نمودار جریان بسته (Simplified ASCII Flow):
[ ورودی شبکه ]
⬇️
┌──────────────┐
│ PREROUTING │ (NAT/Mangle)
└──────┬───────┘
⬇️
{ آیا برای سرور است؟ } ─── خیر ──▶ [ FORWARD ] ──▶ [ خروجی ]
⬇️ بله
┌──────────────┐
│ INPUT │ (Filter - امنیت اصلی اینجاست)
└──────┬───────┘
⬇️
[ پردازش داخلی ]
چرا به پیکربندی پیشرفته فایروال نیاز داریم؟
استفاده از تنظیمات پیشفرض مثل باز گذاشتن تمام پورتها، مثل این است که درب خانه خود را باز بگذارید و فقط یک پرده جلوی آن بکشید! قوانین iptables برای امنیت سرور زمانی اهمیت پیدا میکنند که بدانید روزانه هزاران بات اسکنر در حال تست کردن پورتهای باز سرورهای مجازی هستند.
- کنترل دسترسی: فقط به افراد مجاز اجازه ورود میدهید.
- جلوگیری از نشت داده: اجازه نمیدهید برنامههای مخرب اطلاعات را به بیرون بفرستند (Output Filtering).
- بهینهسازی منابع: با بستن ترافیک هرز، پهنای باند و CPU سرور شما آزاد میماند.
پیشنیازها و شروع کار با آموزش iptables
قبل از هر چیز، باید دسترسی روت (root) به سرور داشته باشید. در وبداده، تمام سرورهای مجازی با دسترسی کامل ارائه میشوند تا شما محدودیتی در اجرای دستورات نداشته باشید.
- سیستم عامل: اوبونتو، دبیان یا سنتاواس (فرقی ندارد).
- دسترسی: SSH با کاربر sudo.
- نصب ابزار پایه:
sudo apt update && sudo apt install iptables 
🔶 نکته مهم: قبل از شروع، مطمئن شوید که دسترسی خودتان به SSH قطع نمیشود! همیشه یک قانون برای باز گذاشتن پورت 22 (یا پورت سفارشی SSH) بنویسید.
پیادهسازی استراتژی Default Policy و امنیت حداکثری
در پیکربندی فایروال لینوکس، دو رویکرد وجود دارد:
- همه چیز باز باشد و فقط موارد مشکوک را ببندیم.
- همه چیز بسته باشد و فقط موارد لازم را باز کنیم. روش دوم (White-listing) تنها روش استاندارد برای سرورهای تولیدی است.
مرحله 1: پاکسازی قوانین قبلی
ابتدا تمام قوانین موجود را پاک میکنیم تا با یک صفحه سفید شروع کنیم:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z 📌 توضیح: دستور -F قوانین تمام جداول (filter، nat و mangle) را پاک میکند. دستور -X زنجیرههای سفارشی خالی را حذف میکند و -Z شمارندهها را صفر میکند.

مرحله 2: باز کردن پورتهای حیاتی و Conntrack
قبل از بستن همه چیز، ابتدا Loopback، اتصالات برقرار شده (Conntrack) و پورت SSH را باز میکنیم. ترتیب این مراحل بسیار مهم است:
iptables -A INPUT -i lo -j ACCEPT 
بدون این قانون، پاسخ درخواستهای خروجی شما (مثل apt update) مسدود میشود!
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A INPUT -p tcp --dport 22 -j ACCEPT مرحله 3: تغییر سیاست پیشفرض به DROP
حالا به فایروال میگوییم هر چیزی که صراحتاً اجازه ندادهایم را دور بریز:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT 
📌 یادآوری: با اجرای این دستور، هر پورتی غیر از ۲۲ کاملاً بسته میشود. اگر وبسرور دارید، باید پورت 80 و 443 را هم باز کنید.
فایروال هوشمند با ماژول Conntrack (Stateful Inspection)
این بخش همان چیزی است که آموزش iptables پیشرفته را متمایز میکند. یک فایروال هوشمند باید بداند کدام بسته مربوط به یک گفتگوی قبلی است.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT چرا این دستور معجزه میکند؟
وقتی شما از داخل سرور درخواستی به گوگل میفرستید، گوگل پاسخی برمیگرداند. بدون این قانون، فایروال پاسخ گوگل را چون از بیرون آمده مسدود میکند. اما با ماژول conntrack و وضعیت ESTABLISHED (برقرار شده)، فایروال میفهمد که این بسته بخشی از یک مکالمه مجاز است.
جلوگیری از حملات DDoS با iptables و Hardening
حملات DDoS میتوانند به راحتی منابع سرور شما را ببلعند. با استفاده از محدود کردن نرخ درخواست (Rate Limiting) میتوانیم جلوی این حملات را بگیریم.
1- جلوگیری از SYN Flood
برای محدود کردن تعداد اتصالات جدید TCP:
این قانون باید قبل از ACCEPT پورتهای 80 و 443 قرار بگیرد
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP 2- جلوگیری از Ping Flood (ICMP Limit)
اگر نمیخواهید سرورتان با سیل درخواستهای پینگ از کار بیفتد:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP این قانون یعنی: حداکثر ۱ پینگ در ثانیه قبول کن، با قابلیت تحمل 5 پینگ ناگهانی. بستههای بیشتر DROP میشوند.

3- مقابله با Port Scanning
هکرها معمولاً قبل از حمله، تمام پورتهای شما را اسکن میکنند. با شناسایی بستههای TCP با فلگهای غیرعادی میتوانیم اسکنهای رایج را مسدود کنیم:
# بستن اسکنهای Null (بدون فلگ)
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# بستن اسکنهای XMAS (فلگهای FIN، PSH و URG همزمان)
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# بستن ترکیبهای غیرمجاز SYN/FIN و SYN/RST
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 📌 توضیح: این قوانین بستههایی را هدف میگیرند که فلگهای TCP آنها در ترافیک عادی وجود ندارد و معمولاً نشانه اسکنهای Nmap هستند.
4- محدود کردن تعداد کانکشنها در iptables
برای جلوگیری از حمله به وبسرور، میتوانیم تعداد اتصالات همزمان از هر آیپی را محدود کنیم:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 -j DROP DROP به جای REJECT استفاده کنید. چون REJECT یک پاسخ RST به مهاجم برمیگرداند و خودش پهنای باند مصرف میکند.چالشها و نکات احتیاط در استفاده از iptables
با وجود قدرت بالا، iptables معایبی هم دارد که به عنوان یک متخصص باید بدانید:
- ترتیب قوانین: قوانین از بالا به پایین خوانده میشوند. اگر قانون اول “بستن همه چیز” باشد، قوانین بعدی هرگز اجرا نمیشوند.
- عملکرد در ترافیک بسیار سنگین: در حملات عظیم (چندین میلیون بسته در ثانیه)، iptables ممکن است باعث درگیری بالای CPU شود. در این شرایط، تفاوت iptables و nftables مشخص میشود؛ nftables نسخه مدرنتر و سریعتر است.
- فراموشی ذخیرهسازی: قوانین iptables در حافظه RAM هستند و با ریبوت پاک میشوند.
- پُر شدن جدول Conntrack: در ترافیک سنگین، جدول conntrack ممکن است پُر شود و باعث DROP شدن ناخواسته بستههای جدید بدون هیچ قانون صریحی شود. مقدار پیشفرض را با
sysctl net.netfilter.nf_conntrack_maxبررسی کنید و در صورت نیاز افزایش دهید.
چگونه قوانین iptables را دائمی کنیم؟
یکی از بیشترین سوالات کاربران این است: “چرا بعد از ریستارت سرور، تنظیمات من پاک شد؟”. برای حل این مشکل در اوبونتو و دبیان:
sudo apt install iptables-persistent
# برای ذخیره قوانین فعلی:
sudo netfilter-persistent save 
در سیستمهای CentOS، از دستور service iptables save استفاده میشود.
اسکریپت طلایی امنیت سرور (WebDade Shield)
در این بخش، تمام آموختههای بالا را در یک اسکریپت آماده برای شما جمعآوری کردهایم. کافیست یک فایل با پسوند .sh بسازید و آن را اجرا کنید.
#!/bin/bash
# WebDade Advanced Firewall Script 2025
# ======================================
# 1. پاکسازی کامل قوانین قبلی
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z
# 2. اجازه به ترافیک Loopback
iptables -A INPUT -i lo -j ACCEPT
# 3. فایروال هوشمند (Stateful) - باید قبل از همه باشد
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 4. محافظت در برابر اسکن پورت (بستههای غیرعادی TCP)
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# 5. محدود کردن SYN Flood (Rate Limiting)
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 6. محدود کردن ICMP (Ping Flood)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 7. محدود کردن کانکشن همزمان روی پورتهای وب
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 -j DROP
# 8. باز کردن پورتهای ضروری
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# 9. بستن بقیه ترافیک (Default Policy)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo "✅ Security applied successfully! - WebDade.com"
echo "📌 برای دائمی کردن: sudo netfilter-persistent save" 📌 نکات مهم درباره ترتیب قوانین در اسکریپت بالا:
- قانون Conntrack (مرحله 3) اول از همه آمده تا اتصالات فعلی (مثل SSH شما) قطع نشود.
- قوانین ضد اسکن (مرحله 4) قبل از Rate Limiting آمدهاند تا بستههای مخرب زودتر حذف شوند.
- Rate Limiting (مرحله 5) قبل از ACCEPT پورتها قرار گرفته تا واقعاً مؤثر باشد.
- ACCEPT پورتها (مرحله 8) در آخر آمده، یعنی فقط ترافیکی که از فیلترهای قبلی رد شده به پورتها دسترسی پیدا میکند.
خدمات وبداده؛ امنیت تضمین شده در سرور مجازی
اگر به دنبال بهترین کانفیگ فایروال برای سرور مجازی (VPS) هستید اما فرصت یا دانش کافی برای درگیری با کدهای پیچیده را ندارید، تیم فنی وبداده در کنار شماست.
- ✅ ارائه سرورهای مجازی با امنیت سختافزاری بالا
- ✅ پشتیبانی 24 ساعته برای رفع مشکلات شبکه
- ✅ امکان نصب خودکار سیستمعاملهای بهینه شده
سرور های مجازی وبداده
روی دکمه زیر کلیک کنید
نتیجهگیری: پیکربندی پیشرفته iptables؛ از امنیت پایه تا مقابله با DDoS
در این مقاله آموختیم که پیکربندی فایروال لینوکس یک فرآیند ایستا نیست. شما باید مدام لاگهای سرور را در مسیر /var/log/syslog چک کنید تا متوجه فعالیتهای مشکوک شوید. استفاده از آموزش iptables پیشرفته به شما اجازه داد تا از یک کاربر عادی به یک مدیر سرور حرفهای تبدیل شوید که میداند چطور با حملات DDoS مقابله کند و پورتهای اضافی را ببندد.
امیدوارم این مقاله از بلاگ وبداده برای شما مفید بوده باشد. اگر در هر مرحله از تنظیمات دچار مشکل شدید یا سوالی درباره نصب iptables-persistent داشتید، حتماً در بخش نظرات با ما در ارتباط باشید. ما خوشحال میشویم به شما کمک کنیم! 🚀
سوالات متداول از آموزش iptables
1- آیا iptables برای اوبونتو 20.04 و 22.04 هم مناسب است؟
بله، iptables همچنان کار میکند. البته در اوبونتو 22.04 و 24.04، دستور iptables به صورت پیشفرض از iptables-nft (نسخهای که backend آن nftables است) استفاده میکند. سینتکس دستورات یکسان است ولی موتور زیرین متفاوت است. برای بررسی نسخه خود از دستور iptables --version استفاده کنید.
2- اگر پورت SSH را اشتباهی ببندم چه کار کنم؟
در این صورت دسترسی شما قطع میشود. باید از طریق کنسول (VNC) در پنل وبداده وارد سرور شوید و با دستور iptables -F قوانین را پاک کنید.
3- تفاوت iptables و nftables در چیست؟
nftables جایگزین مدرنتری است که ساختار تمیزتری دارد و در ترافیکهای بسیار سنگین عملکرد بهتری از خود نشان میدهد، اما یادگیری iptables به دلیل منابع آموزشی بیشتر، برای شروع بهتر است.
4- چطور بفهمم چه قوانینی الان فعال هستند؟
کافیست از دستور iptables -L -n -v استفاده کنید تا لیست تمام قوانین فعال را با جزئیات مشاهده کنید.




