فرض کنید که میخواهید فهرستی از تمام پورتهای باز موجود در سرور ابری لینوکس تهیه کنید. چگونه میتوانید پورتهای باز موجود در لینوکس را با استفاده از CLI بررسی کنید؟ در ادامه راهکار موجود برای بررسی این پورتها را در سیستم عامل لینوکس بررسی خواهیم کرد.
برای عیبیابی سرور و جلوگیری از مشکلات امنیتی حتماً نیاز به پیدا کردن پورتهای TCP و UDP باز خواهیم داشت. در این مطلب آموزشی، شما با فرامین مختلف موجود در لینوکس برای بررسی پورتها آشنا خواهید شد. در نتیجه، میتوانید امنیت و حفاظت سرور را ارتقا دهید.
پورتهای TCP و UDP
پورتها در واقع، عددی ۱۶ بیتی بین صفر تا ۶۵۵۳۵ هستند. به عنوان مثال، پورت TCP شماره ۲۲ ممکن است به یک سرور OpenSSH مرتبط باشد. بنابراین، پورت شماره ۲۲ راهی برای مشخص کردن فرآیند SSHD خواهد بود.
شماره پورتها
- پورتهای شناختهشده بین ۰ تا ۱۰۲۳ هستند.
- پورتهای ثبتشده آنهایی خواهند بود که عدد بین ۱۰۲۴ تا ۴۹۱۵۱ دارند.
- پورتهای دینامیک و اختصاصی نیز عددی بین ۴۹۱۵۲ تا ۶۵۵۳۵ دارند.
یک پورت ثبتشده پورت شبکهای است که به تأیید نهاد مدیریت شمارههای ثبتشده اینترنتی یا IANA رسیده و در فایل /etc/services ذخیره شده است. برای مشاهده اعداد پورتها و سازماندهی سرویسها میتوانید از فرمان cat یا فرمانهای grep و egrep استفاده کنید:
cat /etc/services grep -w '80/tcp' /etc/services grep -w '443/tcp' /etc/services egrep -w '22/(tcp|udp)' /etc/services
بررسی پورتهای باز در سیستمعامل لینوکس
روند کار برای بررسی و نمایش پورتهای باز در لینوکس به صورت زیر انجام میشود:
۱) باز کردن برنامه ترمینال لینوکس
۲) استفاده از فرمان ss برای نمایش تمام پورتهای باز TCP و UDP در لینوکس
۳) گزینه دیگر برای این منظور، استفاده از فرمان netstat برای ایجاد فهرستی از تمام پورتها خواهد بود.
۴) در همین حال و فارغ از فرمانهای ss و netstat، ممکن کسی بخواهد از فرمان lsof نیز استفاده کند. در این صورت نیز تمام فایلها و پورتهای باز در سیستم مبتنی بر لینوکس قابلمشاهده خواهند بود.
۵) نهایتاً اینکه، استفاده از فرمان nmap نیز گزینهای دیگر برای مشاهده و بررسی پورتهای TCP و UDP خواهد بود.
حالا تمام این فرمانها و مثالهای آنها را به صورت جزئی بررسی میکنیم.
کاربرد فرمان netstat برای ایجاد لیست پورتهای باز
برای این منظور، فرمان netstat زیر را تایپ کنید:
sudo netstat -tulpn | grep LISTEN
به عنوان مثال، پورت TCP شماره 631 توسط فرآیند cupsd باز شده و cupsd تنها در آدرس حلقه برگشتی یا 127.0.0.1 لیست میشود. به همین ترتیب، پورت TCP شماره ۲۲ توس فرآیند sshd باز شده و sshd بر روی تمام آدرسهای IP برای ارتباطهای ssh لیست میشود:
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 0 43385 1821/cupsd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 44064 1823/sshd
که گزینههای موجود در آن عبارتند از:
-t : تمام پورتهای تیسیپی
-u : تمام پورتهای یودیپی
-l : نمایش سوکتهای ثبتکننده سرور
-p : نمایش شناسه و عنوان برنامههای مربوط به هر کدام از سوکتها
-n : عدم بررسی عنوانها
| grep LISTEN : نمایش پورتهای بازی که توس فرمان گرپ فیلتر شدهاند
استفاده از فرمان ss برای فهرستبندی پورتهای باز
فرمان ss برای آمارگیری سوکتها به کار گرفته میشود. نمایش اطلاعات توسط این فرمان مشابه فرمان netstat صورت میگیرد. البته اطلاعات آماری و پورتهای TCP که توسط این فرمان نشان داده میشود، بیشتر از ابزارهای دیگر خواهد بود. برای این منظور، فرمت کار به صورت زیر است:
sudo ss -tulpn
نمونه خروجی:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chromium-browse",pid=12893,fd=419)) udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chromium-browse",pid=12938,fd=395)) udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chrome",pid=10111,fd=178)) udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chrome",pid=10111,fd=139)) udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chrome",pid=10111,fd=48)) udp UNCONN 0 0 224.0.0.251:5353 0.0.0.0:* users:(("chrome",pid=10161,fd=43)) udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* users:(("avahi-daemon",pid=1590,fd=15)) udp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=1566,fd=12)) udp UNCONN 0 0 0.0.0.0:55204 0.0.0.0:* users:(("avahi-daemon",pid=1590,fd=17)) udp UNCONN 0 0 0.0.0.0:49112 0.0.0.0:* users:(("openvpn",pid=18342,fd=8)) udp UNCONN 0 0 10.205.77.1:53 0.0.0.0:* users:(("dnsmasq",pid=2416,fd=8)) udp UNCONN 0 0 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=2081,fd=5)) udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1566,fd=17)) udp UNCONN 0 0 0.0.0.0%lxdbr0:67 0.0.0.0:* users:(("dnsmasq",pid=2416,fd=4)) udp UNCONN 0 0 0.0.0.0%virbr0:67 0.0.0.0:* users:(("dnsmasq",pid=2081,fd=3)) udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=18263,fd=7)) udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=1652,fd=6)) udp UNCONN 0 0 [::]:5353 [::]:* users:(("avahi-daemon",pid=1590,fd=16)) udp UNCONN 0 0 [::]:5355 [::]:* users:(("systemd-resolve",pid=1566,fd=14)) udp UNCONN 0 0 [::]:60302 [::]:* users:(("avahi-daemon",pid=1590,fd=18)) udp UNCONN 0 0 [fd42:400:b94d:ad98::1]:53 [::]:* users:(("dnsmasq",pid=2416,fd=12)) udp UNCONN 0 0 [fe80::e400:44ff:feb7:3233]%lxdbr0:53 [::]:* users:(("dnsmasq",pid=2416,fd=10)) udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=1652,fd=7)) udp UNCONN 0 0 [::]%lxdbr0:547 [::]:* users:(("dnsmasq",pid=2416,fd=6)) tcp LISTEN 0 128 127.0.0.1:53306 0.0.0.0:* users:(("AgentAntidote.b",pid=6206,fd=16),("AgentAntidote",pid=6164,fd=16),("AgentConnectix.",pid=3371,fd=16)) tcp LISTEN 0 5 127.0.0.1:44321 0.0.0.0:* users:(("pmcd",pid=3784,fd=0)) tcp LISTEN 0 5 127.0.0.1:4330 0.0.0.0:* users:(("pmlogger",pid=9725,fd=9)) tcp LISTEN 0 128 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=1566,fd=13)) tcp LISTEN 0 5 10.205.77.1:53 0.0.0.0:* users:(("dnsmasq",pid=2416,fd=9)) tcp LISTEN 0 32 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=2081,fd=6)) tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1566,fd=18)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1823,fd=5)) tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1821,fd=10)) tcp LISTEN 0 5 [::1]:44321 [::]:* users:(("pmcd",pid=3784,fd=3)) tcp LISTEN 0 5 [::1]:4330 [::]:* users:(("pmlogger",pid=9725,fd=10)) tcp LISTEN 0 128 [::]:5355 [::]:* users:(("systemd-resolve",pid=1566,fd=15)) tcp LISTEN 0 5 [fd42:400:b94d:ad98::1]:53 [::]:* users:(("dnsmasq",pid=2416,fd=13)) tcp LISTEN 0 5 [fe80::e400:44ff:feb7:3233]%lxdbr0:53 [::]:* users:(("dnsmasq",pid=2416,fd=11)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1823,fd=7)) tcp LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=1821,fd=9))
لیستگرفتن از پورتها و برنامهها با استفاده از فرمان lsof
در اینجا با استفاده از فرمان lsof پورتهای باز TCP و UDP را بررسی میکنیم:
sudo lsof -i -P -n | grep LISTEN
که در آن داریم:
-i : بررسی پورتهای لیست شده
-P :جلوگیری از تبدیل اعداد پورتها به نام پورتها برای فایلهای شبکه. چنین کاری میتواند به سرعت اجرای فرمان کمک زیادی کند. همچین این گزینه در هنگامی که جستجوی عنوان پورت بهخوبی کار نکند، بسیار مفید خواهد بود.
-n : عدم استفاده از عنوان دیاناس
| grep LISTEN : نمایش پورتهای بازی که توس فرمان گرپ فیلتر شدهاند
فرمان nmap
علاوه بر فرمانهایی که در بالا به آنها اشاره شد، فرمان nmap نیز یک ابزار متنباز برای بررسی وضعیت و امنیت شبکه است. در اینجا از فرمان nmap برای جستجو و تهیه لیست از پورتهای باز در لینوکس استفاده میکنیم:
$ sudo nmap -sT -O localhost $ sudo nmap -sU -O 192.168.2.254 ##[ list open UDP ports ]## $ sudo nmap -sT -O 127.0.0.1 ##[ list open TCP ports ]## $ sudo nmap -sTU -O 192.168.2.24
نمونه خروجی:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-22 23:49 IST Nmap scan report for localhost (127.0.0.1) Host is up (0.00024s latency). Other addresses for localhost (not scanned): ::1 Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 631/tcp open ipp Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6.32 OS details: Linux 2.6.32 Network Distance: 0 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 2.31 seconds
جمعبندی
در مجموع باید گفت که پیدا کردن و بررسی پورتهای باز در لینوکس یکی از اساسیترین وظیفههای مدیریتی و امنیتی در سیستمهای لینوکس است. بر این اساس، بستن تمام پورتهای ناخواسته و تنظیم فایروالهایی مانند UFW یا FirewallD و یا مسدود کردن برخی از آنها موردنیاز خواهد بود. پس از خواندن این مطلب آموزشی احتمالاً درک مناسبی از نحوه بررسی پورتهای باز در لینوکس خواهید داشت.