[Linux] Hướng dẫn sử dụng chương trình lệnh SS trên Linux – Socket Statistic

Chương trình lệnh ss (socket statistic) trên Linux có khả năng cung cấp thông tin về network/socket kết nối hay hơn và nhanh hơn nhiều so với công cụ truyền thống ‘netstat‘. Lệnh ss cũng dần được thay thế công cụ ‘netstat‘ trên 1 số hệ thống OS mới. Lý do ví sao ‘ss‘ nhanh hơn ‘netstat‘ là do ‘netstat‘ phải đọc thông tin files trong thư mục /proc để thu thập dữ liệu hiển thị, cách tiếp cận này sẽ khó khăn nếu hệ thống có quá nhiều kết nối tới. Còn chương trình lệnh ss thì sẽ lấy dữ liệu trực tiếp từ kernel space nên nhanh hơn rất nhiều.

Vậy trong bài viết này, chúng ta cùng xem khả năng kiểm tra các kết nối network và thống kê socket bằng lệnh SS trên Linux nhé.

Cú pháp lệnh lệnh ss

# ss [ OPTIONS ]

hoặc

# ss [ OPTIONS ] [ FILTER ]

1. Liệt kê toàn bộ các kết nối

# ss | less
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
ESTAB 0 0 125.212.220.11:http 118.68.8.165:56212 
ESTAB 0 0 125.212.220.55:http 113.174.174.246:58363 
ESTAB 0 0 125.212.220.11:http 66.249.79.86:59041 
ESTAB 0 0 125.212.220.11:http 66.249.71.47:64738 
ESTAB 0 0 125.212.220.55:http 113.174.174.246:58366 
ESTAB 0 128 125.212.220.11:ssh 125.212.220.68:48806 
ESTAB 0 0 125.212.220.11:http 118.68.8.165:56211 
ESTAB 0 0 125.212.220.11:http 115.72.59.242:51140

2. Liệt kê riêng các kết nối TCP/UDP/Unix connection

+ Liệt kê các kết nối TCP.
– Mặc định, nếu chỉ sử dụng option “-t” thì chương trình chỉ report các kết nối đang ở trạng thái “ESTABLISHED” hoặc “CONNECTED“. Nếu sử dụng option “-ta” thì sẽ liệt kê đầy đủ các trạng thái khác liên quan.

# ss -ta
# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
ESTAB 0 0 125.212.220.55:http 153.191.2.145:50919 
CLOSING 1 10387 125.212.220.11:http 192.243.55.134:6052 
ESTAB 0 0 125.212.220.11:ssh 125.212.220.68:48806 
ESTAB 0 0 125.212.220.55:http 153.191.2.145:50921 
ESTAB 0 0 125.212.220.11:http 203.205.62.105:65263 
ESTAB 0 0 125.212.220.11:http 116.100.68.245:45893 
ESTAB 0 0 125.212.220.55:http 42.119.112.100:57318 
ESTAB 0 0 125.212.220.55:http 42.119.112.100:57317 
LAST-ACK 0 554 125.212.220.55:http 92.21.229.62:51798 
FIN-WAIT-1 0 83 ::ffff:125.212.220.11:mysql ::ffff:222.186.130.158:myrtle 
ESTAB 0 0 125.212.220.55:http 66.249.71.107:61719 
ESTAB 0 0 125.212.220.11:http 31.13.102.99:10852 
CLOSING 1 1 ::ffff:125.212.220.61:mysql ::ffff:222.186.130.158:xnds

 
+ Liệt kê các kết nối UDP

# ss -u
# ss -ua
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
UNCONN 0 0 192.168.1.2:48268 *:* 
UNCONN 0 0 192.168.1.2:56575 *:* 
UNCONN 0 0 *:40309 *:* 
UNCONN 0 0 192.168.1.2:56879 *:* 
UNCONN 0 0 *:49014 *:* 
UNCONN 0 0 192.168.1.2:53124 *:* 
UNCONN 0 0 127.0.1.1:domain *:*

 
+ Liệt kê các kết nối Unix socket

# ss -x
u_str ESTAB 0 0 /var/run/dovecot/login/login 43806080 * 0 
u_str ESTAB 0 0 * 43820121 * 0 
u_str ESTAB 0 0 /var/lib/mysql/mysql.sock 43820122 * 0 
u_str ESTAB 0 0 * 43823233 * 0 
u_str ESTAB 0 0 * 43824772 * 0 
u_str ESTAB 0 0 * 43828306 * 0 
u_str ESTAB 0 0 /var/lib/mysql/mysql.sock 43828307 * 0 
u_str ESTAB 0 0 * 43830757 * 0

