提取登录失败IP应匹配Failed password或Invalid user且含from的行,用awk遍历字段提取IPv4地址:awk '/Failed password|Invalid user/ && /from/ {for(i=1;i

怎么从 auth.log 提取登录失败的 IP
关键不是“找日志”,而是准确识别失败事件。Ubuntu/Debian 默认用 auth.log,CentOS/RHEL 是 /var/log/secure,先确认路径:
ls -l /var/log/auth.log /var/log/secure 2>/dev/null
。失败登录常见匹配模式是 Failed password(SSH)或 Invalid user,但注意:同一行可能含多个 IP,要提取 IPv4 地址段,避免误抓端口号或日志前缀。推荐用 awk 配合正则:
iptables
- 用
sudo visudo添加免密指令,例如:%admin ALL=(root) NOPASSWD: /sbin/iptables -I f2b-ssh *, /sbin/iptables -D f2b-ssh *
- 封禁前检查该 IP 是否已在链中,避免重复插入导致规则错位:
sudo iptables -C f2b-ssh -s "$ip" -j REJECT 2>/dev/null || sudo iptables -I f2b-ssh -s "$ip" -j REJECT
- 必须创建专用链(如
f2b-ssh),并在INPUT链中插入跳转,否则重启后失效且干扰主策略
。另外,iptables 规则不持久,需配合 iptables-save 或使用 netfilter-persistent。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
为什么统计频率别设成每分钟一次
高频扫描类攻击(如暴力破解)常在数秒内发出几十次请求,但日志刷盘有延迟,auth.log 可能批量写入。若脚本每分钟跑一次,可能漏掉中间批次;设成每 5 分钟反而更稳——既能覆盖典型攻击窗口,又避免 grep 频繁读大日志拖慢系统。更关键是:用 logrotate 的 postrotate 触发脚本,比 cron 更精准,因为只在日志切片后处理新增内容。示例片段:
/var/log/auth.log {<br> daily<br> postrotate<br> /usr/local/bin/block-failed-ips.sh<br> endscript<br>}










