使用netstat檢視你的Linux伺服器網路連線

大雄45發表於2022-05-01
導讀 Netstat 和類似的一些網路監測工具被歸入 net-tools 軟體包 裡,用來顯示關於活動連線的資訊。因為執行在開放的埠的服務往往容易被利用,定期進行網路監測能夠幫助你及早探測到可疑的活動。

使用netstat檢視你的Linux伺服器網路連線使用netstat檢視你的Linux伺服器網路連線
在 之前的文章中,我分享了一些管理你的個人   伺服器的首要步驟。我簡要的提到了監測網路連線的監聽埠,我想透過 Linux 系統的 netstat  來擴充套件開講講。

服務監測和埠掃描是標準的行業慣例。有很好的軟體,如 Prometheus 協助這個過程自動化,SELinux 協助上下文和保護系統訪問許可權。然而,我相信瞭解你的伺服器是如何連線到其他網路和裝置的,是建立正常伺服器基準的關鍵,能夠幫助你識別有可能表明錯誤和入侵等異常情況。作為一個初學者,我已經掌握了 netstat  為我的伺服器提供了監測和網路故障排除的重要觀察手段。

Netstat 和類似的一些網路監測工具被歸入 net-tools 軟體包 裡,用來顯示關於活動連線的資訊。因為執行在開放的埠的服務往往容易被利用,定期進行網路監測能夠幫助你及早探測到可疑的活動。

安裝 netstat

netstat 經常預裝在 Linux 發行版上。如果 netstat 沒有在你的伺服器上安裝,用你的包管理器安裝它。下面是在基於 Debian 的系統上:

$ sudo apt-get install net-tools

在基於 Fedora 的系統上:

$ dnf install net-tools
使用 netstat

就其本身而言,netstat 命令顯示了全部建立成功的連線。你可以使用 netstat 的引數指定進一步預期的輸出。舉個例子,要顯示所有監聽和非監聽的連線,使用 --all(-a 為簡寫)的引數。這將返回許多結果,所以在例子中我用管道符輸出給 head 命令來顯示輸出的前 15 行:

    $ netstat --all | head -n 15
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 *:27036                 *:*                     LISTEN      
    tcp        0      0 localhost:27060         *:*                     LISTEN      
    tcp        0      0 *:16001                 *:*                     LISTEN      
    tcp        0      0 localhost:6463          *:*                     LISTEN      
    tcp        0      0 *:ssh                   *:*                     LISTEN      
    tcp        0      0 localhost:57343         *:*                     LISTEN      
    tcp        0      0 *:ipp                   *:*                     LISTEN      
    tcp        0      0 *:4713                  *:*                     LISTEN      
    tcp        0      0 10.0.1.222:48388        syd15s17-in-f5.1e:https ESTABLISHED
    tcp        0      0 10.0.1.222:48194        ec2-35-86-38-2.us:https ESTABLISHED
    tcp        0      0 10.0.1.222:56075        103-10-125-164.va:27024 ESTABLISHED
    tcp        0      0 10.0.1.222:46680        syd15s20-in-f10.1:https ESTABLISHED
    tcp        0      0 10.0.1.222:52730        syd09s23-in-f3.1e:https ESTABLISHED

要只顯示 TCP 埠,使用 --all 和 --tcp 引數,或者簡寫成 -at :

    $ netstat -at | head -n 5
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address   Foreign Address  State      
    tcp        0      0 *:27036         *:*              LISTEN      
    tcp        0      0 localhost:27060 *:*              LISTEN      
    tcp        0      0 *:16001         *:*              LISTEN

要只顯示 UDP 埠,使用 --all 和 --udp 引數,或者簡寫成 -au :

    $ netstat -au | head -n 5
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address     Foreign Address    State      
    udp        0      0 *:27036           *:*                                
    udp        0      0 10.0.1.222:44741  224.0.0.56:46164   ESTABLISHED
    udp        0      0 *:bootpc

netstat 命令引數常常是簡單易懂的。舉個例子,要顯示帶有全部程式 ID(PID)和數字地址的監聽 TCP 和 UDP 的埠:

    $ sudo netstat --tcp --udp --listening --programs --numeric
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address      Foreign Addr  State   PID/Program name    
    tcp        0      0 0.0.0.0:111        0.0.0.0:*     LISTEN  1/systemd            
    tcp        0      0 192.168.122.1:53   0.0.0.0:*     LISTEN  2500/dnsmasq        
    tcp        0      0 0.0.0.0:22         0.0.0.0:*     LISTEN  1726/sshd            
    tcp        0      0 127.0.0.1:631      0.0.0.0:*     LISTEN  1721/cupsd          
    tcp        0      0 127.0.0.1:6010     0.0.0.0:*     LISTEN  4023/sshd: tux@  
    tcp6       0      0 :::111             :::*          LISTEN  1/systemd            
    tcp6       0      0 :::22              :::*          LISTEN  1726/sshd            
    tcp6       0      0 ::1:631            :::*          LISTEN  1721/cupsd          
    tcp6       0      0 ::1:6010           :::*          LISTEN  4023/sshd: tux@  
    udp        0      0 0.0.0.0:40514      0.0.0.0:*             1499/avahi-daemon:  
    udp        0      0 192.168.122.1:53   0.0.0.0:*             2500/dnsmasq        
    udp        0      0 0.0.0.0:67         0.0.0.0:*             2500/dnsmasq        
    udp        0      0 0.0.0.0:111        0.0.0.0:*             1/systemd            
    udp        0      0 0.0.0.0:5353       0.0.0.0:*             1499/avahi-daemon:  
    udp6       0      0 :::111             :::*                  1/systemd            
    udp6       0      0 :::44235           :::*                  1499/avahi-daemon:  
    udp6       0      0 :::5353            :::*                  1499/avahi-daemon:

這個常用組合簡寫版本是 -tulpn 。

要顯示一個指定服務的資訊,使用 grep 命令過濾:

    $ sudo netstat -anlp | grep cups
    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1721/cupsd           tcp6       0      0 ::1:631                 :::*                    LISTEN      1721/cupsd
    unix  2      [ ACC ]     STREAM     LISTENING     27251    1/systemd /var/run/cups/cups.sock
    unix  2      [ ]         DGRAM                    59530    1721/cupsd
    unix  3      [ ]         STREAM     CONNECTED     55196    1721/cupsd /var/run/cups/cups.sock

接下來的步驟
一旦你執行了 netstat 命令,你就可以採取措施來保護你的系統,確保只有你主動使用的服務在你的網路上被監聽。

識別通常被利用的埠和服務。一般來說,關閉你實際不使用的埠。
留意不常見的埠號,認識瞭解在你係統上使用的合法埠。
密切注意 SELinux 錯誤。有時你需要做的只是更新上下文,以匹配你對系統做的合法更改,但是要閱讀錯誤警告,以確保 SELinux 提醒你的不是可疑或者惡意的活動。
如果你發現一個埠正在執行一個可疑的服務,或者你只是簡單的想要關閉你不再使用的埠,你可以遵從以下這些步驟,透過防火牆規則手動拒絕埠訪問:

如果你在使用 firewall-cmd ,執行這些命令:

    $ sudo firewall-cmd –remove-port=<port number>/tcp
    $ sudo firewall-cmd –runtime-to-permanent

如果你在使用 UFW,執行以下的命令:

 $ sudo ufw deny

下一步,使用 systemctl 來停止這個服務:

$ systemctl stop
理解 netstat

netstat 是一個快速收集你的伺服器網路連線資訊的有用工具。定期網路監測是瞭解你的系統的重要組成部分,對幫助你保持你的系統安全有著重要意義。將這一步納入你的日常管理中,你可以使用類似 netstat 或者 ss ,以及 Nmap 等開源埠掃描器或者 Wireshark 等嗅探器 ,它們都允許設定 計劃任務。

隨著伺服器儲存了大量的個人資料,確保個人伺服器的安全日益重要。透過了解你的伺服器怎樣連線到網際網路,你可以降低你的機器的風險,同時你仍可以在數字時代大量的連線中獲得益處。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2889757/,如需轉載,請註明出處,否則將追究法律責任。

相關文章