مقدمه

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

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

در این راهنما مفهوم "پورت" یا «درگاه» توضیح داده می‌شود و نحوه استفاده از برنامه nmap را برای به دست آوردن اطلاعات در مورد وضعیت پورت‌های یک کامپیوتر در شبکه را بررسی می‌کنیم.

توجه: این آموزش امنیت IPv4 را پوشش می‌دهد. در گنو/لینوکس، امنیت IPv6 به طور جداگانه از IPv4 حفظ می‌شود. به عنوان مثال ، "nmap" آدرس IPv4 را بطور پیش فرض اسکن می‌کند اما می‌تواند در صورت مشخص بودن گزینه مناسب آدرس IPv6 را هم اسکن کند (nmap -6).

اگر سرور برای IPv6 تنظیم شده است، لطفاً به یاد داشته باشید که رابط‌های شبکه IPv4 و IPv6 خود را با ابزارهای مناسب ایمن کنید.

پورت چیست؟

در مدل شبکه OSI لایه های بسیاری وجود دارد. لایه transport(حمل و نقل) لایه‌ای است که در درجه اول مربوط به ارتباط بین سرویس‌ها و برنامه‌های مختلف است.

این لایه، لایه‌ی اصلی است که پورت ها با آن در ارتباط هستند.

اصطلاحات مربوط به پورت‌ها

دانستن برخی از اصطلاحات به درک بهتر پیکربندی پورت‌ها کمک می‌کند. در اینجا با هم چند اصطلاح که به درک بهتر بحثی که در ادامه می آید کمک می‌کند را، مرور می‌کنیم:

  • پورت(Port): یک مکان آدرس‌پذیر در شبکه است، که در داخل سیستم عامل اجرا شده و به تشخیص ترافیک تعیین شده برای برنامه‌ها یا سرویس‌های مختلف کمک می‌کند.

  • سوکت(Socket): یک توصیف‌کننده/اشاره‌گر فایل، که یک آدرس IP و یک شماره port را مشخص می‌کند، به‌علاوه پروتکل transport که برای اداره داده‌ها استفاده خواهد شد.

  • اتصال(Binding): فرایندی که وقتی یک برنامه یا سرویس از یک سوکت شبکه برای دستیابی به داده‌های ورودی و خروجی استفاده می‌کند، انجام می‌گیرد.

  • گوش دادن(Listening): زمانی گفته می‌شود که یک سرویس در حال گوش دادن به یک پورت است كه آن سرویس به یک پورت/پروتكل/آدرس IP، متصل شده باشد و به ترتیب همین ترکیب، در انتظار درخواست‌های مشتریان و سایر سرویس‌گیرندگان سرور، بماند.
    یک سرویس می‌تواند پس از دریافت یک درخواست، در صورت نیاز به پاسخ، با استفاده از همان درگاهی(پورت) که به آن گوش کرده است، با مشتری(client) ارتباط برقرار کرده و پاسخ را ارسال کند. از آنجا که سوکت‌های مورد استفاده با یک آدرس IP خاص با مشتری در ارتباط هستند، این مانع از گوش دادن و پاسخ دادن همزمان به درخواست‌های دیگر سرویس‌گیرنده‌های سرور نمی‌شود.

  • اسکن پورت(Port scanning): اسکن پورت فرآیند تلاش برای اتصال پیاپی به تعدادی پورت است، با هدف دستیابی به اطلاعاتی که در مورد آن پورت‌ها در دسترس است، ازقبیل سرویس‌ها و سیستم عاملی که در پشت آن پورت‌ها وجود دارند.

پورت‌های مشترک

پورت‌ها با مقدار عددی و در بازه‌ای بین 1 تا 65535 مقداردهی می‌شوند.

  • معمولا پورت‌های کوچک‌تر از 1024 با خدماتی مرتبط هستند که سیستم عامل‌های گنو/لینوکس و سایر سیتم‌های بر پایه‌ی یونیکس، آن‌ها را عملکردهای اساسی سیستم می‌دانند، بنابراین معمولا برای دسترسی به آن‌ها باید دسترسی ریشه(root) داشته باشید.

  • پورت‌ها بین 1024 و 49151 پورت‌های "ثبت شده" در نظر گرفته شده‌اند. این بدان معناست که با صدور درخواست به IANA (اداره اعداد اختصاص داده شده به اینترنت) می‌توان برای برخی از خدمات "رزرو" شوند (به معنای بسیار سست کلمه، چرا که عملا بسیاری از سرویس‌ها از این پورت‌ها استفاده می‌کنند و هیچ محدود کننده‌ی رسمی برای استفاده از این پورت‌ها وجود ندارد). این استاندارد به‌طور جدی اعمال نمی‌شود و عملا یک پیشنهاد است، اما می‌تواند سرنخی در مورد خدمات احتمالی در حال اجرا در یک پورت ارایه دهند.

  • پورت‌های بین 49152 و 65535 برای استفاده خصوصی پیشنهاد شده اند.


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

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

