در حوزه امنیت شبکه و مدیریت سرورها، شناخت و مشاهده پورتهای باز در لینوکس امری بسیار حیاتی است. پورتها به عنوان درگاههای ارتباطی در شبکههای کامپیوتری عمل میکنند و وظایف مختلفی را به عهده دارند. برای جلوگیری از دسترسی غیرمجاز به سیستمها و افزایش امنیت شبکه باید از وضعیت پورتها با خبر باشیم. (نت اسکن چیست؟)
در این مقاله میخواهیم به بررسی متدها و دستورات مختلفی که برای مشاهده پورتهای باز در لینوکس استفاده میشود، بپردازیم. ابتدا با اصول کلی پورتها در شبکه آشنا میشویم و سپس به نحوه استفاده از دستورات اساسی برای مشاهده پورتهای باز در لینوکس میپردازیم. ( خرید هاست لینوکس ایران )
پورت چیست
در شبکههای کامپیوتری، "پورت" به یک شماره منحصر به فرد اشاره دارد که برنامهها یا خدمات مختلف در یک سیستم کامپیوتری، برای برقراری ارتباطات از آن استفاده میکنند، یعنی درخواستها و اطلاعات را با گوش دادن به پورتها در شبکه انتقال میهند. پورتها یک نقطه ورود یا خروج برای ارتباطات در شبکهها هستند و در انتقال اطلاعات میان دستگاهها نقشی اساسی دارند.
ویژگیهای کلیدی پورت
شمارهگذاری:
پورتها از اعداد صحیح بین 0 تا 65535 شمارهگذاری میشوند. بعضی از این پورتها که از عدد 0 تا 1023 هستند، به عنوان پورت رزرو (Well-known Ports) شناخته میشوند. پورتهای بین 1024 تا 49151 پورتهای ثبت شده هستند (registered ports) و پورتهای بین 49152 تا 65535 پورتهای داینامیک هستند (dynamic ports).
- پورتهای رزرو (Well-known Ports)مجموعهای از پورتها هستند که به صورت استاندارد و با شمارههای ثابت برای خدمات مشخصی اختصاص یافتهاند. این پورتها معمولا از عدد 0 تا 1023 شمارهگذاری میشوند. استفاده از پورتهای رزرو برای تسهیل شناسایی خدمات مختلف در شبکه صورت میگیرد.
- پورتهای ثبت شده (registered ports)مجموعهای از پورتها هستند که به صورت استاندارد برای برنامهها و خدمات مختلف در شبکه مورد استفاده قرار میگیرند. این پورتها معمولا بین اعداد 1024 تا 49151 شمارهگذاری میشوند و برای مدیریت منابع شبکه توسط سازمانها مورد استفاده قرار میگیرند.
- پورتهای داینامیک (dynamic ports)پورتهای داینامیک یا پورتهای پیشفرض، پورتهایی هستند که به صورت داینامیک توسط سیستمعامل یا برنامهها برای برقرای اتصالات انتخاب میشوند. این پورتها برخلاف پورتهای رزرو که شمارهگذاری ثابتی دارند، به صورت پویا و اتفاقی برای ارتباطات مختلف استفاده میشوند. محدوده پورتهای داینامیک بین 49152 تا 65535 است. برنامههای کلاینت معمولا از این پورتها برای برقراری ارتباط با سرورها استفاده میکنند. زمانی که یک برنامه یا سرویس جدید شروع به فعالیت میکند و نیاز به ارتباط شبکه دارد، معمولا یک پورت داینامیک از محدوده پورتها به صورت تصادفی به آن برنامه اختصاص داده میشود. این پردازش برای پیشگیری از تداخل در استفاده از پورتها توسط برنامههای دیگر است.
پروتکلهای مختلف:
هر پروتکل در شبکه مانند TCP یا UDP برای ارتباطات مختلف از پورتها استفاده میکند. این پورتها به انواع ارتباطات مختلف، مانند ارسال ایمیل، مرور وب، ارتباط با دیتابیس و ... اختصاص دارند. برای مثال، پورت 80 برای پروتکل http و پورت 443 برای پروتکل https استفاده میشوند. برای اطلاعات بیشتر مقاله انواع پروتکل های اینترنت را میتوانید مطالعه کنید.
ارتباطات دو سویه:
ارتباطات در دو سمت (درخواست و پاسخ) از طریق پورتها امکانپذیر است. یک پورت ممکن است برای ارسال درخواست و دیگری برای دریافت پاسخ استفاده شود.
امنیت:
کنترل دسترسی به پورتها از طریق فایروالها و تنظیمات امنیتی از اهمیت بسزایی برخوردار است. با بستن یا محدود کردن پورتها میتوان دسترسی غیرمجاز را متوقف و حملات احتمالی به سیستم را کاهش داد.
پورتها ابزارهای کلیدی در شبکه هستند و به تدابیر امنیتی دقیقی نیاز دارند تا از اطلاعات، حین انتقال در شبکه، محافظت کنند. در ادامه شما را با انواع دستورات، برای مشاهده پورتهای باز در لینوکس آشنا خواهیم کرد.
انواع روشها برای مشاهده پورتهای باز در لینوکس
برای مشاهده پورتهای باز در لینوکس میتوان از چندین روش مختلف استفاده کرد. این روشها عبارتند از:
- Netstat
- ss (socket statistics)
- nmap
- netcat
- lsof (list open files)
در ادامه به بررسی 4 روش اصلی از روشهای گفته شده در بالا، برای مشاهده پورتهای باز در لینوکس میپردازیم.
توجه داشته باشید که برای اجرای همه دستورات گفته شده در این مطلب، باید دسترسی روت (root) داشته باشید و قبل از هر دستور نیاز به نوشتن sudo است تا بتوانید به اطلاعات پورتها دسترسی پیدا کنید. برای اطلاعات بیشتر میتوانید به مقاله آموزشی فعال و غیرفعال کردن یوزر روت (root) در لینوکس Ubuntu مراجعه کنید.
مقالات بیشتر، اطلاعات بیشتر:
مشاهده پورتهای باز در لینوکس با دستور netstat
Netstat یک ابزار مفید در سیستمهای لینوکس و دیگر سیستمعاملهاست که اطلاعات مربوط به اتصالات شبکه، پورتها و اطلاعات مربوط به روتینگ را نمایش میدهد. این ابزار اطلاعات مهمی درباره وضعیت شبکه سیستم، در اختیار شما قرار میدهد.
به منظور مشاهده پورتهای باز در لینوکس با استفاده از netstat میتوانید از دستورات زیر استفاده کنید:
netstat -tulpn
دستور با تمام اتصالات را با جزئیات نمایش میدهد. با استفاده از آپشنهایی که این دستور دارد میتوانید خروجی مورد نظر خود را مشاهده کنید:
- a (all)- نمایش تمام اتصالات فعال حتی اتصالات در حال شنود (LISTEN)
- t (TCP)- نمایش اطلاعات مربوط به پروتکل TCP
- u (UPD)- نمایش اطلاعات مربوط به پروتکل UDP
- l (LISTENING)- نمایش پورتهای در حال شنود (LISTEN)
- p (program)- نمایش برنامهها و PID مربوط به هر اتصال
- n (numeric)- نمایش اطلاعات به صورت عددی برای آدرسها و پورتها
- r (route)- نمایش جدول مسیریابی
با استفاده از دستور زیر میتوانید پورتهایی که در حال گوش دادن هستند را مشاهده کنید:
netstat -tulpn | grep LISTEN
نمایش اطلاعات یک پورت خاص:
netstat -tulpn | grep :
<port_number> باید با شماره پورت مورد نظر جایگزین شود.
نمایش اطلاعات مربوط به یک پورت خاص:
netstat -an | grep :
<port_number> باید با شماره پورت مورد نظر جایگزین شود.
نمایش اطلاعات پورت، با استفاده از سرویس در حال استفاده از آن:
netstat -tulpn | grep
به جای <program_name> باید نام برنامهای که از پورت مورد نظر استفاده میکند را بنویسید.
نمایش اطلاعات یک پروتکل در حال گوش دادن:
Netstat -tulpn | grep LISTEN | grep
<protocol> باید با udp یا tcp جایگزین شود.
با استفاده از grep میتوانید اطلاعاتی که میخواهید در نتایج جستجو به شما نمایش داده شود را فیلتر کنید.
دستورات بالا همه پروسهها، پورتها و اتصالات باز در سیستم را به شما نمایش میدهد، که با استفاده از آنها میتوانید وضعیت پورتهای باز در لینوکس را بررسی کنید.
به عنوان مثال، دستور زیر به شما نشان میدهد که پورت 443 که پورت پیشفرض https است، باز است یا نه.
netstat -tulpn | grep LISTEN | grep :80
مشاهده پورتهای باز در لینوکس با دستور ss
دستور ss ابزاری در لینوکس است که با استفاده از آن میتوان اطلاعات مربوط به اتصالات شبکه، پورتها و سوکتها را مشاهده کرد. دستور ss با استفاده از پارامترهای مختلفی که دارد، میتواند پورتهای باز در لینوکس را به شما نمایش دهد. در زیر توضیحات کامل برای مشاهده پورتهای باز در لینوکس با دستور ss آورده شده است.
ss [options][ FILTER ]
پارامترهای مهم در دستور ss:
- a (all)- نمایش تمام اتصالات فعال حتی اتصالاتی که در حال شنود (LISTEN) نیستند
- t (TCP)- نمایش اطلاعات مربوط به اتصالات TCP
- u (UPD)- نمایش اطلاعات مربوط به اتصالات UDP
- l (LISTENING)- نمایش پورتهای در حال شنود (LISTEN)
- n (numeric)- نمایش آدرسها و پورتها به صورت عددی
فیلترها در دستور ss :
- sport = PORTفیلتر بر اساس پورت مبدا
- dport = PORT فیلتر بر اساس پورت مقصد
- stat = STATE فیلتر بر اساس وضعیت اتصال (مثل ESTAB برای اتصالات برقرار)
- src = ADDRESS فیلتر بر اساس آدرس مبدا
- dst = ADDRESS فیلتر بر اساس آدرس مقصد
دستور زیر همه اتصالات TCP در حال گوش دادن را نشان میدهد.
ss -t -l
نمایش همه اتصالات UDP :
ss -u –a
نمایش اتصالات TCP با وضعیت ESTABLISHED :
ss -t state established
نمایش اتصالات TCP بر اساس شماره پورت مبدا :
ss -t sport = :80
در دستور بالا شماره پورت را 80 در نظر گرفته ایم.
نمایش اطلاعات پورت در حال شنود :
ss -t -l -p -n | grep :22
در دستور بالا شماره پورت، 22 در نظر گرفته شده.
مشاهده پورتهای باز در لینوکس با استفاده از دستور nmap
nmap یک ابزار محبوب و قدرتمند در لینوکس است که از آن برای اسکن شبکهها، تست نفوذ و بررسیهای امنیتی و تشخیص سرویسهای در حال اجرا روی سرورهاست. از nmap میتوانید برای مشاهده پورتهای باز در لینوکس استفاده کنید. در صورت نبودن nmap در سیستم، ابتدا آن را نصب کنید و پس از آن میتوانید با استفاده از دستورات زیر پورتهای باز در لینوکس را مشاهده کنید.
اسکن تمام پورتهای باز TCP:
sudo nmap -sT -p- localhost
دستور بالا تمام پورتهای TCP که در لوکال هاست باز است را اسکن میکند. گزینه sT- باعث میشود تا nmap یک اتصال TCP برقرار میکند و سپس به صورت فعال به سرور متصل میشود تا اطلاعاتی را در مورد پورتها و سرویسهایی که بر روی آنها اجرا میشوند، دریافت کند. گزینه -p- تمام پورتها (از 1 تا 65535) را اسکن میکند.
اسکن تمام پورتهای باز UDP:
sudo nmap -sU -p- localhost
nmap با استفاده از گزینه -sU یک اتصال UDP ایجاد میکند و به سرور متصل میشود و تمام پورتهای UDP که در لوکال هاست باز هستند را اسکن میکند.
با استفاده از دستور زیر میتوانید پورتهای باز هر دو پروتکل را مشاهده کنید:
sudo nmap -n -PN -sT -sU -p- localhost
گزینه n- باعث میشود که nmap برای نمایش نامها و دامنهها از انتقال داده به سرور DNS خودداری کند. PN- باعث میشود که nmap از ارسال پینگ خودداری کند.
نمایش پورتهای باز در لینوکس با دستور netcat
netcat یا nc یک ابزار شبکه تحت خط فرمان است که از پروتکلهای TCP و UDP برای برقراری ارتباط و ارسال و دریافت دادهها استفاده میکند. به دلیل سادگی و چند منظوره بودن netcat، یک ابزار محبوب در حوزه شبکه و امنیت است. از دستورات netcat میتوان به سادگی برای انتقال دادهها، اسکن پورتها، برقراری اتصالات شبکه و انجام وظایف دیگر استفاده کرد. برای مشاهده پورتهای باز در لینوکس میتوان از netcat، با اسکن کردن پورتهای TCP و UDP، استفاده کرد.
اسکن پورتهای TCP با دستور nc:
nc -z -v [IP_address or domain_name][port_number]
پارامتر -z فقط پورتهای باز را بدون ارسال هیچ گونه دادهای اسکن میکند و پارامتر -v اطلاعات و جزئیات بیشتری از فرآیند را نمایش میدهد.
به عنوان مثال با اجرای دستور زیر یک اتصال TCP به پورت 80 برقرار میشود.
nc -z -v localhost 80
در مثال بالا، اگر پورت 80 باز باشد، پیامConnection to localhost port 80 [tcp/http] succeeded! به شما نمایش داده میشود. در غیر این صورت، پیام nc: connect to localhost port 80 (tcp) failed: Connection refused یا مشابه به آن نمایش داده خواهد شد.
برای اسکن کردن تمام پورتها یا بازه خاصی از پورتهای باز میتوانید از دستورات زیر استفاده کنید.
nc -z -v localhost 1-65535
دستور بالا، تمام پورتهای باز در شبکه را اسکن میکند. اما اگر بازه خاصی از پورتها را در نظر دارید میتوانید از دستور بالا به صورت زیر استفاده کنید.
nc -z -v localhost 20-80
با اجرای این دستور یک اتصال به تمام پورتهای موجود در بازه 20 تا 80 برقرار میشود. اگر اتصال موفقیتآمیز باشد، پیام موفقیتآمیز بودن اتصال مانند Connection to localhost port 22 [tcp/ssh] succeeded نمایش داده خواهد شد. اما اگر پورت بسته باشد پیامی مشابه nc: connect to localhost port 22 (tcp) failed: Connection refused نمایش داده خواهد شد.
اگر میخواهید فقط پورتهای باز موجود در یک بازه خاص از پورتها را نمایش دهید میتوانید دستور قبل را با استفاده از grep فیلتر کنید تا خروجی دستور فقط پورتهای باز را به شما نشان دهد.
nc -z -v localhost 20-80 2>&1 | grep succeeded
بخش grep succeeded از دستور بالا، باعث میشود که فقط خطوطی که شامل کلمه succeeded هستند را انتخاب و نمایش دهد.
عبارت 2>&1 در دستور بالا به شما کمک میکند تا خروجی خطای استاندارد (standard error) را به خروجی استاندارد (standard output) متصل کنید؛ زیرا grep فقط بر روی خروجی استاندارد عمل میکند.
اسکن پورتهای UDP با دستور nc:
nc -z -v -u [IP_address or domain_name][port_number]
از پارامتر -u برای برقراری ارتباطات با استفاده از پروتکل UDP استفاده میشود.
nc -z -v -u localhost 53
در مثال بالا، یک اتصال UDP، بدون ارسال داده، به پورت 53 برقرار میشود؛ اگر پورت باز باشد، پیغام Connection to localhost port 53 [udp/domain] succeeded به شما نمایش داده میشود. در غیر این صورت، هیچ پیغامی نمایش داده نخواهد شد.
برای دریافت جزئیات و توضیحات بیشتر در مورد netcat میتوانید از دستور man nc استفاده کنید تا به صفحه راهنمای دستور nc دسترسی پیدا کنید.
مشاهده پورتهای باز در لینوکس با دستور lsof
دستور lsof (list open files) یک ابزار قدرتمند در لینوکس است که امکان نمایش و مشاهده اطلاعات مربوط به فایلهای باز، فرآیندهای در حال اجرا و ارتباطات شبکه را برای کاربران فراهم میکند. با استفاده از این دستور میتوانید اطلاعات کاملی از فرآیندها، فایلها، سوکتها و سایر منابع سیستم در لینوکس، به دست آورید.
دستور lsof معمولا با استفاده از پارامترهای مختلف برای نمایش اطلاعات خاصی، اجرا میشود که این پارامترها میتوانند نوع فایلها، پورتها، PIDها و موارد دیگر را نمایش میدهند. به طور کلی، این دستور معمولا برای دیباگ کردن و بررسی فعالیتهای سیستم کاربرد دارد.
با استفاده از دستور lsof میتوان پورتهای باز و فرآیندهایی که از آن پورتها استفاده میکنند را مشاهده کرد. برای مشاهده تمام پورتهای باز میتوانید دستور زیر را اجرا کنید.
sudo lsof -i -P -n | grep LISTEN
پارامتر i- اطلاعات مربوط به شبکه را نشان میدهد. از پارامتر P- برای استفاده از پورتهای عددی به جای نام پورتها استفاده میشود و پارامتر n- باعث میشود که به جای نام هاست، آدرس IP نمایش داده شود. بخش grep LISTEN در دستور بالا، خروجی را فیلتر کرده و فقط پورتهایی که در حال گوش کردن (LISTEN) هستند را نمایش میدهد.
مشاهده پورتهای خاص با دستور lsof:
برای مشاهده اطلاعات مربوط به یک پورت خاص، کافیست شماره پورت مورد نظر خود را در دستور اضافه کنید. به عنوان مثال، برای مشاهده اطلاعات مربوط به پورت 80 باید دستور زیر را اجرا کرد:
sudo lsof -i :80
با اجرای دستور lsof یک خروجی به صورت زیر نمایش داده خواهد شد:
در تصویری که به عنوان خروجی به شما نمایش داده میشود، هر سطر نمایانگر یک پورت باز، و هر ستون نشان دهنده اطلاعات مربوط به آن پورت است که این اطلاعات عبارتند از:
- COMMANDنام فرآیندی که از پورت استفاده میکند
- PIDشناسه مربوط به فرآیند
- USERنام کاربری که این فرآیند را اجرا کرده
- FDشماره توصیف کننده فایل (File Descriptor) مربوط به اتصال
- TYPEنوع اتصال (IPv4 یا IPv6)
- DEVICEنام دستگاه مربوط به اتصال
- SIZE/OFFاندازه یا offset فایل مربوط به اتصال
- NODEشماره نود (node) مربوط به اتصال
- NAMEنام یا آدرس پورت
این خروجی به شما کمک میکند تا به طور واضحتر و سازمان یافتهتر اطلاعات را مشاهده کنید.
بدون دیدگاه