我意识到我参加这个聚会已经很晚了,但是我之前对 AUTH 声明可能超过 3 行的评论让我感到疑惑。
我采取了一种略有不同的方法,其中我做出了最小的假设(基于对日志文件内容的有限了解):
- 每个 IP 地址有一个用户(如果他们位于防火墙后面,则可能不是这样)
- 对于每个 AUTH 条目,都应该有一个来自同一 IP 地址的“好”用户条目
- 在日志文件中有条目的 IP 地址的排序列表将显示对发出“错误”请求的任何 IP 地址的“用户”请求多于“授权”请求
如果这些假设是合理/正确的,那么一个简单的 bash 脚本可以很好地为您提供您想要的内容(这是一个未正确登录的用户列表 - 这并不是您所要求的):
#!/bin/bash
# first, find all the "correct" IP addresses that did the login "right", and sort by IP address:
grep -F "AUTH TLS" $1 | awk '{print $1}' | sort > goodLogins
# now find all the lines in the log file with USER and sort by IP address
grep USER $1 | awk '{print $1}' | sort > userLogins
# now see if there were user logins that didn't correspond to a "good" login:
echo The following lines in the log file did not have a corresponding AUTH statement:
echo
sdiff goodLogins userLogins | grep "[<>]" | awk '{print $2 ".*USER"}' > badUsers
grep -f badUsers $1
echo -----
请注意,这会留下您可能想要删除的三个临时文件(goodLogins、userLogins、badUsers)。我假设您知道如何使用上述代码创建一个文本文件,将其设置为可执行文件 ( chmod u+x scrubLog
),并使用日志文件的名称作为参数 ( ./scrubLog proftpd.log.2
) 运行它。
享受!
PS - 我不确定您所说的“正确登录”是什么意思,但还有其他方法可以强制执行良好的行为。例如,您可以阻止端口 21,因此只有 sftp(端口 22)请求通过,您可以阻止匿名 ftp,......但这不是您要问的。