fail2ban 中文手册

  • 内容
  • 评论
  • 相关

Fail2ban
原文:
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8

译者:blvming <blvming@gmail.com>
blog:www.sphinxsearch.org

fail2ban 中文手册

1、简介
1.1 问题
1.2 解决办法
2、安装
2.1 系统要求
2.2 在GNU/Linux系统上源码安装
2.3 Debian
2.4 Gentoo
2.5 Fedora Core
2.6 Mac OS X
3、 使用
3.1 定义
3.2 服务端
3.3 客户端
4、配置
4.1 常用配置
4.2 jail配置
4.2.1 Jail 配置选项
4.3 过滤
4.4 动作
5、测试
6、软件限制
6.1 响应时间

-------------------------------------

1、简介

出现的问题
暴力破解入侵经常出现在 SSH服务器和其他internet服务上(诸如:ftp,pop..),自动脚本会使用多种组合的用户名和密码(暴力破解,字典法破译)
并且通常它们会改变默认的端口。此外,分析你的日志不仅是费时的,而且也很困难!Fail2ban不仅可以使用自动识别可能的暴力入侵,而且可按照快速且简易
的用户自定义规则去去分析这些东东。
解决办法
日志文件包含了有趣的信息,特别是失败的登录。这些信息可以用来阻止那些攻击的主机。这恰好是Fail2ban所做的。它能扫描日志且根据规则模式来检测可能的
入侵然后执行相应的动作。通常,它是一组基于防火墙链添加新规则购车构成,并发送e-mail通知系统管理员。

下面是Fail2ban最有效的特性列表:
@ client/server
@ 多线程
@ Gamin 支持(译者注:Gamin是用于监视文件和目录是否更改的服务工具)
@ 自动日期时间格式
@ 在logpath选型中支持通配符
@ 支持大量服务(sshd,apache,qmail,proftpd,sasl,etc)
@ 支持几种动作(iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(邮件通知),等)

Fail2ban代码已从0.6.x版本起全部重写,且全部使用python故可工作于大多数 *nix系统

安装

安装需求
为使用Fail2ban,需要下列软件支持:
@ Python >=2.4
警告:python 2.4打开syslog套接字时会发生错误,这是python的一个bug,如果你想使用“logtarget= SYSLOG”,请使用更新版本的python如2.5

下列软件是可选但是推荐的

@ iptables
@ shorewall
@ tcp-wrappers
@ 一种email工具
@ Gamin——文件更改监视器

你很可能需要最少一个防火墙软件,比如iptables或shorewall。假如你需要的软件没有被支持,欢迎随时和作者联系。
Gamin 是一个文件更改监视器,Gamin极大的得益于一个“inotity”中断内核("inotify"-enabled kernel),因而,动态轮询不再是获取文件更改的必需条件!

在GNU/Linux 系统上源码安装

为了编译Fail2ban,你需要下载最新的源码。当获取后,你可以该改变你的源码目录,并执行下列命令:

tar xvjf fail2ban-x.x.x.tar.bz2

你会在当前工作目录下得到一个Fail2ban的解压后的源码目录。你必须移动到新的目录中。
现在以root用户执行安装:

./setup.py install

Fail2ban 会安装在 /usr/share/fail2ban/ 和 /usr/bin/。你必须把 config/下的内容复制到 /etc/fail2ban/下(非 0.8.1版本)。现在,你
可以使用这个软件了。

把fail2ban整合进 INIT-process(译者注:linux的/etc/init.d/下)

# cd /usr/local/src/fail2ban-0.8.1/files

复制初始化脚本到你发行版下的 /etc/init.d 目录下

# cp suse-initd /etc/init.d/fail2ban
# chmod 755 /etc/init.d/fail2ban

@ [默认的debian脚本当前不在源码文件中,但 deb-package是可用的]

这里有一个官方的deb-package(为了那些想从源码安装的),希望它能增加或替换通用的init-script

-----------------
#! /bin/sh
### BEGIN INIT INFO
# Provides: fail2ban
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $time $network $syslog iptables firehol shorewall ipmasq
# Should-Stop: $network $syslog iptables firehol shorewall ipmasq
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop fail2ban
# Description: Start/stop fail2ban, a daemon scanning the log files and
# banning potential attackers.
### END INIT INFO

# Author: Aaron Isotton <aaron@isotton.com>
# Modified: by Yaroslav Halchenko <debian@onerussian.com>
# reindented + minor corrections + to work on sarge without modifications
#
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="authentication failure monitor"
NAME=fail2ban

# fail2ban-client is not a daemon itself but starts a daemon and
# loads its with configuration
DAEMON=/usr/bin/$NAME-client
SCRIPTNAME=/etc/init.d/$NAME

# Ad-hoc way to parse out socket file name
SOCKFILE=`grep -h '^[^#]*socket *=' /etc/$NAME/$NAME.conf /etc/$NAME/$NAME.local 2>/dev/null \
| tail -n 1 | sed -e 's/.*socket *= *//g' -e 's/ *$//g'`
[ -z "$SOCKFILE" ] && SOCKFILE='/tmp/fail2ban.sock'

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS="$FAIL2BAN_OPTS"

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Predefine what can be missing from lsb source later on -- necessary to run
# on sarge. Just present it in a bit more compact way from what was shipped
log_daemon_msg () {
[ -z "$1" ] && return 1
echo -n "$1:"
[ -z "$2" ] || echo -n " $2"
}

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
# Actually has to (>=2.0-7) present in sarge. log_daemon_msg is predefined
# so we must be ok
. /lib/lsb/init-functions

#
# Shortcut function for abnormal init script interruption
#
report_bug()
{
echo $*
echo "Please submit a bug report to Debian BTS (reportbug fail2ban)"
exit 1
}

#
# Helper function to check if socket is present, which is often left after
# abnormal exit of fail2ban and needs to be removed
#
check_socket()
{
# Return
# 0 if socket is present and readable
# 1 if socket file is not present
# 2 if socket file is present but not readable
# 3 if socket file is present but is not a socket
[ -e "$SOCKFILE" ] || return 1
[ -r "$SOCKFILE" ] || return 2
[ -S "$SOCKFILE" ] || return 3
return 0
}

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
do_status && return 1

if [ -e "$SOCKFILE" ]; then
log_failure_msg "Socket file $SOCKFILE is present"
return 2
fi

start-stop-daemon --start --quiet --chuid root --exec $DAEMON -- \
$DAEMON_ARGS start > /dev/null\
|| return 2

return 0
}

#
# Function that checks the status of fail2ban and returns
# corresponding code
#
do_status()
{
$DAEMON ping > /dev/null
return $?
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
$DAEMON status > /dev/null || return 1
$DAEMON stop > /dev/null || return 2

# now we need actually to wait a bit since it might take time
# for server to react on client's stop request. Especially
# important for restart command on slow boxes
count=1
while do_status && [ $count -lt 60 ]; do
sleep 1
count=$(($count+1))
done
[ $count -lt 60 ] || return 3 # failed to stop

return 0
}

#
# Function to reload configuration
#
do_reload() {
$DAEMON reload > /dev/null && return 0 || return 1
return 0
}

# yoh:
# shortcut function to don't duplicate case statements and to don't use
# bashisms (arrays). Fixes #368218
#
log_end_msg_wrapper()
{
[ $1 -lt $2 ] && value=0 || value=1
log_end_msg $value
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
[ "$VERBOSE" != no ] && log_end_msg_wrapper $? 2
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
[ "$VERBOSE" != no ] && log_end_msg_wrapper $? 2
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
log_end_msg_wrapper $? 1
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;

reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;

status)
log_daemon_msg "Status of $DESC"
do_status
case $? in
0) log_success_msg " $NAME is running" ;;
255)
check_socket
case $? in
1) log_warning_msg " $NAME is not running" ;;
0) log_failure_msg " $NAME is not running but $SOCKFILE exists" ;;
2) log_failure_msg " $SOCKFILE not readable, status of $NAME is unknown";;
3) log_failure_msg " $SOCKFILE exists but not a socket, status of $NAME is unknown";;
*) report_bug "Unknown return code from $NAME:check_socket.";;
esac
;;
*) report_bug "Unknown $NAME status code"
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3
;;
esac

:

------------

最后编辑这个文件,并调整fail2ban-client和fail2ban-server的路径,并执行chkconfig 和update-rc.d 又或手工创建一个符号链接

chkconfig -a fail2ban

or

update-rc.d fail2ban defaults

