Linux服务器大量向外发包问题排查

最近Linux redhat 6.5 APP 业务系统,向外大量发送流量,不断建立tcp连接,目标地址是美国的一个IP,
估计被当成肉鸡了,比较悲惨,直接飞向IDC机房,防火墙显示这个APP服务器tcp连接很多每秒10W个,
从服务器上使用命令sar -n DEV 2 10 ,确实出现大量发包的问题,(下边是正常的,异常的情况eth0txpck/s 10000左右了)



先进行限速或者拔掉网线:
开始之前,先要清除 eth0所有队列规则
tc qdisc del dev eth0 root 2> /dev/null > /dev/null

1) 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:20 htb rate 2000kbit

(1KB/s = 8KBit/s)

TC命令格式:
tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]
tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

显示
tc [-s | -d ] qdisc show [ dev DEV ]
tc [-s | -d ] class show dev DEV tc filter show dev DEV

查看TC的状态
tc -s -d qdisc show dev eth0
tc -s -d class show dev eth0

删除tc规则

tc qdisc del dev eth0 root

查看状态:
top
CPU和MEM都正常,看不出异常的进程。

yum install -y tcpdump
tcpdump -nn
找到大量的IP地址

本机(192.168.35.145)和主机114.114.110.110之间的数据
tcpdump -n -i eth0 host 192.168.35.145 and 114.114.110.110
还有截取全部进入服务器的数据可以使用以下的格式
tcpdump -n -i eth0 dst 192.168.35.145

或者服务器有多个IP 可以使用参数
tcpdump -n -i eth0 dst 192.168.35.145  or  192.168.35.155

我们抓取全部进入服务器的TCP数据包使用以下的格式,大家可以参考下
tcpdump -n -i eth0 dst 192.168.35.145 or 192.168.35.155 and tcp

从本机出去的数据包
tcpdump -n -i eth0 src 192.168.35.145 or 192.168.35.155
tcpdump -n -i eth0 src 192.168.35.145 or 192.168.35.155 and port ! 22 and tcp
或者可以条件可以是or  和 and  配合使用即可筛选出更好的结果。

可以将异常IP加入到/etc/hosts.deny中,或者防火墙设置下

之后安装个NetHogs
Install Howto:
    Download the latest epel-release rpm from (一个是32位、一个是64位连接)
    http://dl.fedoraproject.org/pub/epel/6/i386/
    http://dl.fedoraproject.org/pub/epel/6/x86_64/

    Install epel-release rpm:
    # rpm -Uvh epel-release*rpm(记得yum clean all和yum makecache下)

    Install nethogs rpm package:
    # yum install nethogs

执行nethogs
nethogs
或者
nethogs eth0
如果网卡绑定过nethogs bond0

-------------------------
rpm -Uvh epel-release-6-8.noarch64.rpm
yum clean all
yum makecache
yum install nethogs
nethogs
--------------------------



下图显示各进程当前网络使用情况:


按“m”键可以切换到统计视图,显示各进程总的网络使用情况


按“Ctrl+C”或“q”退出监控

使用帮助:
    [root@localhost ~]# nethogs --help  
    nethogs: invalid option -- '-'  
    usage: nethogs [-V] [-b] [-d seconds] [-t] [-p] [device [device [device ...]]]  
            -V : 显示版本信息,注意是大写字母V.  
            -d : 延迟更新刷新速率,以秒为单位。默认值为 1.  
            -t : 跟踪模式.  
            -b : bug 狩猎模式 — — 意味着跟踪模式.  
            -p : 混合模式(不推荐).  
            设备 : 要监视的设备名称. 默认为 eth0  
      
    当 nethogs 运行时, 按:  
     q: 退出  
     m: 总数和当前使用情况模式之间切换 

找到大量发包的进程,之后kill掉,在排查下这个进程是什么程序,文件路径在哪里,删除掉异常的文件。

目前问题解决了,观察一段时间,看看问题是否还会发生,防火墙将公网IP进行了访问限制,只允许办公地点访问,增加安全。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在使用C语言的Windows程序中使用mosquitto库向MQTT服务器发送消息,您需要先在Windows上安装mosquitto库和相关的开发包。然后,您可以使用以下步骤来向MQTT服务器发送消息: 1. 引入mosquitto库和相关的头文件; 2. 初始化mosquitto库; 3. 连接MQTT服务器; 4. 发布消息; 5. 断开MQTT服务器连接; 6. 释放mosquitto库资源。 下面是一个简单的示例代码,可以帮助您了解如何使用mosquitto库向MQTT服务器发送消息: ```c #include <stdio.h> #include <mosquitto.h> int main() { int rc; struct mosquitto *mosq = NULL; // 初始化mosquitto库 mosquitto_lib_init(); // 创建mosquitto客户端实例 mosq = mosquitto_new(NULL, true, NULL); if(mosq == NULL){ printf("Error: Out of memory.\n"); return 1; } // 连接MQTT服务器 rc = mosquitto_connect(mosq, "localhost", 1883, 60); if(rc != MOSQ_ERR_SUCCESS){ printf("Error: Could not connect to MQTT server.\n"); mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 1; } // 发布消息 rc = mosquitto_publish(mosq, NULL, "topic", strlen("message"), "message", 0, false); if(rc != MOSQ_ERR_SUCCESS){ printf("Error: Could not publish message.\n"); mosquitto_disconnect(mosq); mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 1; } // 断开MQTT服务器连接 mosquitto_disconnect(mosq); // 释放mosquitto库资源 mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0; } ``` 请注意,您需要根据自己的MQTT服务器地址和端口号修改代码中的连接信息,以及根据自己的需求修改代码中的主题和消息内容。此外,如果您的MQTT服务器需要用户名和密码进行认证,则可以使用mosquitto_username_pw_set()函数设置用户名和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值