使用 netstat 检测及监测网络连接
大家好,我是邪恶君子!今天,邪恶就给大家分享一下,使用小小的一个 netstat 命令,就能让你检测出系统是否处于安全状态!
这篇文档坚决让小白都看得懂,学得会,掌握牢,上手快!好,废话不多说,看招:
大家都知道,Linux 上的 web 服务每天都要面临成千上万的连接,这些连接都是要遵循 TCP 协议的,这都是众所周知的(至于 TCP 协议,这里就不在过多的介绍,不懂的同学可以自己搜索,友好多)。既然都是 TCP 协议连接,那就不得不面临一个网路最大的安全问题,DOS 攻击及 DDOS 攻击,这些攻击是没有办法抹除的,因为这是针对 TCP 协议本身的一个设计缺陷儿造成的。所以,这就要求运维人员,时刻监测系统安全,是否处于被 DOS 攻击状态。
那么是怎么监测及检测的呢?这就要用到我一开始就要提到的 netstat 命令。先简单的介绍一下 netstat 命令的主要作用:可以查看系统当前的连接状态,不管是 TCP 连接还是 udp 协议连接,以及每个连接的进程号、是哪个应用程序、连接所用的端口号,这些都可以陈列出来。是不是很强大。
在讲监测检测之前,先给大家在普及一个知识,那就是 TCP 连接的状态,TCP 进行 3 次握手,其过程有很多状态,不同的连接状态,都有想对应的状态码,看下面列表:
- LISTEN:侦听来自远方的 TCP 端口的连接请求
- SYN-SENT:再发送连接请求后等待匹配的连接请求
- SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
- ESTABLISHED:代表一个打开的连接
- FIN-WAIT-1:等待远程 TCP 连接中断请求,或先前的连接中断请求的确认
- FIN-WAIT-2:从远程 TCP 等待连接中断请求
- CLOSE-WAIT:等待从本地用户发来的连接中断请求
- CLOSING:等待远程 TCP 对连接中断的确认
- LAST-ACK:等待原来的发向远程 TCP 的连接中断请求的确认
- TIME-WAIT:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认
- CLOSED:没有任何连接状态
大家最好一定要记住这些状态,因为运维人员在监控系统并发连接状态时,监控系统返回的也是这些状态码!
了解完这些后,还要再了解一个 Linux 系统的脚本中的一个小知识点,那就是“|”管道符,管道符的作用就不多说了,这里就简单提一下,因为下面的例子要用到。
好了,终于可以进入正题了,是不是都有点心急了呢 ?嘿嘿
以下这条命令将会显示出 netstat 的帮助信息,不懂的以及不太了解这个命令有哪些参数可用的都可以在这个命令的返回信息中看到:
#netstat --help
显示当前所有活动的网络连接:
#netstat -na
显示出所有处于监听状态的应用程序及进程号和端口号:
#netstat -aultnp
如果想对一个单一的进行查询,只需要在命令后面再加上“| grep $”。这里就用到了管道符,以及 grep 筛选命令,$代表参数,也就是你要查询的那个。
如要显示所有 80 端口的网络连接:
#netstat -aultnp | grep 80
如果还想对返回的连接列表进行排序,这就要用到 sort 命令了,命令如下:
#netstat -aultnp | grep :80 | sort
当然,如果还想进行统计的话,就可以再往后面加 wc 命令。如:
#netstat -aultnp | grep :80 | wc -l
其实,要想监测出系统连接是否安全,要进行多状态的查询,以及要分析,总结,还有就是经验。总的下来,才可以判断出连接是否处于安全状态。
下面就给大家再举一些例子,让大家彻底的明白,及彻底的理解这个命令的用处,使其发挥出最大功能。
#netstat -n -p|grep SYN_REC | wc -l
这个命令可以查找出当前服务器有多少个活动的 SYNC_REC 连接。正常来说这个值很小,最好小于 5。 当有 Dos 攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。
#netstat -n -p | grep SYN_REC | sort -u
列出所有连接过的 IP 地址。
#netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有发送 SYN_REC 连接节点的 IP 地址。
#netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用 netstat 命令计算每个主机连接到本机的连接数。
#netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出所有连接到本机的 UDP 或者 TCP 连接的 IP 数量。
#netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
检查 ESTABLISHED 连接并且列出每个 IP 地址的连接数量。
#netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出所有连接到本机 80 端口的 IP 地址和其连接数。80 端口一般是用来处理 HTTP 网页请求。
怎么样,是否能弄懂上面的这些命令及作用?在这儿呢,邪恶负责的说一句话:如果你能把上面的这些都彻底的理解消化了,能举一反三了,那么,恭喜您,您在 Linux 系统网络检测这一小块已经是一个高手了,不在是菜鸟或者小白了,为自己鼓鼓掌吧!!!
说明一点:命令及参数是死的,但是人是活的,要想发挥出其最大的功能,还需要自己去摸索,自己去理解及配合其他命令一起使用。同时,netstat -an 在 Windows 上也管用哦!
那么,如果真的发现有大量的假连接了,那么也不要慌,要先找出一些“另类的 IP 地址”,怎么解释呢,因为在进行 Dos 攻击时,会为造出大量的假 IP 去连接服务器,进行 3 次握手,所以,这就要根据经验去找出假 IP,然后通过防火墙规则,添加一个规则拒接这个假 IP 的网段连接。
例如:
#iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
注意,你需将$IPADRESS 替换成需要拒绝连接的 IP 地址。执行完 iptables 后呢,要重启一下 web 服务。
好了,今天的学习呢,到这儿就结束了,至于能掌握多少,这就要因人而异了,但我相信:天道酬勤!
最后,如果哪里有不对的地方,希望大家多多交流!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论