├── Ashro_linux.sh ├── README.md ├── weibu_md5.py 已经不能用了,被搞收费了 ├── 事件记录 └── 常用手敲命令快速盘点-持续更新 /Ashro_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #!/bin/bash 3 | 4 | echo "Linux安全检查与应急响应工具" 5 | echo "Version: 2.0" 6 | echo "Author: Ashro" 7 | echo "Date: 2024-5-10" 8 | 9 | # 检查是否存在 ifconfig 命令,如果不存在则尝试使用 ip addr 命令 10 | if command -v ifconfig &>/dev/null; then 11 | ip_command="ifconfig -a" 12 | elif command -v ip &>/dev/null; then 13 | ip_command="ip addr" 14 | else 15 | echo "无法找到合适的命令来获取 IP 地址,请手动检查。" 16 | exit 1 17 | fi 18 | 19 | date=$(date +%Y%m%d-%H%M%S) 20 | ipadd=$($ip_command | grep -w inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d '/' -f 1) 21 | 22 | check_dir="/tmp/Ashro_${date}/check_file/" 23 | danger_file="/tmp/Ashro_${date}/danger_file.txt" 24 | log_dir="/tmp/Ashro_${date}/log/" 25 | webshell_file="/tmp/Ashro_${date}/webshell/" 26 | 27 | # 删除目录及文件,使用引号防止意外的空格或特殊字符 28 | rm -rf "$check_dir" "$danger_file" "$log_dir" "$webshell_file" 29 | mkdir -p "/tmp/Ashro_${date}/" # 使用 -p 选项以确保路径中的所有父目录都存在 30 | echo "检查发现危险项,请注意:" > "${danger_file}" 31 | mkdir -p "$check_dir" "$log_dir" "$webshell_file" 32 | cd "$check_dir" 33 | 34 | if [ "$(id -u)" != "0" ]; then 35 | echo "安全检查必须使用 root 账号,否则某些项无法检查。" 36 | exit 1 37 | fi 38 | 39 | Ashro_saveresult="tee -a ${log_dir}Ashro_checkresult.txt" 40 | echo -e "\n************ 1.系统范围 ************\n" | $Ashro_saveresult 41 | echo "正在检查 IP 地址....." | $Ashro_saveresult 42 | echo "------------- IP 及版本 -------------" 43 | echo "------------ IP 地址 -------------" 44 | echo "正在检查 IP 地址....." | $Ashro_saveresult 45 | if [ -n "$ipadd" ]; then 46 | (echo "[*] 本机 IP 地址信息:" && echo "$ipadd") | $Ashro_saveresult 47 | else 48 | echo "[!!!] 本机未配置 IP 地址" | $Ashro_saveresult 49 | fi 50 | printf "\n" | $Ashro_saveresult 51 | 52 | echo -e "************ 2.用户信息 ************\n" 53 | echo "------------ 查看登录用户 ------------" | $Ashro_saveresult 54 | echo "正在检查正在登录的用户....." | $Ashro_saveresult 55 | 56 | echo "[*] 系统登录用户:" | $Ashro_saveresult 57 | who | $Ashro_saveresult 58 | printf "\n" | $Ashro_saveresult 59 | 60 | echo "------------ 查看用户信息 ------------" | $Ashro_saveresult 61 | echo "正在查看用户信息....." | $Ashro_saveresult 62 | 63 | echo "[*] 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell" | $Ashro_saveresult 64 | cat /etc/passwd | $Ashro_saveresult 65 | printf "\n" | $Ashro_saveresult 66 | 67 | echo "------------ 检查超级用户 --------------" | $Ashro_saveresult 68 | echo "正在检查是否存在超级用户....." | $Ashro_saveresult 69 | 70 | Superuser=$(awk -F: '$3 == 0 && $1 != "root" { print $1 }' /etc/passwd) 71 | if [ -n "$Superuser" ]; then 72 | echo "[!!!] 除 root 外发现超级用户:" | tee -a "$danger_file" | $Ashro_saveresult 73 | else 74 | echo "[*] 未发现超级用户" | $Ashro_saveresult 75 | fi 76 | printf "\n" | $Ashro_saveresult 77 | 78 | echo "------------ 空口令账户检测 --------------" | $Ashro_saveresult 79 | echo "正在检查空口令账户....." | $Ashro_saveresult 80 | 81 | empty_password_accounts=$(awk -F: '($2 == "") {print $1}' /etc/shadow) 82 | 83 | if [ -n "$empty_password_accounts" ]; then 84 | echo "[!!!] 发现空口令账户:" | tee -a "$danger_file" | $Ashro_saveresult 85 | echo "$empty_password_accounts" | tee -a "$danger_file" | $Ashro_saveresult 86 | else 87 | echo "[*] 未发现空口令账户" | $Ashro_saveresult 88 | fi 89 | printf "\n" | $Ashro_saveresult 90 | 91 | echo "------------ 新增用户检查 --------------" | $Ashro_saveresult 92 | echo "正在检查新增用户....." | $Ashro_saveresult 93 | 94 | new_users=$(awk -F: '$3 >= 1000 && $3 != 65534' /etc/passwd) 95 | if [ -n "$new_users" ]; then 96 | echo "[!!!] 发现以下新增用户:" | tee -a "$danger_file" | $Ashro_saveresult 97 | echo "$new_users" | tee -a "$danger_file" | $Ashro_saveresult 98 | else 99 | echo "[*] 未发现新增用户" | $Ashro_saveresult 100 | fi 101 | printf "\n" | $Ashro_saveresult 102 | 103 | echo "------------ 新增用户组检查 --------------" | $Ashro_saveresult 104 | echo "正在检查新增用户组....." | $Ashro_saveresult 105 | 106 | new_groups=$(awk -F: '$3 >= 1000' /etc/group) 107 | if [ -n "$new_groups" ]; then 108 | echo "[!!!] 发现以下新增用户组:" | tee -a "$danger_file" | $Ashro_saveresult 109 | echo "$new_groups" | tee -a "$danger_file" | $Ashro_saveresult 110 | else 111 | echo "[*] 未发现新增用户组" | $Ashro_saveresult 112 | fi 113 | printf "\n" | $Ashro_saveresult 114 | 115 | # 检测sudoers文件中用户权限 116 | echo "------------ 检查sudoers文件中用户权限 --------------" | $Ashro_saveresult 117 | echo "正在检查sudoers文件中用户权限....." | $Ashro_saveresult 118 | 119 | # 使用 visudo 命令查找具有 NOPASSWD 权限的用户 120 | sudoers_users=$(visudo -c 2>&1 | grep -E '^[^#]*[[:space:]]ALL=.*NOPASSWD' | awk '{print $1}') 121 | 122 | if [ -n "$sudoers_users" ]; then 123 | echo "[!!!] 发现具有 NOPASSWD 权限的用户:" | tee -a "$danger_file" | $Ashro_saveresult 124 | echo "$sudoers_users" | tee -a "$danger_file" | $Ashro_saveresult 125 | else 126 | echo "[*] 未发现具有 NOPASSWD 权限的用户" | $Ashro_saveresult 127 | fi 128 | printf "\n" | $Ashro_saveresult 129 | 130 | # 检查各账户下登录公钥 131 | echo "------------ 检查各账户下登录公钥 --------------" | $Ashro_saveresult 132 | echo "正在检查各账户下登录公钥....." | $Ashro_saveresult 133 | 134 | # 获取所有用户目录路径 135 | home_dirs=$(getent passwd | cut -d: -f6) 136 | 137 | # 遍历所有用户目录 138 | for dir in $home_dirs; do 139 | authorized_keys_file="$dir/.ssh/authorized_keys" 140 | if [ -f "$authorized_keys_file" ]; then 141 | echo "[!!!] 在用户 $dir 下发现登录公钥:" | tee -a "$danger_file" | $Ashro_saveresult 142 | cat "$authorized_keys_file" | tee -a "$danger_file" | $Ashro_saveresult 143 | fi 144 | done 145 | 146 | printf "\n" | $Ashro_saveresult 147 | 148 | # 账户密码文件权限检测 149 | echo "------------ 账户密码文件权限检测 --------------" | $Ashro_saveresult 150 | echo "正在检查账户密码文件权限....." | $Ashro_saveresult 151 | 152 | # 定义函数检查文件权限 153 | check_permission() { 154 | file="$1" 155 | permission=$(stat -c "%a" "$file" 2>/dev/null) 156 | if [ -n "$permission" ] && [ "$permission" != "644" ]; then 157 | echo "[!!!] $file 文件权限异常!当前权限为 $permission" | tee -a "$danger_file" | $Ashro_saveresult 158 | else 159 | echo "[*] $file 文件权限正常" | $Ashro_saveresult 160 | fi 161 | } 162 | 163 | # 调用函数检查各密码文件权限 164 | check_permission "/etc/passwd" 165 | check_permission "/etc/shadow" 166 | check_permission "/etc/group" 167 | check_permission "/etc/gshadow" 168 | 169 | printf "\n" | $Ashro_saveresult 170 | 171 | # 检测暴力破解攻击 172 | echo "------------ 暴力破解攻击检测 --------------" 173 | echo "正在检测root是否遭受暴力破解攻击....." 174 | 175 | # 定义函数检测暴力破解攻击 176 | check_bruteforce() { 177 | logfile="$1" 178 | danger_file="/var/log/danger.log" # 定义危险日志文件路径 179 | 180 | if [ ! -f "$logfile" ]; then 181 | echo "[*] $logfile 不存在,暴力破解攻击检测未执行" 182 | return 183 | fi 184 | 185 | # 检测失败的root密码尝试并输出结果 186 | result=$(grep -a "Failed password for root" "$logfile" | awk '{print $11}' | sort | uniq -c | sort -nr) 187 | loginresult=$(grep "Accepted password for root" "$logfile" | awk '{print $11}' | sort | uniq -c | sort -nr | more) 188 | 189 | if [ -n "$result" ]; then 190 | echo "[!!!] 在 $logfile 中检测到失败密码尝试,可能遭受暴力破解攻击!" | tee -a "$danger_file" 191 | echo "详细信息如下:" | tee -a "$danger_file" 192 | echo "------------------------" | tee -a "$danger_file" 193 | echo "$result" | tee -a "$danger_file" | more 194 | echo "登录成功的ip如下:""$loginresult"| tee -a "$danger_file" 195 | else 196 | echo "[*] 在 $logfile 中暴力破解攻击检测正常" 197 | fi 198 | } 199 | 200 | # 调用函数检测暴力破解攻击 201 | check_bruteforce "/var/log/auth.log" 202 | check_bruteforce "/var/log/auth.log*" 203 | check_bruteforce "/var/log/secure" 204 | 205 | echo "" # 输出一个空行 206 | # 检测端口进程信息 207 | echo "************3.端口进程信息************" 208 | echo "------------网络连接---------------------" | $Ashro_saveresult 209 | echo "------------病毒木马端口检测------------------" | $saveresult 210 | echo "正在检测系统中的网络连接和监听端口....." | $saveresult 211 | 212 | # 检查正在监听的端口 213 | listening_ports=$(netstat -tuln | awk 'NR > 2 {print $4}' | awk -F':' '{print $NF}' | sort -nu) 214 | if [ -n "$listening_ports" ]; then 215 | echo "[] 系统中正在监听的端口如下:" | $saveresult 216 | echo "$listening_ports" | $saveresult 217 | 218 | # 输出每个监听端口的详细信息 219 | echo "------------详细的端口信息------------------" | $saveresult 220 | for port in $listening_ports; do 221 | echo "端口: $port" | $saveresult 222 | # 使用 lsof 列出详细信息 223 | lsof -i :$port | awk 'NR==1 || /LISTEN/' | $saveresult 224 | echo "----------------------------------------" | $saveresult 225 | done 226 | else 227 | echo "[] 系统中未发现正在监听的端口" | $saveresult 228 | fi 229 | 230 | # 检查建立的网络连接 231 | established_connections=$(netstat -tun | grep ESTABLISHED) 232 | if [ -n "$established_connections" ]; then 233 | echo "[!!!] 系统中存在建立的网络连接:" | tee -a "$danger_file" | $Ashro_saverult 234 | echo "$established_connections" | tee -a "$danger_file" | $Ashro_saverult 235 | 236 | # 分析建立的网络连接,查看是否有可疑连接 237 | suspicious_connections=$(echo "$established_connections" | awk '{print $5}' | grep -E '0.0.0.0:|127.0.0.1:' | sort -u) 238 | if [ -n "$suspicious_connections" ]; then 239 | echo "[!!!] 发现可疑的网络连接:" | tee -a "$danger_file" | $Ashro_saverult 240 | echo "$suspicious_connections" | tee -a "$danger_file" | $Ashro_saverult 241 | fi 242 | else 243 | echo "[*] 系统中未发现建立的网络连接" | $Ashro_saverult 244 | fi 245 | 246 | printf "\n" | $Ashro_saverult 247 | 248 | # 进程分析 249 | echo "------------进程分析---------------------" | $Ashro_saverult 250 | 251 | # 系统进程 252 | echo "------------系统进程------------------" | $Ashro_saverult 253 | echo "正在检查系统进程....." | $Ashro_saverult 254 | ps_output=$(ps aux) 255 | if [ -n "$ps_output" ]; then 256 | echo "[*] 系统进程如下:" | tee -a "$danger_file" | $Ashro_saverult 257 | echo "$ps_output" | tee -a "$danger_file" | $Ashro_saverult 258 | else 259 | echo "[*] 未发现系统进程" | $Ashro_saverult 260 | fi 261 | printf "\n" | $Ashro_saverult 262 | 263 | # 守护进程 264 | echo "------------守护进程------------------" | $Ashro_saverult 265 | echo "正在检查守护进程....." | $Ashro_saverult 266 | if [ -d "/etc/init.d" ]; then 267 | echo "[*] 系统守护进程:" | tee -a "$danger_file" | $Ashro_saverult 268 | ls -l /etc/init.d | grep "^-" | awk '{print $9}' | tee -a "$danger_file" | $Ashro_saverult 269 | else 270 | echo "[*] 未发现守护进程" | $Ashro_saverult 271 | fi 272 | printf "\n" | $Ashro_saverult 273 | 274 | # CPU和内存使用异常进程排查 275 | echo "------------CPU和内存使用异常进程排查------------------" | $Ashro_saverult 276 | 277 | # 查找CPU使用率最高的进程 278 | cpu_high_processes=$(ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 5) 279 | if [ -n "$cpu_high_processes" ]; then 280 | echo "[!!!] CPU使用率最高的进程:" | tee -a "$danger_file" | $Ashro_saverult 281 | echo "$cpu_high_processes" | tee -a "$danger_file" | $Ashro_saverult 282 | else 283 | echo "[*] 未发现CPU使用率异常的进程" | $Ashro_saverult 284 | fi 285 | 286 | # 查找内存使用率最高的进程 287 | memory_high_processes=$(ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head -n 5) 288 | if [ -n "$memory_high_processes" ]; then 289 | echo "[!!!] 内存使用率最高的进程:" | tee -a "$danger_file" | $Ashro_saverult 290 | echo "$memory_high_processes" | tee -a "$danger_file" | $Ashro_saverult 291 | else 292 | echo "[*] 未发现内存使用率异常的进程" | $Ashro_saverult 293 | fi 294 | 295 | printf "\n" | $Ashro_saverult 296 | 297 | # 隐藏进程和反弹shell类进程扫描 298 | echo "------------隐藏进程和反弹shell类进程扫描------------------" | $Ashro_saverult 299 | 300 | # 检查隐藏进程 301 | hidden_processes=$(ps aux | awk '{if($8 == "S" || $8 == "D") print $0}') 302 | if [ -n "$hidden_processes" ]; then 303 | echo "[!!!] 发现隐藏进程:" | tee -a "$danger_file" | $Ashro_saverult 304 | echo "$hidden_processes" | tee -a "$danger_file" | $Ashro_saverult 305 | else 306 | echo "[*] 未发现隐藏进程" | $Ashro_saverult 307 | fi 308 | 309 | # 检查反弹shell类进程 310 | # 查询所有监听端口的网络连接 311 | shell_processes=$(netstat -tuln | grep -E "nc -l -p|netcat|ncat|socat|shell|bind|reverse|listen|connect|exec|sh|bash|zsh|ksh|telnet|ssh|rsh|rcp|sshpass|pexpect|paramiko|plink|pscp|putty|ssh-keygen|ssh-agent|tsh|rbash|dash|mkfifo|expect|bash -c|python -c|perl -e|curl|wget|php -r|lua -e|bash -i|php -a|python -m|perl -M|ruby -e|perl -n|python -p|ruby -n|bash -s|php -l|wget -O|curl -o") 312 | if [ -n "$shell_processes" ]; then 313 | echo "[!!!] 发现反弹shell类进程:" | tee -a "$danger_file" | $Ashro_saverult 314 | echo "$shell_processes" | tee -a "$danger_file" | $Ashro_saverult 315 | else 316 | echo "[*] 未发现反弹shell类进程" | $Ashro_saverult 317 | fi 318 | 319 | printf "\n" | $Ashro_saverult 320 | 321 | 322 | # 检查进程对应的可执行文件并保存到指定目录 323 | echo "[*] 正在检查进程对应的可执行文件,并保存到目录:$webshell_file" | $Ashro_saveresult 324 | # 获取所有正在运行的进程的 PID 325 | pids=$(pgrep -d ' ' -f .) 326 | 327 | # 遍历所有 PID,复制其可执行文件到指定目录 328 | for pid in $pids; do 329 | # 获取进程对应的可执行文件路径 330 | process_executable=$(readlink -f /proc/"$pid"/exe) 331 | 332 | # 检查是否为有效路径 333 | if [ -n "$process_executable" ]; then 334 | # 获取进程名称 335 | process_name=$(basename "$process_executable") 336 | 337 | # 复制可执行文件到指定目录 338 | cp "$process_executable" "$webshell_file/$process_name-$pid" 339 | fi 340 | done 341 | 342 | echo "[*] 所有进程对应的可执行文件已保存到目录:$webshell_file" | $Ashro_saveresult 343 | 344 | echo "------------系统命令hash值打包------------------" | $Ashro_saveresult 345 | # 指定要保存CSV文件的路径和文件名 346 | csv_file="$check_dir/command_hashes.csv" 347 | # 创建CSV文件并写入标题行 348 | echo "Command Path,Hash Value" > "$csv_file" 349 | # 查找系统命令文件并计算哈希值 350 | find /bin /usr/bin -type f | while IFS= read -r file_path; do 351 | hash_value=$(md5sum "$file_path" | awk '{print $1}') 352 | echo "$file_path,$hash_value" >> "$csv_file" 353 | done 354 | 355 | echo "哈希值已保存到 $csv_file 文件中。" | $Ashro_saveresult 356 | 357 | 358 | echo "------------运行服务----------------------" | $Ashro_saveresult 359 | echo "正在检查运行服务....." | $Ashro_saveresult 360 | if command -v systemctl &>/dev/null; then 361 | if systemctl list-units --type=service --state=running &>/dev/null; then 362 | echo "[*]以下服务正在运行:" | $Ashro_saveresult 363 | systemctl list-units --type=service --state=running | awk '{print $1}' | $Ashro_saveresult 364 | else 365 | echo "未发现正在运行的服务!" | $Ashro_saveresult 366 | fi 367 | else 368 | echo "[!!!]Systemd 未安装,无法检查正在运行的服务。" | $Ashro_saveresult 369 | fi 370 | printf "\n" | $Ashro_saveresult 371 | 372 | echo "************4.关键文件************" | $Ashro_saveresult 373 | # 检查系统文件的权限变更 374 | # 保存信息到结果文件 375 | echo "------------系统文件的权限变更检查------------------" | $Ashro_saveresult 376 | echo "正在检查系统文件的权限变更....." | $Ashro_saveresult 377 | 378 | 379 | # 保存信息到结果文件 380 | echo "------------系统文件的权限变更检查------------------" | $Ashro_saveresult 381 | echo "正在检查系统文件的权限变更....." | $Ashro_saveresult 382 | 383 | # 查找最近一周内具有执行权限的普通文件,并输出文件名和修改日期 384 | changed_files=$(find / -type f -mtime -7 -executable -not -path "/tmp/Ashro*" 2>/dev/null) 385 | if [ -n "$changed_files" ]; then 386 | echo "[!!!]发现最近一周内具有执行权限的文件:" | tee -a "$danger_file" | $Ashro_saveresult 387 | echo "$changed_files" | while IFS= read -r file; do 388 | file_date=$(stat -c "%y" "$file") 389 | echo "$file ($file_date)" | tee -a "$danger_file" | $Ashro_saveresult 390 | done 391 | else 392 | echo "[*]未发现最近一周内有具有执行权限的文件" | $Ashro_saveresult 393 | fi 394 | 395 | echo | $Ashro_saveresult # 输出一个空行到结果文件中 396 | 397 | 398 | echo "------------历史命令--------------------------" | $Ashro_saveresult 399 | echo "正在检查操作系统历史命令....." | $Ashro_saveresult 400 | 401 | history_file="/root/.bash_history" 402 | if [ -s "$history_file" ]; then 403 | echo "[*]操作系统历史命令如下:" | $Ashro_saveresult 404 | cat "$history_file" | $Ashro_saveresult 405 | else 406 | echo "[!!!]未发现历史命令,请检查是否记录及已被清除" | tee -a "$danger_file" | $Ashro_saveresult 407 | fi 408 | 409 | printf "\n" | $Ashro_saveresult 410 | 411 | 412 | echo "-------------启动项-----------------------" | $Ashro_saveresult 413 | echo "-------------用户自定义启动项-----------------------" | $Ashro_saveresult 414 | echo "正在检查用户自定义启动项....." | $Ashro_saveresult 415 | chkconfig_output=$(chkconfig --list 2>/dev/null | grep -E ":on|启用" | awk '{print $1}') 416 | if [ -n "$chkconfig_output" ]; then 417 | (echo "[*]用户自定义启动项:" && echo "$chkconfig_output") | tee -a "$danger_file" | $Ashro_saveresult 418 | else 419 | echo "未发现用户自定义启动项" | $Ashro_saveresult 420 | fi 421 | printf "\n" | $Ashro_saveresult 422 | 423 | echo "-------------系统自启动项-----------------------" | $Ashro_saveresult 424 | echo "正在检查系统自启动项....." | $Ashro_saveresult 425 | systemctl_output=$(systemctl list-unit-files --type=service 2>/dev/null | awk '/enabled/ {print $1}') 426 | if [ -n "$systemctl_output" ]; then 427 | (echo "[*]系统自启动项如下:" && echo "$systemctl_output") | tee -a "$danger_file" | $Ashro_saveresult 428 | else 429 | echo "[*]未发现系统自启动项" | $Ashro_saveresult 430 | fi 431 | printf "\n" | $Ashro_saveresult 432 | 433 | echo "-------------危险启动项-----------------------" | $Ashro_saveresult 434 | echo "正在检查危险启动项....." | $Ashro_saveresult 435 | 436 | # 检查系统是否支持systemctl命令 437 | if command -v systemctl &>/dev/null; then 438 | # 使用systemctl命令获取启用的服务列表 439 | danger_startup=$(systemctl list-unit-files --type=service | grep enabled | awk '{print $1}' | grep -E "\.service$") 440 | if [ -n "$danger_startup" ]; then 441 | (echo "[!!!]发现危险启动项:" && echo "$danger_startup") | tee -a "$danger_file" | $Ashro_saveresult 442 | else 443 | echo "[*]未发现危险启动项" | $Ashro_saveresult 444 | fi 445 | else 446 | # 如果系统不支持systemctl命令,则输出提示信息 447 | echo "[!!!]系统不支持systemctl命令,无法检查启动项" | tee -a "$danger_file" | $Ashro_saveresult 448 | fi 449 | 450 | printf "\n" | $Ashro_saveresult 451 | 452 | 453 | echo "------------系统定时任务分析-------------------" | $Ashro_saveresult 454 | echo "------------查看系统定时任务-------------------" | $Ashro_saveresult 455 | echo "正在分析系统定时任务....." | $Ashro_saveresult 456 | syscrontab=$(grep -v "# run-parts" /etc/crontab 2>/dev/null | grep run-parts) 457 | if [ -n "$syscrontab" ]; then 458 | (echo "[!!!]发现存在系统定时任务:" && cat /etc/crontab ) | tee -a "$danger_file" | $Ashro_saveresult 459 | else 460 | echo "[*]未发现系统定时任务" | $Ashro_saveresult 461 | fi 462 | printf "\n" | $Ashro_saveresult 463 | 464 | echo "------------分析系统可疑定时任务-------------------" | $Ashro_saveresult 465 | echo "正在分析系统可疑任务....." | $Ashro_saveresult 466 | 467 | 468 | # 分析可疑定时任务 469 | dangersyscron=$(egrep "(chmod|useradd|groupadd|chattr|wget|curl|su|sudo|rsync).*\.(sh|pl|py|bash|ksh|csh|zsh)$" /etc/cron*/* /var/spool/cron/* 2>/dev/null) 470 | 471 | if [ -n "$dangersyscron" ]; then 472 | echo "[!!!]发现下面的定时任务可疑,请注意!!!" | tee -a "$danger_file" | $Ashro_saveresult 473 | echo "$dangersyscron" | tee -a "$danger_file" | $Ashro_saveresult 474 | else 475 | echo "[*]未发现可疑系统定时任务" | $Ashro_saveresult 476 | fi 477 | 478 | printf "\n" | $Ashro_saverult 479 | 480 | 481 | echo "------------分析用户定时任务-------------------" | $Ashro_saveresult 482 | echo "------------查看用户定时任务-------------------" | $Ashro_saveresult 483 | echo "正在查看用户定时任务....." | $Ashro_saveresult 484 | 485 | # 检查 /var/spool/cron 目录 486 | if [ -d "/var/spool/cron" ]; then 487 | for user_crontab in /var/spool/cron/*; do 488 | username=$(basename "$user_crontab") 489 | crontab_content=$(cat "$user_crontab" 2>/dev/null) 490 | if [ -n "$crontab_content" ]; then 491 | (echo "[!!!]用户 $username 的定时任务如下:" && echo "$crontab_content") | $Ashro_saveresult 492 | fi 493 | done 494 | else 495 | echo "[!!!]未找到 /var/spool/cron 目录,无法查找用户定时任务" | tee -a "$danger_file" | $Ashro_saveresult 496 | fi 497 | 498 | # 检查 /var/spool/cron/crontabs 目录 499 | if [ -d "/var/spool/cron/crontabs" ]; then 500 | for user_crontab in /var/spool/cron/crontabs/*; do 501 | username=$(basename "$user_crontab") 502 | crontab_content=$(cat "$user_crontab" 2>/dev/null) 503 | if [ -n "$crontab_content" ]; then 504 | (echo "[!!!]用户 $username 的定时任务如下:" && echo "$crontab_content") | $Ashro_saveresult 505 | fi 506 | done 507 | else 508 | echo "[!!!]未找到 /var/spool/cron/crontabs 目录,无法查找用户定时任务" | tee -a "$danger_file" | $Ashro_saveresult 509 | fi 510 | 511 | # 检查 /etc/crontab 文件 512 | if [ -f "/etc/crontab" ]; then 513 | crontab_content=$(cat /etc/crontab 2>/dev/null) 514 | if [ -n "$crontab_content" ]; then 515 | (echo "[!!!]/etc/crontab 定时任务如下:" && echo "$crontab_content") | $Ashro_saveresult 516 | fi 517 | else 518 | echo "[!!!]未找到 /etc/crontab 文件,无法查找系统定时任务" | tee -a "$danger_file" | $Ashro_saveresult 519 | fi 520 | 521 | # 检查 /etc/cron.d 目录 522 | if [ -d "/etc/cron.d" ]; then 523 | for cron_file in /etc/cron.d/*; do 524 | cron_content=$(cat "$cron_file" 2>/dev/null) 525 | if [ -n "$cron_content" ]; then 526 | (echo "[!!!]$cron_file 定时任务如下:" && echo "$cron_content") | $Ashro_saveresult 527 | fi 528 | done 529 | else 530 | echo "[!!!]未找到 /etc/cron.d 目录,无法查找系统定时任务" | tee -a "$danger_file" | $Ashro_saveresult 531 | fi 532 | 533 | # 检查 /etc/cron.hourly 目录 534 | if [ -d "/etc/cron.hourly" ]; then 535 | (echo "[!!!]/etc/cron.hourly 定时任务目录存在。") | $Ashro_saveresult 536 | else 537 | echo "[!!!]未找到 /etc/cron.hourly 目录" | tee -a "$danger_file" | $Ashro_saveresult 538 | fi 539 | 540 | # 检查 /etc/cron.daily 目录 541 | if [ -d "/etc/cron.daily" ]; then 542 | (echo "[!!!]/etc/cron.daily 定时任务目录存在。") | $Ashro_saveresult 543 | else 544 | echo "[!!!]未找到 /etc/cron.daily 目录" | tee -a "$danger_file" | $Ashro_saveresult 545 | fi 546 | 547 | # 检查 /etc/cron.weekly 目录 548 | if [ -d "/etc/cron.weekly" ]; then 549 | (echo "[!!!]/etc/cron.weekly 定时任务目录存在。") | $Ashro_saveresult 550 | else 551 | echo "[!!!]未找到 /etc/cron.weekly 目录" | tee -a "$danger_file" | $Ashro_saveresult 552 | fi 553 | 554 | # 检查 /etc/cron.monthly 目录 555 | if [ -d "/etc/cron.monthly" ]; then 556 | (echo "[!!!]/etc/cron.monthly 定时任务目录存在。") | $Ashro_saveresult 557 | else 558 | echo "[!!!]未找到 /etc/cron.monthly 目录" | tee -a "$danger_file" | $Ashro_saveresult 559 | fi 560 | 561 | printf "\n" | $Ashro_saveresult 562 | 563 | 564 | echo "------------查看可疑用户定时任务-------------------" | $Ashro_saveresult 565 | echo "正在分析可疑用户定时任务....." | $Ashro_saverult 566 | danger_crontab=$(crontab -l 2>/dev/null | egrep "((chmod|useradd|groupadd|chattr|wget|curl|su|sudo|rsync).*\.(sh|pl|py|bash|ksh|csh|zsh)))") 567 | if [ -n "$danger_crontab" ]; then 568 | (echo "[!!!]发现可疑定时任务,请注意!!!" && echo "$danger_crontab") | tee -a "$danger_file" | $Ashro_saveresult 569 | else 570 | echo "[*]未发现可疑定时任务" | $Ashro_saverult 571 | fi 572 | printf "\n" | $Ashro_saverult 573 | 574 | echo "------------最近24小时内变动的文件---------------------" | $Ashro_saveresult 575 | 576 | changed_files=$(find / -type f -mtime 0 2>/dev/null | grep -E "\.(py|sh|per|pl|php|asp|jsp)$") 577 | if [ -n "$changed_files" ]; then 578 | echo "最近24小时内发现以下文件有改变:" | $Ashro_saverult 579 | echo "$changed_files" | tee -a "$danger_file" | $Ashro_saverult 580 | else 581 | echo "未发现最近24小时内有改变的文件" | $Ashro_saveresult 582 | fi 583 | printf "\n" | $Ashro_saveresult 584 | 585 | echo "------------CPU分析-----------------" | $Ashro_saveresult 586 | echo "------------CPU情况-----------------" | $Ashro_saveresult 587 | echo "正在检查CPU相关信息....." | $Ashro_saveresult 588 | (echo "CPU硬件信息如下:" && cat /proc/cpuinfo ) | $Ashro_saveresult 589 | (echo "CPU使用情况如下:" && ps -aux --sort=-%cpu | awk 'NR<=5 {print $1,$2,$3,$NF}') | $Ashro_saveresult 590 | printf "\n" | $Ashro_saveresult 591 | echo "------------占用CPU前5进程-----------------" | $Ashro_saveresult 592 | echo "正在检查占用CPU前5资源的进程....." | $Ashro_saveresult 593 | (echo "占用CPU资源前5进程:" && ps -aux --sort=-%cpu | head -6 | tail -n +2) | $Ashro_saveresult 594 | printf "\n" | $Ashro_saveresult 595 | echo "------------占用CPU较大进程-----------------" | $Ashro_saveresult 596 | echo "正在检查占用CPU较大的进程....." | $Ashro_saveresult 597 | pscpu=$(ps -aux --sort=-%cpu | awk '{if($3>=20) print $0}' | tail -n +2) 598 | if [ -n "$pscpu" ];then 599 | echo "[!!!]以下进程占用的CPU超过20%:" && echo "UID PID PPID C STIME TTY TIME CMD" 600 | echo "$pscpu" | tee -a 20.2.3_pscpu.txt | tee -a "$danger_file" | $Ashro_saveresult 601 | else 602 | echo "[*]未发现进程占用资源超过20%" | $Ashro_saveresult 603 | fi 604 | printf "\n" | $Ashro_saverult 605 | 606 | 607 | echo "------------日志分析------------------------------" | $Ashro_saveresult 608 | 609 | echo "------------查看日志配置----------------------" | $Ashro_saveresult 610 | echo "正在查看日志配置....." | $Ashro_saveresult 611 | logconf=$(cat /etc/rsyslog.conf 2>/dev/null | grep -vE "^$|^#" | tee /dev/tty) 612 | if [ -n "$logconf" ]; then 613 | echo "[*]日志配置如下:" | $Ashro_saveresult 614 | echo "$logconf" | $Ashro_saveresult 615 | else 616 | echo "[!!!]未发现日志配置文件" | tee -a "$danger_file" | $Ashro_saveresult 617 | fi 618 | printf "\n" | $Ashro_saveresult 619 | 620 | echo "------------日志是否存在----------------------" | $Ashro_saveresult 621 | echo "正在分析日志文件是否存在....." | $Ashro_saveresult 622 | if ls /var/log/* &>/dev/null; then 623 | echo "[*]日志文件存在" | $Ashro_saveresult 624 | else 625 | echo "[!!!]日志文件不存在,请分析是否被清除!" | tee -a "$danger_file" | $Ashro_saveresult 626 | fi 627 | printf "\n" | $Ashro_saveresult 628 | 629 | echo "------------日志审核是否开启-------------------" | $Ashro_saveresult 630 | echo "正在分析日志审核是否开启....." 631 | if systemctl is-active auditd.service &>/dev/null; then 632 | echo "[*]系统日志审核功能已开启,符合要求" | $Ashro_saveresult 633 | else 634 | echo "[!!!]系统日志审核功能已关闭,不符合要求。建议开启日志审核。可使用以下命令开启:systemctl start auditd.service" | tee -a "$danger_file" | $Ashro_saveresult 635 | fi 636 | printf "\n" | $Ashro_saveresult 637 | 638 | echo "------------打包日志-------------------" | $Ashro_saveresult 639 | echo "正在打包日志......" | $Ashro_saveresult 640 | 641 | # 检查不同的 Linux 发行版,使用相应的打包命令,并将输出重定向到 /dev/null 642 | if command -v zip &>/dev/null; then 643 | # 如果 zip 命令可用,则使用 zip 进行打包,并将输出重定向到 /dev/null 644 | zip -r "${log_dir}system_log.zip" /var/log/ &>/dev/null 645 | if [ $? -eq 0 ]; then 646 | echo "[*]日志打包成功" | $Ashro_saveresult 647 | else 648 | echo "[!!!]日志打包失败,请导出日志" | tee -a "$danger_file" | $Ashro_saveresult 649 | fi 650 | elif command -v tar &>/dev/null; then 651 | # 如果 zip 命令不可用,尝试使用 tar 命令进行打包,并将输出重定向到 /dev/null 652 | tar -czf "${log_dir}system_log.tar.gz" /var/log/ &>/dev/null 653 | if [ $? -eq 0 ]; then 654 | echo "[*]日志打包成功" | $Ashro_saveresult 655 | else 656 | echo "[!!!]日志打包失败,请导出日志" | tee -a "$danger_file" | $Ashro_saveresult 657 | fi 658 | else 659 | # 如果 zip 和 tar 命令都不可用,提示用户手动导出日志 660 | echo "[!!!]找不到适合的打包工具,请手动导出日志" | tee -a "$danger_file" > /dev/null 661 | fi 662 | 663 | 664 | echo "------------secure 日志分析-------------------" | $Ashro_saveresult 665 | echo "------------成功登录-------------------" | $Ashro_saveresult 666 | echo "正在检查日志中成功登录的情况....." | $Ashro_saveresult 667 | loginsuccess=$(grep "Accepted password" /var/log/secure* 2>/dev/null | awk '{print $1,$2,$3,$9,$11}') 668 | if [ -n "$loginsuccess" ]; then 669 | echo "[*]日志中分析到以下用户成功登录:" | tee -a "$danger_file" | $Ashro_saveresult 670 | echo "$loginsuccess" | $Ashro_saveresult 671 | echo "[*]登录成功的IP及次数如下:" | tee -a "$danger_file" | $Ashro_saveresult 672 | grep "Accepted " /var/log/secure* | awk '{print $11}' | sort | uniq -c 673 | echo "[*]登录成功的用户及次数如下:" | tee -a "$danger_file" | $Ashro_saveresult 674 | grep "Accepted" /var/log/secure* | awk '{print $9}' | sort | uniq -c 675 | else 676 | echo "[*]日志中未发现成功登录的情况" | $Ashro_saveresult 677 | fi 678 | printf "\n" | $Ashro_saveresult 679 | 680 | echo "------------登录失败-------------------" | $Ashro_saveresult 681 | echo "正在检查日志中登录失败的情况....." | $Ashro_saveresult 682 | loginfailed=$(grep "Failed password" /var/log/secure* 2>/dev/null | awk '{print $1,$2,$3,$9,$11}') 683 | if [ -n "$loginfailed" ]; then 684 | echo "[!!!]日志中发现以下登录失败的情况:" | tee -a "$danger_file" | $Ashro_saveresult 685 | echo "$loginfailed" | tee -a "$danger_file" | $Ashro_saveresult 686 | echo "[!!!]登录失败的IP及次数如下:" | tee -a "$danger_file" | $Ashro_saveresult 687 | grep "Failed password" /var/log/secure* | awk '{print $11}' | sort | uniq -c 688 | echo "[!!!]登录失败的用户及次数如下:" | tee -a "$danger_file" | $Ashro_saveresult 689 | grep "Failed password" /var/log/secure* | awk '{print $9}' | sort | uniq -c 690 | else 691 | echo "[*]日志中未发现登录失败的情况" | $Ashro_saveresult 692 | fi 693 | printf "\n" | $Ashro_saveresult 694 | 695 | echo "-----------本机登录情况-----------------" | $Ashro_saveresult 696 | echo "正在检查本机登录情况....." | $Ashro_saveresult 697 | secure_log=$(find /var/log/ -type f \( -name "secure" -o -name "auth.log" -o -name "messages" \) 2>/dev/null | head -n1) 698 | if [ -n "$secure_log" ]; then 699 | systemlogin=$(awk '/sshd:session.*session opened/ {print $1,$2,$3,$11}' "$secure_log") 700 | if [ -n "$systemlogin" ]; then 701 | echo "[*]本机登录情况:" | $Ashro_saveresult 702 | echo "$systemlogin" | $Ashro_saveresult 703 | echo "[*]本机登录账号及次数如下:" | $Ashro_saveresult 704 | awk '/sshd:session.*session opened/ {print $11}' "$secure_log" | sort -nr | uniq -c 705 | else 706 | echo "[!!!]未发现在本机登录退出情况,请注意!!!" | $Ashro_saveresult 707 | fi 708 | else 709 | echo "[!!!]未找到安全日志文件,请注意!!!" | tee -a "$danger_file" | $Ashro_saveresult 710 | fi 711 | printf "\n" | $Ashro_saveresult 712 | 713 | 714 | echo "------------新增用户组-----------------" | $Ashro_saveresult 715 | echo "正在检查新增用户组....." | $Ashro_saveresult 716 | 717 | # 检查新增用户组 718 | newgroup_log="" 719 | if [ -f "/var/log/secure" ]; then 720 | newgroup_log="/var/log/secure" 721 | elif [ -f "/var/log/auth.log" ]; then 722 | newgroup_log="/var/log/auth.log" 723 | elif [ -f "/var/log/messages" ]; then 724 | newgroup_log="/var/log/messages" 725 | fi 726 | 727 | if [ -n "$newgroup_log" ]; then 728 | newgroup=$(awk '/new group/ {print $1,$2,$3,$9}' "$newgroup_log") 729 | 730 | if [ -n "$newgroup" ]; then 731 | echo "[!!!]日志中发现新增用户组:" | tee -a "$danger_file" | $Ashro_saveresult 732 | echo "$newgroup" | tee -a "$danger_file" | $Ashro_saveresult 733 | (echo "[*]新增用户组及次数如下:" && awk '/new group/ {print $8}' "$newgroup_log" | awk -F '[=,]' '{print $2}' | sort | uniq -c) | tee -a "$danger_file" | $Ashro_saveresult 734 | else 735 | echo "[*]日志中未发现新增加用户组" | $Ashro_saveresult 736 | fi 737 | fi 738 | 739 | printf "\n" | $Ashro_saverult 740 | 741 | 742 | echo "------------message日志分析---------------" | $Ashro_saveresult 743 | echo "------------传输文件--------------------" | $Ashro_saveresult 744 | echo "正在检查传输文件....." | $Ashro_saveresult 745 | zmodem=$(grep "ZMODEM:.*BPS" /var/log/message*) 746 | if [ -n "$zmodem" ]; then 747 | (echo "[!!!]传输文件情况:" && echo "$zmodem") | tee -a $danger_file | $Ashro_saveresult 748 | else 749 | echo "[*]日志中未发现传输文件" | $Ashro_saveresult 750 | fi 751 | printf "\n" | $Ashro_saveresult 752 | 753 | 754 | echo "-----------cron日志分析---------------" | $Ashro_saveresult 755 | 756 | echo "------------定时下载-----------------" | $Ashro_saveresult 757 | echo "正在分析定时下载....." 758 | cron_download=$(grep "wget\|curl" /var/log/cron /var/log/cron.* 2>/dev/null) 759 | if [ -n "$cron_download" ]; then 760 | (echo "[!!!]定时下载情况:" && echo "$cron_download") | tee -a "$danger_file" | $save_result_command 761 | else 762 | echo "[*]未发现定时下载情况" | $Ashro_saveresult 763 | fi 764 | printf "\n" | $Ashro_saveresult 765 | 766 | 767 | echo "------------定时执行脚本-----------------" | $Ashro_saveresult 768 | echo "正在分析定时执行脚本....." | $Ashro_saveresult 769 | cron_shell=$(grep -E "\.py$|\.sh$|\.pl$" /var/log/cron* 2>/dev/null) 770 | if [ -n "$cron_shell" ]; then 771 | (echo "[!!!]发现定时执行脚本:" && echo "$cron_shell") | tee -a "$danger_file" | $Ashro_saveresult 772 | else 773 | echo "[*]未发现定时执行脚本" | $Ashro_saveresult 774 | fi 775 | printf "\n" | $Ashro_saveresult 776 | 777 | echo "------------btmp日志分析----------------------" | $Ashro_saveresult 778 | echo "------------错误登录日志分析-----------------" | $Ashro_saveresult 779 | echo "正在分析错误登录日志....." | $Ashro_saveresult 780 | lastb=$(lastb 2>/dev/null) 781 | if [ -n "$lastb" ]; then 782 | (echo "[*]错误登录日志如下:" && echo "$lastb") | tee -a "$danger_file" | $Ashro_saveresult 783 | else 784 | echo "[*]未发现错误登录日志" | $Ashro_saveresult 785 | fi 786 | printf "\n" | $Ashro_saveresult 787 | 788 | echo "------------lastlog日志分析----------------------" | $Ashro_saveresult 789 | echo "------------所有用户最后一次登录日志分析-----------------" | $Ashro_saveresult 790 | echo "正在分析所有用户最后一次登录日志....." | $Ashro_saveresult 791 | lastlog=$(lastlog 2>/dev/null) 792 | if [ -n "$lastlog" ]; then 793 | (echo "[*]所有用户最后一次登录日志如下:" && echo "${lastlog}") | tee -a "$danger_file" | $Ashro_saveresult 794 | else 795 | echo "[*]未发现所有用户最后一次登录日志" | $Ashro_saveresult 796 | fi 797 | printf "\n" | $Ashro_saveresult 798 | 799 | echo "------------wtmp日志分析----------------------" | $Ashro_saveresult 800 | echo "------------所有登录用户分析-----------------" | $Ashro_saveresult 801 | echo "正在检查历史上登录到本机的用户:" | $Ashro_saveresult 802 | lasts=$(last | grep pts | grep -vw :0 2>/dev/null) 803 | if [ -n "$lasts" ]; then 804 | (echo "[*]历史上登录到本机的用户如下:" && echo "$lasts") | $Ashro_saveresult 805 | else 806 | echo "[*]未发现历史上登录到本机的用户信息" | $Ashro_saveresult 807 | fi 808 | printf "\n" | $Ashro_saveresult 809 | 810 | echo "------------sshd配置文件-------------------" | $Ashro_saveresult 811 | echo "------------sshd配置-------------------" | $Ashro_saveresult 812 | echo "正在检查sshd配置....." | $Ashro_saveresult 813 | sshdconfig=$(grep -vE "^$|^#" /etc/ssh/sshd_config 2>/dev/null) 814 | if [ -n "$sshdconfig" ]; then 815 | (echo "[*]sshd配置文件如下:" && echo "$sshdconfig") | $Ashro_saveresult 816 | else 817 | echo "[!]未发现sshd配置文件" | $Ashro_saveresult 818 | fi 819 | printf "\n" | $Ashro_saveresult 820 | 821 | 822 | # Alias 后门检测 823 | echo "正在检测 Alias 后门..." | tee -a "$danger_file" | $Ashro_saveresult 824 | 825 | # 列出当前用户的别名并搜索其中是否包含可疑命令 826 | if [ -f ~/.bashrc ]; then 827 | echo "检查 ~/.bashrc..." | tee -a "$danger_file" | $Ashro_saveresult 828 | grep -E 'alias[[:space:]]+(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' ~/.bashrc | tee -a "$danger_file" | $Ashro_saveresult 829 | fi 830 | 831 | if [ -f ~/.bash_profile ]; then 832 | echo "检查 ~/.bash_profile..." | tee -a "$danger_file" | $Ashro_saveresult 833 | grep -E 'alias[[:space:]]+(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' ~/.bash_profile | tee -a "$danger_file" | $Ashro_saveresult 834 | fi 835 | 836 | if [ -f ~/.profile ]; then 837 | echo "检查 ~/.profile..." | tee -a "$danger_file" | $Ashro_saveresult 838 | grep -E 'alias[[:space:]]+(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' ~/.profile | tee -a "$danger_file" | $Ashro_saveresult 839 | fi 840 | 841 | # SSH 后门检测 842 | echo "正在检测 SSH 后门..." | tee -a "$danger_file" | $Ashro_saveresult 843 | 844 | # 检查 SSH 配置文件是否包含可疑命令 845 | if [ -f ~/.ssh/config ]; then 846 | echo "检查 ~/.ssh/config..." | tee -a "$danger_file" | $Ashro_saveresult 847 | grep -E '(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' ~/.ssh/config | tee -a "$danger_file" | $Ashro_saveresult 848 | fi 849 | 850 | # SSH Wrapper 后门检测 851 | echo "正在检测 SSH Wrapper 后门..." | tee -a "$danger_file" | $Ashro_saveresult 852 | 853 | # 检查 SSH 授权密钥文件是否包含可疑命令 854 | if [ -f ~/.ssh/authorized_keys ]; then 855 | echo "检查 ~/.ssh/authorized_keys..." | tee -a "$danger_file" | $Ashro_saveresult 856 | grep -E 'command="(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' ~/.ssh/authorized_keys | tee -a "$danger_file" | $Ashro_saveresult 857 | fi 858 | 859 | 860 | # 检查特定目录中是否存在可疑文件 861 | if [ -d /var/tmp ]; then 862 | echo "检查 /var/tmp..." | tee -a "$danger_file" | $Ashro_saveresult 863 | ls -la /var/tmp | grep -E '(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' | tee -a "$danger_file" | $Ashro_saveresult 864 | fi 865 | 866 | # 检查系统日志中是否包含可疑内容 867 | echo "检查系统日志..." | $Ashro_saveresult 868 | if [ -f /var/log/auth.log ]; then 869 | grep -E '(wget|curl|bash|sh|nc|netcat|python|perl|php|ruby|java|gcc|g\+\+)' /var/log/auth.log | tee -a "$danger_file" | $Ashro_saveresult 870 | fi 871 | 872 | # 检查是否安装并配置了 iptables 873 | if command -v iptables &> /dev/null; then 874 | echo "检测到 iptables 防火墙" | $Ashro_saveresult 875 | echo "正在检查是否存在 any 到 any 的策略..." | $Ashro_saveresult 876 | 877 | # 检查是否存在 any 到 any 的策略 878 | if iptables -L | grep -q 'Chain INPUT (policy ACCEPT)' && \ 879 | iptables -L | grep -q 'Chain FORWARD (policy ACCEPT)' && \ 880 | iptables -L | grep -q 'Chain OUTPUT (policy ACCEPT)'; then 881 | echo "未发现 any 到 any 的策略" | $Ashro_saveresult 882 | else 883 | echo "iptables警告:检测到 any 到 any 的策略" | tee -a "$danger_file" | $Ashro_saveresult 884 | fi 885 | 886 | echo "显示最近修改的 5 条规则:" 887 | iptables -L --line-numbers | head -n 6 | tee -a "$danger_file" | $Ashro_saveresult 888 | 889 | # 检查是否安装并配置了 ufw 890 | elif command -v ufw &> /dev/null; then 891 | echo "检测到 ufw 防火墙" | $Ashro_saveresult 892 | echo "正在检查是否存在 any 到 any 的策略..." | $Ashro_saveresult 893 | 894 | # 检查是否存在 any 到 any 的策略 895 | if ufw status | grep -q 'Anywhere'; then 896 | echo "警告:ufw检测到 any 到 any 的策略" | tee -a "$danger_file" | $Ashro_saveresult 897 | else 898 | echo "未发现 any 到 any 的策略" | $Ashro_saveresult 899 | fi 900 | 901 | echo "显示最近修改的 5 条规则:" | tee -a "$danger_file" | $Ashro_saveresult 902 | ufw status numbered | head -n 6| tee -a "$danger_file" | $Ashro_saveresult 903 | 904 | # 检查是否安装并配置了 firewalld 905 | elif command -v firewalld &> /dev/null; then 906 | echo "检测到 firewalld 防火墙" | $Ashro_saveresult 907 | echo "正在检查是否存在 any 到 any 的策略..." | $Ashro_saveresult 908 | 909 | # 检查是否存在 any 到 any 的策略 910 | if firewall-cmd --list-all | grep -q 'rule family="ipv4" source address="0.0.0.0/0"'; then 911 | echo "警告:firewall检测到 any 到 any 的策略" | tee -a "$danger_file" | $Ashro_saveresult 912 | else 913 | echo "未发现 any 到 any 的策略" | $Ashro_saveresult 914 | fi 915 | 916 | echo "显示最近修改的 5 条规则:" 917 | firewall-cmd --list-all | grep -Po 'rule.*' | head -n 5 918 | 919 | # 检查是否安装并配置了 nftables 920 | elif command -v nft &> /dev/null; then 921 | echo "检测到 nftables 防火墙"| $Ashro_saveresult 922 | echo "正在检查是否存在 any 到 any 的策略..."| $Ashro_saveresult 923 | 924 | # 检查是否存在 any 到 any 的策略 925 | if nft list ruleset | grep -q 'ip saddr 0.0.0.0/0'; then 926 | echo "警告:nftables检测到 any 到 any 的策略"| tee -a "$danger_file" | $Ashro_saveresult 927 | else 928 | echo "未发现 any 到 any 的策略"| $Ashro_saveresult 929 | fi 930 | 931 | echo "显示最近修改的 5 条规则:"| tee -a "$danger_file" | $Ashro_saveresult 932 | nft list ruleset | head -n 6| tee -a "$danger_file" | $Ashro_saveresult 933 | 934 | # 如果没有安装支持的防火墙 935 | else 936 | echo "未检测到支持的防火墙"| tee -a "$danger_file" | $Ashro_saveresult 937 | fi 938 | 939 | echo "检查结束!!!" | $Ashro_saveresult 940 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |