شما برای مطالعه این مقاله فقط 9 دقیقه وقت نیاز دارید

check-open-ports-in-linux
دسته بندی : آموزش لینوکس

نحوه چک کردن پورت های باز در لینوکس با استفاده از ۵ دستور

4/5 - (4 امتیاز)

پورت های باز در لینوکس مسئول برقراری ارتباط بین سیستم های موجود در شبکه هستند و با چک کردن به موقع آنها می توانید از ایجاد شکاف های امنیتی جلوگیری کنید. در واقع، حملاتی مثل بروت فورس از نتایج سهل انگاری هایی مثل پیکربندی نادرست یا قوانین امنیتی ضعیف هستند و این گونه ضعف ها باعث آسیب پذیر شدن پورت های باز می شوند.

بررسی پورت های باز یک اقدام بسیار مهم برای حفظ امنیت سیستم در برابر ترافیک ورودی/خروجی است که دستورات پرکاربردی مثل netstat و ss این کار را برای شما راحت تر می کنند.

پس وقتی نقش پورت های باز در لینوکس انقدر پررنگ است، وقت آن است که 5 دستور مهمی که برای چک کردن پورت های باز بکار می روند را معرفی کنیم:

منظور از پورت باز چیست؟

پورت باز چیست

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

پس وقتی می گوییم یک پورت باز است یا در حال گوش دادن است، به این معنی است که برنامه یا سرویس موردنظر آماده پذیرش ترافیک است.

پورت باز حکم دری را دارد که به روی هر مهمانی باز است و اگر به اندازه کافی محافظت نشده باشد می تواند شرایط را برای خطراتی مثل حمله بروت فورس، شناسایی و جعل اطلاعات کاربری فراهم کند. درست مثل اتفاقی که در سال 2017 افتاد و طی یک اقدام هکری از آسیب‌پذیری سیستم های ویندوز سوءاستفاده شد و باج افزار WannaCry گسترش یافت.

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

چک کردن پورت های باز لینوکس علاوه بر این که از لحاظ امنیتی اهمیت زیادی دارد، یک کاربرد دیگر هم دارد.

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

پس با این اوصاف، یادگیری دستورات مربوط به چک کردن پورت های باز در لینوکس برای شما بسیار مفید خواهد بود.

اما مطمئناً اگر اطلاعات و داده های سرور شما حساس تر از این حرف ها است و دوست ندارید فقط به این کار اکتفا کنید، باید به فکر خرید سرور مجازی لینوکس باشید که ارائه دهنده آن تمام اقدامات امنیتی لازم برای حافظت از سرور شما را انجام می دهند و نگرانی های شما را به حداقل برسانند.

این را هم فراموش نکنید که هیچ موقع قرار نیست امنیت سرور یا سیستم لینوکس شما 100 درصد باشد. تنها کاری که می توانید انجام دهید این است که یک سرور مجازی لینوکس امن تهیه کنید و تمام کارهای لازم برای حفظ و افزایش امنیت سرور خود را انجام دهید.

5 دستور کاربردی برای بررسی پورت های باز لینوکس

دیگر وقت آن است که روش های چک کردن پورت های باز لینوکس را بررسی کنیم:

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

netstat یک ابزار بسیار کاربردی برای نمایش اتصالات شبکه، جدول های مسیریابی و بسیاری از آمارهای مربوط به رابط شبکه است. با این که این دستور بخشی از پکیج net-tools است ولی اگر به طور پیش فرض در سیستم لینوکس شما نصب نشده است می توانید با استفاده از دستور زیر آن را نصب کنید:

apt update -y && apt install net-tools –y

حالا برای مشاهده تمام اتصالات فعال در سیستم لینوکس خود، دستور زیر را اجرا کنید:

sudo netstat -tulpn | grep LISTEN

لیست پورت های باز

خروجی دستور netstat برای هر کدام از اتصالات فعال، اطلاعات زیر نمایش می دهد:

  • پروتکل مورد استفاده توسط هر اتصال (TCP یا UDP)
  • آدرس سیستم محلی + شماره پورت (سوکت)
  • آدرس سیستم خارجی یا ریموت + شماره پورت
  • وضعیت اتصال
  • شماره فرآیند مسئول برقراری اتصال

اگر بخواهیم یک اتصال را بررسی کنیم:

پورت 22

سیستم در حال گوش دادن به پورت 22 است که توسط فرآیند sshd باز شده است. البته ما در دستور بالا از آپشن grep LISTEN هم استفاده کرده ایم تا اتصالات را  فیلتر کنیم و فقط اتصالاتی را نشان دهیم که با پورت های باز سروکار دارند.

