$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
2007-09-15 (土曜日) In: FreeBSD|inetd.conf(2,396 views)
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で対策できているのでそのまま現状維持です。
サーバーをインタネットに公開するとsshの扉を叩く人がかなりいます。それも手持ちの鍵(idとパスワード)を順番に片っ端から試していく奴が結構沢山。
そこで、Maxloginsを使ってみる。このツールはsyslogでsshアクセス失敗回数を監視し、一定の基準を超えたアクセス禁止のIPアドレスリストを吐き出す。そのリストをhosts.allowに取り込んでsshのアクセスを禁止する仕組み。
ツールの実体はここにある。 テキストファイルだけど、”maxlogins.pl”とかの名前で/usr/local/bin に保存すし、次のようにしてsyslogから実行できるようにしておく。
# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl
/etc/syslog.conf に以下を挿入する。
auth.info;authpriv.info /var/log/auth.log # ←この行の次に
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl # ←この行を追加
このmaxlogins.pl にはオプションを追加指定できる。
-e: アクセス禁止の解除時間の指定。デフォルトは12時間。
-e=1d, -e=24h, -e=1440m, -e=86400s という感じで指定する。この場合いづれも1日の意味。
-a: IPアドレスがブロックされるまでの最大試行回数。 デフォルトは3回。
-a=5 という風に指定する。
-l: ログレベルの指定。 ログはデフォルトで /var/log/auth.logに記録される。
-l=1: informational (e.g., new blocks)
-l=2: above, plus IP expirations
-l=9: verbose logging
/etc/hosts.allow をいじって「アクセス禁止のIPアドレスリスト」を読み込むようにする。
#ALL : ALL : allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny
sshd : ALL : allow
ちなみに、これをやったらpopとかimapとかの設定も忘れずに。
ftpd : localhost : allow
ftpd : ALL : allow
ipop3d : ALL : allow
imapd : localhost : allow
imapd : ALL : deny
最後に、 syslog を再起動。
# kill -HUP (syslogのpid)
ブロックされたIPアドレスは /var/log/maxlogins に記録される。
参考リンク: 1
日々の四方山話を徒然と・・・
いらっしゃいませ。このブログはオーストラリアの生活に関する話題とFreeBSDに関連する話題を主に色々と書き綴っています。
Sorry, This site consists of Japanese contents only. If you are interested in my blog, feel free to leave your comments in English or Japanese. Thank you.