فرض کنید که می‌خواهید فهرستی از تمام پورت‌های باز موجود در سرور ابری لینوکس تهیه کنید. چگونه می‌توانید پورت‌های باز موجود در لینوکس را با استفاده از 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

نمایش فهرست برنامه‌ها و پورت‌های آنها که به وسیله IANA به ثبت رسیده‌اند.

نمایش فهرست برنامه‌ها و پورت‌های آنها که به وسیله IANA به ثبت رسیده‌اند.

 

بررسی پورت‌های باز در سیستم‌عامل لینوکس

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

۱) باز کردن برنامه ترمینال لینوکس

۲) استفاده از فرمان ss برای نمایش تمام پورت‌های باز TCP و UDP در لینوکس

۳) گزینه دیگر برای این منظور، استفاده از فرمان netstat برای ایجاد فهرستی از تمام پورت‌ها خواهد بود.

۴) در همین حال و فارغ از فرمان‌های ss و netstat، ممکن کسی بخواهد از فرمان lsof نیز استفاده کند. در این صورت نیز تمام فایل‌ها و پورت‌های باز در سیستم مبتنی بر لینوکس قابل‌مشاهده خواهند بود.

۵) نهایتاً اینکه، استفاده از فرمان nmap نیز گزینه‌ای دیگر برای مشاهده و بررسی پورت‌های TCP و UDP خواهد بود.

حالا تمام این فرمان‌ها و مثال‌های آنها را به صورت جزئی بررسی می‌کنیم.

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

برای این منظور، فرمان netstat زیر را تایپ کنید:

sudo netstat -tulpn | grep LISTEN

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

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

به عنوان مثال، پورت 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

فرمان lsof برای تهیه لیست پورت‌های باز در لینوکس

فرمان lsof برای تهیه لیست پورت‌های باز در لینوکس

که در آن داریم:

-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 و یا مسدود کردن برخی از آنها موردنیاز خواهد بود. پس از خواندن این مطلب آموزشی احتمالاً درک مناسبی از نحوه بررسی پورت‌های باز در لینوکس خواهید داشت.