مثلا اگر یک پورت خاص را مدنظر دارید و می خواهید بررسی کنید که آن پورت باز است یا نه، می توانید آپشن دیگری هم به دستور بالا اضافه کنید:

netstat -tulpn | grep LISTEN | grep :80

بررسی باز با بسته بودن پورت 80

این دستور به شما نشان می دهد که پورت 80 که پورت پیش فرض HTTP برای هم آدرس های IPv4 باز است یا نه.

در کل، شما با استفاده از آپشن های این دستور می توانید خروجی را به شکل دلخواه خود دربیاورید:

a: اتصالات فعال

t: تمام پورت های TCP

u: تمام پورت های UDP

l: سوکت هایی که در حال گوش دادن به اتصالات هستند.

p: شماره و اسم فرآیند های هر سوکت به آن تعلق دارد.

i: تفکیک

n: نمایش شماره پورت به جای اسم پورت

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

netstat –lt

بررسی پورت های باز با اسم سرویس

  1. چک کردن پورت های باز با دستور ss

این دستور برای ارائه آمار مربوط به سوکت های سیستم لینوکس استفاده می شود. با اینکه اطلاعات این دستور، تقریباً مشابه دستور netstat است و با اجرای آن می توانید پورت های باز سیستم را ببینید. ولی در کل، اطلاعاتی که این دستور ss ارائه می دهد به مراتب دقیق تر و بیشتر است.

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

ss –tulpn

پرینت پورت های باز در لینوکس با دستور ss

همانطورکه می بینید آپشن های این دستور هم مشابه netstat است و اختیار با شماست که این آپشن ها را چگونه با هم ترکیب کنید. اگر می خواهید علاوه بر آپشن هایی که در دستور netstat بررسی کردیم، آپشن های دیگری را یاد بگیرید تا برای چک کردن پورت های باز از آنها هم استفاده کنید. می توانید از دستور زیر استفاده کنید:

ss –help

آپشن های دستور ss

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

ss -tulpn | grep LISTEN | grep :80

بررسی باز یا بسته بودن یک پورت خاص با ss

همانطور که می بینید در خروجی بالا، پورت 80 توسط فرآیند شماره 958 مربوط به وب سرور NGINX استفاده می شود و می توانیم بگوییم که در حال حاضر، پورت 80 سیستم لینوکس باز است.

  1. بررسی پورت های باز با دستور lsof

دستور lsof برای ارائه لیست مربوط به فایل های باز (lsof  مخفف list open files) استفاده می شود ولی طبق شعار معروف لینوکس که می گوید” همه چیز در لینوکس یک فایل است” صد در صد می توان از این دستور برای نمایش پورت های باز هم استفاده کرد.

کلیک کنید  آموزش پیکربندی و نصب phpMyAdmin روی centos 7

این دستور با آپشن i- تمام سوکت های باز اینترنت را درخواست می کند و اگر می خواهید به جای نام سرویس، شماره پورت ها را ببینید باید P- را بهم به دستور اضافه کنید. آپشن n- هم جلوی نگاشت های DNS را می گیرید تا به جای اسم هاست، آدرس های IP را نمایش دهد.

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

lsof -i –P

پورت های باز در لینوکس با دستور lsof

همانطور که می بینید اطلاعات مربط به پورت های باز به صورت زیر تقسیم بندی شده اند:

COMMAND -> نام دستور

PID -> شناسه فرآیند

UID -> شناسه کاربر

FD -> شماره توصیفگر فایل

TYPE -> نوع توصیفگر فایل

DEVICE -> شماره دستگاه

SIZE/OFF -> ابعاد فایل یا همان آفست

NODE -> شرحی از فایل محلی که می تواند TCP یا UDP باشد.

NAME -> آدرس نقطه اتصال یا همان سوکت که فایل در آن قرار داد. ( آدرس پورت بعدر از : آخر قرار می گیرد)

برای اعمال فیلتر های مربوط به وضعیت و شماره پورت، باید دستور lsof را به صورت زیر اجرا کنید:

lsof -i -P -n | grep LISTEN | grep :22

بررسی باز یا بسته بودن پورت 80 با دستور lsof

با بررسی خروجی بالا متوجه می شویم که کاربر روت با فرآیند شماره 1027 در حال استفاده از پورت 22 است. در کل، این پورت برای همه آدرس های IPv4 و IPv6 باز است و وضعیت (LISTEN) هم نشان می دهد که پورت در حال گوش دادن به اتصالات ورودی است.

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

با این که 3 دستور بالا، پرکاربردترین دستورات برای چک کردن پورت های باز در لینوکس هستند ولی از دستور nmap هم می توان برای کاوش در شبکه و شناسایی پورت های باز استفاده کرد. البته، آپشن ها و فرمت این دستور کمی متفاوت است.

