实用脚本能批量隔离吗?

wen 实用脚本 9

本文目录导读:

实用脚本能批量隔离吗?

  1. 场景一:批量封禁恶意IP(防火墙/iptables隔离)
  2. 场景二:Windows Defender批量隔离文件(移动到隔离区)
  3. 场景三:Linux Cgroup/Container隔离(批量限制进程)
  4. 场景四:批量禁用Active Directory用户(隔离账号)
  5. 场景五:批量隔离文件到沙箱目录(模拟“隔离区”)
  6. 是否“实用”取决于:

可以,实用脚本完全可以实现批量隔离,但具体取决于你所说的“隔离”是指什么场景,常见的隔离需求包括:

  1. 网络安全隔离(如防火墙封禁IP/域名)
  2. 进程/服务隔离(如用沙箱或容器)
  3. 用户/账号隔离(如批量禁用在Active Directory或Linux中的用户)
  4. 文件隔离(如将可疑文件移动到隔离区)
  5. Windows Defender/杀毒软件隔离(批量将文件加入排除项或隔离区)

下面我会给出几个不同场景下的批量隔离脚本示例,你可以根据实际需求选择:


批量封禁恶意IP(防火墙/iptables隔离)

需求:有一个IP列表文件 bad_ips.txt,要全部加入防火墙黑名单。

Bash脚本(Linux iptables用)

#!/bin/bash
# batch_block_ips.sh
# 用法: ./batch_block_ips.sh bad_ips.txt
if [ -z "$1" ]; then
    echo "请提供包含IP列表的文件"
    exit 1
fi
while IFS= read -r ip; do
    # 跳过空行和注释
    [[ -z "$ip" || "$ip" =~ ^# ]] && continue
    # 添加iptables规则(拒绝所有连接)
    iptables -A INPUT -s "$ip" -j DROP
    echo "已封禁: $ip"
done < "$1"
echo "批量封禁完成"
# 保存规则(根据发行版不同)
iptables-save > /etc/iptables/rules.v4 2>/dev/null || true

Windows PowerShell(Windows防火墙用)

# batch_block_ips.ps1
$ipFile = "bad_ips.txt"
$ruleName = "BlockMaliciousIPs"
Get-Content $ipFile | ForEach-Object {
    $ip = $_.Trim()
    if ($ip -and (-not $ip.StartsWith("#"))) {
        # 添加防火墙入站规则,阻止该IP
        New-NetFirewallRule -DisplayName "$ruleName - $ip" `
                            -Direction Inbound `
                            -RemoteAddress $ip `
                            -Action Block `
                            -Profile Any
        Write-Host "已封禁: $ip"
    }
}
Write-Host "批量封禁完成"

Windows Defender批量隔离文件(移动到隔离区)

需求:将指定目录下所有 .exe 文件移动到Windows Defender隔离区(模拟或调用官方的隔离动作)。

PowerShell脚本(调用Defender API或手动移动)

# move_to_quarantine.ps1
$targetDir = "C:\SuspiciousFiles\"
$quarantineDir = "C:\Quarantine\"
$files = Get-ChildItem -Path $targetDir -Filter "*.exe"
if (-not (Test-Path $quarantineDir)) {
    New-Item -ItemType Directory -Path $quarantineDir
}
foreach ($file in $files) {
    $destPath = Join-Path $quarantineDir $file.Name
    Move-Item -Path $file.FullName -Destination $destPath
    Write-Host "已隔离: $($file.FullName) -> $destPath"
}

注意:真正的“Windows Defender隔离”通常由Defender内部管理,普通移动文件不算真正隔离(不会被监控和还原),如果要用Defender的官方API,需要调用 MpCmdRun.exe,但批量移动文件可作为简单隔离方案。


Linux Cgroup/Container隔离(批量限制进程)

需求:批量将某个用户的所有进程放入一个受限制的cgroup(限制CPU/内存)。

Bash脚本(使用cgroups v2)

#!/bin/bash
# isolate_user.sh
USER="restricted_user"
CGROUP_PATH="/sys/fs/cgroup/restricted"
# 创建cgroup
mkdir -p $CGROUP_PATH
# 设置限制(只允许50% CPU,512MB内存)
echo 50000 > $CGROUP_PATH/cpu.max  # 50000/100000 = 50%
echo 512M > $CGROUP_PATH/memory.max
# 获取该用户的所有PID并加入cgroup
for pid in $(pgrep -u $USER); do
    echo $pid > $CGROUP_PATH/cgroup.procs
    echo "已隔离PID: $pid"
done
echo "用户 $USER 的所有进程已加入受限cgroup"

批量禁用Active Directory用户(隔离账号)

需求:从CSV文件中读取用户名列表,在AD中禁用这些账号。

PowerShell脚本

# disable_ad_users.ps1
Import-Csv "users_to_disable.csv" | ForEach-Object {
    $username = $_.samaccountname
    try {
        Disable-ADAccount -Identity $username
        Write-Host "已禁用 $username"
    } catch {
        Write-Warning "未能禁用 $username : $_"
    }
}

批量隔离文件到沙箱目录(模拟“隔离区”)

需求:将所有 .exe.scr.vbs 等可疑文件移动到只读隔离目录。

Linux Bash脚本

#!/bin/bash
# quarantine_files.sh
SRC_DIR="/home/user/Downloads/"
QUAR_DIR="/home/quarantine/"
mkdir -p $QUAR_DIR
chmod 400 $QUAR_DIR/* 2>/dev/null  # 设为只读
find "$SRC_DIR" -type f \( -name "*.exe" -o -name "*.vbs" -o -name "*.scr" \) -exec mv {} "$QUAR_DIR" \;
echo "已隔离所有可疑文件到 $QUAR_DIR"

场景 脚本类型 核心命令
防火墙封禁IP(Linux) Bash + iptables iptables -A INPUT -s IP -j DROP
防火墙封禁IP(Windows) PowerShell New-NetFirewallRule ... -Action Block
文件移动到隔离区 Bash / PowerShell mvMove-Item
进程资源限制(cgroup) Bash echo PID > cgroup.procs
禁用AD用户 PowerShell Disable-ADAccount
Defender批量隔离 调用MpCmdRun或手动移动 MpCmdRun -Scan ...(复杂)或 Move-Item

是否“实用”取决于:

  • 你是否有名单(需提前准备TXT/CSV/JSON)
  • 权限是否足够(防火墙、AD、cgroup等通常需要管理员/root)
  • 是否需要回滚(批量操作前强烈建议先小范围测试)

如果你能告诉我更具体的“隔离”场景(是文件、IP、账号、还是进程?操作系统是Windows还是Linux?),我可以为你定制一个可直接运行的脚本。

抱歉,评论功能暂时关闭!