پیکربندی فایروال nftables در لینوکس — از مهاجرت تا تنظیمات پیشرفته

راهنمای عملی پیکربندی فایروال nftables در لینوکس — از نصب و مهاجرت از iptables تا تنظیمات پیشرفته شامل محدودسازی نرخ، مسدودسازی جغرافیایی، NAT و یکپارچه‌سازی با fail2ban. با نمونه‌های کاربردی برای سرورهای تولیدی ۲۰۲۶.

مقدمه: چرا در سال ۲۰۲۶ باید از nftables استفاده کنید؟

خب، اگه هنوز از iptables برای مدیریت فایروال سرورهای لینوکسی‌تان استفاده می‌کنید، باید یه حقیقت تلخ رو بشنوید: دارید با ابزاری کار می‌کنید که رسماً در حالت نگهداری قدیمی (legacy maintenance) قرار گرفته. از سال ۲۰۱۴ که هسته لینوکس نسخه ۳.۱۳ منتشر شد، nftables به‌عنوان جایگزین رسمی iptables معرفی شده و الان در سال ۲۰۲۶، تقریباً تمام توزیع‌های اصلی لینوکس — از Ubuntu 22.04+ و Debian 11+ گرفته تا RHEL 9+، AlmaLinux 9+ و Fedora 35+ — از nftables به‌عنوان فریم‌ورک پیش‌فرض فیلترینگ بسته‌ها استفاده می‌کنند.

یه نکته جالب: حتی وقتی روی سیستم‌های مدرن دستور iptables رو اجرا می‌کنید، در واقع دارید iptables-nft رو اجرا می‌کنید — یعنی یک لایه سازگاری که سینتکس قدیمی iptables رو به قوانین nftables ترجمه می‌کنه. پس عملاً هم‌اکنون دارید از nftables استفاده می‌کنید، بدون اینکه خبر داشته باشید!

توی این راهنما قراره از صفر تا صد پیکربندی فایروال با nftables رو باهم یاد بگیریم — از نصب و مفاهیم پایه تا تنظیمات پیشرفته‌تر مثل محدودسازی نرخ (rate limiting)، مسدودسازی جغرافیایی (geo-blocking)، NAT و یکپارچه‌سازی با fail2ban. همه نمونه‌ها بر اساس آخرین نسخه‌های پایدار ۲۰۲۶ نوشته شدن.

nftables در مقابل iptables — چرا مهاجرت ضروری‌ه؟

قبل از ورود به جزئیات فنی، بیاید ببینیم چرا nftables واقعاً بهتر از iptables عمل می‌کنه و چرا مهاجرت یه ضرورت فنیه (نه صرفاً یه توصیه).

عملکرد بالاتر

iptables قوانین رو به‌صورت خطی پردازش می‌کنه — یعنی هر بسته باید از ابتدای لیست قوانین شروع کنه و تا انتها بره تا یه تطابق پیدا بشه. هرچه تعداد قوانین بیشتر، عملکرد بدتر. اما nftables از ساختارهای داده بهینه‌شده مثل جداول هش استفاده می‌کنه.

تست‌های بنچمارک نشون میدن که در عملیات SNAT، iptables حدود ۲۶۲ هزار درخواست در ثانیه به ازای هر هسته پردازنده رو مدیریت می‌کنه، ولی nftables حدود ۶۰۹ هزار درخواست رو هندل می‌کنه — یعنی ۱۳۲ درصد بهتر. صادقانه بگم، این تفاوت عملکرد توی سرورهای پرترافیک واقعاً محسوسه.

سینتکس یکپارچه و تمیزتر

در iptables مجبور بودید با چهار ابزار مجزا کار کنید: iptables برای IPv4، ip6tables برای IPv6، arptables برای ARP و ebtables برای bridging. خسته‌کننده بود، نه؟ در nftables، یک ابزار واحد همه اینها رو پوشش میده. خانواده inet بهتون اجازه میده با یک جدول واحد هم IPv4 و هم IPv6 رو مدیریت کنید.

به‌روزرسانی اتمیک قوانین

این یکی از قابلیت‌های کلیدی nftables هست. می‌تونید کل مجموعه قوانین رو در یک عملیات واحد جایگزین کنید، بدون هیچ پنجره آسیب‌پذیری. در iptables، قوانین یکی‌یکی اعمال می‌شدن و بین هر تغییر، احتمال نشت امنیتی وجود داشت. این مسئله توی محیط‌های تولیدی یه ریسک واقعی بود.

مجموعه‌ها و نقشه‌ها (Sets & Maps)

nftables از مجموعه‌ها (sets) و نقشه‌ها (maps) به‌صورت داخلی پشتیبانی می‌کنه. قبلاً توی iptables برای این کار باید از ابزار جداگانه ipset استفاده می‌کردید. الان می‌تونید لیست آدرس‌های IP، پورت‌ها یا اینترفیس‌ها رو مستقیماً توی قوانین تعریف کنید — خیلی تمیزتر و ساده‌تر.

اشکال‌زدایی داخلی

nftables قابلیت ردیابی (tracing) داخلی داره که در iptables وجود نداشت. می‌تونید مسیر عبور هر بسته از قوانین رو دنبال کنید و ببینید کدوم قانون اون رو قبول یا رد کرده. من شخصاً وقتی اولین بار از این قابلیت استفاده کردم، فهمیدم چقدر از عمرم رو صرف دیباگ کردن iptables با ابزارهای جانبی تلف کرده بودم.

نصب و راه‌اندازی nftables

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

# Debian / Ubuntu
sudo apt update && sudo apt install nftables

# RHEL / CentOS / AlmaLinux / Fedora
sudo dnf install nftables

# Arch Linux
sudo pacman -S nftables

بعد از نصب، سرویس nftables رو فعال و شروع کنید:

# فعال‌سازی سرویس برای شروع خودکار در بوت
sudo systemctl enable nftables
sudo systemctl start nftables

# بررسی وضعیت
sudo systemctl status nftables

غیرفعال کردن فایروال‌های متناقض

این نکته خیلی مهمه و حتماً بهش توجه کنید: اگه قصد دارید nftables رو مستقیماً مدیریت کنید، باید فایروال‌های سطح بالاتر مثل UFW یا firewalld رو غیرفعال کنید. اجرای همزمان اونها با قوانین مستقیم nftables باعث تداخل و رفتار غیرقابل پیش‌بینی میشه — من خودم یه بار این اشتباه رو کردم و نزدیک بود دسترسی SSH رو به سرور از دست بدم:

# غیرفعال کردن UFW (Ubuntu)
sudo ufw disable

# غیرفعال کردن firewalld (RHEL/Fedora)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

مفاهیم پایه: جدول‌ها، زنجیره‌ها و قوانین

ساختار nftables سه‌لایه‌ایه و درک این ساختار برای کار مؤثر باهاش ضروریه. بیاید هر لایه رو جداگانه بررسی کنیم.

جدول (Table)

جدول یه ظرف برای زنجیره‌هاست. برخلاف iptables که جدول‌های از پیش تعریف‌شده مثل filter، nat و mangle داشت، توی nftables هیچ جدول یا زنجیره پیش‌فرضی وجود نداره — شما خودتون همه‌چیز رو تعریف می‌کنید. هر جدول یه خانواده (family) داره:

  • ip — فقط IPv4
  • ip6 — فقط IPv6
  • inet — هر دو IPv4 و IPv6 (توصیه‌شده برای اکثر سرورها)
  • arp — پروتکل ARP
  • bridge — ترافیک bridge
  • netdev — فیلترینگ در سطح درایور شبکه

زنجیره (Chain)