اول از همه، اگر این ابزار به طور پیش فرض در سیستم شما نصب نشده است می توانید با استفاده از دستور زیر آن را نصب کنید:

apt install nmap -y

برای دسترسی به لیست پورت های TCP باز می توانید از دستور زیر استفاده کنید:

sudo nmap -sT -p- localhost

در این دستور از دو آپشن استفاده شده است:

  • -St برای اسکن پورت های TCP
  • -p- اسکن همه پورت ها که تقریباً 65535 پورت داریم و اگر از این آپشن استفاده نکنید، ابزار nmap به طور پیش فرض فقط 1000 پورت را اسکن خواهد کرد.

اگر می خواهید پورت های باز UDP را ببینید، باید به جای sT از sU استفاده کنید یا اگر هر پورت های باز هر دوی این پروتکل ها را می خواهید باید هر دو آپشن را در دستور قرار دهید:

sudo nmap -n -PN -sT -sU -p- localhost

یا

sudo nmap -n -PN -sTU -p- localhost

پورت های باز udp و tcp

با استفاده از دستور زیر می توانید ببینید که آیا پورت 22 مربوط به سیستم با آدرس آس پی 159.89.176.25 باز است یا نه.

nmap -p 22 159.89.176.25

بررسی باز بودن پورت با nmap

که خروجی آن شامل اطلاعات زیر است:

زمان شروع اسکن: 2022-06-30 16:58

آدرس IP سیستم ریموت: 159.89.176.25

وضعیت پورت: open

سرویسی که از پورت 22 استفاده می کند: ssh

وضعیت هاست: UP یا در حال اجرا

  1. چک کردن پورت های باز لینوکس با دستور netcat

و اما netcat یا nc، آخرین دستوری است که برای چک کردن پورت های باز لینوکس بررسی می کنیم. این ابزار برای خواندن/نوشتن داده ها از/در بسیاری از اتصالات شبکه استفاده می شود که البته از آن می توان برای نمایش لیست پورت های باز استفاده کرد.

برای اسکن تمام پورت های باز (65535-1) با دستور netcat می توانید از دستور زیر استفاده کنید:

nc -z -v localhost 1-65535 

z: اسکن تمام پورت های باز

v: اجرا در حالت verbose برای نمایش جزئیات بیشتر

اگر بازه خاصی را در نظر دارید می توانید بخش آخر آن را به دلخواه تغییر  دهید. مثلا 1000-1

لیست پورت های باز در لینوکس با netcat

در صورتی که پورت خاصی را در نظر دارید و می خواهید ببینید که باز است یا نه، دستور زیر را اجرا کنید:

nc –z -v 10.0.2.4 1234

اگر میخواهید پورت های بازی که اتصالات مربوط به آن با پیام موفقیت آمیز succeeded همراه بوده اند را فیلتر کنید، آپشن grep را به دستور netcat اضافه کنید:

nc -z -v 127.0.0.1 20-80 | grep succeeded

لیست اتصالات موفق پورت های باز

در آخر اینکه اگر تمایل دارید موقع اسکن پورت های باز، پروتکل UDP را هم لحاظ کنید، آپشن –u را به دستور netcat اضافه کنید:

nc -z -v -u localhost 0-65535 2>&1 | grep succeeded

اکنون که با تمام دستورات پررکاربرد برای بررسی پورت های باز در لینوکس آشنا شدید، جا دارد به این نکته اشاره کنیم که باز بودن یک پورت به معنی این نیست که هر کسی می تواند به آن دسترسی داشته باشد.

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

کلام آخر

پیدا کردن پورت های باز یکی از مهم ترین وظایف یک ادمین سیستم لینوکس است و از لحاظ امنیتی نقش بسیار مهمی دارد. 5 دستوری که در این مقاله بررسی کردیم، به خوبی از عهده شناسایی پورت های باز برمی آیند و از هر کدام که خواستید می توانید استفاده کنید. مهم این است که با شناسایی درست و به موقع، پورت های باز بدون استفاده را ببندید و با قوانین فایروال درست، امنیت پورت های باز را مطابق با نیاز خود پیکربندی کنید.

از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.

سوالات متداول:

دستورات netstat، ss، isof پر کاربردترین دستورات چک کردن پورت های باز هستند اما از دستورات nmap و netcat هم می توان برای این کار استفاده کرد.

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

1 مرداد 1402
حسین خرازی

عالی بود و خدا قوت

    1 مرداد 1402
    زهرا پیرجانی

    ممنون بابت حسن توجهتون 🙏

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید