
به اشتراک بگذارید

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

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

قبل از بستن همه چیز، ابتدا Loopback، اتصالات برقرار شده (Conntrack) و پورت SSH را باز میکنیم. ترتیب این مراحل بسیار مهم است:
iptables -A INPUT -i lo -j ACCEPT 
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 حالا به فایروال میگوییم هر چیزی که صراحتاً اجازه ندادهایم را دور بریز:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT 
📌 یادآوری: با اجرای این دستور، هر پورتی غیر از ۲۲ کاملاً بسته میشود. اگر وبسرور دارید، باید پورت 80 و 443 را هم باز کنید.
این بخش همان چیزی است که آموزش iptables پیشرفته را متمایز میکند. یک فایروال هوشمند باید بداند کدام بسته مربوط به یک گفتگوی قبلی است.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT چرا این دستور معجزه میکند؟
وقتی شما از داخل سرور درخواستی به گوگل میفرستید، گوگل پاسخی برمیگرداند. بدون این قانون، فایروال پاسخ گوگل را چون از بیرون آمده مسدود میکند. اما با ماژول conntrack و وضعیت ESTABLISHED (برقرار شده)، فایروال میفهمد که این بسته بخشی از یک مکالمه مجاز است.
حملات DDoS میتوانند به راحتی منابع سرور شما را ببلعند. با استفاده از محدود کردن نرخ درخواست (Rate Limiting) میتوانیم جلوی این حملات را بگیریم.
برای محدود کردن تعداد اتصالات جدید 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 اگر نمیخواهید سرورتان با سیل درخواستهای پینگ از کار بیفتد:
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 میشوند.

هکرها معمولاً قبل از حمله، تمام پورتهای شما را اسکن میکنند. با شناسایی بستههای 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 هستند.
برای جلوگیری از حمله به وبسرور، میتوانیم تعداد اتصالات همزمان از هر آیپی را محدود کنیم:
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 معایبی هم دارد که به عنوان یک متخصص باید بدانید:
sysctl net.netfilter.nf_conntrack_max بررسی کنید و در صورت نیاز افزایش دهید.یکی از بیشترین سوالات کاربران این است: “چرا بعد از ریستارت سرور، تنظیمات من پاک شد؟”. برای حل این مشکل در اوبونتو و دبیان:
sudo apt install iptables-persistent
# برای ذخیره قوانین فعلی:
sudo netfilter-persistent save 
در سیستمهای CentOS، از دستور service iptables save استفاده میشود.
در این بخش، تمام آموختههای بالا را در یک اسکریپت آماده برای شما جمعآوری کردهایم. کافیست یک فایل با پسوند .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" 📌 نکات مهم درباره ترتیب قوانین در اسکریپت بالا:
اگر به دنبال بهترین کانفیگ فایروال برای سرور مجازی (VPS) هستید اما فرصت یا دانش کافی برای درگیری با کدهای پیچیده را ندارید، تیم فنی وبداده در کنار شماست.
در این مقاله آموختیم که پیکربندی فایروال لینوکس یک فرآیند ایستا نیست. شما باید مدام لاگهای سرور را در مسیر /var/log/syslog چک کنید تا متوجه فعالیتهای مشکوک شوید. استفاده از آموزش iptables پیشرفته به شما اجازه داد تا از یک کاربر عادی به یک مدیر سرور حرفهای تبدیل شوید که میداند چطور با حملات DDoS مقابله کند و پورتهای اضافی را ببندد.
امیدوارم این مقاله از بلاگ وبداده برای شما مفید بوده باشد. اگر در هر مرحله از تنظیمات دچار مشکل شدید یا سوالی درباره نصب iptables-persistent داشتید، حتماً در بخش نظرات با ما در ارتباط باشید. ما خوشحال میشویم به شما کمک کنیم! 🚀
بله، iptables همچنان کار میکند. البته در اوبونتو 22.04 و 24.04، دستور iptables به صورت پیشفرض از iptables-nft (نسخهای که backend آن nftables است) استفاده میکند. سینتکس دستورات یکسان است ولی موتور زیرین متفاوت است. برای بررسی نسخه خود از دستور iptables --version استفاده کنید.