简介

 tcp的连接状态对于web服务器来说很重要,我们可以根据tcp状态判断服务器是否受到了攻击,打开的连接是否过多等。

tcp状态

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 接收到它的连接终止请求的确认。 
TIME_WAIT 两个存在的理由: 
1.可靠的实现tcp全双工连接的终止; 
2.允许老的重复分节在网络中消逝。 
CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)

主机安排

主机名

IP地址

功能

n1

192.168.231.20

zabbix-server

n2

192.168.231.21

zabbix-agent

zabbix-agent客户端配置

获取tcp连接状态命令

[root@n4 ~]# ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
LISTEN 7
ESTAB 1
TIME-WAIT 22

创建获取tcp连接状态的脚本

[root@n4 ~]# mkdir /etc/zabbix/scripts
[root@n4 ~]# mkdir /etc/zabbix/tmp

改变tmp文件属主和属组为zabbix

[root@n4 ~]# chown -R zabbix.zabbix /etc/zabbix/tmp

[root@n4 ~]# vim /etc/zabbix/scripts/tcp_status.sh

#!/bin/bash
#tcp_status

[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1
ss_file=/etc/zabbix/tmp/ss.txt
tcp_status_fun(){
  tcp_stat=$1
  ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s)print k,s[k]}' > ${ss_file}
  tcp_stat_value=$(grep ${tcp_stat} $ss_file | awk {'print $NF'})
  if [ -z "$tcp_stat_value" ];then
    tcp_stat_value=0
  fi
  echo $tcp_stat_value   
}
tcp_status_fun $1

赋予执行权限

[root@n4 ~]# chmod +x /etc/zabbix/scripts/tcp_status.sh

创建自定义的key

[root@n4 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf

UserParameter=tcp_status[*],/etc/zabbix/scripts/tcp_status.sh $1

修改客户端配置文件

[root@n4 ~]# egrep -v "^$|#" /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.231.20  #zabbix-server的IP地址
ServerActive=127.0.0.1
Hostname=192.168.231.23  #设置主机名
Include=/etc/zabbix/zabbix_agentd.d/*.conf

重启zabbix-agent

[root@n4 ~]# systemctl restart zabbix-agent.service

zabbix-server服务端配置

获取ESTAB,打开的连接数

[root@n1 ~]# zabbix_get -s 192.168.231.23 -p 10050 -k tcp_status[ESTAB]

2

zabbix-server的web界面设置

配置-》主机-》创建主机


zabbix监控traefik Zabbix监控tcp连接状态_zabbix监控traefik


创建应用集(这里已经创建过)


zabbix监控traefik Zabbix监控tcp连接状态_zabbix监控traefik_02

zabbix监控traefik Zabbix监控tcp连接状态_zabbix4.0_03

创建监控项(名称自定义,键值为客户端设置的,"[ ]"中填写tcp状态变量)


zabbix监控traefik Zabbix监控tcp连接状态_zabbix4.0_04


创建完成的11个tcp状态监控项


zabbix监控traefik Zabbix监控tcp连接状态_TCP_05

创建图形


zabbix监控traefik Zabbix监控tcp连接状态_客户端_06


查看,监测-》图形-》选择群组,主机,图形


zabbix监控traefik Zabbix监控tcp连接状态_tcp状态_07