آموزش UFW برای امنسازی فایروال VPS
با UFW روی VPS سیاست پیشفرض deny را تنظیم کنید، فقط portهای لازم را باز بگذارید و پیش از فعالسازی، SSH را مجاز کنید تا دسترسیتان قطع نشود.
UFW چیست و چرا به آن نیاز دارید
UFW مخفف Uncomplicated Firewall است و این نام واقعاً گویای کارکرد آن است. این ابزار یک front end ساده برای firewall موجود در هسته Linux است؛ بنابراین بهجای نوشتن ruleهای خام، دستورهای کوتاهی مانند ufw allow 22/tcp را وارد میکنید. در یک VPS تازه، هر service در حال listening بهطور پیشفرض از اینترنت قابل دسترسی است. یک firewall این وضعیت را معکوس میکند: ابتدا دسترسی همهچیز را deny میکنید و سپس فقط چند port موردنیاز خود را allow میکنید. همین تغییر، با حدود چهار دستور، بیشتر سطح در معرض خطر بودن سیستم شما را از بین میبرد.
پیش از فعالسازی آن، باید بدانید چه چیزهایی در حال listening هستند؛ زیرا firewall درباره دسترسی همین serviceها تصمیم میگیرد. بررسی موارد در حال listening با ss -tlnp نخستین گام مناسب است.
تنها قانونی که مانع قفل شدن دسترسی شما میشود
این همان اشتباهی است که افراد را از firewall میترساند. شما UFW را با سیاست پیشفرض deny فعال میکنید، اما هرگز SSH را مجاز نکردهاید. بنابراین بهمحض فعال شدن firewall، اتصال خودتان قطع میشود و دیگر نمیتوانید دوباره وارد شوید. برای جلوگیری از این مشکل، همیشه پیش از فعال کردن UFW، SSH را مجاز کنید. تمام نکته همین است و مراحل زیر این کار را بهترتیب ایمن انجام میدهند.
اگر بااینحال این اتفاق رخ داد، دسترسی شما کاملاً قطع نشده است: کنسول وب provider شما، از طریق VNC یا serial، از SSH عبور نمیکند. بنابراین میتوانید از آنجا وارد شوید و ufw disable را اجرا کنید یا rule مربوط به دسترسی ازدسترفته را اضافه کنید.
گام 1: تنظیم سیاستهای پیشفرض
ابتدا به UFW بگویید همه اتصالات ورودی را رد کند و همه اتصالات خروجی را مجاز بداند:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming بخش مهم این تنظیم است. این گزینه یعنی هر پورتی که قانون صریحی برای مجاز بودن آن وجود نداشته باشد، از خارج بسته است؛ حتی اگر سرویسی روی آن در حال گوش دادن باشد. allow outgoing به سرور اجازه میدهد برای دریافت بهروزرسانیها و موارد مشابه، بهطور معمول به اینترنت دسترسی داشته باشد. این دو فرمان فقط سیاستها را تغییر میدهند؛ تا زمانی که UFW را در گام 3 فعال نکنید، هیچ قانونی اعمال نمیشود.
گام 2: پورتهایی را که واقعاً نیاز دارید مجاز کنید
پیش از فعالسازی، دسترسی SSH را باز کنید تا اتصال شما حفظ شود:
sudo ufw allow 22/tcpUFW میتواند برای SSH محدودسازی نرخ را نیز انجام دهد: sudo ufw limit 22/tcp پورت را مجاز میکند، اما هر نشانی را که در مدت سی ثانیه شش اتصال یا بیشتر ایجاد کند، مسدود میکند. این کار بدون نیاز به نرمافزار اضافی، اثر اسکریپتهای brute-force را کاهش میدهد.
اگر وبسرور اجرا میکنید، HTTP و HTTPS را نیز مجاز کنید:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpفقط سرویسهایی را مجاز کنید که بهصورت عمومی ارائه میدهید. پایگاه دادهای مانند Postgres روی پورت 5432 تقریباً هرگز نباید قانون allow داشته باشد. آن را به 127.0.0.1 متصل کنید تا فقط روی همان ماشین قابل دسترسی باشد. هر پورتی که باز میکنید، نیازمند حفاظت است؛ بنابراین فهرست پورتها را کوتاه نگه دارید.
همچنین میتوانید توالی کامل فرمانهای ufw را برای سرور خود در اینجا ایجاد کنید و سپس آنها را بهترتیب اجرا کنید:
گام 3: فعالسازی و تأیید فعال بودن آن
sudo ufw enableاین فرمان هشدار میدهد که ممکن است اتصالهای SSH موجود را مختل کند. چون در گام 2، 22/tcp را مجاز کردید، نشست شما برقرار میماند. نتیجه را تأیید کنید:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN Anywhereدر اینجا دو مورد را بررسی کنید. Status: active نشان میدهد که firewall در حال اجرا است. همچنین هر قانون دو بار نمایش داده میشود؛ یک بار بهصورت ساده و یک بار همراه با (v6). این مورد نشان میدهد که UFW علاوه بر IPv4، IPv6 را نیز پوشش میدهد. اگر خطوط (v6) وجود نداشته باشند، بخش IPv6 شما مدیریت نمیشود؛ این مسئله خود یک دام جداگانه است که در مقاله firewall برای IPv6 پوشش داده شده است.
مدیریت قوانین در ادامه
برای مشاهده قوانین همراه با شماره، تا بتوانید یکی از آنها را حذف کنید:
sudo ufw status numbered
sudo ufw delete 3برای مجاز کردن یک پورت فقط از یک نشانی، که روش مناسبی برای در دسترس قرار دادن یک سرویس مدیریتی فقط برای IP خودتان است:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpاین رویکرد زمانی ناکارآمد میشود که آدرس شما تغییر کند یا چندین ماشین به دسترسی نیاز داشته باشند. راهحل معمول این است که اصلاً پورت را بهصورت عمومی باز نکنید و در عوض از طریق یک شبکهٔ خصوصی به سرویس دسترسی پیدا کنید؛ هدف از اعلام subnet خصوصی سرور به tailnet شما نیز همین است.
فایروال فقط یکی از لایهها است. فایروال مشخص میکند چه چیزی میتواند به یک پورت دسترسی پیدا کند، اما سرعت تلاشهای مکرر برای دسترسی به پورتی را که باز گذاشتهاید، مانند SSH، کاهش نمیدهد. برای این کار، Fail2ban را پیش از SSH قرار دهید تا متخلفان تکرارشونده را مسدود کند. دفاع لایهای یعنی هر لایه، چیزی را پوشش میدهد که لایههای دیگر نمیتوانند.
فایروال فقط زمانی معنا دارد که بدانید پورتها چه هستند و سرویسها چگونه به آنها گوش میدهند و پیکربندی آن یکی از گامهای 10 دقیقه نخست روی یک VPS جدید است.
FAQ
آیا فعالسازی UFW نشست SSH من را قطع میکند؟
اگر ابتدا دسترسی SSH را مجاز کنید، خیر. sudo ufw allow 22/tcp را پیش از sudo ufw enable اجرا کنید. اتصال شما برقرار میماند، زیرا فایروال اکنون پورت 22 را مجاز میکند. خطر زمانی ایجاد میشود که فایروال با سیاست پیشفرض deny را بدون قانون allow برای SSH فعال کنید؛ در این حالت دسترسی شما قطع میشود. اگر این اتفاق افتاد، از طریق VNC یا کنسول سریال ارائهدهنده خود وارد شوید و ufw disable را اجرا کنید.
چه پورتهایی را باید روی VPS باز کنم؟
فقط پورتهایی را باز کنید که بهصورت عمومی ارائه میکنید. برای مدیریت سرور، SSH (22/tcp) را باز کنید. اگر وبسایت اجرا میکنید، HTTP و HTTPS (80/tcp، 443/tcp) را نیز باز کنید. دسترسی به همه موارد دیگر را مسدود نگه دارید. سرویسهای داخلی مانند پایگاههای داده باید به 127.0.0.1 متصل شوند و اصلاً قانون فایروالی نداشته باشند تا هرگز از شبکه قابل دسترسی نباشند.
آیا UFW از IPv6 پشتیبانی میکند؟
در نسخههای جدید Ubuntu، بله. مقدار IPV6=yes در /etc/default/ufw تنظیم شده است. بنابراین هر قانون برای هر دو پشته اعمال میشود و ufw status قوانین IPv6 را با پسوند (v6) نشان میدهد. روشهایی که همچنان میتوانند باعث بروز مشکل شوند، در دام فایروال IPv6 توضیح داده شدهاند.
چگونه یک قانون UFW را حذف کنم؟
برای فهرستکردن قوانین همراه با شماره شاخص، sudo ufw status numbered را اجرا کنید. سپس sudo ufw delete N را اجرا کنید؛ در این دستور، N شماره قانونی است که میخواهید حذف شود. همچنین میتوانید قانون را بر اساس مشخصات آن حذف کنید؛ برای مثال، sudo ufw delete allow 80/tcp.
چگونه دسترسی به یک پورت را فقط از یک آدرس IP مجاز کنم؟
بهجای allow معمولی، از یک قانون from استفاده کنید. برای اینکه فقط آدرس دفتر شما بتواند به PostgreSQL دسترسی پیدا کند، sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp را اجرا کنید. با سیاست پیشفرض deny، پورت برای همه بسته است تا زمانی که یک قانون آن را باز کند. بنابراین این قانون from تنها مسیر دسترسی است: کل اینترنت مسدود میماند و فقط آدرسی که مشخص کردهاید اجازه عبور دارد. allow 5432/tcp معمولی را نیز اضافه نکنید، زیرا پورت را برای همه باز میکند. این روش امنترین راه برای در معرض شبکه قرار دادن یک پایگاه داده یا پنل مدیریتی است. نتیجه را با sudo ufw status verbose بررسی کنید؛ این دستور آدرس مبدأ را در کنار پورت نشان میدهد.