زنجیره لیستی از قوانینه. زنجیره‌های پایه (base chains) به hookهای هسته متصل میشن و ترافیک واقعی رو پردازش می‌کنن. زنجیره‌های معمولی (regular chains) بیشتر مثل توابع عمل می‌کنن و فقط وقتی از یه زنجیره دیگه فراخوانی بشن اجرا میشن.

قانون (Rule)

هر قانون شرایط تطابق و عملیاتی که باید انجام بشه (مثل accept، drop، reject) رو تعریف می‌کنه. ساده‌ست، نه؟

پیکربندی عملی: فایروال امن برای سرور تولیدی

بهترین روش کار با nftables، نوشتن فایل پیکربندی و بارگذاری اونه. فایل پیش‌فرض در مسیر /etc/nftables.conf قرار داره. بیاید یه پیکربندی کامل و عملی برای یک سرور وب تولیدی بسازیم:

#!/usr/sbin/nft -f

# پاک‌سازی تمام قوانین قبلی
flush ruleset

# جدول اصلی فیلتر — خانواده inet برای IPv4 و IPv6
table inet filter {

    # مجموعه آدرس‌های مجاز SSH
    set ssh_allowed {
        type ipv4_addr
        flags interval
        elements = {
            192.168.1.0/24,
            10.0.0.0/8
        }
    }

    # مجموعه پورت‌های مجاز TCP
    set tcp_accepted {
        type inet_service
        elements = { 80, 443 }
    }

    # زنجیره ورودی
    chain input {
        type filter hook input priority 0; policy drop;

        # اتصالات لوکال همیشه مجاز
        iif "lo" accept

        # اتصالات برقرار و مرتبط
        ct state established,related accept

        # حذف بسته‌های نامعتبر
        ct state invalid drop

        # محدودسازی ICMP
        ip protocol icmp icmp type {
            echo-request,
            echo-reply,
            destination-unreachable,
            time-exceeded
        } limit rate 10/second accept

        # ICMPv6 — برای عملکرد صحیح IPv6 ضروری است
        ip6 nexthdr icmpv6 icmpv6 type {
            echo-request,
            echo-reply,
            nd-neighbor-solicit,
            nd-neighbor-advert,
            nd-router-solicit,
            nd-router-advert,
            destination-unreachable,
            packet-too-big,
            time-exceeded
        } accept

        # SSH — فقط از آدرس‌های مجاز و با محدودیت نرخ
        tcp dport 22 ip saddr @ssh_allowed ct state new \
            limit rate 4/minute accept

        # پورت‌های وب
        tcp dport @tcp_accepted ct state new accept

        # شمارش و حذف بقیه ترافیک
        counter drop
    }

    # زنجیره خروجی
    chain output {
        type filter hook output priority 0; policy accept;
    }

    # زنجیره فوروارد
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
}

حالا بیاید این فایل رو بارگذاری و تست کنیم:

# اعتبارسنجی بدون اعمال
sudo nft -c -f /etc/nftables.conf

# اعمال قوانین
sudo nft -f /etc/nftables.conf

# مشاهده قوانین فعال
sudo nft list ruleset

مهاجرت از iptables به nftables — گام‌به‌گام

اگه قوانین iptables از قبل دارید، لازم نیست همه‌چیز رو از صفر بنویسید. nftables ابزارهای مهاجرت اختصاصی داره که کار رو راحت‌تر می‌کنن.

گام ۱: استخراج قوانین فعلی

# ذخیره قوانین فعلی iptables
sudo iptables-save > /tmp/iptables-backup.rules

# مشاهده قوانین فعلی
sudo iptables -L -n -v

گام ۲: ترجمه خودکار قوانین

ابزار iptables-translate قوانین iptables رو به سینتکس nftables تبدیل می‌کنه:

# ترجمه یک قانون واحد
iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT
# خروجی: nft add rule ip filter INPUT tcp dport 22 counter accept

# ترجمه کل مجموعه قوانین
iptables-restore-translate -f /tmp/iptables-backup.rules > /tmp/nftables-rules.nft

گام ۳: بازبینی و بهینه‌سازی

یه نکته مهم: خروجی ابزار ترجمه صد در صد دقیق نیست و ممکنه بعضی قوانین پیچیده‌تر نیاز به ویرایش دستی داشته باشن. قوانین ترجمه‌شده رو بررسی کنید و از قابلیت‌های بومی nftables مثل مجموعه‌ها و نقشه‌ها استفاده کنید تا قوانین ساده‌تر و کارآمدتر بشن.

گام ۴: تست و جایگزینی

# اعتبارسنجی قوانین جدید
sudo nft -c -f /tmp/nftables-rules.nft

# اعمال در محیط تست
sudo nft -f /tmp/nftables-rules.nft

# پس از تأیید، کپی به مسیر نهایی
sudo cp /tmp/nftables-rules.nft /etc/nftables.conf

# غیرفعال کردن سرویس‌های قدیمی
sudo systemctl disable --now iptables 2>/dev/null
sudo systemctl enable --now nftables

محدودسازی نرخ (Rate Limiting) — دفاع در برابر حملات

محدودسازی نرخ یکی از مهم‌ترین قابلیت‌های nftables برای مقابله با حملات DDoS، بروت‌فورس و حملات مبتنی بر حجمه. بذارید انواع مختلفش رو بررسی کنیم.

محدودسازی سراسری (Global Rate Limiting)

این نوع محدودسازی روی کل ترافیک ورودی اعمال میشه:

# محدود کردن درخواست‌های ICMP به ۱۰ در ثانیه
nft add rule inet filter input ip protocol icmp \
    limit rate 10/second accept

# محدود کردن اتصالات SSH جدید به ۴ در دقیقه
nft add rule inet filter input tcp dport 22 ct state new \
    limit rate 4/minute accept

محدودسازی به ازای هر آدرس مبدأ (Per-Source Rate Limiting)

این قابلیت قدرتمندتره — به ازای هر IP مبدأ به‌طور مستقل محدودیت اعمال می‌کنه. nftables برای این کار از meter استفاده می‌کنه:

# محدود کردن SSH به ۳ اتصال جدید در دقیقه به ازای هر IP
nft add rule inet filter input tcp dport 22 ct state new \
    meter ssh_meter { ip saddr limit rate 3/minute } accept

# محدود کردن HTTP به ۵۰ درخواست در ثانیه به ازای هر IP
nft add rule inet filter input tcp dport 80 ct state new \
    meter http_meter { ip saddr limit rate 50/second } accept

مسدودسازی خودکار با مجموعه‌های پویا

این یکی واقعاً جذابه. nftables می‌تونه آدرس‌های IP مهاجم رو به‌طور خودکار به لیست سیاه اضافه کنه. اگه یه IP بیش از حد مجاز اتصال برقرار کنه، خودکار مسدود میشه:

table inet filter {
    # مجموعه پویا برای IPهای مسدود — حذف خودکار بعد از ۵ دقیقه
    set blackhole {
        type ipv4_addr
        flags dynamic,timeout
        timeout 5m
    }

    chain input {
        type filter hook input priority 0; policy drop;

        # بررسی لیست سیاه — بسته‌های IP مسدود فوراً حذف شوند
        ip saddr @blackhole drop

        # اگر بیش از ۱۰ اتصال TCP در یک دقیقه — اضافه به لیست سیاه
        tcp flags syn ct state new \
            meter flood { ip saddr limit rate over 10/minute } \
            add @blackhole { ip saddr } drop

        # بقیه قوانین...
        ct state established,related accept
        iif "lo" accept
    }
}

محدود کردن تعداد اتصالات همزمان

با پارامتر ct count می‌تونید تعداد اتصالات همزمان هر IP رو هم محدود کنید:

# حداکثر ۲۰ اتصال همزمان HTTP به ازای هر IP
nft add rule inet filter input tcp dport { 80, 443 } ct state new \
    meter conn_limit { ip saddr ct count over 20 } reject

# حداکثر ۳ اتصال همزمان SSH به ازای هر IP
nft add rule inet filter input tcp dport 22 ct state new \
    meter ssh_conn { ip saddr ct count over 3 } drop

مسدودسازی جغرافیایی (Geo-Blocking) با nftables

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

استفاده از nft-geo-filter

ابزار nft-geo-filter بلوک‌های IP مربوط به هر کشور رو از پایگاه‌داده‌های عمومی دانلود می‌کنه و به مجموعه‌های nftables اضافه‌شون می‌کنه:

# نصب از GitHub
git clone https://github.com/rpthms/nft-geo-filter.git
cd nft-geo-filter

# مسدود کردن ترافیک یک کشور خاص (مثلاً CN)
sudo ./nft-geo-filter -t netdev -i eth0 CN

# مجاز کردن فقط کشورهای خاص (مثلاً ایران و آلمان)
sudo ./nft-geo-filter -t netdev -i eth0 --allow IR DE

# ایجاد استثنا برای آدرس‌های خاص
sudo ./nft-geo-filter -t netdev -i eth0 --allow IR \
    --exceptions 1.2.3.4,5.6.7.8

نکته: این ابزار یه جدول جداگانه nftables ایجاد می‌کنه و با پیکربندی فعلی‌تون تداخلی نداره.

ساخت دستی لیست‌های جغرافیایی

برای کنترل بیشتر، می‌تونید لیست‌های IP کشورها رو خودتون هم مدیریت کنید:

# دانلود بلوک‌های IP یک کشور
curl -s https://www.ipdeny.com/ipblocks/data/countries/cn.zone \
    > /etc/nftables/cn-blocks.txt

# ایجاد مجموعه در nftables
nft add set inet filter blocked_countries \
    { type ipv4_addr\; flags interval\; }

# بارگذاری آدرس‌ها
while read cidr; do
    nft add element inet filter blocked_countries { "$cidr" }
done < /etc/nftables/cn-blocks.txt

# اعمال قانون مسدودسازی
nft add rule inet filter input ip saddr @blocked_countries drop

پیکربندی NAT و ارجاع پورت (Port Forwarding)

اگه سرورتون به‌عنوان gateway یا لود بالانسر عمل می‌کنه، به NAT نیاز خواهید داشت. پیکربندی NAT توی nftables نسبت به iptables خیلی تمیزتر و خواناتره:

table ip nat {
    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;

        # ارجاع پورت — ترافیک ورودی پورت ۸۰ به سرور داخلی
        tcp dport 80 dnat to 192.168.1.10:8080

        # ارجاع پورت ۴۴۳ با حفظ پورت مقصد
        tcp dport 443 dnat to 192.168.1.10:443
    }

    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;

        # Masquerade — برای اتصال شبکه‌های داخلی به اینترنت
        ip saddr 10.0.0.0/8 oif "eth0" masquerade

        # SNAT — برای IP ثابت خروجی
        ip saddr 192.168.1.0/24 oif "eth0" snat to 203.0.113.1
    }
}

یکپارچه‌سازی nftables با fail2ban

fail2ban یکی از محبوب‌ترین ابزارهای محافظت در برابر حملات بروت‌فورسه و خوشبختانه با nftables هم خوب کار می‌کنه. فقط باید تنظیماتش رو درست انجام بدید.

پیکربندی fail2ban برای nftables

فایل /etc/fail2ban/jail.local رو ویرایش کنید:

[DEFAULT]
# استفاده از nftables به جای iptables
banaction = nftables-multiport
banaction_allports = nftables-allports
chain = input

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600

تأیید عملکرد صحیح

# ری‌استارت fail2ban
sudo systemctl restart fail2ban

# بررسی وضعیت
sudo fail2ban-client status sshd

# مشاهده قوانین nftables ایجادشده توسط fail2ban
sudo nft list table inet f2b-table

