فایروال نرم‌افزاری در سرور یکی از بنیادی‌ترین لایه‌های دفاعی است که بدون آن، سرور در معرض مستقیم اینترنت قرار می‌گیرد. فایروال نرم‌افزاری (Software Firewall) برخلاف فایروال سخت‌افزاری، روی خود سرور اجرا می‌شود و ترافیک ورودی و خروجی را بر اساس قواعد تعریف‌شده کنترل می‌کند. ابزارهای اصلی در لینوکس شامل iptables، nftables، UFW و firewalld هستند. انتخاب درست، پیکربندی دقیق و نگهداری مستمر، تفاوت بین یک سرور امن و یک سرور آسیب‌پذیر را می‌سازد. در این راهنما، مکانیزم دقیق فایروال‌های نرم‌افزاری، الگوهای پیکربندی، قواعد ضروری و اشتباهات رایج بررسی می‌شود.

در یکی از پروژه‌های سرور که برای بازبینی امنیتی به دست ما رسید، فایروال فعال بود اما پورت ۲۲ (SSH) از همه‌ی IPها باز بود. در کمتر از ۴۸ ساعت، تلاش‌های Brute Force آغاز شد. این تجربه یادآوری کرد که فایروال تنها وقتی مؤثر است که قواعد آن دقیق، محدود و مستمر بازبینی شوند.

فایروال نرم‌افزاری چیست

فایروال نرم‌افزاری یک برنامه است که روی خود سرور اجرا می‌شود و ترافیک شبکه را بر اساس قواعد تعریف‌شده فیلتر می‌کند. این فایروال در سطح هسته‌ی سیستم‌عامل (Kernel) کار می‌کند و از Netfilter در لینوکس استفاده می‌کند.

وظایف اصلی فایروال نرم‌افزاری:

  • فیلتر کردن بسته‌های ورودی و خروجی بر اساس IP، پورت و پروتکل.
  • جلوگیری از دسترسی غیرمجاز به سرویس‌ها.
  • محدود کردن دسترسی به سرویس‌های حساس (SSH، دیتابیس).
  • جلوگیری از حملات DDoS ساده.
  • لاگ‌گیری از ترافیک مشکوک.

فایروال نرم‌افزاری مکمل فایروال ابری است، نه جایگزین آن. برای مطالعه‌ی تفاوت این دو، پست فایروال ابری در مقابل فایروال سنتی مرجع کاملی است.

ابزارهای اصلی فایروال نرم‌افزاری

در لینوکس، چهار ابزار اصلی برای مدیریت فایروال وجود دارد:

ابزار مزایا معایب مناسب برای
iptables بالغ، قدرتمند، مستندات گسترده پیچیده، نحو قدیمی سرورهای تولیدی
nftables مدرن، سریع، جایگزین iptables نسبتاً جدید سرورهای مدرن
UFW ساده، مناسب مبتدیان کنترل محدودتر سرورهای کوچک
firewalld مدیریت داینامیک، مناسب Red Hat پیچیدگی متوسط CentOS، RHEL، Fedora

iptables

ابزار کلاسیک لینوکس که بر پایه‌ی Netfilter کار می‌کند. در بسیاری از سرورهای تولیدی همچنان استفاده می‌شود.

nftables

جانشین مدرن iptables که از لینوکس کرنل ۳.۱۳ معرفی شده است. nftables نحو ساده‌تر، عملکرد بهتر و پشتیبانی از Sets دارد.

UFW

Uncomplicated Firewall، یک لایه‌ی ساده روی iptables که برای مبتدیان طراحی شده است. در Ubuntu و Debian پیش‌فرض است.

firewalld

مدیریت داینامیک فایروال که در CentOS، RHEL و Fedora پیش‌فرض است. از Zones و Services پشتیبانی می‌کند.

قواعد ضروری برای هر سرور

برخی قواعد فایروال برای هر سروری ضروری هستند:

  1. بلاک کردن همه‌ی ترافیک ورودی به‌صورت پیش‌فرض: Default Deny.
  2. اجازه به SSH از IPهای محدود: اگر IP ثابت دارید، SSH را محدود کنید.
  3. اجازه به HTTP و HTTPS: پورت‌های ۸۰ و ۴۴۳.
  4. بلاک کردن پورت‌های دیتابیس از اینترنت: MySQL، PostgreSQL، MongoDB.
  5. اجازه به Loopback: ترافیک داخلی سرور.
  6. اجازه به Established Connections: ارتباطات برقرارشده.
  7. Rate Limiting برای SSH: جلوگیری از Brute Force.
# نمونه UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

برای مطالعه‌ی بیشتر درباره‌ی دفاع در برابر Brute Force، پست چرا حمله Brute Force هنوز یکی از جدی‌ترین تهدیدهای وردپرس است مفید است.

پیکربندی UFW برای مبتدیان

UFW ساده‌ترین ابزار برای شروع است:

# نصب
sudo apt install ufw

# تنظیم پیش‌فرض
sudo ufw default deny incoming
sudo ufw default allow outgoing

# اجازه به SSH
sudo ufw allow ssh

# اجازه به HTTP و HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# فعال‌سازی
sudo ufw enable

# بررسی وضعیت
sudo ufw status verbose

برای محدود کردن SSH به IP خاص:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

برای Rate Limiting SSH:

sudo ufw limit ssh

برای حذف یک قاعده:

sudo ufw delete allow 80/tcp

iptables و nftables برای حرفه‌ای‌ها

iptables و nftables کنترل دقیق‌تری ارائه می‌دهند. نمونه‌ی iptables:

# پاک‌سازی قواعد
sudo iptables -F

# پیش‌فرض
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# Loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# Established Connections
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH از IP خاص
sudo iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -j ACCEPT

# HTTP و HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Rate Limiting SSH
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

نمونه‌ی nftables:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif lo accept
        ct state established,related accept
        tcp dport { 22, 80, 443 } accept
        ip saddr 203.0.113.10 tcp dport 22 accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

برای مطالعه‌ی بیشتر درباره‌ی امنیت سرور، پست امنیت سرور بر چه اصولی استوار است مرجع کاملی است.

firewalld در CentOS و RHEL

firewalld در توزیع‌های Red Hat پیش‌فرض است و از Zones پشتیبانی می‌کند:

# بررسی وضعیت
sudo firewall-cmd --state

# مشاهده Zones
sudo firewall-cmd --get-active-zones

# اضافه کردن سرویس
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh

# اضافه کردن پورت
sudo firewall-cmd --permanent --add-port=8080/tcp

# Rate Limiting
sudo firewall-cmd --permanent --add-rich-rule='
  rule family="ipv4" source address="203.0.113.10" port port="22" protocol="tcp" accept'

# اعمال تغییرات
sudo firewall-cmd --reload

لاگ‌گیری و مانیتورینگ

لاگ‌گیری از ترافیک مشکوک، بخشی جدایی‌ناپذیر از فایروال است:

# UFW Logging
sudo ufw logging on
sudo tail -f /var/log/ufw.log

# iptables Logging
sudo iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
sudo tail -f /var/log/syslog | grep "IPTables-Dropped"

برای مطالعه‌ی بیشتر درباره‌ی بررسی لاگ‌ها، پست‌های لاگ‌های دیتابیس چگونه بررسی می‌شوند و چگونه لاگ حملات سایت را بررسی کنیم مفید هستند.

پرسش‌های پرتکرار

آیا فایروال نرم‌افزاری کافی است؟

فایروال نرم‌افزاری لایه‌ی اول است، اما برای دفاع کامل، باید با فایروال ابری، WAF و مانیتورینگ ترکیب شود.

آیا UFW برای سرور تولیدی مناسب است؟

UFW برای سرورهای کوچک و متوسط مناسب است. برای سرورهای بزرگ با قواعد پیچیده، iptables یا nftables انتخاب بهتری است.

آیا iptables در حال منسوخ شدن است؟

