使用 netstat 命令来管理各个端口的网络连接

了解 netstat

NETSTAT命令有什么作用?NETSTAT一般用于显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据,一般用于检测本机各端口的网络连接情况。
netstat 是一个快速收集你的服务器网络连接信息的有用工具。定期网络监测是了解你的系统的重要组成部分,对帮助你保持你的系统安全有着重要意义。将这一步纳入你的日常管理中,你可以使用类似 netstat 或者 ss ,以及 Nmap 等开源端口扫描器或者 Wireshark 等嗅探器 ,它们都允许设定 计划任务。

安装 netstat

netstat 经常预装在 Linux 发行版上。如果 netstat 没有在你的服务器上安装,用你的包管理器安装它。下面是在基于centos7系统,安装命令如下:

[root@localhost]# yum install -y net-tools

在基于ubuntu的系统上:

$ sudo apt install net-tools

使用 netstat

就其本身而言,netstat 命令可以显示了全部建立成功的连接。你可以使用 netstat 的参数指定进一步预期的输出。举个例子,要显示所有监听和非监听的连接,使用 --all-a 为简写)的参数。这将返回许多结果,所以在例子中我用管道符输出给 head 命令来显示输出的前 15 行:

[root@localhost ~]# netstat --all | head -n 15
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ftp             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ddi-tcp-1       0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:cddbp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0     68 103.56.17.172:ssh       49.77.196.64:pwgpsi     ESTABLISHED
tcp6       0      0 [::]:ftp                [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN     
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          
Active UNIX domain sockets (servers and established)

若你要只显示 TCP 端口,使用 --all 和 --tcp 参数,或者简写成 -at :

[root@localhost ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ftp             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ddi-tcp-1       0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:cddbp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0     36 103.56.17.172:ssh       49.77.196.64:pwgpsi     ESTABLISHED
tcp6       0      0 [::]:ftp                [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN 

若要只显示 UDP 端口,使用 --all 和 --udp 参数,或者简写成 -au :

[root@localhost ~]# 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 的端口,这个常用组合简写版本是 -tulpn :

[root@localhost ~]# netstat --tcp --udp --listening --programs --numeric
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address    State     PID/Program name    
tcp        0      0 0.0.0.0:80      0.0.0.0:*         LISTEN      1144/nginx: master  
tcp        0      0 0.0.0.0:21      0.0.0.0:*         LISTEN      1068/pure-ftpd (SER 
tcp        0      0 0.0.0.0:22      0.0.0.0:*         LISTEN      1011/sshd           
tcp        0      0 0.0.0.0:8888    0.0.0.0:*         LISTEN      2437/python         
tcp        0      0 0.0.0.0:888     0.0.0.0:*         LISTEN      1144/nginx: master  
tcp        0      0 127.0.0.1:25    0.0.0.0:*         LISTEN      1891/master         
tcp6       0      0 :::21           :::*              LISTEN      1068/pure-ftpd (SER 
tcp6       0      0 :::22           :::*              LISTEN      1011/sshd           
tcp6       0      0 ::1:25          :::*              LISTEN      1891/master         
tcp6       0      0 :::3306         :::*              LISTEN      2275/mysqld

若要显示一个指定服务的信息,使用 grep 命令过滤:

[root@localhost ~]# netstat -anlp | grep mysql
tcp6  0      0 :::3306              :::*                    LISTEN    2275/mysqld         
unix  2      [ ACC ]     STREAM   LISTENING   22151   2275/mysqld     /tmp/mysql.sock

接下来的步骤

一旦你运行了 netstat 命令,你就可以采取措施来保护你的系统,确保只有你主动使用的服务在你的网络上被监听。

  1. 识别通常被利用的端口和服务。一般来说,关闭你实际不使用的端口。
  2. 留意不常见的端口号,认识了解在你系统上使用的合法端口。
  3. 密切注意 SELinux 错误。有时你需要做的只是更新上下文,以匹配你对系统做的合法更改,但是要阅读错误警告,以确保 SELinux 提醒你的不是可疑或者恶意的活动。

如果你发现一个端口正在运行一个可疑的服务,或者你只是简单的想要关闭你不再使用的端口,你可以遵从以下这些步骤,通过防火墙规则手动拒绝端口访问:

如果你在使用 firewall-cmd防火墙 ,运行这些命令:

[root@localhost ~]# firewall-cmd –remove-port=<port number>/tcp
[root@localhost ~]# firewall-cmd –runtime-to-permanent

然后,你可以使用systemctl来停止这个服务:

[root@localhost ~]# systemctl stop <service>

netstat的参数说明

  • -a或–all 显示所有连线中的Socket。
  • -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
  • -c或–continuous 持续列出网络状态。
  • -C或–cache 显示路由器配置的快取信息。
  • -e或–extend 显示网络其他相关信息。
  • -F或–fib 显示路由缓存。
  • -g或–groups 显示多重广播功能群组组员名单。
  • -h或–help 在线帮助。
  • -i或–interfaces 显示网络界面信息表单。
  • -l或–listening 显示监控中的服务器的Socket。
  • -M或–masquerade 显示伪装的网络连线。
  • -n或–numeric 直接使用IP地址,而不通过域名服务器。
  • -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或–timers 显示计时器。
  • -p或–programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或–route 显示Routing Table。
  • -s或–statistics 显示网络工作信息统计表。
  • -t或–tcp 显示TCP传输协议的连线状况。
  • -u或–udp 显示UDP传输协议的连线状况。
  • -v或–verbose 显示指令执行过程。
  • -V或–version 显示版本信息。
  • -w或–raw 显示RAW传输协议的连线状况。
  • -x或–unix 此参数的效果和指定”-A unix”参数相同。
  • –ip或–inet 此参数的效果和指定”-A inet”参数相同。

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/4374

(1)
郭靖的头像郭靖
上一篇 2022年6月9日 下午7:15
下一篇 2022年6月10日 下午4:50

相关推荐

  • 网站常见错误代码及解决方案

    有时候大家在打开网页时会遇到各种各样的错误报告,比如404,500之类的,这些错误是服务器接到浏览器的请求后访回的状态码,专业术语叫服务器信息头,不同的状态码有不同的含义,了解一些有利于搞清楚哪里出了问题。 注:本文仅供学习 一、HTTP4xx(请求错误) HTTP错误400 由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。 HT…

    2022年6月13日
    76000
  • 七层网络协议详细解释

    1、七层、五层、四层模型划分 互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。 每一层都运行不同的协议。协议是干什么的,协议就是标准。 实际上还有人把它划成五层、四层。 七层划分为:应用…

    2022年8月21日
    67100
  • DNS BIND主辅同步配置

    DNS主辅同步配置要点: DNS主辅环境 主DNS我们已经安装过bind了,接下来在辅助DNS安装bind 具体安装详解可以查看下面的文章 接下来修改辅助DNS配置文件 接下来修改主dns配置文件 dns master完整配置文件如下 现在我们将dns01 和dns02执行下面的命令,检查配置文件是否有错误 重启主dns 接下来我们去辅助dns,检查完全区域…

    2023年3月31日
    28000
  • 内网穿透—nps

    nps nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端 做微信公众号开发、小程序开发等—-> 域…

    2022年6月7日
    89200
  • 如何快速查看 Kubernetes Pod 崩溃前的日志

    当pod处于crash状态的时候,容器不断重启,此时用 kubelet logs 可能出现一直捕捉不到日志。解决方法: kubectl previous 参数作用:If true, print the logs for the previous instance of the container in a pod if it e…

    2023年7月13日
    28800

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信