APOPfilter

APOPfilter を使うと以下のことが可能です。

必要なもの

ライセンス

このプログラムは Ruby ライセンスに従います。

ダウンロード

概要

クライアントから接続を受け付け、USER,PASS,APOP,QUIT 命令を処理します。 APOP 命令時に APOPfilter がユーザID/パスワードの確認を行ないます (APOPfilter が認証するのではなく POP サーバに認証させることもできます)。 APOP または PASS 命令成功後に本当の POP サーバに接続し、クライアントから渡されたユーザID/パスワードで、USER/PASS 命令を発行し、それが成功した後は、クライアント−サーバ間のデータの中継だけを行ないます。

事前に、POPサーバにアクセスするための、ログインIDと平文パスワードをファイルまたは MySQL または LDAP データベース上に作成しておく必要があります。

ファイルの場合は、ログインIDと平文パスワードを「:」で区切って、1行1IDでファイルに記述し、apopfiltermap コマンドの引数にファイル名を指定して実行してください。デフォルトのファイル名は /etc/apoppw です。

# cat /etc/apoppw
hoge:pwd-of-hoge
# apopfiltermap /etc/apoppw

設定

apopfilter と同じディレクトリに apopfilter.conf という名前のファイルがある場合はそれが読み込まれます。記述内容は apopfilter.conf.sample を参考にしてください。

設定できるパラメータは以下の通りです。

パラメータ意味デフォルト値
$port APOPfilter のポート番号 10110
$pop_server POPサーバのホスト名またはIPアドレス 127.0.0.1
$pop_port POPサーバのポート番号 110
$apop_only true の場合は USER/PASS認証を使用しない false
$auth_method 認証方式の指定("file" または "mysql" または "ldap" または nil)。 nil 指定時はAPOPfilterは認証せず、認証情報を本来のPOPサーバに渡す。 file
$server_auth_method POPサーバに対する認証方式("auto" または "apop" または "plain") "auto"指定時は、サーバがAPOP対応していればAPOP認証し、そうでなければ平文認証。 "apop"指定時は、サーバがAPOP対応していればAPOP認証し、そうでなければエラー。 "plain"指定時は、サーバがAPOP対応していても平文認証。 auto
$error_interval POPエラー時に応答が返されるまでの秒数 5
$banner クライアント接続時に返される文字列 apopfilter ready
$hostname ホスト名 `uname -n`.chomp
$connection_keep_time 最大接続維持時間(秒数)。これを超えると正常に通信できていても接続を切断します。 3600(1時間)
$command_timeout 最大コマンド待ち時間(秒数)。この時間クライアントからの入力がないと接続を切断します。 600(10分間)
$syslog_facility シスログのファシリティ Syslog::LOG_MAIL
$proc_plain_auth true の場合は平文認証(USER/PASS)も apopfilter が確認する false
$after_auth_hook 認証成功時に呼ばれる Proc クラスのインスタンス。引数はユーザ名とクライアントIPアドレス。 nil
$auth_method="file" 時に有効なパラメータ
$apop_passwd_file ログインIDと平文パスワードのファイル名 /etc/apoppw
$auth_method="mysql" 時に有効なパラメータ
$mysql_server MySQLサーバ名 nil
$mysql_user MySQL接続ユーザ名 nil
$mysql_pass MySQL接続パスワード nil
$mysql_db MySQLデータベース名 nil
$mysql_table MySQLテーブル名 apop
$mysql_userfield ログイン名フィールド名 user
$mysql_pwfield 平文パスワードフィールド名 passwd
$auth_method="ldap" 時に有効なパラメータ
$ldap_server LDAPサーバ名 localhost
$ldap_port LDAPポート番号 389
$ldap_dn bindするDN(nil時はbindしない) nil
$ldap_passwd bind時のパスワード nil
$ldap_base 検索するベースDN nil
$ldap_filter 検索フィルタ。%sがユーザ名に置換される uid=%s
$ldap_passwd_attribute 平文パスワード属性名 userPassword

履歴

0.5.1	2005-01-20
	・クライアントが何も送らずに切断した時に落ちていたバグを修正

0.5	2004-10-25
	・$auth_method nil を追加
	・$server_auth_method を追加
	・tserver の代わりに prefork を使用
	・getc を使わないようにした
0.4	2004-04-04
	・$proc_plain_auth を追加
	・$after_auth_hook を追加

0.3	2003-12-18
	・IPv6 対応
	・ECONNRESETエラー例外を捕捉

0.2	2003-12-10
	・LDAP機能追加

0.1	2003-11-02
	・公開

作者

とみたまさひろ

Last modified: Thu Jan 20 17:02:04 JST 2005