sshで一定時間以内のアクセス失敗回数が設定限度を越えるとアクセスを拒否するという方法について以前に書いたことがありますが、これのftpd版が欲しいなぁと思っていたらいい方法がありました。
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/88562
inetd 経由にすれば似たようなものは実現できます。
たとえば、SSH なら、ssh stream tcp nowait/0/3/2 root …..
なんて記述をしておきます。
この 0/3/2 って記述ですが。
: : :
1 2 31 最大子プロセス数(0は無制限)
2 同一IPからの1分以内の最大接続数
3 同一IPからの最大子プロセス数となります。
上記の設定の場合は inetd から生成される ssh のプロセス数は無制限で、同一IPからの一分以内のコネクションリクエスト数は3回まで、さらに同一IPから接続が確立して生成された ssh プロセス数は2つまで。ということになります。
1分以内に接続に3回失敗すると、そのIPからのコネクションリクエストはrefuseされます。が、1分経過するとまた許可されます。
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/89166
refuseしている間の接続要求もカウントしつづけるようなので、連続して認証が試みられている間は、refuse期間が延長されつづけます。
通常(?)のアタックは連続して認証を試みますので、1度refuseされるとアタックが終るまでrefuseされたままになるようです。
私の環境では、時間を置いて繰り返し同じアドレスからアタックされることは稀ですから、拒否リストに登録する他の方法とほぼ同様の効果が得られています。
ftpdはinetd.conf経由で起動するのでこの通りに設定したらOKでした。sshdもinetd.confに設定してもいいのですが、とりあえずmaxloginsで対策できているのでそのまま現状維持です。