3. Liệt kê các port network đang được mở

– Các option “-ltn” hoặc “-lun” sẽ giúp liệt kê các port network tcp/udp đang được mở mà không cần phân giải tên port làm gì.
– Còn option “-l” thì sẽ liệt kê toàn bộ các port đang listen.

# ss -ltn
# ss -lun
# ss -l
LISTEN 0 50 :::submission :::* 
LISTEN 0 128 :::memcache :::* 
LISTEN 0 128 *:memcache *:* 
LISTEN 0 128 :::pop3 :::* 
LISTEN 0 128 *:pop3 *:* 
LISTEN 0 128 127.0.0.1:783 *:* 
LISTEN 0 128 :::imap :::* 
LISTEN 0 128 *:imap *:* 
LISTEN 0 45 *:nbx-ser *:* 
LISTEN 0 10 *:webcache *:* 
LISTEN 0 45 *:nbx-dir *:*

4. In thông tin thống kê tổng kết

– Sử dụng option “-s” .

Total: 418 (kernel 689)
TCP: 1882 (estab 68, closed 1747, orphaned 16, synrecv 0, timewait 1747/0), ports 307

Transport Total IP IPv6
* 689 - -
RAW 0 0 0
UDP 11 9 2
TCP 135 118 17
INET 146 127 19
FRAG 0 0 0

5. Liệt kê các kết nối socket IPv4 hoặc IPv6

– Liệt các kết nối socket IPv4 với option ‘-f inet‘ hoặc ‘-4‘.

# ss -tl -f inet
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 127.0.0.1:smux *:*
LISTEN 0 128 *:ssh *:*

– Liệt các kết nối socket IPv6 với option ‘-f inet6‘ hoặc ‘-6‘.

State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 ::1:smtp :::*
LISTEN 0 128 :::ssh :::*

6. Hiển thị thông tin bộ đếm thời gian của kết nối

– Với option ‘-o‘ thì thông tin thời gian tồn tại của từng kết nối sẽ được hiển thị kèm theo.

# ss -tn -o
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
ESTAB 0 0 192.168.1.2:43839 108.160.162.37:80 
ESTAB 0 0 192.168.1.2:36335 204.144.140.26:80 timer:(keepalive,26sec,0)
ESTAB 0 0 192.168.1.2:33141 83.170.73.249:6667 
ESTAB 0 0 192.168.1.2:58857 74.121.141.84:80 timer:(keepalive,23sec,0)
ESTAB 0 0 192.168.1.2:42794 173.194.40.239:80 timer:(keepalive,32sec,0)

7. Hiển thị tên tiến trình và pid

– Để hiển thị thông tin tên tiến trình/pid đang sở hữu sử dụng kết nối tương ứng thì ta thêm option ‘-p‘.

# ss -ltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",2051,12))
LISTEN 0 128 *:90 *:* users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN 0 5 127.0.0.1:6600 *:* users:(("mpd",2392,5))
LISTEN 0 128 127.0.0.1:9000 *:* users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN 0 16 *:2633 *:* users:(("oned",1853,16))
LISTEN 0 50 127.0.0.1:mysql *:* users:(("mysqld",1095,10))
LISTEN 0 5 127.0.1.1:domain *:* users:(("dnsmasq",1347,5))
LISTEN 0 32 *:ftp *:* users:(("vsftpd",1051,3))
LISTEN 0 128 *:ssh *:* users:(("sshd",1015,3))
LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",688,11))
LISTEN 0 128 :::http :::* users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN 0 128 :::ssh :::* users:(("sshd",1015,4))
LISTEN 0 128 ::1:ipp :::* users:(("cupsd",688,10))

8. Lọc các kết nối với trạng thái TCP

Chương trình lệnh ‘ss‘ hỗ trợ tuyệt vời trong khả năng lọc thông số liên quan để hiển thị thông tin bạn mong muốn. ‘ss‘ thực hiện chức năng lọc với cấu trúc lệnh như sau :

# ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

Sau đây sẽ là các ví dụ thể hiện khả năng lọc các kết nối socket dựa trên các trạng thái TCP.

Vd 8.1:
– Hiển thị toàn bộ kết nối TCP IPv4 ở trạng thái ‘established‘.

