本文目录导读:

- 场景一:批量封禁恶意IP(防火墙/iptables隔离)
- 场景二:Windows Defender批量隔离文件(移动到隔离区)
- 场景三:Linux Cgroup/Container隔离(批量限制进程)
- 场景四:批量禁用Active Directory用户(隔离账号)
- 场景五:批量隔离文件到沙箱目录(模拟“隔离区”)
- 是否“实用”取决于:
可以,实用脚本完全可以实现批量隔离,但具体取决于你所说的“隔离”是指什么场景,常见的隔离需求包括:
- 网络安全隔离(如防火墙封禁IP/域名)
- 进程/服务隔离(如用沙箱或容器)
- 用户/账号隔离(如批量禁用在Active Directory或Linux中的用户)
- 文件隔离(如将可疑文件移动到隔离区)
- 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 | mv 或 Move-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?),我可以为你定制一个可直接运行的脚本。