آموزش چک کردن پورت های باز در لینوکس
این مقاله روش های متعددی را برای یافتن پورت هایی که در سیستم لینوکس باز است توضیح می دهد.
پورت باز چیست؟
شما می توانید پورت های سیستم خود را با جستجو از شبکه با دستورات مانند ss
، netstat
یا lsof
پیدا کنید. هر پورت می تواند با استفاده از فایروال باز یا بسته شود (فیلتر شده).
به طور کلی، یک پورت باز ، یک پورت شبکه است که بسته های دریافتی را از مکان های راه دور می پذیرد.
برای مثال، اگر شما یک وب سرور را که در پورت های 80
و 443
است و آن پورت ها در فایروال باز هستند، هرکسی (به جز IPS های مسدود شده) می تواند با استفاده از مرورگر خود به وب سایت های میزبانی شده در وب سرور دسترسی پیدا کند. در این مورد، هر دو 80
و 443
پورت باز هستند.
پورت های باز ممکن است یک خطر امنیتی را ایجاد کنند زیرا هر پورت باز می تواند توسط مهاجمان مورد استفاده قرار گیرد تا از یک آسیب پذیری استفاده کند یا نوع دیگری از حملات را انجام دهد. شما فقط باید پورت های مورد نیاز برای عملکرد برنامه خود را افشا و تمام پورت های دیگر را ببندید.
بررسی پورت های باز با nmap
Nmap یک ابزار قدرتمند اسکن شبکه است که می تواند میزبان و شبکه های بزرگ را اسکن کند. این عمدتا برای ممیزی های امنیتی و آزمایش نفوذ استفاده می شود.
در صورت وجود، nmap
باید اولین ابزار شما در هنگام پورت اسکن باشد. علاوه بر اسکن پورت nmap
همچنین می تواند آدرس مک، نوع سیستم عامل ، نسخه های هسته ای و خیلی موارد را تشخیص دهد.
دستور زیر از کنسول صادر شده تعیین می کند که کدام پورت ها برای اتصال به شبکه از طریق TCP هستند:
sudo nmap -sT -p- 10.10.8.8
-sT
به nmap
می گوید که پورت TCP را اسکن کند و -p-
برای تمام پورت های 65535 اسکن کند. اگر -p-
استفاده نشود nmap
تنها 1000 پورت را اسکن می کند.
خروجی:
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
خروجی بالا نشان می دهد که تنها پورت های 22
، 80
و 8069
در سیستم هدف باز می باشند.
برای اسکن پورت های UDP از -uT
به جای -sT
استفاده میشود:
sudo nmap -uT -p- 10.10.8.8
بررسی پورت های باز با netcat
Netcat (یا nc
) یک ابزار خط فرمانی است که می تواند داده ها را از طریق اتصالات شبکه، با استفاده از پروتکل های TCP یا UDP، خواندن و نوشتن انجام دهد.
با netcat
شما می توانید یک پورت یا دامنه پورت را اسکن کنید.
برای مثال برای اسکن کردن پورت های باز TCP در یک دستگاه از راه دور با آدرس IP 10.10.8.8
در محدوده 20-80
شما می توانید از دستور زیر استفاده کنید:
nc -z -v 10.10.8.8 20-80
گزینه -z
به nc
می گوید فقط برای پورت های باز، بدون ارسال هر گونه داده و -v
برای اطلاعات بیشتر متنی، اسکن می کند.
خروجی چیزی شبیه به این خواهد بود:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
اگر می خواهید فقط خطوط با پورت های باز را روی صفحه نمایش داده شود، می توانید نتایج را با دستور grep فیلتر کنید .
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
برای اسکن برای پورت های UDP گزینه -u
را به دستور nc
:
nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
بررسی پورت های باز با استفاده از Bash Pseudo Device
راه دیگری برای بررسی اینکه آیا یک پورت خاص باز یا بسته است با استفاده از Bash Pseudo Device /dev/tcp/..
یا /dev/udp/..
است.
هنگام اجرای فرمان در pseudo-device /dev/$PROTOCOL/$HOST/$IP
، Bash یک اتصال TCP یا UDP را به میزبان مشخص شده در پورت مشخص شده باز می کند.
عبارت if..else زیر بررسی خواهد کرد که آیا پورت 443
در kernel.org
باز است:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fi
خروجی
Port is open
چگونه کد بالا کار می کند؟
زمان وقفه پیش فرض هنگام اتصال به یک پورت با استفاده از یک pseudo device بزرگ است بنابراین ما از دستور timeout
برای خاتمه دادن دستور test پس از 5 ثانیه استفاده می کنیم. اگر اتصال به پورت 443
kernel.org
برقرار شود، دستور test درست خواهد شد.
شما همچنین می توانید از حلقه برای بررسی دامنه پورت استفاده کنید:
for PORT in { 20 ..80 } ; do timeout 1 bash -c "</dev/tcp/10.10.8.8/ $PORT &>/dev/null" && echo "port $PORT is open" done
خروجی چیزی شبیه به این خواهد بود:
port 22 is open port 80 is open
نتیجه
ما به شما چندین ابزار را پیشنهاد دادیم که می توانید آنها را برای اسکن کردن پورت های باز استفاده کنید. به عنوان مثال، می توانید از ابزار و روش های دیگری برای بررسی پورت های باز استفاده کنید، مثلا می توانید از ماژول socket
Python، curl
، telnet
یا wget
استفاده کنید.
اولین نفری باشید که از آموزشها و تخفیفهای ویژه با خبر میشوید 😉
با عضویت در خبرنامه از 80 درصد تخفیف بهره مند شوید
اولین نفر باشید که نظر ارسال میکنید