Tiarra (あるいはPerl) からhosts.allowとか使ってアクセス制御する話
諸般の事情で、ついに Tiarra ユーザーになったんですけど、Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場 に書いたようにサーバのアクセス制限を hosts_access 使ってやってるので Tiarra についても同様にしたい。
Perl の場合は Authen::Libwrap モジュールを使えばいいので、パッチ書いた。取り込んでもらおうとか別に思ってないので、モジュールがなかった場合の処理とか入ってないですが。
これで SSH をはじめ各種デーモンのアクセス制御を統一的にできるので楽ちん。
$ diff -u main/RunLoop.pm.orig main/RunLoop.pm --- main/RunLoop.pm.orig 2010-12-01 17:02:14.000000000 +0900 +++ main/RunLoop.pm 2010-12-01 17:05:54.000000000 +0900 @@ -11,6 +11,7 @@ use strict; use warnings; use UNIVERSAL; +use Authen::Libwrap (); use Carp; use IO::Socket::INET; use IO::Select; @@ -874,7 +875,10 @@ # クライアントからの新規の接続 my $new_sock = $sock->accept; if (defined $new_sock) { - if (!$this->{terminating}) { + if (! Authen::Libwrap::hosts_ctl("tiarra", $new_sock)) { + $this->notify_error("access denied by hosts_ctl"); + $new_sock->shutdown(2); + } elsif (!$this->{terminating}) { eval { my $client = new IrcIO::Client($this, $new_sock); push @{$this->{clients}},$client;
以上、備忘録をかねて。