V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
sunrisewestern
V2EX  ›  Linux

如何监控 smb 的连接情况

  •  
  •   sunrisewestern · 2023-05-09 01:54:08 +08:00 · 1887 次点击
    这是一个创建于 564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何监控 smb 的连接情况

    有一 windows 电脑通过 smb 连接 linux 服务器的几个文件夹,是否可以在 linux 服务器上监控 windows 连接情况,比如是否断开连接,断开了多久之类,想要做到的是如果 windows 电脑断开连接超过 30 分钟,就拒绝下次连接。

    1. windows 电脑是客户电脑,我们没有操作权限
    2. 暂时只能用 smb 协议
    3. 服务器会在客户那边局域网运行,不能远程操控

    现在的想法是通过监控 linux 上 samba 的 log ,但发现 log 里每隔几十秒就会 closed connection ,然后再 connect to service ,而且 windows 电脑断开后 log 里也不会显示。

    当然可以看两次 connect to service 时间间隔是否超过 30 分钟,但不知道是否稳定.

    5 条回复    2023-05-10 11:20:18 +08:00
    lhbc
        1
    lhbc  
       2023-05-09 02:02:01 +08:00 via Android
    smbstatus
    huntagain2008
        2
    huntagain2008  
       2023-05-09 10:13:17 +08:00
    小白问了 GPT-4 ,姑且看看也好,回答如下。

    在这种情况下,您可以在 Linux 服务器上设置一些脚本和配置,以监控 Windows 电脑的连接情况并实施断开超过 30 分钟后拒绝连接的策略。以下是一个简单的解决方案:

    1. 首先,确保您已在 Linux 服务器上安装了 Samba 。如果没有,可以使用以下命令安装(以 Ubuntu 为例):

    ```
    sudo apt update
    sudo apt install samba
    ```

    2. 编辑 Samba 配置文件 `/etc/samba/smb.conf`,为您的共享文件夹添加以下选项:

    ```
    [shared_folder]
    path = /path/to/your/shared/folder
    read only = no
    guest ok = yes
    preexec = /path/to/your/connect_script.sh %I
    postexec = /path/to/your/disconnect_script.sh %I
    ```

    这将为连接和断开连接分别指定要运行的脚本。

    3. 创建一个名为 `connect_script.sh` 的脚本,用于记录连接的时间戳:

    ```bash
    #!/bin/bash
    touch "/path/to/your/connect_timestamps/$1"
    ```

    4. 创建一个名为 `disconnect_script.sh` 的脚本,用于计算连接持续时间并实施 30 分钟限制:

    ```bash
    #!/bin/bash
    CONNECT_TIMESTAMPS_DIR="/path/to/your/connect_timestamps"
    CURRENT_TIMESTAMP=$(date +%s)
    CONNECT_TIMESTAMP=$(stat -c %Y "$CONNECT_TIMESTAMPS_DIR/$1")
    ELAPSED_TIME=$((CURRENT_TIMESTAMP - CONNECT_TIMESTAMP))

    # 30 分钟转换为秒
    THIRTY_MINUTES_IN_SECONDS=$((30 * 60))

    if [ $ELAPSED_TIME -gt $THIRTY_MINUTES_IN_SECONDS ]; then
    # 拒绝未来的连接
    iptables -A INPUT -s "$1" -j DROP
    fi
    ```

    5. 为这两个脚本设置可执行权限:

    ```
    chmod +x /path/to/your/connect_script.sh /path/to/your/disconnect_script.sh
    ```

    6. 重启 Samba 服务,以使更改生效:

    ```
    sudo systemctl restart smbd
    ```

    这个方案会在客户端连接和断开时分别调用 `connect_script.sh` 和 `disconnect_script.sh`。`disconnect_script.sh` 将计算连接持续时间,并在超过 30 分钟后拒绝来自客户端 IP 的未来连接。请注意,这个方案并不完美,如果客户端 IP 发生变化,拒绝策略可能会失效。
    huntagain2008
        3
    huntagain2008  
       2023-05-09 10:28:10 +08:00   ❤️ 1
    Poe 只给了一次 GPT-4 机会,但是卡住了,我问了两个,又给了一个答案。这次用的是 smbstatus

    要在 Linux 服务器上监控 Windows 电脑通过 SMB 连接的情况,并在断开连接超过 30 分钟后拒绝下次连接,您可以考虑以下解决方案:

    1. 在服务器上安装并使用 Samba 。Samba 是一个开源的 SMB 实现,适用于 Linux 和 UNIX 系统。请根据您的 Linux 发行版安装相应的 Samba 软件包。配置 Samba 以允许客户端电脑通过 SMB 连接访问服务器上的共享文件夹。

    2. 使用 `smbstatus` 命令来监控连接状态。这个命令可以显示当前 Samba 服务器上的所有活动连接。您可以编写一个脚本定期运行此命令,并分析输出以确定特定客户端的连接状态。例如:

    ````
    #!/bin/bash

    target_client="192.168.1.100" # 客户端 IP 地址
    disconnect_threshold=1800 # 30 分钟,以秒为单位

    while true; do
    connection_info=$(smbstatus -b | grep $target_client)
    if [ -z "$connection_info" ]; then
    if [ -z "$disconnect_time" ]; then
    disconnect_time=$(date +%s)
    fi
    duration=$(($(date +%s) - $disconnect_time))
    if [ $duration -gt $disconnect_threshold ]; then
    # 在此处添加您的拒绝连接操作,如修改 Samba 配置文件拒绝特定客户端
    fi
    else
    unset disconnect_time
    fi
    sleep 60 # 每分钟检查一次
    done
    ```

    这个脚本会检查客户端连接状态,并在连接断开超过 30 分钟后执行拒绝连接的操作。您需要将 IP 地址更改为实际的客户端 IP 地址。

    3. 为了拒绝特定客户端的连接,您可以编辑 Samba 配置文件(通常位于 `/etc/samba/smb.conf`)。在 `[global]` 部分添加以下内容,以阻止特定 IP 地址的客户端连接:

    ````
    hosts deny = 192.168.1.100
    ```

    保存更改后,您需要重新启动 Samba 服务以应用新的配置。

    这个方案应该可以满足您的需求。但请注意,这并不是一种完美的解决方案,因为客户端可以更改 IP 地址或使用其他方法绕过限制。然而,作为一个基本的策略,它应该能达到您的目的。
    MeteorVIP
        4
    MeteorVIP  
       2023-05-09 20:07:47 +08:00 via iPhone
    @huntagain2008 #2 #3 你回答的问题我没有认真看。但,这种感觉很像以前外婆去算命问仙婆。
    huntagain2008
        5
    huntagain2008  
       2023-05-10 11:20:18 +08:00
    #4 问 AI 找解决方案,怎么能扯到算命?小白认为用 AI 写代码修 BUG 又不是新鲜事了,今天有个帖子就是用 GPT 修的陈年 bug
    让 gpt 给 oh-my-zsh 修了个陈年 bug
    https://www.v2ex.com/t/938726

    小白认为确实 AI 生成的代码可能存在不合适的场景,或者安全隐患,但这时首先你要能自己辨别,然后调整 prompt ,比如要避免某些安全问题,让 AI 再尝试其他路线。如果实在不合适,那就不用 AI 的答案就行,AI 就是辅助工具,用来参考即可,不要全搬。

    ChatGPT 给的一个获取客户端 IP 的代码。评论区就警告他“不要随便相信 header 里面附带的 IP 变量!!!很多网站的 ip 限制就是被这种方式给骗过去的。”,所以懂的人他肯定是能辨别出来 GPT 的代码有安全问题。
    https://www.v2ex.com/t/937951
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:10 · PVG 16:10 · LAX 00:10 · JFK 03:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.