این که آیا در مورد مشکلات اتصال شبکه عیب یابی کرده اید یا یک firewall را پیکربندی کرده اید ، یکی از اولین مواردی که باید بررسی کنید این است که واقعاً چه پورت هایی روی سیستم شما باز شده است. این مقاله چندین رویکرد را توضیح می دهد تا دریابید که چه پورت هاي باز در سیستم لینوکس شما باز شده است. با ما در شتابان هاست همراه باشيد.
يك listening port ، پورت شبکه ای است که یک برنامه در آن گوش می كند می توانید با پرس و جو کردن پشته شبکه با دستوراتی مانند ss ، netstat یا lsof لیستی از listening ports را روی سیستم خود بدست آورید. هر listening ports با استفاده از firewall می تواند باز یا بسته (فیلتر شده) باشد. به طور کلی ، پورت باز یک پورت شبکه است که بسته های ورودی را از مکان های دور می پذیرد.
به عنوان مثال ، اگر سرور وب را اجرا می کنید که به پورت های ۸۰ و ۴۴۳ گوش می دهد و آن پورت ها در firewall شما باز هستند ، هر کسی (به جز آی پی های مسدود شده) با استفاده از مرورگر خود می تواند به وب سایت هایی که در وب سرور شما هاست هستند دسترسی پیدا کند. در این حالت ، هر دو ۸۰ و ۴۴۳ پورت باز هستند.
پورت باز ممکن است یک خطر امنیتی را ایجاد کنند زیرا هر پورت باز می تواند توسط مهاجمان برای سوء استفاده از آسیب پذیری یا انجام هر نوع حمله دیگر استفاده شود. شما باید پورت های مورد نیاز برای عملکرد برنامه خود را در معرض دید خود قرار داده و همه پورت های دیگر را ببندید.
Nmap ابزاری قدرتمند برای اسکن شبکه است که می تواند هاست های انفرادي و شبکه های بزرگ را اسکن کند. این عمدتا برای ممیزی های امنیتی و آزمایش نفوذ استفاده می شود. در صورت وجود ، اسکن پورت باید nmap اولین ابزار شما باشد. علاوه بر اسکن پورت ، nmap همچنین می تواند آدرس مک ، نوع سیستم عامل ، نسخه های هسته و موارد دیگر را تشخیص دهد.
دستور زیر که از کنسول صادر شده است ، تعیین می کند که کدام port ها به دنبال اتصال TCP از شبکه هستند.
sudo nmap -sT -p- 10.10.8.8
-sT به nmap می گوید که پورت های TCP را اسکن کند و -p- را برای اسکن کردن تمام port های ۶۵۵۳۵ جستجو کند. اگر از -p- استفاده نشود nmap فقط ۱۰۰۰ پورت اسکن می کند.
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 ۲۲/tcp open ssh ۸۰/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
خروجی فوق نشان می دهد که فقط port های ۲۲ ، ۸۰ و ۸۰۶۹ روی سیستم هدف باز شده اند.
برای اسکن کردن port های UDP به جای -sT از -sU استفاده کنید:
sudo nmap -sU -p- 10.10.8.8
Netcat (یا nc) یک ابزار خط فرمان است که می تواند داده ها را از طریق اتصالات شبکه با استفاده از پروتکل های TCP یا UDP بخواند و بنویسد.
با netcat می توانید یک port واحد یا یک port را اسکن کنید.
به عنوان مثال برای اسکن کردن port های TCP باز روی یک دستگاه از راه دور با آدرس IP 10.10.8.8 در دامنه ۲۰-۸۰ از دستور زیر استفاده می کنید:
nc -z -v 10.10.8.8 20-80
گزینه -z به nc می گوید که فقط برای port های باز اسکن شود ، بدون ارسال اطلاعات و ارسال -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 shell ويك شبه دستگاه /dev/tcp/..
يا /dev/udp/..
اجرا كنيد. هنگام اجرای یک دستور روی شبه دستگاه / dev / $ PROTOCOL / $ HOST / $ IP ، Bash یک اتصال TCP یا UDP را در پورت مشخص شده باز می کند.
در صورت بیان..else ، پورت ۴۴۳ در 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
کد بالا چگونه کار می کند؟
هنگام اتصال به پورت با استفاده از دستگاه شبه ، زمان پیش فرض بسیار زیاد است ، بنابراین ما از دستور timeout استفاده می کنیم تا فرمان آزمایش را پس از ۵ ثانیه از بین ببریم. اگر اتصال به پورت ۴۴۳ kernel.org برقرار شده باشد ، دستور آزمون درست خواهد شد.
برای بررسی دامنه از port range استفاده کنید:
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
ما چندین ابزار به شما نشان داده ایم که می توانید از آنها برای اسکن کردن پورت هاي باز استفاده کنید. ما را در شتابان هاست دنبال كنيد.