Theo dõi kết nối mạng trên Linux dùng lệnh ss Image Theo dõi kết nối mạng trên Linux dùng lệnh ss

Bài viết này sẽ giới thiệu với các bạn về cách theo dõi kết nối mạng dùng lệnh ss của hệ điều hành Linux. Trong bài viết này chúng ta sẽ tìm hiểu cách sử dụng lệnh ss để chúng ta có thể tự học Linux một cách dể dàng hơn.

1. Giới thiệu lệnh ss

Công cụ ss được sử dụng để giúp chúng ta cách hiển thị tất cả các thông tin của socket mạng trong hệ thống Linux. Nó cho phép hiển thị thông tin như netstat và sẽ hiển thị nhiều thông tin trạng thái hơn các công cụ khác. Lệnh ss sẽ lấy thông tin trực tiếp từ kernel.

Lệnh ss cung cấp cho chúng ta các thông tin về:

  • Tất cả các TCP sockets.
  • Tất cả các UDP sockets.
  • Tất cả các kết nối ssh/ftp/http/https.
  • Tất cả các tiến trình được kết nối với máy chủ.
  • Lọc trạng thái như: SYN-RECV, SYN-SENT,TIME-WAIT, địa chỉ port.

2. Sử dụng lệnh ss

👉 Ví dụ 1: Sử dụng lệnh ss không chứa các tùy chọn để liệt kê tất cả các kết nối bất kì ở tất cả các trạng thái.

[root@blogd-net-lab01 ~]# ss
Netid  State   Recv-Q   Send-Q                                                Local Address:Port          Peer Address:Port
u_str  ESTAB   0        0                                            /var/lib/sss/pipes/nss 30476                    * 30474
u_str  ESTAB   0        0                                                                 * 22713                    * 22712
u_str  ESTAB   0        0                                       /run/dbus/system_bus_socket 23436                    * 23435
u_str  ESTAB   0        0                                                                 * 30554                    * 30556
u_str  ESTAB   0        0                                       /run/systemd/journal/stdout 19510                    * 19509
u_str  ESTAB   0        0                                       /run/systemd/journal/stdout 24221                    * 24220
u_str  ESTAB   0        0                                       /run/dbus/system_bus_socket 23869                    * 23868
u_str  ESTAB   0        0                                                                 * 23435                    * 23436
u_str  ESTAB   0        0                                            /var/lib/sss/pipes/nss 25476                    * 25475
...

👉 Ví dụ 2: Chúng ta có thể sử dụng tùy chọn -a kết hợp với lệnh ss để hiển thị danh sách các listen socket và non-listen socket:

[root@blogd-net-lab01 ~]# ss -a
NetidState   Recv-Q  Send-Q                                            Local Address:Port                   Peer Address:Port
nl   UNCONN  0       0                                                          rtnl:1950352230                         *
nl   UNCONN  0       0                                                          rtnl:kernel                             *
nl   UNCONN  0       0                                                          rtnl:NetworkManager/944                 *
nl   UNCONN  0       0                                                          rtnl:NetworkManager/944                 *
nl   UNCONN  0       0                                                          rtnl:1950352230                         *
nl   UNCONN  768     0                                                       tcpdiag:kernel                             *
...

👉 Ví dụ 3: Sử dụng lệnh ss với tùy chọn -l hiển thị các listen socket như sau:

[root@blogd-net-lab01 ~]# ss -l
Netid State   Recv-Q  Send-Q                                            Local Address:Port                 Peer Address:Port
nl    UNCONN  0       0                                                          rtnl:1950352230                       *
nl    UNCONN  0       0                                                          rtnl:kernel                           *
nl    UNCONN  0       0                                                          rtnl:NetworkManager/944               *
nl    UNCONN  0       0                                                          rtnl:NetworkManager/944               *
nl    UNCONN  0       0                                                          rtnl:1950352230                       *
nl    UNCONN  4352    0                                                       tcpdiag:ss/1744                          *
nl    UNCONN  768     0                                                       tcpdiag:kernel                           *
nl    UNCONN  0       0                                                          xfrm:kernel                           *
nl    UNCONN  0       0                                                       selinux:kernel                           *
nl    UNCONN  0       0                                                       selinux:systemd/1685                     *
...

👉 Ví dụ 4: Lệnh ss giúp chúng ta hiển thị tất cả các kết nối bằng giao thức TCP bằng cách sử dụng tùy chọn -t như bên dưới:

[root@blogd-net-lab01 ~]# ss -t
State         Recv-Q          Send-Q                      Local Address:Port                       Peer Address:Port
ESTAB         0               0                           192.168.18.56:ssh                      192.168.18.182:52614

👉 Ví dụ 5: Chúng ta có thể kết hợp tùy chon -l với tùy chọn -t bên trên để hiển thị các listen TCP đang kết nối như sau:

[root@blogd-net-lab01 ~]# ss -lt
State           Recv-Q           Send-Q                      Local Address:Port                     Peer Address:Port
LISTEN          0                128                               0.0.0.0:ssh                           0.0.0.0:*
LISTEN          0                128                                  [::]:ssh                              [::]:*

👉 Ví dụ 6: Lệnh ss giúp chúng ta hiển thị tất cả các kết nối UDP socket bằng cách sử dụng tùy chọn -u và tùy chọn -a như bên dưới:

[root@blogd-net-lab01 ~]# ss -ua
State         Recv-Q         Send-Q                           Local Address:Port                     Peer Address:Port
UNCONN        0              0                         192.168.18.56%ens192:bootpc                        0.0.0.0:*
UNCONN        0              0                                    127.0.0.1:323                           0.0.0.0:*
UNCONN        0              0                                        [::1]:323                              [::]:*

👉 Ví dụ 7: Chúng ta có thể kết hợp tùy chon -l với tùy chọn -u bên trên để hiển thị các listen UDP đang kết nối như sau:

[root@blogd-net-lab01 ~]# ss -lu
State         Recv-Q         Send-Q                           Local Address:Port                     Peer Address:Port
UNCONN        0              0                         192.168.18.56%ens192:bootpc                        0.0.0.0:*
UNCONN        0              0                                    127.0.0.1:323                           0.0.0.0:*
UNCONN        0              0                                        [::1]:323                              [::]:*

👉 Ví dụ 8: Để có thể hiển thị PID (ID của tiến trình) của cac socket đang được kết nối chúng ta sử dụng tùy chọn -p kết hợp với lệnh ss như bên dưới:

[root@blogd-net-lab01 ~]# ss -p
Netid  State   Recv-Q   Send-Q                                                Local Address:Port          Peer Address:Port
u_str  ESTAB   0        0                                                                 * 22713                    * 22712    users:(("dbus-daemon",pid=871,fd=11))
u_str  ESTAB   0        0                                       /run/dbus/system_bus_socket 23436                    * 23435    users:(("dbus-daemon",pid=871,fd=13))
u_str  ESTAB   0        0                                                                 * 30554                    * 30556    users:(("(sd-pam",pid=1689,fd=2),("(sd-pam",pid=1689,fd=1),("systemd",pid=1685,fd=2),("systemd",pid=1685,fd=1))
u_str  ESTAB   0        0                                       /run/systemd/journal/stdout 19510                    * 19509    users:(("systemd-journal",pid=712,fd=16),("systemd",pid=1,fd=41))
u_str  ESTAB   0        0                                       /run/systemd/journal/stdout 24221                    * 24220    users:(("systemd-journal",pid=712,fd=25),("systemd",pid=1,fd=55))
...

👉 Ví dụ 9: Khi chúng ta muốn liệt kê tổng các trạng thái của socket trên máy chủ của chúng ta thì sử dụng lệnh ss với tùy chọn -s như sau:

[root@blogd-net-lab01 ~]# ss -s
Total: 157
TCP:   3 (estab 1, closed 0, orphaned 0, timewait 0)

Transport Total     IP        IPv6
RAW	  1         0         1
UDP	  3         2         1
TCP	  3         2         1
INET	  7         4         3
FRAG	  0         0         0

👉 Ví dụ 10: Để hiển thị các địa chỉ IPV4 của socket đang kết nối chúng ta sử dụng tùy chọn -4 cùng với lệnh ss:

[root@blogd-net-lab01 ~]# ss -4
Netid       State        Recv-Q         Send-Q                  Local Address:Port                   Peer Address:Port
tcp         ESTAB        0              0                       192.168.18.56:ssh                  192.168.18.182:52614

👉 Ví dụ 11: Để hiển thị các địa chỉ IPV6 của socket đang kết nối chúng ta sử dụng tùy chọn -6 cùng với lệnh ss:

[root@blogd-net-lab01 ~]# ss -6
Netid        State         Recv-Q         Send-Q                  Local Address:Port                 Peer Address:Port

👉 Ví dụ 12: Lệnh ss cho phép chúng ta lọc socket port number hoặc address number. Để hiển thị tất cả các kết nối của socket đích hoặc socket nguồn của ssh chúng ta thực thi lệnh sau:

[root@blogd-net-lab01 ~]# ss -at '( dport = :22 or sport = :22 )'
State          Recv-Q          Send-Q                     Local Address:Port                       Peer Address:Port
LISTEN         0               128                              0.0.0.0:ssh                             0.0.0.0:*
ESTAB          0               0                          192.168.18.56:ssh                      192.168.18.182:52614
LISTEN         0               128                                 [::]:ssh                                [::]:*

Hoặc lệnh bên dưới:

[root@blogd-net-lab01 ~]# ss -at '( dport = :ssh or sport = :ssh )'
State          Recv-Q          Send-Q                     Local Address:Port                       Peer Address:Port
LISTEN         0               128                              0.0.0.0:ssh                             0.0.0.0:*
ESTAB          0               0                          192.168.18.56:ssh                      192.168.18.182:52614
LISTEN         0               128                                 [::]:ssh                                [::]:*

3. Lời kết

Qua bài trên, giúp cho chúng ta cách hiển thị tất cả các thông tin của socket mạng của hệ điều hành Linux. Đây là một công cụ cực kỳ hữu ích để chúng ta có thể theo dõi các kết nối và socket. Từ đó giúp chúng ta quản lý máy chủ một cách tốt nhất.