iptables به‌تدریج با nftables جایگزین می‌شود، اما همچنان در بسیاری از سرورها استفاده می‌شود. برای سرورهای جدید، nftables توصیه می‌شود.

چگونه از قفل شدن خودم جلوگیری کنم؟

پیش از فعال‌سازی فایروال، همیشه اجازه به SSH را تنظیم کنید و در صورت امکان از IP ثابت استفاده کنید. تست کنید و سپس تنظیمات را ذخیره کنید.

آیا فایروال بر عملکرد سرور اثر دارد؟

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

آیا فایروال جلوی DDoS را می‌گیرد؟

فایروال نرم‌افزاری می‌تواند جلوی DDoS ساده را بگیرد، اما برای DDoS حجم بالا، فایروال ابری یا CDN لازم است.

آیا باید همه‌ی پورت‌ها را بلاک کنم؟

بله، اصل Default Deny این است که همه‌ی پورت‌ها بلاک شوند و تنها پورت‌های ضروری باز شوند.

اشتباهات رایج

نشانه علت ریشه‌ای راه‌حل
SSH از همه‌ی IPها باز است نادیده گرفتن محدودیت دسترسی محدود کردن SSH به IPهای مشخص
Default Policy روی ACCEPT پیکربندی ضعیف پیش‌فرض Default Deny برای INPUT
پورت دیتابیس از اینترنت باز است نادیده گرفتن امنیت دیتابیس بلاک کردن پورت‌های 3306، 5432
عدم Rate Limiting SSH غفلت از Brute Force Rate Limiting با UFW یا iptables
لاگ‌گیری غیرفعال عدم مانیتورینگ فعال‌سازی لاگ و بررسی دوره‌ای
عدم ذخیره قواعد iptables از دست رفتن قواعد پس از ریبوت ذخیره با iptables-save یا netfilter-persistent

برای مطالعه‌ی فهرست کامل‌تری از اشتباهات، پست‌های اشتباهات مدیریت سرور و اشتباهات امنیتی رایج در وب مراجع مفیدی هستند.

ملاحظات معماری پیشرفته

در معماری‌های توزیع‌شده و پروژه‌های بزرگ، فایروال نرم‌افزاری بخشی از یک استراتژی چندلایه است:

1. Defense in Depth: فایروال نرم‌افزاری همراه با فایروال ابری، WAF، IDS/IPS و مانیتورینگ، یک دفاع لایه‌ای واقعی می‌سازد.

2. Automation: قواعد فایروال باید در قالب Infrastructure as Code (Terraform، Ansible) مدیریت شوند تا قابل بازبینی و بازتولید باشند.

3. Fail2ban و CrowdSec: این ابزارها با تحلیل لاگ، IPهای مخرب را شناسایی و به‌صورت خودکار بلاک می‌کنند.

4. Network Segmentation: تقسیم شبکه به بخش‌های کوچک‌تر، دامنه‌ی نفوذ را محدود می‌کند.

5. Zero Trust: در معماری Zero Trust، هر درخواست باید احراز هویت و مجوزدهی شود، حتی اگر از داخل شبکه باشد.

6. eBPF و Cilium: در محیط‌های Kubernetes، eBPF و Cilium کنترل دقیق‌تری بر ترافیک شبکه ارائه می‌دهند.

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

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

اگر تجربه‌ای در پیکربندی فایروال سرور داشته‌اید، برای ما جالب است بدانیم کدام ابزار را انتخاب کردید و چرا: iptables، nftables، UFW یا firewalld. تجربه‌ی خودتان را در دیدگاه‌ها بنویسید؛ به‌خصوص اگر راه‌حل متفاوتی برای مدیریت قواعد در مقیاس بزرگ پیدا کرده‌اید که می‌تواند برای خواننده‌ی بعدی مفید باشد.

💡 نکته‌ی پایانی: فایروال یک پیکربندی یک‌باره نیست؛ یک فرآیند مستمر است که با تهدیدات تکامل می‌یابد.