مشاهده پورت‌های باز در لینوکس

زمان مطالعه: 10 دقیقه

در حوزه امنیت شبکه و مدیریت سرورها، شناخت و مشاهده پورت‌های باز در لینوکس امری بسیار حیاتی است. پورت‌ها به عنوان درگاه‌های ارتباطی در شبکه‌های کامپیوتری عمل می‌کنند و وظایف مختلفی را به عهده دارند. برای جلوگیری از دسترسی غیرمجاز به سیستم‌ها و افزایش امنیت شبکه باید از وضعیت پورت‌ها با خبر باشیم.

در این مقاله می‌خواهیم به بررسی متدها و دستورات مختلفی که برای مشاهده پورت‌های باز در لینوکس استفاده می‌شود، بپردازیم.  ابتدا با اصول کلی پورت‌ها در شبکه آشنا می‌شویم و سپس به نحوه استفاده از دستورات اساسی برای مشاهده پورت‌های باز در لینوکس می‌پردازیم. ( خرید هاست لینوکس ایران )

پورتهای اینترنت
پورتهای اینترنت

پورت چیست

در شبکه‌های کامپیوتری، "پورت" به یک شماره منحصر به فرد اشاره دارد که برنامه‌ها یا خدمات مختلف در یک سیستم کامپیوتری، برای برقراری ارتباطات از آن استفاده می‌کنند، یعنی درخواست‌ها و اطلاعات را با گوش دادن به پورت‌ها در شبکه انتقال می‌هند. پورت‌ها یک نقطه ورود یا خروج برای ارتباطات در شبکه‌ها هستند و در انتقال اطلاعات میان دستگاه‌ها نقشی اساسی دارند.

ویژگی‌های کلیدی پورت

شماره‌گذاری:

پورت­‌ها از اعداد صحیح بین 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 است تا بتوانید به اطلاعات پورت­‌ها دسترسی پیدا کنید.

مقالات بیشتر، اطلاعات بیشتر:

2 روش برای باز و بسته کردن پورت در ویندوز

دستور netstat
دستور netstat

مشاهده پورت‌های باز با دستور netstat

مشاهده پورت­‌های باز در لینوکس با دستور 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>
				
			

<port_number> باید با شماره پورت مورد نظر جایگزین شود.

نمایش اطلاعات مربوط به یک پورت خاص:

				
					netstat -an | grep :<port_number>
				
			

<port_number> باید با شماره پورت مورد نظر جایگزین شود.

نمایش اطلاعات پورت، با استفاده از سرویس در حال استفاده از آن:

				
					netstat -tulpn | grep <program_name>
				
			

به جای <program_name> باید نام برنامه‌­ای که از پورت مورد نظر استفاده می‌کند را بنویسید.

نمایش اطلاعات یک پروتکل در حال گوش دادن:

				
					Netstat -tulpn | grep LISTEN | grep <protocol>
				
			

<protocol> باید با udp یا tcp جایگزین شود.

با استفاده از grep می­توانید اطلاعاتی که می­‌خواهید در نتایج جستجو به شما نمایش داده شود را فیلتر کنید.

دستورات بالا همه پروسه­‌ها، پورت­‌ها و اتصالات باز در سیستم را به شما نمایش می­‌دهد، که با استفاده از آن­ها می­‌توانید وضعیت پورت­‌های باز در لینوکس را بررسی کنید.

به عنوان مثال، دستور زیر به شما نشان می­‌دهد که پورت 443 که پورت پیش­‌فرض https است، باز است یا نه.

				
					netstat -tulpn |  grep LISTEN | grep :80
				
			
ss command
ss command

مشاهده پورت‌های باز با دستور ss

مشاهده پورت­‌های باز در لینوکس با دستور 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 command
nmap command

مشاهده پورت‌های باز با دستور nmap

مشاهده پورت‌های باز در لینوکس با استفاده از دستور 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 command
netcat command

مشاهده پورت‌های باز با دستور netcat

نمایش پورت­‌های باز در لینوکس با دستور 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 command
lsof command

مشاهده پورت‌های باز با دستور lsof

مشاهده پورت‌های باز در لینوکس با دستور 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 یک خروجی به صورت زیر نمایش داده خواهد شد:

خروجی دستور lsof
خروجی دستور lsof

خروجی دستور lsof

در تصویری که به عنوان خروجی به شما نمایش داده می‌شود، هر سطر نمایانگر یک پورت باز، و هر ستون نشان دهنده اطلاعات مربوط به آن پورت است که این اطلاعات عبارتند از:

  • COMMANDنام فرآیندی که از پورت استفاده می‌کند
  • PIDشناسه مربوط به فرآیند
  • USERنام کاربری که این فرآیند را اجرا کرده
  • FDشماره توصیف کننده فایل (File Descriptor) مربوط به اتصال
  • TYPEنوع اتصال (IPv4 یا IPv6)
  • DEVICEنام دستگاه مربوط به اتصال
  • SIZE/OFFاندازه یا offset فایل مربوط به اتصال
  • NODEشماره نود (node) مربوط به اتصال
  • NAMEنام یا آدرس پورت

این خروجی به شما کمک می‌کند تا به طور واضح‌تر و سازمان یافته‌تر اطلاعات را مشاهده کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

هاستvpsسرور اختصاصی