نحوه اسکن پورت های باز و آسیب پذیری ها با Nmap #
Nmap (Network Mapper) یک ابزار کشف شبکه متنباز است که میزبانها، سرویسها و مشکلات امنیتی بالقوه را شناسایی میکند. این ابزار برای مدیران سیستم و توسعهدهندگان جهت نقشهبرداری از شبکه سرورشان ضروری است. این ابزار به شما امکان میدهد ببینید کدام پورتها باز هستند، چه سرویسهایی در حال اجرا هستند و از چه سیستم عاملی در سیستم هدف استفاده میشود.
در این مقاله، وظایف امنیتی کلیدی با Nmap، از جمله اسکن یک میزبان برای پورتهای باز، شناسایی سرویسهای در حال اجرا روی آن پورتها و تشخیص آسیبپذیریها با استفاده از موتور اسکریپتنویسی Nmap (NSE) را خواهید آموخت. همچنین یاد خواهید گرفت که چگونه خروجی را تفسیر کنید و اقدامات امنیتی اولیه را انجام دهید.
پیش نیازها #
قبل از شروع:
- به عنوان یک کاربر غیر ریشه با امتیازات sudo به یک سرور مبتنی بر لینوکس دسترسی داشته باشید.
نصب Nmap #
- بسته به سیستم عامل خود،
nmapرا نصب کنید.- در سیستمهای مبتنی بر دبیان/اوبونتو:console
$ sudo apt update && sudo apt install -y nmap
- در راکی لینوکس و سایر سیستمهای مبتنی بر RHEL:console
$ sudo dnf install -y nmap
- در سیستمهای مبتنی بر دبیان/اوبونتو:
- پس از نصب، با استفاده از دستور زیر، نصب را تأیید کنید.console
$ nmap --versionشما باید خروجی مشابه زیر را ببینید:
Nmap version 7.94SVN ( https://nmap.org ) Platform: x86_64-pc-linux-gnu Compiled with: liblua-5.4.6 openssl-3.0.13 libssh2-1.11.0 libz-1.3 libpcre2-10.42 libpcap-1.10.4 nmap-libdnet-1.12 ipv6 Compiled without: Available nsock engines: epoll poll select
دستور nmap #
این بخش، سینتکس دستورات nmap و گزینههای آن را توضیح میدهد.
Command Syntax #
nmap [SCAN TYPES...] [OPTIONS] TARGETکجا,
[SCAN TYPES...]: نحوه اسکن Nmap را تعریف میکند. این گروه کنترل میکند که آیا Nmap هدف را برای پورتهای باز بررسی میکند یا خیر و چگونه این کار را انجام میدهد.[OPTIONS]: یک یا چند پرچم و پارامتر اختیاری که رفتار Nmap را تغییر میدهند. آنها دامنه، سرعت و حجم خروجی را کنترل میکنند.TARGET: میزبانها یا شبکههایی که باید اسکن شوند. میتوانید یک IP واحد، یک محدوده IP، یک نام میزبان یا یک زیرشبکه ارائه دهید.
انواع اسکن #
در زیر رایج ترین انواع اسکن آمده است. برخی از آنها نیاز به اجرای Nmap با دسترسی root دارند.
| گزینه | توضیحات |
|---|---|
-sS | اسکن TCP SYN (پیشفرض، ریشه) |
-sT | اسکن اتصال TCP |
-sU | اسکن UDP |
-sn | فقط کشف میزبان (بدون اسکن پورت) |
-sV | تشخیص نسخه های سرویس |
-O | تشخیص سیستم عامل |
-A | اسکن تهاجمی (فعالسازی -sV، -O، -sC) |
گزینه های فرمان #
در زیر برخی از گزینههایی که میتوانید با Nmap استفاده کنید، آورده شده است.
| گزینه | نماد | توضیحات |
|---|---|---|
| Port Specification | -p | مشخص کنید کدام پورتها را اسکن کنید، مانند -p 22,80,443. |
| Fast Scan | -F | به جای ۱۰۰۰ پورت پیشفرض، فقط ۱۰۰ پورت رایج را اسکن میکند. |
| Verbose Output | -v | خروجی دقیقی ارائه میدهد. |
انجام اسکن پورت پایه #
در این بخش، شما یک اسکن Nmap را برای شناسایی تمام پورتهای باز TCP که نقاط ورود بالقوه به سرور هستند، اجرا خواهید کرد. این مقاله از localhost به عنوان هدف استفاده میکند. میتوانید این را با یک آدرس IP یا نام میزبانی که مجوز صریح برای اسکن آن را دارید، جایگزین کنید.
یک اسکن اولیه، ۱۰۰۰ پورت رایج را بررسی میکند. با استفاده از دستور زیر، یک اسکن اولیه انجام دهید.
$ sudo nmap localhostخروجی نمونه:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-10-03 21:49 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE
۲۲/tcp open ssh
۳۰۰۱/tcp open nessus
۵۴۳۲/tcp open postgresql
Nmap done: 1 IP address (1 host up) scanned in 0.07 secondsدرک خروجی:
- نشان داده نشده: ۹۹۷ پورتهای TCP بسته: این پورتها بسته یا فیلتر شدهاند.
- پورت: شماره پورت و پروتکل.
- وضعیت (STATE): مشخص میکند که آیا پورت باز، بسته یا فیلتر شده است.
- سرویس: سرویسی که Nmap شناسایی کرده و روی پورت در حال اجرا است (در صورت شناسایی).
در این مثال، پورتهای باز شامل موارد زیر هستند:
- ۲۲ (SSH)
- ۳۰۰۱ (reported as nessus)
- ۵۴۳۲ (PostgreSQL)
اسکن نسخههای سرویس و سیستم عامل ها #
انمپ همچنین میتواند اطلاعات دقیقی از سرویسها، از جمله شماره نسخهها، را در مورد پورتهای باز فاش کند. این به شناسایی سرویسهای قدیمی یا آسیبپذیر کمک میکند.
از فلگ -sV برای بررسی پورتهای باز برای سرویسهای در حال اجرا استفاده کنید:
$ sudo nmap -sV localhostنمونه خروجی:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-10-03 21:56 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
۲۲/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.13 (Ubuntu Linux; protocol 2.0)
۳۰۰۱/tcp open nessus?
۵۴۳۲/tcp open postgresql PostgreSQL DB 9.6.0 or laterاین اسکن نسخههای خاصی را برای سرویسهای شناساییشده، مانند OpenSSH 9.6p1 و PostgreSQL 9.6.0 یا بالاتر، نشان میدهد. علامت سوال بعد از Nessus نشان میدهد که Nmap مطمئن نیست و شناسایی سرویس ممکن است نیاز به تأیید بیشتر داشته باشد.
اسکن آسیب پذیری ها با استفاده از موتور اسکریپت نویسی Nmap (NSE) #
موتور اسکریپتنویسی Nmap Scripting Engine (NSE) به Nmap اجازه میدهد تا از اسکریپتها برای خودکارسازی وظایف مختلف شبکه، از جمله اسکن آسیبپذیری، استفاده کند. دسته vuln اسکریپتهای آسیبپذیر، سرویسها را برای یافتن آسیبپذیریهای شناخته شده آزمایش میکند. این بخش نصب vsftpd، یک سرور FTP، ایجاد عمدی یک آسیبپذیری و سپس شناسایی و کاهش آن با استفاده از موتور اسکریپتنویسی Nmap را پوشش میدهد.
- vsftpd را نصب کنید.
- در سیستمهای مبتنی بر اوبونتو/دبیان.console
$ sudo apt install -y vsftpd - روی سیستمهای مبتنی بر Rocky Linux/RHEL.console
$ sudo dnf install -y vsftpd
- در سیستمهای مبتنی بر اوبونتو/دبیان.
- فعال کردن ورود ناشناس برای vsftpd برای ایجاد آسیبپذیری.
- فایل پیکربندی vsftpd را ویرایش کنید.console
$ sudo nano /etc/vsftpd.conf - خط
anonymous_enable=NOرا پیدا کنید و مقدار آن را ازNOبهYESتغییر دهید. - فایل را ذخیره کنید و ببندید.
- را ریستارت کنید vsftpd.console
$ sudo systemctl restart vsftpd
حالا که عمداً این مشکل را ایجاد کردهاید، میتوانید از یک اسکریپت خاص
ftp-anonبرای تشخیص آن استفاده کنید. اسکریپت ftp-anon بخشی از NSE است و به طور خودکار بررسی میکند که آیا یک سرور FTP اجازه ورود ناشناس را میدهد یا خیر. - فایل پیکربندی vsftpd را ویرایش کنید.
- با استفاده از
ftp-anonروی پورت۲۱، پورتی که vsftpd از آن استفاده میکند، یک اسکن آسیبپذیری اجرا کنید.console$ sudo nmap -p ۲۱ --script ftp-anon localhost
خروجی:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-08-22 11:04 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE ۲۱/tcp open ftp |_ftp-anon: Anonymous FTP login allowed (FTP code 230) Nmap done: 1 IP address (1 host up) scanned in 0.14 secondsاسکن مشکلی را شناسایی کرد:
Anonymous FTP login allowed (FTP code 230).
خلاصه مراحل #
شما باید در مورد مشکلات شناسایی شده اقدام کنید. در این صورت، باید ورود ناشناس را غیرفعال کنید.
- فایل پیکربندی را ویرایش کنید.console
$ sudo nano /etc/vsftpd.conf - خط
anonymous_enable=YESرا پیدا کنید و مقدار آن را ازYESبهNOتغییر دهید. - فایل را ذخیره کرده و از آن خارج شوید.
- برای اعمال تغییرات، سرویس را مجدداً راهاندازی کنید.console
$ sudo systemctl restart vsftpd - دوباره اسکن Nmap را روی پورت
۲۱اجرا کنید.console$ sudo nmap -p ۲۱ --script ftp-anon localhost
خروجی:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-08-22 11:19 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE ۲۱/tcp open ftp Nmap done: 1 IP address (1 host up) scanned in 2.53 seconds
در نهایت #
این مقاله نحوه استفاده از دستور Nmap برای اسکن پورتهای باز و آسیبپذیریها را توضیح داد. شما یک اسکن Nmap انجام دادید، آسیبپذیریها را شناسایی کردید و آنها را برطرف کردید. برای اطلاعات بیشتر، به مستندات رسمی Nmap مراجعه کنید.