# ss -t4 state established
Recv-Q Send-Q Local Address:Port Peer Address:Port 
0 0 192.168.1.2:54436 165.193.246.23:https 
0 0 192.168.1.2:43386 173.194.72.125:xmpp-client 
0 0 192.168.1.2:38355 199.59.150.46:https 
0 0 192.168.1.2:56198 108.160.162.37:http

 
– Hiển thị toàn bộ kết nối TCP IPv4 ở trạng thái ‘time-wait‘.

# ss -t4 state time-wait
Recv-Q Send-Q Local Address:Port Peer Address:Port 
0 0 192.168.1.2:42261 199.59.150.39:https 
0 0 127.0.0.1:43541 127.0.0.1:2633

 
– Danh sách trạng thái bạn có thể filter như sau :
+ established
+ syn-sent
+ syn-recv
+ fin-wait-1
+ fin-wait-2
+ time-wait
+ closed
+ close-wait
+ last-ack
+ closing
+ all – tất cả các trạng thái trên
+ connected – các trạng thái ngoại trừ trạng thái ‘listen’ và ‘closed’.
+ synchronized – các trạng thái ngoại trừ trạng thái ‘listen’ và ‘syn-sent’.

9. Lọc các kết nối dựa trên địa chỉ IP và Port

Ngoài khả năng lọc thông tin kết nối dựa trên trạng thái TCP thì ‘ss’ cũng hỗ trợ lọc thông tin dựa trên địa chỉ IP và port của kết nối socket. Sau đây là các ví dụ thể hiện điều đó.

Lưu ý:
– ‘source port‘ : là chỉ thông tin port của hệ thống bạn đang khởi chạy lệnh.
– ‘destination port‘ : là chỉ thông tin port của server remote.
– Thông tin port được bắt đầu bằng dấu ‘:‘.

Vd 9.1 :
– Liệt kê thông tin kết nối socket với source port HTTP hoặc HTTPS.

# ss -nt '( dst :443 or dst :80 )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
ESTAB 0 0 192.168.1.2:58844 199.59.148.82:443 
ESTAB 0 0 192.168.1.2:55320 165.193.246.23:443 
ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80 
ESTAB 0 0 192.168.1.2:54889 192.241.177.148:443 
ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80 
ESTAB 0 0 192.168.1.2:33440 38.127.167.38:443

# ss -nt4 src :443 or src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
ESTAB 0 0 192.168.1.2:80 199.59.148.82:443 
ESTAB 0 0 192.168.1.2:80 165.193.246.23:443 
ESTAB 0 0 192.168.1.2:80 108.160.162.37:80 
ESTAB 0 0 192.168.1.2:80 192.241.177.148:443 
ESTAB 0 0 192.168.1.2:80 173.255.230.5:80 
ESTAB 0 0 192.168.1.2:80 38.127.167.38:443

 
Vd 9.2:
– Lọc theo địa chỉ IP từ remote kết nối tới server.

# ss -nt dst 74.125.236.178

– Lọc IP theo lớp network CIDR cũng ok luôn.

# ss -nt dst 74.125.236.178/16

– Lọc IP kết hợp thông tin port.

# ss -nt dst 74.125.236.178:80


Vd 9.3:
– Bạn có thể sử dụng những biểu thức điều kiện như sau :
+ > hoặc gt : nhiều hơn giá trị so sánh.
+ < hoặc lt : ít hơn giá trị so sánh.
+ <= hoặc le : ít hơn hoặc bằng giá trị so sánh.
+ => hoặc ge : nhiều hơn hoặc bằng giá trị so sánh.
+ == hoặc eq : bằng giá trị so sánh.
+ != hoặc ne : không bằng giá trị so sánh.

– Lọc theo port có giá trị lớn hơn 5000.

# ss -nt src 127.0.0.1 sport gt :5000

– Lọc theo port có giá trị bằng port 25

# sudo ss -ntlp sport eq :smtp

Như vậy là ta đã điểm qua các ví dụ về sử dụng chương trình lệnh ‘ss‘ rồi nhé. Cám ơn các bạn đã đọc bài viết tại Cuongquach.com . Còn rất nhiều lệnh Linux khác đang đợi bạn tìm hiểu đấy.

Previous articleKỹ thuật tấn công DDE mới với file Word qua mặt các phần mềm diệt virus
Next articleHướng dẫn lấy IML Log và AHS Log trên server HP
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !