Linux中國

使用 netstat 查看你的 Linux 伺服器網路連接

之前的文章中,我分享了一些管理你的個人 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 命令,你就可以採取措施來保護你的系統,確保只有你主動使用的服務在你的網路上被監聽。

  1. 識別通常被利用的埠和服務。一般來說,關閉你實際不使用的埠。
  2. 留意不常見的埠號,認識了解在你系統上使用的合法埠。
  3. 密切注意 SELinux 錯誤。有時你需要做的只是更新上下文,以匹配你對系統做的合法更改,但是要閱讀錯誤警告,以確保 SELinux 提醒你的不是可疑或者惡意的活動。

如果你發現一個埠正在運行一個可疑的服務,或者你只是簡單的想要關閉你不再使用的埠,你可以遵從以下這些步驟,通過防火牆規則手動拒絕埠訪問:

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

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

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

$ sudo ufw deny <port number>

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

$ systemctl stop <service>

理解 netstat

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

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

via: https://opensource.com/article/22/2/linux-network-security-netstat

作者:Sahana Sreeram 選題:lujun9972 譯者:hwlife 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國