使用 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
命令,你就可以採取措施來保護你的系統,確保只有你主動使用的服務在你的網路上被監聽。
- 識別通常被利用的埠和服務。一般來說,關閉你實際不使用的埠。
- 留意不常見的埠號,認識了解在你系統上使用的合法埠。
- 密切注意 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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive