راهاندازی فایروال با UFW در Ubuntu راهنمای گامبهگام امنسازی سرور
Ubuntu 22.04 LTS — مناسب همچنین برای 20.04 و 24.04
توضیح کلی: این مقاله یک راهنمای عملی، مرحلهبهمرحله و قابل انتشار در وردپرس برای راهاندازی و مدیریت فایروال ساده، امن و قابل فهم با استفاده از UFW (Uncomplicated Firewall) ارائه میدهد. شامل توضیحات مفهومی، دستورات کامل قابل کپی، سناریوهای معمول (SSH، وب سرور، چند سرویس)، لاگگیری، محدودسازی نرخ اتصال، پشتیبانگیری و بازیابی، و نکات پیشرفته IPv4/IPv6 و قوانین سفارشی است.
پیشنیازها
– دسترسی به سرور اوبونتو با حساب کاربری دارای امتیازات sudo.
– اتصال ترمینال (SSH) یا دسترسی فیزیکی به کنسول.
– آشنایی پایه با خط فرمان لینوکس.
– (اختیاری) وب سرور (nginx/apache) یا دیگر سرویسهایی که میخواهید از طریق فایروال محافظت کنید.
فهرست مطالب
- مقدمهای کوتاه درباره UFW
- نصب و فعالسازی UFW
- مفاهیم پایه قوانین (deny/allow, incoming/outgoing, ports, protocols)
- قوانین پایه: باز کردن SSH، HTTP/HTTPS
- محدودسازی دسترسی SSH و جلوگیری از قفل شدن خودتان
- نمونه سناریوها: سرور وب ساده، سرور با SSH روی پورت غیرپیشفرض، سرور دیتابیس محلی
- مدیریت لاگها و مشاهده ترافیک بلاک شده
- Rate limiting برای جلوگیری از brute-force
- کار با برنامهها (UFW app profiles)
- ذخیره، بازیابی و انتقال پیکربندیها
- قوانین پیشرفته: چندین رابط شبکه، IPv6، before/after rules
- تست و عیبیابی رایج
- نکات امنیتی و بهترین روشها
- خلاصه و منابع مفید

1) مقدمهای کوتاه درباره UFW
– UFW یک واسط ساده برای iptables است که هدف آن سادهسازی مدیریت قوانین فایروال برای کاربران معمولی و مدیران است.
– بهصورت پیشفرض تمرکز روی قوانین ورودی دارد، اما میتوان قوانین خروجی نیز تعریف کرد.
– مناسب سرورهای لینوکسی که نیاز به محافظت پایهای دارند.
2) نصب و فعالسازی UFW
بسیاری از نسخههای اوبونتو UFW را بهصورت پیشفرض دارند. برای اطمینان یا نصب مجدد:
sudo apt update sudo apt install ufw -y
بررسی وضعیت فعلی:
sudo ufw status verbose
اگر UFW غیرفعال است، فعالسازی را بعد از تعریف قوانین امن انجام دهید (برای جلوگیری از قفل شدن SSH). اما قبل از فعالسازی ابتدا قانون SSH را اضافه کنید.
3) مفاهیم پایه قوانین
– allow vs deny: اجازه یا مسدودسازی ترافیک
– incoming vs outgoing: ترافیک ورودی یا خروجی سرور
– port: شماره پورت TCP/UDP (مثلاً 22 برای SSH، 80 برای HTTP، 443 برای HTTPS)
– protocol: tcp یا udp
– direction: از دید فایروال (in/out)
مثال ساختار:
sudo ufw allow 22/tcp اجازه SSH روی پورت 22 sudo ufw deny 23/tcp مسدود کردن telnet sudo ufw allow proto udp from 198.51.100.0/24 to any port 1194
4) قوانین پایه: باز کردن SSH، HTTP/HTTPS
ابتدا قانون SSH را اضافه کنید (فرض پورت پیشفرض 22):
sudo ufw allow 22/tcp
برای وبسرور:
sudo ufw allow 80/tcp HTTP sudo ufw allow 443/tcp HTTPS
میتوانید دو قانون را یکی کنید:
sudo ufw allow 80,443/tcp
یا با نام برنامه:
sudo ufw allow 'Nginx Full' اگر پروفایل اپ نصب شده باشد
5) محدودسازی دسترسی SSH و جلوگیری از قفل شدن خودتان
اگر از SSH استفاده میکنید، بهترین کار اضافه کردن قانون قبل از فعالسازی UFW است. برای پورت غیرپیشفرض مثلاً 2222:
sudo ufw allow 2222/tcp
بهتر است اجازه اتصال فقط از IPهای مشخص داده شود (مثلاً آدرس کار شما 203.0.113.45):
sudo ufw allow from 203.0.113.45 to any port 22 proto tcp
نکته: اگر از یک ISP با IP پویا هستید، بهجای قفل کردن روی یک IP، از محدودیت نرخ یا ابزارهایی مانند fail2ban برای محافظت استفاده کنید.
6) نمونه سناریوها (دستورالعملها و مثالها)
– سرور وب ساده (SSH+HTTP+HTTPS):
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
– سرور با SSH روی پورت 2200:
sudo ufw allow 2200/tcp sudo ufw allow 80,443/tcp sudo ufw enable
– سرور دیتابیس محلی (پورت 3306 برای MySQL) فقط برای localhost:
MySQL معمولاً فقط به localhost گوش میدهد؛ اما اگر بههردلیل نیاز به محدود کردن دسترسی داشتید:
اجازه اتصال به MySQL فقط از یک آدرس خاص
sudo ufw allow from 192.0.2.10 to any port 3306 proto tcp
یا اگر میخواهید دسترسی از محلی را مسدود/محدود کنید، معمولاً با تنظیم bind-address در /etc/mysql/mysql.conf.d/mysqld.cnf انجام میشود و نیازی به ufw برای محدود کردن local نیست.
7) مدیریت لاگها و مشاهده ترافیک بلاک شده
برای فعالسازی لاگ UFW:
sudo ufw logging on sudo ufw logging medium سطح medium (low, medium, high, full)
لاگها در:
/var/log/ufw.log /var/log/syslog
مشاهده سریع لاگ اخیر:
sudo tail -n 200 /var/log/ufw.log
برای فیلتر کردن ورودیهای بلاکشده:
sudo grep 'UFW BLOCK' /var/log/ufw.log | tail -n 100
8) Rate limiting (محدودسازی نرخ اتصال)
برای کاهش حملات brute-force روی SSH یا سرویسهای دیگر، UFW یک قانون ساده rate limit دارد:
sudo ufw limit 22/tcp
این قانون بهطور پیشفرض اجازه تعداد محدودی از اتصالات جدید در یک بازه زمانی را میدهد و بعد از آن IP مهاجم را موقتاً مسدود میکند. مشابه برای دیگر سرویسها:
sudo ufw limit 22/tcp comment 'limit SSH' sudo ufw limit 80/tcp comment 'limit HTTP'
9) کار با برنامهها (UFW app profiles)
بسیاری از بستهها پروفایل اپ برای UFW ثبت میکنند. فهرست اپها:
sudo ufw app list
نمایش جزئیات یک اپ:
sudo ufw app info "Nginx Full"
اجازه بر اساس اپ:
sudo ufw allow 'Nginx Full'
اگر از apache:
sudo ufw allow 'Apache Full'
10) ذخیره، بازیابی و انتقال پیکربندیها
برای گرفتن پشتیبان از تنظیمات فعلی:
sudo ufw status numbered > ~/ufw-status.txt sudo cp /etc/ufw/user.rules ~/user.rules.bak sudo cp /etc/ufw/user6.rules ~/user6.rules.bak
برای بازیابی از فایل پشتیبان (مثال کپی مجدد):
sudo cp ~/user.rules.bak /etc/ufw/user.rules sudo cp ~/user6.rules.bak /etc/ufw/user6.rules sudo ufw reload
برای انتقال به سرور دیگر، میتوانید فایلهای user.rules و user6.rules را منتقل کنید و سپس reload کنید.
11) قوانین پیشرفته: قبل و بعد (before/after rules), چندین رابط شبکه و IPv6
ساختار UFW اجازه میدهد تا قوانین خاصی را قبل از قوانین اصلی (before.rules) یا بعد (after.rules) اضافه کنید. فایلها در:
/etc/ufw/before.rules /etc/ufw/after.rules /etc/ufw/before6.rules /etc/ufw/after6.rules
مثال: افزودن یک قانون iptables سفارشی برای NAT یا فیلترینگ خاص — این نیازمند ویرایش before.rules و افزودن رشتههای iptables است. باید محتاط باشید و نسخه پشتیبان بگیرید.
پشتیبانی IPv6: اگر سیستم شما IPv6 دارد و میخواهید قواعد را اعمال کنید، در /etc/ufw/ufw.conf مقدار IPV6=yes باشد:
sudo nano /etc/ufw/ufw.conf
تنظیم:
IPV6=yes
بعد از تغییر، reload:
sudo ufw reload
برای اعمال قوانین تنها روی یک اینترفیس خاص (مثلاً eth0):
sudo ufw allow in on eth0 to any port 22 proto tcp
12) تست و عیبیابی رایج
– بررسی وضعیت و قوانین فعال:
sudo ufw status verbose sudo ufw status numbered
– حذف یک قانون خاص با شماره:
sudo ufw status numbered sudo ufw delete <num>
– غیرفعال کردن موقت:
sudo ufw disable
– فعالسازی:
sudo ufw enable
اگر پس از فعالسازی دسترسی SSH قطع شد:
– اگر ترمینال شما باز است، تنظیمات را بررسی و پورت یا قانون مربوط به IP خود را اضافه کنید.
– اگر دسترسی قطع شده است و کنسول فیزیکی ندارید، باید از پنل ارائهدهنده سرور (console/serial) برای دسترسی استفاده کنید.
13) نکات امنیتی و بهترین روشها
– همیشه قبل از فعالسازی UFW، قانون SSH را اضافه کنید تا از قفل شدن جلوگیری شود.
– استفاده از limit برای سرویسهای حساس (SSH) تا حملات brute-force کاهش یابد.
– اجازه دادن تنها به IPهای خاص برای دسترسیهای مدیریتی هر زمان ممکن بود.
– استفاده ترکیبی از fail2ban و UFW برای بالاتر بردن امنیت (fail2ban قوانین را بر اساس لاگها اضافه میکند).
– فعال کردن لاگ با سطح مناسب برای نظارت، اما آگاه باشید که سطوح بالاتر حجم لاگ را زیاد میکنند.
– قبل از تغییر قوانین در سرورهای پراهمیت، نسخه پشتیبان از /etc/ufw/* تهیه کنید.
– مطمئن شوید که سرویسهای ناخواسته بسته و پورتهای غیرضروری بستهاند.
14) مثال کامل: راهاندازی فایروال برای یک وبسرور در وردپرس
هدف: سرور اوبونتو که وردپرس اجرا میکند (NGINX یا Apache)، با SSH روی پورت پیشفرض، HTTP/HTTPS باز، MySQL فقط محلی.
دستورات کامل قابل کپی:
بهروزرسانی و نصب ufw
sudo apt update sudo apt install ufw -y
اطمینان از فعال بودن IPv6 در UFW (در صورت نیاز)
sudo sed -i 's/IPV6=no/IPV6=yes/' /etc/ufw/ufw.conf
اجازه SSH
sudo ufw allow OpenSSH
اجازه HTTP و HTTPS (برای Nginx یا Apache)
sudo ufw allow 'Nginx Full' یا 'Apache Full' اگر از آپاچی استفاده میکنید
(اختیاری) محدود کردن SSH به آدرس IP مدیریت (جایگزین کنید)
sudo ufw allow from 203.0.113.45 to any port 22 proto tcp
محدودسازی نرخ برای SSH
sudo ufw limit OpenSSH
فعالسازی ufw
sudo ufw enable
بررسی وضعیت
sudo ufw status verbose
نکات برای وردپرس:
– مطمئن شوید MySQL/MariaDB تنها به localhost گوش میدهد (فایل my.cnf یا bind-address).
– اگر از php-fpm و nginx استفاده میکنید، فقط پورت 80/443 باید باز باشد.
– اگر از سرویسهای خارجی (مثل CDN یا پنل مدیریتی) آیپیهای خاص نیاز است، آنها را explicit اضافه کنید.
15) مثال پایانی: یک سناریوی کامل شامل IPv6، پیکربندی before.rules و پشتیبانگیری
– فعال کردن IPv6 در ufw.conf و reload:
sudo sed -i 's/IPV6=no/IPV6=yes/' /etc/ufw/ufw.conf sudo ufw reload
– پشتیبانگیری فایلهای پیکربندی:
sudo cp /etc/ufw/user.rules ~/user.rules.bak sudo cp /etc/ufw/user6.rules ~/user6.rules.bak sudo tar -czvf ~/ufw-backup-$(date +%F).tar.gz /etc/ufw
– افزودن قانون سفارشی به /etc/ufw/before.rules (مثال اضافه کردن مچ کردن بسته یا تغییر هدف)، قبل از ویرایش حتماً نسخه پشتیبان بگیرید:
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules
تغییرات خود را اعمال کنید سپس ذخیره و خارج
sudo ufw reload
– چگونه یک قانون خاص را حذف کنم؟
sudo ufw status numbered sudo ufw delete <num>
– چگونه پورت را برای یک آدرس خاص باز کنم؟
sudo ufw allow from 198.51.100.10 to any port 3306 proto tcp
– چگونه همه قوانین را ریست کنم؟
sudo ufw reset
(هشدار: این فرمان همه قوانین را حذف و UFW را غیرفعال میکند)
خلاصه نهایی
– UFW یک ابزار ساده و قدرتمند برای مدیریت فایروال در اوبونتو است که با دانستن چند دستور پایه میتوانید سرور خود را از حملات متداول محافظت کنید.
– پیش از فعالسازی، قوانین حیاتی (مانند SSH) را تعریف کنید.
– از limit، لاگ و ترکیب با ابزارهایی مانند fail2ban برای افزایش امنیت استفاده کنید.
– همیشه از فایلهای پیکربندی پشتیبان بگیرید و قوانین را در محیط آزمایشی امتحان کنید قبل از اعمال روی سرورهای تولید.
منابع مفید
- man ufw - /etc/ufw/* files on your system





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