fail2ban به‌طور خودکار یه جدول nftables مجزا ایجاد می‌کنه و IPهای مسدودشده رو توی مجموعه‌های اون قرار میده. نیازی نیست نگران تداخل با قوانین اصلی‌تون باشید.

دستورات ضروری مدیریت nftables

برای مدیریت روزانه فایروال، این دستورات رو حتماً بلد باشید (یه جورایی cheat sheet خودتون):

# مشاهده کل مجموعه قوانین
sudo nft list ruleset

# مشاهده یک جدول خاص
sudo nft list table inet filter

# مشاهده یک زنجیره خاص
sudo nft list chain inet filter input

# اعتبارسنجی فایل پیکربندی بدون اعمال
sudo nft -c -f /etc/nftables.conf

# بارگذاری پیکربندی
sudo nft -f /etc/nftables.conf

# پاک‌سازی کامل قوانین (احتیاط!)
sudo nft flush ruleset

# حذف یک قانون خاص با شماره handle
sudo nft -a list chain inet filter input
sudo nft delete rule inet filter input handle 15

# نظارت بر فعالیت قوانین
watch -n 1 'sudo nft list chain inet filter input'

ردیابی و اشکال‌زدایی ترافیک

وقتی می‌خواید بفهمید چرا یه بسته مسدود یا قبول شده، قابلیت ردیابی nftables واقعاً نجات‌دهنده‌ست:

# فعال‌سازی ردیابی برای بسته‌های خاص
sudo nft add rule inet filter input tcp dport 22 meta nftrace set 1

# مشاهده ردیابی در زمان واقعی
sudo nft monitor trace

# غیرفعال‌سازی ردیابی بعد از اتمام کار
sudo nft delete rule inet filter input handle [HANDLE_NUMBER]

خروجی ردیابی دقیقاً نشون میده هر بسته از کدوم زنجیره عبور کرده و توسط کدوم قانون پذیرفته یا حذف شده — قابلیتی که توی iptables نداشتیم و دیباگ فایروال رو خیلی راحت‌تر می‌کنه.

ماندگار کردن قوانین و تست امن

یه نکته‌ای که خیلی‌ها فراموش می‌کنن: تغییرات nftables فقط توی حافظه اعمال میشن و بعد از ریبوت از بین میرن. پس حتماً ذخیره‌شون کنید.

ذخیره قوانین فعلی

# ذخیره قوانین فعلی در فایل پیکربندی
sudo nft list ruleset > /etc/nftables.conf

# تأیید بارگذاری خودکار در بوت
sudo systemctl enable nftables

تست امن تغییرات از راه دور

اگه از طریق SSH به سرور متصلید، اشتباه توی قوانین فایروال می‌تونه دسترسی‌تون رو قطع کنه. این تکنیک رو برای تست امن استفاده کنید — جدی بگیریدش:

# قوانین فعلی را بکاپ بگیرید
sudo nft list ruleset > /tmp/nftables-backup.conf

# یک کرون‌جاب ایمنی تنظیم کنید — بازگرداندن قوانین بعد از ۵ دقیقه
echo "nft -f /tmp/nftables-backup.conf" | sudo at now + 5 minutes

# حالا تغییرات را اعمال کنید
sudo nft -f /etc/nftables.conf

# اگر همه‌چیز درست بود، کرون‌جاب را لغو کنید
sudo atrm $(atq | awk '{print $1}')

الگوی پیکربندی کامل تولیدی

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

#!/usr/sbin/nft -f

flush ruleset

