آموزش فایروال لینوکس: ufw، firewalld و nftables روی سرور واقعی
فایروال لینوکس در هسته با netfilter کار میکند و شما آن را با ufw، firewalld یا nftables مدیریت میکنید. این راهنما از سیاست پیشفرض تا عیبیابی را با دستورهای واقعی پوشش میدهد.

فایروال لینوکس در خود هسته و با زیرسیستمی به نام netfilter کار میکند. شما معمولاً مستقیم با آن سروکار ندارید و یکی از ابزارهای ufw (اوبونتو و دبیان)، firewalld (خانواده RHEL مثل Rocky و AlmaLinux) یا nftables را به کار میبرید. در این آموزش فایروال لینوکس، قاعدهای که روی هر سرور تازه باید اجرا شود این است: همه ورودیها بسته، خروجیها باز، اول پورت SSH را باز کن و بعد فایروال را روشن کن.
بقیه متن همین قاعده را با دستورهای واقعی روی هر سه ابزار پیاده میکند و میگوید کجا معمولاً کار خراب میشود.
لایههای فایروال لینوکس: چه کسی واقعاً بستهها را فیلتر میکند؟
سردرگمی اصلی تازهکارها این است که فکر میکنند ufw و iptables و nftables سه فایروال جدا هستند. نیستند. فیلتر کردن بسته را netfilter در هسته انجام میدهد و این ابزارها فقط قانونها را به زبان هسته ترجمه میکنند.
- iptables: ابزار قدیمی و هنوز رایج. در توزیعهای جدید، دستور iptables معمولاً در پشت صحنه نسخه iptables-nft است و قانونها را در nftables مینویسد.
- nftables: جایگزین رسمی iptables از هسته 3.13 به بعد، با یک دستور واحد (nft) برای IPv4 و IPv6.
- ufw: لایه سادهشده روی همین زیرساخت، پیشفرض اوبونتو.
- firewalld: مدیریت مبتنی بر zone، پیشفرض RHEL، Rocky، AlmaLinux و Fedora.
| ابزار | توزیع پیشفرض | سطح سختی | مناسب برای |
|---|---|---|---|
| ufw | اوبونتو، دبیان (نصب دستی) | ساده | وبسرور و سرورهای تکمنظوره |
| firewalld | Rocky، AlmaLinux، Fedora | متوسط | سرور با چند کارت شبکه یا چند zone |
| nftables | همه توزیعهای جدید | پیشرفتهتر | کنترل کامل، NAT، قانونهای پیچیده |
آموزش فایروال لینوکس با ufw روی اوبونتو
اگر سرورت اوبونتوست، ufw سریعترین مسیر است. قبل از هر چیز مطمئن شو از طریق SSH وصلی و میدانی روی چه پورتی است؛ اگر هنوز با اتصال راحت نیستی، آموزش اتصال به سرور لینوکس با SSH را ببین.
sudo apt update && sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status verbose
ترتیب اینجا مهم است: allow OpenSSH قبل از enable. اگر SSH را روی پورت دیگری مثل 2222 گذاشتهای، به جای OpenSSH بنویس sudo ufw allow 2222/tcp.
چند الگوی پرکاربرد دیگر:
# فقط یک آیپی مشخص به دیتابیس دسترسی داشته باشد
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp
# محدود کردن تلاشهای پیاپی روی SSH (بیش از ۶ اتصال در ۳۰ ثانیه رد میشود)
sudo ufw limit 22/tcp
# دیدن قانونها با شماره و حذف یکی از آنها
sudo ufw status numbered
sudo ufw delete 3
IPv6 را فراموش نکن. در فایل /etc/default/ufw مقدار IPV6=yes باید باشد تا قانونها برای IPv6 هم ساخته شوند؛ وگرنه سرویسی که فکر میکنی بسته است، از طریق آدرس IPv6 باز میماند. برای قدمهای بعدی امنسازی همین سیستمعامل، امنسازی سرور اوبونتو در ۱۰ قدم ادامه منطقی این بخش است.
firewalld روی Rocky و AlmaLinux
firewalld با مفهوم zone کار میکند: هر کارت شبکه به یک zone وصل است و قانونها روی zone اعمال میشوند. روی بیشتر سرورهای ابری، کارت اصلی در zone به نام public است.
sudo systemctl enable --now firewalld
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-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
تله رایج firewalld گزینه --permanent است. بدون آن، قانون فوراً اعمال میشود ولی با reload یا ریبوت از بین میرود. با آن، قانون ذخیره میشود ولی تا --reload نزنی اعمال نمیشود. اگر قانونی اضافه کردی و اثر نکرد، معمولاً یعنی reload را جا انداختهای.
برای قانونهای دقیقتر، مثل باز کردن پورت فقط برای یک آیپی، از rich rule استفاده کن:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="5432" protocol="tcp" accept'
sudo firewall-cmd --reload
نوشتن مستقیم قانون با nftables
وقتی کنترل کامل میخواهی یا ufw و firewalld برای سناریویت محدودند (مثلاً NAT یا قانونهای وابسته به حالت اتصال)، مستقیم سراغ nftables برو. در دبیان و اوبونتو، فایل پیکربندی پیشفرض /etc/nftables.conf است. یک نمونه حداقلی و امن برای وبسرور:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iif "lo" accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport { 22, 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
خانواده inet یعنی همین جدول هم IPv4 را پوشش میدهد هم IPv6. خط ct state established,related accept حیاتی است؛ بدون آن پاسخ درخواستهایی که خود سرور فرستاده (مثل apt update) برنمیگردد. ICMP را هم کامل نبند، چون IPv6 بدون ICMPv6 درست کار نمیکند.
قبل از اعمال، سینتکس را چک کن و بعد سرویس را فعال کن:
sudo nft -c -f /etc/nftables.conf
sudo systemctl enable --now nftables
sudo nft list ruleset
مرجع کامل سینتکس در ویکی رسمی nftables است.
چطور پشت فایروال خودت قفل نشوی
بدترین اتفاق در کار با فایروال این است که سیاست drop را فعال کنی و SSH خودت قطع شود. این ترتیب را رعایت کن:

ترفند زمانبند برگشت ساده است: قبل از فعال کردن فایروال، دستوری زمانبندی کن که پنج دقیقه بعد آن را خاموش کند. اگر قفل شدی، صبر میکنی و دسترسی برمیگردد.
sudo apt install at
echo "ufw disable" | sudo at now + 5 minutes
# یا برای nftables:
echo "nft flush ruleset" | sudo at now + 5 minutes
# بعد از اطمینان از اتصال:
sudo atq
sudo atrm 1
جلسه SSH فعلی را تا آخر کار نبند. اتصالی که برقرار است معمولاً به خاطر قانون established باز میماند و اتصال جدید از ترمینال دوم تنها آزمون واقعی است.
بررسی و عیبیابی قانونهای فایروال
وقتی سرویسی از بیرون باز نمیشود، این چکلیست را به ترتیب برو:

- سرویس واقعاً گوش میدهد؟ با
sudo ss -tulpnببین پورت در حالت LISTEN هست یا نه. اگر آدرس جلویش127.0.0.1است، مشکل فایروال نیست؛ سرویس فقط روی localhost باز است. این اتفاق در پیکربندی nginx و دیتابیس زیاد میافتد. برای nginx، راهنمای نصب وب سرور nginx روی اوبونتو را ببین.
- قانون درست ثبت شده؟ خروجی
sudo ufw status verboseیاsudo nft list rulesetرا نگاه کن. ترتیب قانونها در nftables مهم است؛ قانون drop بالاتر از accept، accept را بیاثر میکند.
- Docker قانونها را دور زده؟ این یکی غافلگیرکننده است. Docker برای پورتهای منتشرشده (
-p 8080:80) مستقیم قانون مینویسد و ترافیک از زنجیرهای عبور میکند که ufw کنترلش نمیکند. نتیجه: ufw میگوید پورت بسته است ولی از اینترنت باز است. راه ساده این است که پورت را فقط به localhost ببندی (-p 127.0.0.1:8080:80) و جلوی آن ریورس پراکسی بگذاری، یا قانونهایت را در زنجیره DOCKER-USER بنویسی.
- مشکل از بیرون سرور است؟ اگر از خود سرور با
curl -I http://localhostجواب میگیری و قانونها هم درستاند ولی از ایران چیزی باز نمیشود، احتمال دارد مسئله فیلترینگ آیپی باشد، نه فایروال. این حالت را در چرا آیپی سرور از ایران باز نمیشود توضیح دادهایم.
فایروال فقط یک لایه از امنسازی است. ترتیب کامل کارها از اولین ورود، یعنی کلید SSH، غیرفعال کردن ورود root، بهروزرسانی و fail2ban، در آموزش امنیت سرور لینوکس آمده است.
جمعبندی
برای اوبونتو با ufw شروع کن، روی Rocky و AlmaLinux از firewalld استفاده کن و هر وقت کنترل بیشتری لازم داشتی سراغ nftables برو. قاعده همیشه یکی است: ورودی بسته، خروجی باز، اول SSH و بعد فعالسازی، با یک زمانبند برگشت برای روز مبادا. بهترین راه یادگیری، تمرین روی سروری است که خراب شدنش اهمیتی ندارد؛ یک ساخت سرور ساعتی ایران و خارج انجام بده، قانونهای همین مقاله را رویش اجرا کن و بعد سراغ سرور اصلی برو.
پرسشهای پرتکرار
فرق ufw با iptables و nftables چیست؟
هر سه فقط قانونها را به netfilter در هسته میدهند. ufw لایه سادهشده است، iptables ابزار قدیمیتر و nftables جایگزین رسمی و جدیدتر آن با یک سینتکس واحد برای IPv4 و IPv6.
اگر بعد از فعال کردن فایروال SSH قطع شد چه کنم؟
از کنسول وب پنل سرور وارد شو و فایروال را با ufw disable یا nft flush ruleset خاموش کن. برای پیشگیری، قبل از فعالسازی با دستور at یک برگشت خودکار پنجدقیقهای تنظیم کن.
چرا با وجود بستن پورت در ufw، کانتینر Docker از بیرون در دسترس است؟
Docker برای پورتهای منتشرشده مستقیم قانون مینویسد و ufw را دور میزند. پورت را فقط روی 127.0.0.1 منتشر کن یا قانونها را در زنجیره DOCKER-USER بنویس.
آیا میشود ufw و firewalld را با هم استفاده کرد؟
نه. فقط یکی را فعال نگه دار، چون قانونهای هم را بازنویسی میکنند و رفتار سرور غیرقابل پیشبینی میشود.
پاسارگاد میزبان
مهندسی زیرساخت
شرکت میزبان داده پردازی پاسارگاد ارائه دهنده خدمات ابری و زیرساخت
سرور ساعتی ایران و خارج، در کمتر از یک دقیقه
پرداخت ساعتی به تومان، آیپی تستشده از ایران و تعویض آدرس با یک کلیک. ثبتنام رایگان است و همین حالا میتوانید سرورتان را بسازید.
ساخت سرور ابریمقالههای مرتبط
آموزش امنیت سرور لینوکس: ترتیب درست امنسازی از اولین ورود
امنیت سرور با ترتیب درست ساده میشود: اول SSH را با کلید قفل کن، بعد پورتها را ببند، بهروزرسانی را خودکار کن و بکاپ بیرون از سرور داشته باش. این راهنما هر قدم را با دستور و مسیر فایل دقیق توضیح میدهد.
امنیت سرور چیست؟ از اتاق سرور تا SSH و فایروال، راهنمای عملی
امنیت سرور یعنی سخت کردن دسترسی غیرمجاز، جلوگیری از توقف سرویس و محافظت از داده، در لایههای فیزیکی، شبکه، سیستمعامل و اپلیکیشن. این راهنما میگوید هر لایه دست کیست و در ساعت اول بعد از تحویل سرور دقیقاً چه کنی.
امنسازی سرور اوبونتو در ۱۰ قدم
سرور تازه از دقیقه اول هدف اسکنهای خودکار است. این ده قدم، بیش از ۹۰ درصد این حملهها را بیاثر میکند.
آخرین بازبینی این مقاله:


