امنیت سرور دقیقاً از جایی ضربه میخورد که فکر میکنیم چندان مهم نیست؛ یک پورت فراموششده یا سرویسی که ماههاست بلااستفاده مانده، میتواند سادهترین ورودی برای اسکنرهای مخرب باشد. واقعیت این است که در مدیریت سرور، هر پورتِ بازِ اضافهای، یک ریسک امنیتی است که سطح حملات را به شکل غیرضروری بالا میبرد. بستن پورت در لینوکس یعنی مسدود کردن ترافیک ورودی یا خروجی ازطریق ابزارهای فایروال مثل UFW و iptables، یا متوقف کردن کامل سرویسی که آن پورت را اشغال کرده است.
هدف اصلی این کار، محدود کردن دسترسیها به حداقلِ ممکن و اجازه عبور فقط به ترافیکهای مجاز و شناسنامهدار است. در این مقاله، ابتدا یاد میگیریم چطور پورتهای فعال سرور را شناسایی کنیم و سپس قدمبهقدم با روشهای مسدودسازی پورتهای اضافی در توزیعهای مختلف لینوکس و تست نهایی امنیت شبکه آشنا میشویم.
فهرست مطالب
شناسایی پورتهای باز در لینوکس
بسیاری از مدیران سرور فکر میکنند فقط پورتهای سرور استانداردی مثل SSH یا HTTP روی سرورشان باز است؛ اما واقعیت این است که نصب یک پکیج ساده یا یک کانفیگ پیشفرض، ممکن است بدون اطلاع شما درهای جدیدی را به روی اینترنت بازکرده باشد. قبلاز اینکه به فکر بستن پورت در لینوکس باشید، ابتدا باید بدانید دقیقاً چه پورتهایی و توسط چه سرویسهایی اشغال شدهاند. بررسی پورتهای باز در لینوکس اولین قدم برای جلوگیری از نفوذ است؛ چراکه شما نمیتوانید چیزی را که نمیبینید، مدیریت کنید.

استفاده از دستورات ss و netstat
در گذشته دستور netstat انتخاب اول همه بود اما در توزیعهای مدرن، دستور ss بهدلیل سرعت بالاتر و ارائه اطلاعات دقیقتر از سوکتها، جایگزین آن شده است. بااینحال، هردو دستور با سوئیچهای مشابه، لیست کاملی از پورتهای درحال گوش دادن (Listening) را به شما میدهند.
برای مشاهده لیست پورتها، از دستور زیر استفاده کنید:
sudo ss -tunlp
یا
sudo netstat -tunlp

برای درک بهتر خروجی از جدول زیر کمک بگیرید:
| سوئیچ | کاربرد در دستور |
|---|---|
| -t | نمایش پورتهای TCP |
| -u | نمایش پورتهای UDP |
| -n | نمایش شماره پورتها به جای نام (سرعت بالاتر) |
| -l | فقط پورتهای در حال گوش دادن (Listening) |
| -p | نمایش نام برنامه یا شناسه فرایند (PID) متصل به پورت |
بررسی دقیقتر اتصالات با lsof
اگر میخواهید بدانید چگونه پورتهای باز لینوکس را ببندیم، ابتدا باید بفهمید کدام فایل یا پردازش مستقیماً با آن پورت درگیر است. دستور lsof (مخفف List Open Files) در اینجا به کمک شما میآید تا ردپای دقیق برنامهها را پیدا کنید. با اجرای دستور زیر میتوانید ببینید کدام سرویس روی یک پورت خاص فعال است:
sudo lsof -i :80
این دستور برای مدیریت پورتهای سرور بسیار حیاتی است؛ زیرا گاهی یک پردازش فرزند (Child Process) پورت را باز نگه میدارد که در دستورات معمولی دیده نمیشود.
بستن پورت با ابزار UFW
گاهی اوقات پیچیدگی فایروالها باعث میشود مدیران سرور کلاً قید تنظیمات امنیتی را بزنند. اگر از توزیعهای مبتنی بر دبیان یا اوبونتو استفاده میکنید، UFW (Uncomplicated Firewall) دقیقاً برای حل همین مشکل طراحی شده است؛ یک لایه ساده و کاربرپسند روی تنظیمات پیچیده شبکه که اجازه میدهد بدون درگیرشدن با مفاهیم و پیچیدگیهای سنگین، مدیریت فایروال UFW در لینوکس را به دست بگیرید.
مسدودسازی پورتهای تکی و بازهای
برای بستن یک پورت خاص، کافی است از دستور ساده deny استفاده کنید. اما نکته حرفهای اینجا است که گاهی نیاز دارید یک محدوده ( یا Range) از پورتها را همزمان ببندید تا مانعاز اسکنشدن سرور شوید.
- بستن یک پورت خاص = sudo ufw deny 8080
- بستن یک بازه پورت (مثلاً از ۱۰۰۰ تا ۲۰۰۰): = sudo ufw deny 1000:2000/tcp
مدیریت پورت براساس پروتکل (TCP/UDP)
امنیت پورت سرور ایجاب میکند که دقیق باشید. مثلاً ممکن است بخواهید پورت ۸۰ را برای ترافیک TCP باز بگذارید اما ترافیک UDP آن را مسدود کنید. UFW این تفکیک را به سادگی انجام میدهد:
sudo ufw deny 53/udp
مدیریت حرفهای پورت با iptables
اگر UFW را یک خودروی دنده اتوماتیک فرض کنیم، iptables حکم جعبهدنده دستی و حرفهای را دارد. این ابزار به شما اجازه میدهد در لایههای عمیقتر پکتها را فیلتر کنید. بسیاری از متخصصان برای بستن پورتهای باز لینوکس در سرورهای حساس، همچنان این روش استاندارد را ترجیح میدهند چون کنترل بینظیری روی هر پکت ورودی و خروجی فراهم میکند.

تفاوت دستورات DROP و REJECT
در بستن پورت با iptables، دو راه پیش روی شما است:
- REJECT: پکت را رد میکند و به فرستنده پیام میدهد که پورت بسته است (یک بسته ICMP Destination Unreachable بهسمت فرستنده میفرستد).
- DROP: پکت را کاملاً نادیده میگیرد؛ انگار که اصلاً سروری وجود ندارد. برای امنیت بیشتر، همیشه پیشنهاد میکنم از DROP استفاده کنید تا مهاجم را در بیخبری بگذارید.
نمونه کد برای بستن پورت ۸۰:
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
نحوه ذخیره دائمی قوانین (Persistent Rules)
بزرگترین چالش با iptables این است که بعد از ریبوت سرور، تمام زحمات شما بهحالت پیشفرض برمیگردد. برای جلوگیری از این اتفاق و اطمینان از امنیت پورت سرور در بلندمدت، باید پکیج iptables-persistent را نصب کنید:
- نصب ابزار ذخیرهسازی:
sudo apt install iptables-persistent
- ذخیره قوانین فعلی:
sudo netfilter-persistent save
غیرفعالسازی سرویسهای غیرضروری
گاهی اوقات بستن پورت با فایروال، شبیه به قفلکردن درِ اتاقی است که داخل آن یک بخاری روشن رهاشده است. بااینکه در بسته است، اما منبع خطر (سرویس فعال) هنوز دارد از منابع سیستم استفاده میکند. باتوجه به این مثال، برای مدیریت پورتهای سرور به شکل ریشهای، بهترین کار این است که سرویسهایی را که به آنها نیاز ندارید کاملاً غیرفعال کنید. بااینکار، نهتنها آن پورت دیگر باز نخواهد بود، بلکه بار پردازشی سرور هم سبکتر میشود.
کار با systemctl برای توقف سرویسها
در توزیعهای مدرن لینوکس، systemctl عصای دست شما است. برای بستن سرویسهای غیرضروری، باید بین «متوقف کردن» و «غیرفعالکردن» تفاوت قائل شوید.
- توقف موقت (Stop): سرویس را فوراً میبندد اما با ریبوت بعدی، دوباره اجرا میشود.
- غیرفعالسازی دائمی (Disable): از اجرای خودکار سرویس در هنگام بوت شدن سرور جلوگیری میکند.
ترکیب طلایی برای امنیت پورت سرور:
ابتدا سرویس را استاپ و سپس آن را disable کنید:
sudo systemctl stop [service_name]
sudo systemctl disable [service_name]
تست نهایی و تایید مسدودسازی
یک قانون نانوشته در لینوکس وجود دارد: به چیزی که تست نکردهای، اعتماد نکن. بعداز اینکه تمام مراحل بستن پورت در لینوکس را انجام دادید، باید از بیرون به سرور نگاه کنید تا مطمئن شوید هیچ شکافی باقی نمانده است. تست امنیت بعد از تغییرات به شما اطمینان میدهد که قوانین فایروال به درستی در لایه شبکه اعمال شدهاند.
اسکن پورت با ابزار Nmap
قویترین ابزار برای این کار Nmap است. پیشنهاد میکنم این اسکن را از روی سیستم شخصی خود یا یک سرور دیگر (خارج از شبکه سرور فعلی) انجام دهید تا وضعیت واقعی پورتها از دید یک مهاجم شبیهسازی شود.
دستور اسکن پورتهای مشکوک:
nmap -p 80,443,22 [Your-Server-IP]
اگر میخواهید یک اسکن عمیق روی تمام ۶۵۵۳۵ پورت سرور انجام دهید، از این دستور استفاده کنید:
nmap -p- [Your-Server-IP]
در خروجی دستور، وضعیت هر پورت باید یکی از دو حالت زیر باشد:
- Filtered: یعنی فایروال بهدرستی درخواست را بلاک کرده است.
- Closed: یعنی هیچ سرویسی روی این پورت گوش نمیدهد (اما لزوماً توسط فایروال بلاک نشده).

