Kiểm tra các port được mở trên VPS và các tiến trình đang chạy

ort không phải mang ý nghĩa là một cổng vào ra mà là một số hiệu ID cho một application nào đó, Đơn giản là nếu cùng truy cập vào một server với các ứng dụng khác nhau như Email, File tranfer,… thì tất cả các dữ liệu bạn gửi đều được đóng gói vào packet và chuyển đến cho server, nếu không có các port thì server không thể hiểu các packet đó thuộc ứng dụng nào để có thể xử lý
do đó trong mỗi packet đều phải có cả IP và port tạo thành các socket.

Trong bài viết này, chúng ta sẽ đi tìm các cách khác nhau để tìm ra process/service đang lắng nghe trên một port  trong linux..

I. Sử dụng netstat command

Netstat (Network statistics ) command thường được sử dụng để hiển thị thông tin liên quan tới các kết nối mạng, bảng định tuyến…  Nó có sẵn trên tất cả các hệ thống unix như linux, hay cả như windows. Trong trường hợp bạn không cài đặt nó theo mặc định, bạn có thể cài đặt bằng câu lệnh sau:

$ sudo yum install net-tools	#RHEL/CentOS 
$ sudo apt install net-tools	#Debian/Ubuntu
$ sudo dnf install net-tools	#Fedora 22+

Sau khi cài đặt, bạn có thể sử dụng lệnh này với `Grep command` để tìm ra tiến trình nào đăng lắng nghe ở một port cụ thể trên linux như sau:

$ netstat -ltnp | grep -w 80 
Kết quả:
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3331/nginx: master

Giải thích các tiền tố đi kèm lệnh phía trên:

l

 Chỉ hiện thỉ các socket đang lắng nghe.

t

 Hiển thị các kết nối TCP.

n

 Hiển thị số địa chỉ.

p

 Kích hoạt hiển thị ID tiến trình và tên tiến trình.

grep -w

 Hiển thị khớp chính xác với từ khóa

Sử dụng lệnh hiển thị các port trên VPS đang mở cả udp và tcp:

netstat -tulpn
Kết quả: 
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 127.0.0.1:904 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 127.0.0.1:905 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 4355/openvpn-openss 
tcp 0 0 127.0.0.1:906 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 127.0.0.1:907 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 127.0.0.1:908 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 127.0.0.1:909 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 0.0.0.0:943 0.0.0.0:* LISTEN 4064/python 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3331/nginx: master 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2804/sshd 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3434/master 
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3331/nginx: master 
tcp 0 0 127.0.0.1:8125 0.0.0.0:* LISTEN 4545/netdata 
tcp 0 0 0.0.0.0:19999 0.0.0.0:* LISTEN 4545/netdata 
tcp6 0 0 :::3306 :::* LISTEN 2940/mysqld 
tcp6 0 0 :::22 :::* LISTEN 2804/sshd 
tcp6 0 0 ::1:25 :::* LISTEN 3434/master 
tcp6 0 0 ::1:8125 :::* LISTEN 4545/netdata 
tcp6 0 0 :::19999 :::* LISTEN 4545/netdata 
udp 0 0 127.0.0.1:8125 0.0.0.0:* 4545/netdata 
udp 0 0 0.0.0.0:68 0.0.0.0:* 2749/dhclient 
udp 0 0 0.0.0.0:1194 0.0.0.0:* 4396/openvpn-openss 
udp 0 0 127.0.0.1:323 0.0.0.0:* 1544/chronyd 
udp6 0 0 ::1:8125 :::* 4545/netdata 
udp6 0 0 ::1:323 :::* 1544/chronyd

II. Sử dụng lsof Command

lsof command (LiSt Open Files) được sử dụng để thống kê toàn bộ  các files được mở trong hệ thống linux.  Có thể cài đặt bằng lệnh phía dưới:

$ sudo yum install lsof	        #RHEL/CentOS 
$ sudo apt install lsof		#Debian/Ubuntu
$ sudo dnf install lsof		#Fedora 22+