or

ln -s /etc/init.d/fail2ban /etc/rc2.d/S20fail2ban ...

整合fail2ban到日志循环中

创建文件:"/etc/logrotate.d/fail2ban":

----------
/var/log/fail2ban.log {
weekly
rotate 7
missingok
compress
postrotate
/usr/local/bin/fail2ban-client reload 1>/dev/null || true
endscript
}
-----------------

fail2ban-client的路径是你调整过后的(#用whereis fail2ban-client查看)

Debian
在基于debian系统下安装fail2ban是非常畅快的。以root用户执行下列命令安装不稳定的debian版本

# apt-get install fail2ban

或从 http://packages.debian.org/sid/fail2ban/all/download 下载一个debian包手工安装

# dpkg -i fail2ban_0.8.1-1_all.deb

Gentoo
Fail2ban 在Portage中可获得,要安装它,只需要执行

emerge fail2ban

FAQ中有更多的关于fail2ban在各种发行版中的使用,如: debian,radhat,gentoo

Fedora core

在基于Fedora core9+系统总安装fail2ban也是非常爽的。以root用户执行下面的命令

yum install fail2ban

Mac OS X

查看 HOWTO Mac OS X Server (10.4)
或 HOWTO Mac OS X Server (10.5)

用法
--------------------------------
定义:

在使用前,很有必要阐明在区块中的一些约定

filter :filter定义了一条与错误记录模式相对应或其他表达式的正则表达式
action :action定义了一些在不同时刻执行的命令
jail :jail是由 一个filter和一个或多个action组成。fail2ban可以同时操作多个jail
client : 查看相关fail2ban-client脚本
server : 查看相关fail2ban-server脚本

Server

Fail2ban由2部分组成:client和server。server是多线程的并用来监听unix socket的命令。server自己多配置文件毫无所知。因此,在启动时,server处于没有jail定义的默认状态。下列是fail2ban-server有效选项

------------
-b start in background(后台启动)
-f start in foreground(前台启动)
-s socket path(套接字路径)
-x force execution of the server(强制执行server)
-h, --help display this help message(显示帮助信息)
-V, --version print the version(打印版本)
-----------

至于fail2ban-server,-s选项可能是最重要之一,用来设置socket路径。因此,它可以在不同socket用来运行多个实例。然而这不是必要的,因为
fail2ban可以同时运行多个jail配置

假如 fail2ban-server 崩溃了(可能吗?^_^)那很可能是因为socket 文件没有正确的移除。-x选项可以在启动前删除socket文件。如果正在运行服务器的socket文件
被移除,它是不可能再和server进行通信的。

Server操纵 SIGTERM和SIGINT信号。当接收到这些信号时。fail2ban-server会漂亮的退出!

Client

fail2ban-client是fail2ban的前端。它连接着server的socket并发送命令给server以配置和操作server。client以命令行或交互模式(使用-i选项)读取配置文件或仅仅
发送一个单独的命令给server。fail2ban-client也可以启动server。以下是fail2ban-client的有效选项

-c

configuration directory(配置目录)
-s socket path(socket路径)
-d dump configuration. For debugging(打印出配置,用于调试)
-i interactive mode(交互模式)
-v increase verbosity(增加详细描述)
-q decrease verbosity(减少详细描述)
-x force execution of the server(强制执行server)
-h, --help display this help message(显示帮助)
-V, --version print the version(打印版本)
至于fail2ban-server,-s选项可用于设置socket路径.注意这个命令选项会覆盖 fail2ban.conf中的设置。
缺省的配置目录是 /etc/fail2ban 但是可能被 -c

选项所覆盖。-x选项仅仅是当启动server时传递到fail2ban-server。-d是一个有用的调试选项。它以fail2ban-client打印出配置语法。它输出相应的(stream)流给server。假如-d输出的是:

['set', 'loglevel', 1]
['set', 'logtarget', 'STDERR']

那它也可以完成以下功能

$ fail2ban-client set loglevel 1
$ fail2ban-client set logtarget STDERR

所有在配置文件中的设置都可以手工来配置。配置文件只是一个简单和有效的配置服务器的途径。fail2ban-client仅仅是把配置解释
成一系列的命令。然而,fail2ban 有超过2个的命令来内部使用。第一个是“start”。当我们输入

$ fail2ban-client start

client第一次尝试创建一个server的子进程实例。接着client向server端发送的ping请求并等待。一旦server端响应这些请求。fali2ban-client会分析
这些配置并发送相应的命令给server。
第二个是 “reload”,当我们输入:

$ fail2ban-client reload

client端会告诉server停止所有的jail,再次分析配置文件,并发送命令给server。这是非常有用的,当一个新的配置文件必须重载而不用关闭server时。
同时,在调试的时候也是非常有用的。它可以在一个终端用 "fail2ban-server -f "启动server且在另外一个终端使用"fail2ban-client reload"来加载配置。
因此,client和server输出不会混淆。

其他命令也仅仅是发送给你server而不特殊对待。然而,通常,只有以上2个命令和stop才会被用到。

或许还有最后一个有用的命令:“status[jail]”.在没有jail名字(配置参数)的情况下,server的使用全局状态。加入jail(配置)存在的话,则
jail的状态会显示。

一些有用的命令列表在这里

---------------------------

配置

标准的配置文件在 /etc/fail2ban下。也可以使用fail2ban-client -c选项重设。一个典型的配置如下:

/etc/fail2ban/
├── action.d
│ ├── dummy.conf
│ ├── hostsdeny.conf
│ ├── iptables.conf
│ ├── mail-whois.conf
│ ├── mail.conf
│ └── shorewall.conf
├── fail2ban.conf
├── fail2ban.local
├── filter.d
│ ├── apache-auth.conf
│ ├── apache-noscript.conf
│ ├── couriersmtp.conf
│ ├── postfix.conf
│ ├── proftpd.conf
│ ├── qmail.conf
│ ├── sasl.conf
│ ├── sshd.conf
│ └── vsftpd.conf
├── jail.conf
└── jail.local

每个.conf文件都会被名为 .local的文件覆盖。.conf首先被读取,其次是.local。新的配置会覆盖早先的。因此,.local 文件不必包含每个相应于.conf
中的选项,只是填写你想要覆盖的设置。

修改只会出现在.local文件中,而不是.conf中。这样可以避免升级时合并的问题。这些文件也是很好很详细的文档备注信息。

通用设置

fail2ban.conf文件中包含了fail2ban-server 守护进程的通用设置,诸如日志级别和目标。你也可以指定用于client和server端的通信的socket路径。

Jails

最重要的配置文件当属 jail.conf了,它包含了jails的所有声明。缺省的,一些区块会嵌入为模板。你必须确保这些区块生效和适合你的本地配置。这里有
一个 ssh-iptables的区块配置例子:

[ssh-iptables]
#enabled = false
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# mail-whois[name=SSH, dest=yourmail@mail.com]
#logpath = /var/log/sshd.log
logpath = /var/log/auth.log
maxretry = 5

这些配置的一些会生效:
1、ssh-iptables 是开启的
2、在子目录filter.d中的过滤器sshd.conf会被处理。
3、如果过滤器filter处理输出为true,则在iptables.conf(在子目录action.d)中所描述的动作会被执行。
在这个例子中另外一个动作 mail-whois.conf 被注释停用。
4、被filter扫描的log文件是 auth.log

filter和action共同生成了jail。每个jail仅运行一个filter,但它可能制定了多个动作,在各行中。

例如,你可以对SSH暴力入侵增加一个新防火墙规则,然后使用whois收集一些那些可恶的host主机信息并发送email告知。又或你只想获取一些那些从你web服务器上
读取 /donotaccess.html的未知账户的通知。

Fail2ban不仅局限于SSH。它包含了许多daemon和service的缺省filter和action。你可以很容易的修改或创建它们。如果你看看filter.d,你会发现一些
缺省的filter没有出现在源码自带的标准jail.conf中。在这个例子中,我们拿"sshd-ddos.conf"来说,编辑你的jail.conf以综合filter到你的fail2ban中

[ssh-ddos]

enabled = true
port = ssh,sftp
filter = sshd-ddos
logpath = /var/log/messages
maxretry = 2

记得要修改$logpath到上述提到的log-file中

Jail选项

每个jail都可调整以下选项来定制

Jail Options Name Default Description
filter Name of the filter to be used by the jail to detect matches. Each single match by a filter increments the counter within the jail
logpath /var/log/messages Path to the log file which is provided to the filter
maxretry 3 Number of matches (i.e. value of the counter) which triggers ban action on the IP.
findtime 600 sec The counter is set to zero if no match is found within "findtime" seconds.
bantime 600 sec Duration (in seconds) for IP to be banned for.

Filters

filter.d目录包含了主要的正则表达式,用于检测暴力入侵,密码错误等。这儿有个关于 filter.d/sshd.conf 的例子,3个可能的规则来匹配log文件中的行。

failregex = Authentication failure for .* from
Failed [-/\w]+ for .* from
ROOT LOGIN REFUSED .* FROM
[iI](?:llegal|nvalid) user .* from

以上例子的缺省规则适用于缺少 user的行,如:

Jan 10 07:02:37 homebrou sshd[18419]: Failed password for root from 222.76.213.151 port 55236 ssh2

你可以创建自己的失败规则表达式,下面有些事情你应该知晓。
@ 一个失败的规则(failregex)可以包含多行,任何的都可以匹配log文件中的一行
@ 在每个失败规则中,部分匹配主机或ip地址必须使用(?P ... ) 包裹着,这里有个Python-specific regex extension ,指明了匹配
的内容。标识符是你告诉fail2ban哪个主机正在连接中,所以它存在每行失败规则中。假如没有,fail2ban会发送一个错误信息,如“no 'host' group”
@ 作为一个方便的,你可以在规则中预定义实体。是(?:::f{4,6}:)?(?P\S+)的别名,它匹配一个主机名或IPv4 地址(可能嵌入IPv6中)
@ 在action脚本中,标志会被在标志中匹配的主机ip地址所替代。
@ 为便于匹配你的失败规则,它实际上必须匹配2部分:开始行必须匹配时间戳模式或规则,其余的行则匹配你的失败规则。假如你的失败规则是以^起始,
那么这个锚点则会以在时间戳或空白后的剩余行开始。
@ 匹配时间戳的模式或规则一般不会被记录,且不可用于用户读或设置。这里有个问题是,如果你的log有个时间戳格式fail2ban不认识,那么它会失败匹配
任意行。正因如此,你应该测试每个依靠日志文件的失败规则。在下面的例子中,为确保被匹配。假如fail2ban不认识你的log时间戳,那么你有两个选项:
重新配置你的daemon中log的时间戳为更普通的格式。正如以上示例日志行中的一样。或递交一个bug报告请求包含你的时间戳格式。

作为以上总结示例,在你的终端运行以下命令并比较结果

fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' 'authentication failed'
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '\[\] authentication failed'
fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '\[\] authentication failed'

第一个命令失败。出现 “No 'host' group”错误信息。第二个成功,且找到主机地址1.2.3.4,第三个命令失败,它没有告诉你为什么——只是说“No match”
——但很清楚,它没有匹配到这个不寻常的时间戳格式——这个不在你的failregex中。

Actions 动作

action.d目录包含了定义的不同action脚本。这些动作会在在执行fail2ban中明确定义的时间里,启动/停止一个jail时,禁止/通行 一个主机。

Testing 测试

许多事情在配置后都可以测试,但是下面的命令可以帮助你证实你的设置。

# fail2ban-client -d

这将会打印出当前配置

# fail2ban-regex "line" "failregex"

将会在log文件中单独行测试单独的一个正则表达式failregex(如给出 sshd.conf)。别忘了在 line行和failregex周围的双引号。
fail2ban-regex 也接受文件。因此,它能更容易的检测和调试你自己的正则表达式。:

# fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

你也可以二者结合:

# fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "

不足之处

反应时间

首先,记住fail2ban是一个日志分析器,在写入日志前不会做任何事情。大多数系统日志守护进程都会缓冲他们的输出。
这可能会和fail2ban性能有所冲突。因此,最好能禁止缓冲你的系统日志守护进程。

评估反应时间是比较苦难的。fail2ban在建检查扫描新日志时等待一秒。这在大多案例中应该是好的。可是,它可能接受
比最大尝试更多的失败登录。

这里有个/var/log/auth.log摘要

Jan 15 15:28:46 homebrou sshd[29778]: Invalid user recruit from 81.74.87.66
Jan 15 15:28:46 homebrou sshd[29778]: error: Could not get shadow information for NOUSER
Jan 15 15:28:46 homebrou sshd[29778]: Failed password for invalid user recruit from 81.74.87.66 port 47672 ssh2
Jan 15 18:33:27 homebrou sshd[2156]: Did not receive identification string from 88.191.23.27
Jan 15 19:23:37 homebrou sshd[3418]: Invalid user test from 88.191.23.27
Jan 15 19:23:37 homebrou sshd[3418]: error: Could not get shadow information for NOUSER
Jan 15 19:23:37 homebrou sshd[3418]: Failed password for invalid user test from 88.191.23.27 port 41017 ssh2
Jan 15 19:23:38 homebrou sshd[3420]: Invalid user test from 88.191.23.27
Jan 15 19:23:38 homebrou sshd[3420]: error: Could not get shadow information for NOUSER
Jan 15 19:23:38 homebrou sshd[3420]: Failed password for invalid user test from 88.191.23.27 port 41096 ssh2
Jan 15 19:23:38 homebrou sshd[3422]: Invalid user test from 88.191.23.27
Jan 15 19:23:38 homebrou sshd[3422]: error: Could not get shadow information for NOUSER
Jan 15 19:23:38 homebrou sshd[3422]: Failed password for invalid user test from 88.191.23.27 port 41162 ssh2
Jan 15 19:23:38 homebrou sshd[3424]: Invalid user test from 88.191.23.27
Jan 15 19:23:38 homebrou sshd[3424]: error: Could not get shadow information for NOUSER
Jan 15 19:23:38 homebrou sshd[3424]: Failed password for invalid user test from 88.191.23.27 port 41209 ssh2
Jan 15 19:23:39 homebrou sshd[3426]: Invalid user test from 88.191.23.27
Jan 15 19:23:39 homebrou sshd[3426]: error: Could not get shadow information for NOUSER
Jan 15 19:23:39 homebrou sshd[3426]: Failed password for invalid user test from 88.191.23.27 port 41267 ssh2
Jan 15 19:23:39 homebrou sshd[3428]: Invalid user test from 88.191.23.27
Jan 15 19:23:39 homebrou sshd[3428]: error: Could not get shadow information for NOUSER
Jan 15 19:23:39 homebrou sshd[3428]: Failed password for invalid user test from 88.191.23.27 port 41323 ssh2
Jan 15 19:23:40 homebrou sshd[3430]: Invalid user test from 88.191.23.27
Jan 15 19:23:40 homebrou sshd[3430]: error: Could not get shadow information for NOUSER
Jan 15 19:23:40 homebrou sshd[3430]: Failed password for invalid user test from 88.191.23.27 port 41376 ssh2
Jan 15 19:23:40 homebrou sshd[3433]: Invalid user test from 88.191.23.27
Jan 15 19:23:40 homebrou sshd[3433]: error: Could not get shadow information for NOUSER
Jan 15 19:23:40 homebrou sshd[3433]: Failed password for invalid user test from 88.191.23.27 port 41433 ssh2
Jan 15 19:23:41 homebrou sshd[3435]: Invalid user test from 88.191.23.27
Jan 15 19:23:41 homebrou sshd[3435]: error: Could not get shadow information for NOUSER
Jan 15 19:23:41 homebrou sshd[3435]: Failed password for invalid user test from 88.191.23.27 port 41484 ssh2
Jan 16 12:13:43 homebrou sshd[32249]: Did not receive identification string from 209.126.131.150

查看 /var/log/fail2ban.log同期时间的日志

2007-01-15 15:38:47,142 fail2ban.actions: WARNING [ssh-iptables] Unban 81.74.87.66
2007-01-15 19:23:41,175 fail2ban.actions: WARNING [ssh-iptables] Ban 88.191.23.27
2007-01-15 19:23:42,373 fail2ban.actions: WARNING [ssh-iptables] 88.191.23.27 already banned
2007-01-15 19:33:41,508 fail2ban.actions: WARNING [ssh-iptables] Unban 88.191.23.27
2007-01-16 12:29:50,496 fail2ban.actions: WARNING [ssh-iptables] Ban 209.126.131.150

因此,你可以看到在 19:23:37和 19:23:41之间,也就是 在4秒内,有9个从 88.191.23.27来尝试登录(而不是3个)在被fail2ban禁止前被记录在auth.log中

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注