table inet firewall {

    # === مجموعه‌ها ===
    set admin_ips {
        type ipv4_addr
        flags interval
        elements = { 192.168.1.0/24, 10.10.0.0/16 }
    }

    set web_ports {
        type inet_service
        elements = { 80, 443 }
    }

    set blacklist {
        type ipv4_addr
        flags dynamic,timeout
        timeout 10m
    }

    # === زنجیره ورودی ===
    chain input {
        type filter hook input priority 0; policy drop;

        # لوکال
        iif "lo" accept

        # اتصالات موجود
        ct state established,related accept
        ct state invalid drop

        # لیست سیاه پویا
        ip saddr @blacklist counter drop

        # محافظت SYN flood
        tcp flags syn ct state new \
            meter syn_flood { ip saddr limit rate over 25/second } \
            add @blacklist { ip saddr } drop

        # ICMP با محدودیت
        ip protocol icmp limit rate 10/second burst 20 packets accept
        ip6 nexthdr icmpv6 limit rate 10/second burst 20 packets accept

        # SSH — فقط از شبکه‌های مجاز
        tcp dport 22 ip saddr @admin_ips ct state new \
            limit rate 4/minute accept

        # وب
        tcp dport @web_ports ct state new accept

        # ثبت بسته‌های حذف‌شده
        counter log prefix "nft-dropped: " drop
    }

    # === زنجیره خروجی ===
    chain output {
        type filter hook output priority 0; policy accept;
    }

    # === زنجیره فوروارد ===
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
}

پرسش‌های متداول (FAQ)

آیا می‌تونم iptables و nftables رو همزمان استفاده کنم؟

از نظر فنی بله، چون هر دو از زیرسیستم Netfilter هسته لینوکس استفاده می‌کنن. ولی این کار به‌شدت توصیه نمیشه. قوانین هر دو سیستم می‌تونن با هم تداخل داشته باشن و رفتار غیرقابل پیش‌بینی ایجاد کنن. بهتره یکی رو انتخاب کنید — و در ۲۰۲۶، پاسخ درست nftables هست.

آیا nftables از توزیع لینوکس من پشتیبانی می‌کنه؟

به احتمال خیلی زیاد بله. Ubuntu 22.04+، Debian 11+، RHEL 9+، AlmaLinux 9+، Rocky Linux 9+، Fedora 35+، Arch Linux و openSUSE همگی nftables رو به‌عنوان فریم‌ورک پیش‌فرض دارن. اگه توزیع‌تون از هسته ۳.۱۳ یا بالاتر استفاده می‌کنه، nftables در دسترسه.

تفاوت nftables با UFW و firewalld چیه؟

UFW (Ubuntu) و firewalld (RHEL/Fedora) فریم‌ورک‌های مدیریتی سطح بالا هستن که در پشت صحنه از nftables استفاده می‌کنن. رابط ساده‌تری دارن ولی انعطاف‌پذیری کمتری. اگه به کنترل دقیق و قوانین پیچیده نیاز دارید — مثل محدودسازی نرخ به ازای هر IP، مجموعه‌های پویا یا مسدودسازی جغرافیایی — باید مستقیماً با nftables کار کنید.

اگه اشتباهی توی قوانین فایروال SSH رو مسدود کنه، چیکار کنم؟

قبل از هر تغییری، حتماً یه مکانیزم ایمنی تنظیم کنید. از دستور at برای زمان‌بندی بازگردانی خودکار قوانین استفاده کنید (مثلاً بعد از ۵ دقیقه). اگه هم به کنسول فیزیکی یا KVM/IPMI دسترسی دارید، از اون طریق می‌تونید قوانین رو اصلاح کنید. من همیشه قبل از تغییرات فایروال از راه دور، اول بکاپ و مکانیزم بازگردانی تنظیم می‌کنم — باور کنید ارزشش رو داره.

چطوری عملکرد nftables رو نظارت کنم؟

از شمارنده‌ها (counter) توی قوانین استفاده کنید تا تعداد بسته‌ها و بایت‌های منطبق رو ببینید. دستور nft monitor trace ردیابی زنده بسته‌ها رو نشون میده. همچنین با conntrack -L می‌تونید جدول ردیابی اتصالات هسته رو بررسی کنید و با watch تغییرات شمارنده‌ها رو در زمان واقعی مشاهده کنید.

درباره نویسنده Editorial Team

Our team of expert writers and editors.