SSH数据流量监控

本文介绍了一个基于Bash的脚本,用于监控网络连接的数据传输,检测安全威胁,管理带宽和资源,当数据量超过限制时发出警告,并自动进行日志轮转。脚本利用iftop获取实时网络流量信息并记录到日志中,有助于实时监控和维护网络安全。
摘要由CSDN通过智能技术生成

简介

检查网络连接的数据传输情况有以下一些实际意义:
安全监控:检查数据传输情况可以帮助你识别异常活动或潜在的安全威胁。如果发现大量不寻常的数据传输活动,可能表示有未经授权的访问或恶意行为。通过监控数据传输,可以及时发现并采取适当的安全措施来保护网络和系统。
流量控制和资源管理:了解数据传输情况可以帮助你做出更明智的决策,以管理网络资源。通过实时监控网络连接的数据传输,可以有效地分配带宽和资源,确保关键任务和应用程序获得足够的网络资源,而不会受到其他不必要的数据传输的影响。

脚本内容

使用内置工具和脚本来实现监控

#!/bin/bash

max_data_per_connection=2.5  # 每个连接的最大数据量,单位为GB
max_connections=20  # 允许的最大连接数
log_file="/var/log/connection_monitor.log"  # 日志文件路径
max_log_size=10  # 日志文件的最大大小,单位为MB
backup_dir="/var/log/backup_logs"  # 备份日志的目录

# 创建备份目录
mkdir -p "$backup_dir"

while true; do
    # 获取当前SSH连接数和总数据量
    read connection_count total_data <<< $(ss -n | grep -E "ESTAB.*:22" | awk -v max_data=$max_data_per_connection '{count++; total += max_data} END {print count, total}')

    echo "$(date +"%Y-%m-%d %H:%M:%S") - Current SSH Connections: $connection_count, Estimated Total Data: $total_data GB" >> "$log_file"

    # 判断是否超过允许的总数据量
    if (( $(echo "$total_data > $max_connections" | bc -l) )); then
        echo "$(date +"%Y-%m-%d %H:%M:%S") - Total data exceeded the allowed limit. Possible anomaly detected." >> "$log_file"
        # 在此处添加触发警报的逻辑,例如发送电子邮件或使用其他通知机制
    fi

    # 检查日志文件大小
    current_size=$(du -m "$log_file" | cut -f1)

    if ((current_size >= max_log_size)); then
        # 备份并截断日志文件
        backup_file="$backup_dir/$(date +"%Y%m%d%H%M%S")_connection_monitor.log"
        cp "$log_file" "$backup_file"
        > "$log_file"
        
        echo "$(date +"%Y-%m-%d %H:%M:%S") - Log rotated. Backup: $backup_file" >> "$log_file"
    fi

    sleep 60  # 间隔时间,可以根据需要调整
done

启动

bash name.sh & #通过bash命令启动,&代表后台启动

启动后可以到/var/log/connection_monitor.log文件中查看日志

脚本的主要部分

基本监控部分

max_data_per_connection: 每个连接的最大数据量,单位为GB。
max_connections: 允许的最大连接数。
log_file: 日志文件的路径。

日志轮转部分

max_log_size: 日志文件的最大大小,单位为MB。
backup_dir: 备份日志的目录。

创建备份目录

mkdir -p "$backup_dir"

如果备份目录不存在,则创建它。
主循环部分:

while true; do

无限循环,不断执行以下操作。
获取当前SSH连接数和总数据量

read connection_count total_data <<< $(ss -n | grep -E "ESTAB.*:22" | awk -v max_data=$max_data_per_connection '{count++; total += max_data} END {print count, total}')

使用ss命令获取当前SSH连接信息,然后使用grep和awk提取连接数和估算的总数据量。
记录监控信息到日志文件

echo "$(date +"%Y-%m-%d %H:%M:%S") - Current SSH Connections: $connection_count, Estimated Total Data: $total_data GB" >> "$log_file"