Để tìm ra  tiến trình / dịch vụ  lắng nghe trên một port cụ thể , sử dụng lệnh sau:

$ lsof -i :80

III. Sử dụng fuser Command

Fuser command hiển thị các PIDS thuộc tiến trình sử dụng tập tin chỉ định hay tập tin hệ thống trong linux.

bạn có thể cài đặt theo lệnh:

$ sudo yum install psmisc	#RHEL/CentOS 
$ sudo apt install psmisc	#Debian/Ubuntu
$ sudo dnf install psmisc	#Fedora 22+

Để tìm tiến trình/dịch vụ  lắng nghe trên port nào đó, sử dụng lệnh sau:

  • Tìm PID sử dụng cổng 80/tcp:
   $ fuser 80/tcp
  • Tìm tên dịch vụ với số PID sử dụng lệnh ps command như sau:
$ ps -p 7823 -o comm=
$ ps -p 7824 -o comm=
$ ps -p 7825 -o comm=
$ ps -p 7826 -o comm=



Kết quả với cả 3 cách trên bạn đều có thể tìm ra tiến trình đang lắng nghe trên một port cụ thể, Như trong cả 3 ví dụ phía trên port đang lắng nghe là `nginx`.
Hi vọng bài viết này sẽ giúp bạn có thêm được hướng xử lý trong các trường hợp cụ thể.

Kiểm tra sơ bộ port đang xử lý những gì.

 

 

Một ví dụ trực quan kiểm tra kết nối giữa VPS của tôi và máy tính.

Trên windown tôi kiểm tra bằng lệnh:

netstat -aon |find /i "listening" |find "port"
Kết quả:
  TCP    192.168.1.8:49486      45.76.102.230:22       ESTABLISHED     8788
  TCP    192.168.1.8:49547      45.76.102.230:22       ESTABLISHED     6464
  TCP    192.168.1.8:56433      45.76.102.230:80       ESTABLISHED     14704

Máy tính của tôi có kết nối tới VPS thông qua 3 tiến trình với lần lượt port 22, 80 .

Kết quả trên VPS:

netstat -ano | grep 113.161.51.105

kết quả:

tcp 0 1096 45.76.102.230:22 113.161.51.105:49486 ESTABLISHED on (0.22/0/0)
tcp 0 1447644 45.76.102.230:80 113.161.51.105:56433 ESTABLISHED on (0.22/0/0)
tcp 0 36 45.76.102.230:22 113.161.51.105:49547 ESTABLISHED on (0.35/0/0)

Hoặc:
lsof -i -P -n | grep 113.161.51.105
nginx      3334      nginx   99u  IPv4 358739      0t0  TCP 45.76.102.230:80->113.161.51.105:56433 (ESTABLISHED)
sshd      12700       root    3u  IPv4  34864      0t0  TCP 45.76.102.230:22->113.161.51.105:49547 (ESTABLISHED)
sshd      24119       root    3u  IPv4 187699      0t0  TCP 45.76.102.230:22->113.161.51.105:49486 (ESTABLISHED)

Như vậy tôi biết được process có PID bằng 3334 đang thiết lập giữ máy cá nhân và VPS thông qua port 80 .

Như ban đầu chúng ta có lệnh: netstat -tulpn để phát hiện các port đang mở trên VPS

Giả sử tôi cần thêm thông tin về port 80, tôi có thể sử dụng các tập lệnh:

#Tìm thêm thông tin về port 80, user, pid, 
netstat -tulpn
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=3334,fd=94),("nginx",pid=3331,fd=94))

#Thông tin về thư mực thực thi process tương ứng với PID.
ls -l /proc/3334/cwd
Hoặc
pwdx 3334

/proc/3334/cwd -> /


#Thông tin về chương trình cha (owner) chạy process có PID tương ứng.
ls -l /proc/3334/exe
lrwxrwxrwx 1 nginx nginx 0 Aug 31 13:37 /proc/3334/exe -> /usr/sbin/nginx
Hoặc
ps aux | grep 3334
nginx 3334 0.0 2.6 590184 50384 ? S 07:21 0:17 nginx: worker process

Ngoài ra bạn có thể sử dụng lệnh:
lsof -p 3334

Liệt kê tất cả các file network đang sử dụng bởi 1 tiến trình:

lsof -i -a -p 3334
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 3334 nginx 94u IPv4 21996 0t0 TCP *:http (LISTEN)
nginx 3334 nginx 95u IPv4 21997 0t0 TCP *:https (LISTEN)
nginx 3334 nginx 99u IPv4 383183 0t0 TCP 45.76.102.230.vultr.com:http->static.vnpt.vn:58591 (ESTABLISHED)
nginx 3334 nginx 100u IPv4 52086 0t0 UDP 45.76.102.230.vultr.com:41220->dns.google:domain 
nginx 3334 nginx 101u IPv4 22742 0t0 UDP 45.76.102.230.vultr.com:33286->dns.google:domain 
nginx 3334 nginx 102u IPv4 23710 0t0 UDP 45.76.102.230.vultr.com:43622->dns.google:domain 
nginx 3334 nginx 103u IPv4 80365 0t0 UDP 45.76.102.230.vultr.com:34841->dns.google:domain 
nginx 3334 nginx 104u IPv4 85133 0t0 UDP 45.76.102.230.vultr.com:48675->dns.google:domain 
nginx 3334 nginx 105u IPv4 51447 0t0 UDP 45.76.102.230.vultr.com:52686->dns.google:domain 
nginx 3334 nginx 106u IPv4 236726 0t0 UDP 45.76.102.230.vultr.com:52882->dns.google:domain 
nginx 3334 nginx 107u IPv4 85186 0t0 UDP 45.76.102.230.vultr.com:41283->dns.google:domain 
nginx 3334 nginx 108u IPv4 247066 0t0 UDP 45.76.102.230.vultr.com:44906->dns.google:domain 
nginx 3334 nginx 110u IPv4 60738 0t0 UDP 45.76.102.230.vultr.com:46542->dns.google:domain 
nginx 3334 nginx 111u IPv4 377114 0t0 UDP 45.76.102.230.vultr.com:52172->dns.google:domain 
nginx 3334 nginx 112u IPv4 383920 0t0 TCP 45.76.102.230.vultr.com:http->static.vnpt.vn:64472 (ESTABLISHED)
nginx 3334 nginx 113u IPv4 104643 0t0 UDP 45.76.102.230.vultr.com:38557->dns.google:domain 
nginx 3334 nginx 114u IPv4 135952 0t0 UDP 45.76.102.230.vultr.com:35862->dns.google:domain 
nginx 3334 nginx 115u IPv4 383921 0t0 TCP 45.76.102.230.vultr.com:http->static.vnpt.vn:64473 (ESTABLISHED)
nginx 3334 nginx 116u IPv4 383922 0t0 TCP 45.76.102.230.vultr.com:https->static.vnpt.vn:64474 (ESTABLISHED)
nginx 3334 nginx 117u IPv4 329802 0t0 UDP 45.76.102.230.vultr.com:33911->dns.google:domain 
nginx 3334 nginx 119u IPv4 382794 0t0 TCP 45.76.102.230.vultr.com:https->dynamic-ip-adsl.viettel.vn:63263 (ESTABLISHED)
nginx 3334 nginx 126u IPv4 382807 0t0 TCP 45.76.102.230.vultr.com:https->dynamic-ip-adsl.viettel.vn:45618 (ESTABLISHED)
nginx 3334 nginx 164u IPv4 383546 0t0 TCP 45.76.102.230.vultr.com:https->static.vnpt.vn:50706 (ESTABLISHED)
nginx 3334 nginx 175u IPv4 383926 0t0 TCP 45.76.102.230.vultr.com:https->static.vnpt.vn:64479 (ESTABLISHED)