20: FTP data
21: FTP control port
22: SSH
23: Telnet <= Insecure, not recommended for most uses
25: SMTP
43: WHOIS protocol
53: DNS services
67: DHCP server port
68: DHCP client port
80: HTTP traffic <= Normal web traffic
110: POP3 mail port
113: Ident authentication services on IRC networks
143: IMAP mail port
161: SNMP
194: IRC
389: LDAP port
443: HTTPS <= Secure web traffic
587: SMTP <= message submission port
631: CUPS printing daemon port
666: DOOM <= This legacy FPS game actually has its own special port

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

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

با استفاده از دستور زیر می‌توانید لیست کوتاهی از برخی درگاه‌های متداول را ببینید:

less /etc/services

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

. . .
tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
. . .

در ادامه، در بخشی که در مورد nmap حرف می‌زنیم، نحوه دریافت لیست کامل‌تری را خواهیم دید.


چگونه پورت‌های باز خود را بررسی کنید

تعدادی ابزار وجود دارد که می‌تواند برای اسکن پورت‌های باز استفاده شود.

یکی از ابزار‌هایی که به صورت پیش فرض در اکثر توزیع های گنو/لینوکس نصب شده است ss است.

با صدور فرمان با پارامترهای زیر می‌توانید به سرعت متوجه شوید که چه سرویس‌هایی را اجرا می کنید:

ss -tln

State     Recv-Q    Send-Q      Local Address:Port       Peer Address:Port
LISTEN    0         511               0.0.0.0:80              0.0.0.0:*
LISTEN    0         1024              0.0.0.0:6801            0.0.0.0:*
LISTEN    0         511                  [::]:80                 [::]:*
LISTEN    0         1024                 [::]:6801               [::]:*

یک ابزار دیگر، netstat است، که با استفاده از پارامترهای زیر میتوانید سرویس‌های در حال اجرا و پورت‌هایشان را ببینید

sudo netstat -plunt

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      785/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      785/sshd 

این درگاه و سوکت گوش دادن همراه با سرویس را نشان می دهد و پروتکل های UDP و TCP را نیز لیست می کند.

نصب Nmap

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

از بین تمام ابزارهای موجود برای این کار، nmap شاید رایج ترین و قدرتمندترین باشد.

شما می‌توانید nmap را بر روی اوبونتو یا دبیان از روی مخازن استاندارد یا با استفاده از snap نصب کنید:

sudo apt update
sudo apt install nmap

or

sudo snap install nmap

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

less /usr/share/nmap/nmap-service

. . .
tcpmux  1/tcp   0.001995        # TCP Port Service Multiplexer [rfc-1078]
tcpmux  1/udp   0.001236        # TCP Port Service Multiplexer
compressnet     2/tcp   0.000013        # Management Utility
compressnet     2/udp   0.001845        # Management Utility
compressnet     3/tcp   0.001242        # Compression Process
compressnet     3/udp   0.001532        # Compression Process
unknown 4/tcp   0.000477
rje     5/udp   0.000593        # Remote Job Entry
unknown 6/tcp   0.000502
echo    7/tcp   0.004855
echo    7/udp   0.024679
echo    7/sctp  0.000000
. . .

علاوه بر داشتن تقریباً ۲۰ هزار خط اطلاعات، این پرونده دارای فیلدهای اضافی مانند ستون سوم نیز هست که از اطلاعات جمع شده از اسکن پورت در اینترنت جع‌اوری شده و در غالب یک فرکانس، باز یا بسته بودن هر پورت را لیست می کند.

نحوه اسکن پورت‌ها با Nmap

Nmap می تواند اطلاعات زیادی درباره سرور را فاش کند. همچنین می تواند مدیران سیستم، در سیستم هدف را به این فکر بیندازد که شخصی به قصد سوء استفاده یا نفوذ در حال تلاش برای ورود به سیستم آن‌هاست. به همین دلیل ، فقط آن را بر روی سرورهایی که خود دارید یا در موقعیت‌هایی که به صاحبان آن اطلاع داده‌اید ، آزمایش کنید.