امنیت سیستمعامل در سایه زیرساخت
بهعنوان کسی که سالها با چالشهای امنیتی دستوپنجه نرم کرده، یک نکته را با اطمینان میگویم: فایروال داخلی لینوکس، باتمام قدرتش، تنها یک لایه از سپر دفاعی شما است. مشکل اینجاست که وقتی ترافیک مخرب به فایروال داخل سیستمعامل میرسد، یعنی همین حالا هم بخشی از منابع پردازنده (CPU) و پهنای باند شما صرف بررسی و رد کردن آن پکتها شده است. در حملات سنگین، حتی اگر پورتها بسته باشند، فشار روی سیستمعامل میتواند پایداری سرویس شما را مختل کند.
راهکار این است که امنیت را یک پله عقبتر، یعنی در لایه زیرساخت و لبه شبکه (Edge) تأمین کنید. در پنل مدیریتی سرور ابری ابر فردوسی، شما به گروههای امنیتی دسترسی دارید. این یعنی میتوانید پیشاز آنکه ترافیک مشکوک حتی به نزدیکی سیستمعامل لینوکس شما برسد، پورتهای اضافی را در سطح شبکه مسدود کنید. بااینکار، فایروال لینوکس شما نفس راحتی میکشد و تمام قدرت سختافزارهای نسل جدید HPE و پردازندههای قدرتمند AMD EPYC، صرفاً برای پردازش کدهای شما رزرو میماند.
برای آشنایی بیشتر با امکانات این زیرساخت پیشنهاد میکنیم مقاله زیر را مطالعه فرمایید.
برخی دیگر از مزایای سرورهای ابری فردوسی:
- امکان ایجاد تنظیمات امنیتی در بالاترین لایههای فایروال
- افزایش و تغییر منابع سیستم متناسب با نیاز لحظهای و بدون وقفه
- پرداخت هزینههای بهازای ساعات استفاده از سرور (پرداخت بهمیزان مصرف)
- خودکارسازی فرایندها (کنترل ورودی/خروجی، منابع و…) با کلید api
- نصب خودکار اسکریپتهایی مانند داکر یا وردپرس ازطریق بازارچه ابری
- بهرهمندی از پردازندههای نسل جدید و هارد پرسرعت NVMe
- نسخه دمو و ۱۰۰ هزارتومان اعتبار رایگان برای تست بدون هزینه امکانات
جمعبندی
بستن پورت در لینوکس یک پروژه دائمی است؛ زیرا امنیت واقعی در تعادل میان دسترسی و محدودیت معنا پیدا میکند؛ اگر پورتها را بیشازحد باز بگذارید، نفوذپذیر میشوید و اگر همهچیز را بدون برنامه ببندید، خودتان را از مدیریت سرور محروم میکنید. همیشه قبلاز اعمال تغییرات بزرگ در فایروال، یک راه دسترسی جایگزین درنظر بگیرید یا از قابلیت کنسول در پنل ابر فردوسی استفاده کنید تا پشت درهای بسته نمانید.
چکلیست نهایی برای امنیت پورتها:
- اسکن: با دستور ss یا nmap پورتهای فعال را شناسایی کردید؟
- تصمیم: آیا سرویسی هست که بتوانید بهجای بستن پورت، کلاً آن را disable کنید؟
- اجرا: از UFW یا از iptables برای کنترل دقیق استفاده کردید؟
- تثبیت: آیا قوانین را برای بعد از ریبوت سرور ذخیره کردهاید؟
- تایید: اسکن نهایی را از یک سیستم خارجی (خارج از شبکه سرور) انجام دادید؟
شما برای مدیریت امنیت سرورهایتان بیشتر از کدام ابزار استفاده میکنید؟ اگر در مسیر بستن پورتها با خطای عجیبی مواجه شدید یا تجربهای در زمینه مقابله با حملات دارید، در بخش نظرات با ما در میان بگذارید تا باهم بررسی کنیم.
منابع:
Tecmint | digitalocean | linode | disable-services-on-linux | nmap
سؤالات متداول
تفاوت اصلی بین بستن پورت و غیرفعال کردن سرویس چیست؟
بستن پورت در فایروال لینوکس مانند قفل کردن درِ یک اتاق است؛ اما غیرفعال کردن سرویس (Service) یعنی آن وسیله یا برنامهای که پورت را اشغال کرده بود، کلاً از مدار خارج کنید. برای امنیت حداکثری، بهتر است هر دو کار را انجام دهید.
آیا بستن پورتها میتواند باعث اختلال در سرور شود؟
بله، اگر پورتهای حیاتی مثل SSH (پورت ۲۲) یا پورتهای دیتابیس و وبسرور را بدون بررسی ببندید، دسترسی خودتان یا کاربران به سرویس قطع میشود. همیشه قبلاز بستن، لیست پورتهای فعال را با دستور ss -tunlp بررسی کنید.
تفاوت UFW با iptables و firewalld در چیست؟ کدام بهتر است؟
UFW سادهترین ابزار (مخصوص اوبونتو/دبیان) و iptables منعطفترین و قدیمیترین ابزار است. firewalld نیز در توزیعهایی مثل CentOS رایج است. هیچکدام ذاتاً بهتر نیستند؛ انتخاب آنها به نوع توزیع لینوکس و سطح تخصص شما در مدیریت شبکه بستگی دارد.
چطور مطمئن شوم که پورت واقعاً بسته شده است؟
بهترین روش، اسکن پورت از یک سیستم خارجی (خارج از شبکه سرور) با استفاده از ابزار Nmap است. اگر وضعیت پورت را filtered یا closed دیدید، یعنی بستن پورت در لینوکس با موفقیت انجام شده است.
آیا بستن پورتهای غیرضروری در سرور برای جلوگیری از حملات DDoS مؤثر است؟
خیر؛ بستن پورتهای اضافی سطح حملات را کاهش میدهد، اما برای مقابله با حملات DDoS حجیم به لایههای امنیتی پیشرفتهتر در سطح شبکه و زیرساخت (مثل فایروالهای ابری) نیاز دارید.
چطور از بازشدن دوباره پورتها بعد از ریبوت سرور جلوگیری کنیم؟
در UFW وقتی فایروال را با دستور ufw enable فعال میکنید، تنظیمات ذخیره میشوند. در iptables اما باید حتماً از ابزارهایی مثل iptables-persistent استفاده کنید تا قوانین بعداز ریاستارت پاک نشوند.
آیا میتوان بدون دسترسی روت پورتها را مدیریت کرد؟
خیر؛ هرگونه تغییر در قوانین فایروال و دسترسی به جداول شبکه سیستمعامل، نیازمند سطح دسترسی Root یا استفاده از دستور sudo است.
مدیریت پورتها در سرور ابری با سرورهای معمولی چه تفاوتی دارد؟
در سرور ابری، شما یک لایه امنیتی اضافه در پنل مدیریتی دارید. پیشنهاد میشود ابتدا پورت را در پنل ابر فردوسی مسدود کنید تا ترافیک قبلاز رسیدن به سرور فیلتر شود و سپس برای اطمینان، تنظیمات داخلی لینوکس را اعمال کنید.