记录当前SSH连接数和估算的总数据量到日志文件。
判断是否超过允许的总数据量

if (( $(echo "$total_data > $max_connections" | bc -l) )); then
    echo "$(date +"%Y-%m-%d %H:%M:%S") - Total data exceeded the allowed limit. Possible anomaly detected." >> "$log_file"
    # 在此处添加触发警报的逻辑,例如发送电子邮件或使用其他通知机制
fi

判断估算的总数据量是否超过设定的阈值,如果超过则记录异常信息,你可以在这个部分添加触发警报的逻辑。
检查日志文件大小并进行轮转

current_size=$(du -m "$log_file" | cut -f1)
if ((current_size >= max_log_size)); then
    backup_file="$backup_dir/$(date +"%Y%m%d%H%M%S")_connection_monitor.log"
    cp "$log_file" "$backup_file"
    > "$log_file"
    echo "$(date +"%Y-%m-%d %H:%M:%S") - Log rotated. Backup: $backup_file" >> "$log_file"
fi

检查当前日志文件的大小,如果超过设定的阈值(max_log_size),则创建一个带有时间戳的备份文件,并将日志文件内容备份到该文件,然后截断原始日志文件。记录日志轮转的事件,包括备份文件的路径和时间戳。
休眠

sleep 60  # 间隔时间,可以根据需要调整

休眠一段时间,控制循环的执行间隔。
这个脚本结合了监控SSH连接和日志轮转两个功能。可以根据需要进行调整,例如修改监控条件、调整轮转的日志大小、备份目录等。在实际使用之前,建议在测试环境中进行充分测试以确保其在你的特定环境中的可用性和准确性。

使用iftop和Bash脚本编写

安装工具

sudo apt install ifop

脚本编写

#!/bin/bash

max_data_per_connection=2.5  # 每个连接的最大数据量,单位为GB
max_connections=20  # 允许的最大连接数
log_file="/var/log/network_monitor.log"  # 日志文件路径
max_log_size=10  # 日志文件的最大大小,单位为MB
backup_dir="/var/log/backup_logs"  # 备份日志的目录

# 创建备份目录
mkdir -p "$backup_dir"

while true; do
    # 使用 iftop 获取实时网络流量信息
    network_data=$(iftop -t -s 1 | grep "Total send and receive" | awk '{print $5}')

    # 获取当前时间戳
    current_timestamp=$(date +"%Y-%m-%d %H:%M:%S")

    # 记录网络流量信息到日志文件
    echo "$current_timestamp - Total Network Data: $network_data" >> "$log_file"

    # 解析网络数据信息
    total_data=$(echo "$network_data" | sed 's/\([0-9]*\.[0-9]*\)\([KMGT]\)/\1 \2/g' | awk '{if ($2=="G") $1=$1*1024; if ($2=="T") $1=$1*1024*1024; if ($2=="M") $1=$1; print $1}')

    # 判断是否超过允许的总数据量
    if (( $(echo "$total_data > $max_connections" | bc -l) )); then
        echo "$current_timestamp - Total data exceeded the allowed limit. Possible anomaly detected." >> "$log_file"
        # 在此处添加触发警报的逻辑,例如发送电子邮件或使用其他通知机制
    fi

    # 检查日志文件大小并进行轮转
    current_size=$(du -m "$log_file" | cut -f1)
    if ((current_size >= max_log_size)); then
        backup_file="$backup_dir/$(date +"%Y%m%d%H%M%S")_network_monitor.log"
        cp "$log_file" "$backup_file"
        > "$log_file"
        echo "$current_timestamp - Log rotated. Backup: $backup_file" >> "$log_file"
    fi

    sleep 60  # 间隔时间,可以根据需要调整
done

这个脚本使用iftop命令获取实时网络流量信息,然后解析并记录到日志文件中。脚本中的其他部分与之前的脚本相似,包括判断是否超过允许的总数据量以及日志轮转功能。可以根据实际需求进行调整。
在这里插入图片描述

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓夜残歌

可莉发来一条红包申请!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值