سازندگان nmap در واقع سرور آزمایشی را در اختیار شما قرار می دهند:

scanme.nmap.org

این مورد و یا VPS شخصی شما اهداف خوبی برای تمرین nmap هستند.

در ادامه تعدادی عملیات متداول را با کمک nmap انجام می‌دهیم. ما همه آنها را با دسترسی روت و دستور sudo اجرا خواهیم کرد تا از بازگشت و نمایش نتایج جزیی مطمین باشیم.
اجرای برخی از دستورات ممکن است مدت زمان طولانی طول بکشد

اسکن سیستم عامل میزبان:

sudo nmap -O remote_host

خروجی: نام سیستم عامل سرور

میتوانید این دستورات را بر روی سرور لوکال خودتان هم تست کنید و فرض کنید میزبان آنلاین است. درصورتیکه پاسخ چیزی شبیه به این بود:

Notes: Host seems down

این پارامترها را اضافه کنید

sudo nmap -PN remote_host

دامنه‌ی آدرس‌های مورد جست و جو را با - یا ‍/ مشخص کنید تا یک بازه میزبان به طور همزمان اسکن شوند:

sudo nmap -PN xxx.xxx.xxx.xxx-yyy

دامنه شبکه را برای خدمات موجود اسکن کنید:

sudo nmap -sP network_address_range

بدون پیش نمایش یک جستجوی DNS معکوس در آدرس IP مشخص شده را اسکن کنید. این کار باید در بیشتر موارد سرعت نمایش نتایج را تسریع کند:

sudo nmap -n remote_host

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

sudo nmap -p port_number remote_host
مثال:
sudo nmap -p 22 xxxx.xxxx.xxxx.xxxx

برای اسکن اتصالات TCP با استفاده از درگاه هدفمند، nmpap می‌تواند یک دستگیره 3 طرفه (توضیح داده شده در زیر) را انجام دهد. آن را مانند این اجرا کنید:

sudo nmap -sT remote_host

برای اسکن اتصالات UDP:

sudo nmap -sU remote_host

اسکن برای هر درگاه باز TCP و UDP:

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

اسکن برای هر درگاه باز TCP:

sudo nmap -n -PN -sT -p- remote_host

اسکن "SYN" از نحوه برقراری اتصال TCP استفاده می کند.

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

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

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

برای انجام اسکن SYN:

sudo nmap -sS remote_host

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

می توانید از پرچم های -sF ، -sX یا -sN استفاده کنید. همه آنها پاسخی را که ما به دنبال آن هستیم ، تولید می کنند:

sudo nmap -PN -p port_number -sN remote_host

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

sudo nmap -PN -p port_number -sV remote_host

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


نتیجه

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

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


منبع و پی‌نوشت

این یادداشت ترجمه‌ای پر ایراد به همراه تغییرات کوچک و اضافات کم، از مقاله زیر بود

How To Use Nmap to Scan for Open Ports on your VPS

من برای پیدا کردن پورت‌های باز و سطح دسترسی کامپیوتر کاری خودم و همچنین برای پیدا کردن پورت‌های باز آی‌اس‌پی از روی اینترنت از دستور زیر استفاده کردم:

sudo nmap -n -PN -sT -p- 5.127.119.132
توضیح
آدرس آی‌پی استفاده شده، پابلیک آدرس من در زمان تست بود.
شاید از نظر امنیت باید گفت خوشبختانه آی‌اس‌پی تمام ۶۵۵۳۵ پورت تست شده را بسته بود، اما در واقع باید بنویسم متاسفانه تمام پورت‌ها بسته بود و عملا امکان دور کاری را از من گرفته و امکان دسترسی به کامپیوتر خودم را از هیچ نقطه‌ی دیگری ندارم.
دسته بندی: سرور برچسب‌ها: port،  nmap،  سرور،  پورت
در صورتیکه بعد از خواندن این یادداشت بخواهید به هر شکلی در تکمیلش مشارکت کنید، مثلا آن را اصلاح کنید یا مطلبی به آن اضافه کنید، منبع این یادداشت روی گیت‌هاب در این آدرس در دسترس است:
https://github.com/kiamazi/kiavash.one/blob/master/content/blog/2020-05-01-how-to-use-nmap-to-scan-for-open-ports.md
میتوانید آن‌را ویرایش کنید. البته باید یادآوری کنم که هر ویرایشی قبل از اتشار نیاز به تایید دارد.


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