2007年3月9日金曜日

exim + mysqlでpleskのデータを利用

ということでやーっと出来ました。
はてなの達人さんたちのお力をお借りしてSQL文を作ってもらい
ユーザーの確認を全部行うようにしました。
やー、これでいらないメールがamavisdに回ることはなくなりました。

よかったよかった。
exim.confの公開はでもまだ先。もっとチューニングしないと!

hide mysql_servers = localhost/psa/admin/password
MYSQL_Q_USERS = SELECT concat(mail_name,'@',name) ¥
FROM mail,domains ¥
WHERE dom_id=domains.id ¥
AND concat(mail_name,'@',name)='${quote_mysql:$local_part}@${quote_mysql:$domain}';
MYSQL_Q_ALIAS = SELECT concat(alias,'@',name) ¥
FROM mail,domains,mail_aliases ¥
WHERE mn_id=mail.id=dom_id=domains.id ¥
AND concat(alias,'@',name)='${quote_mysql:$local_part}@${quote_mysql:$domain}';



2007年3月8日木曜日

php-mcryptをyumで

centos4.4のphpではmcryptが利用できない。
で、おやじ殿のやつを利用していたのだが毎回手作業で入れるのは面倒。
fixがあってもyumで自動更新されずエラーにもなる。

ということで探したらあった。
[maze]
name=Maciej enczykowski (RPM) 
baseurl=http://tcs.uj.edu.pl/~buildcentos
enabled=1
gpgcheck=1
gpgkey=http://tcs.uj.edu.pl/~buildcentos/MAZE-GPG-KEY

ご利用は自己責任で。
おやじ殿に報告は・・・したほうがいいのかなぁ・・・。

追記:
書き込めなかった・・・。この前もエラー・・・。もしかしてアクセス制限??[:冷や汗:]




2007年3月7日水曜日

yum-plugin-protectbase

Centos4.4のeximはmysqlに対応してないようで
チェックをしてみたらATrpmsというのにははいっているようだ。
だが出来ればrepoは増やしたくない・・・。dagだけでも不安なのに
ATrpmsもとなると・・・。しかも結構トラブルの原因にもなっているようだ。

そんなときにこちらでyum-plugin-protectbaseというものを知った。

よくわからないけど、いれてみよう!(ぇ)

インストールは簡単。
# yum install yum-plugin-protectbase
extrasからインストールされる。
/etc/yum.conf

plugin=1
を追加、これで有効になる。あとはrepoの最後の行にprotect=を追加してやるだけ。

base update dagを1に設定してやる。ATrpmsも有効にしてprotect=0にしてやる。
この状況でyum clean allしてからyum updateしてみた。(cleanが必要かは知らない)
するとATrpmsを設定したときには30以上のパッケージのインストールがでたが
わずかに3パッケージのアップデート。
eximもアップデートされなかった。

pluginを無効にしてupdate eximをすると・・・無事アップデート。
これでmysql対応となった。なったのだが!

うーん、pluginが有効だとbaseにあるものはアップデートされないかも・・・。
eximだけはupdateしてほしかったんだけど、searchにもかからないから無理かもしれない。
まぁ、とりあえずこれで安心して運用できそうなのでしばらく様子見です!

PS
plusもついでにやってみたらmcryptがらみでエラーになって駄目だった。
どうもphp5を入れようとしている雰囲気もあり、さわらないことにしました・・・。







2007年3月6日火曜日

exim考察

bounceメール対策をいろいろ考えたのだが
問題なのはbounceメールの送り先がないことだからそこら辺から考えてみた。
みたのだが・・・。

require verify = sender
ではじこうとしたのだが、これはスパム対策でverifyに応じないのがほとんどのようだ。
なぜかこれを有効にすると自鯖からのメールをすべて拒否してしまう。
想像だがheloで自ホスト名を名乗ってしまうので、それではじかれてしまうのかも。
eximの標準設定はわからないのだが・・・検証もしてない・・・。
受け入れるように設定したり、callout(rcptで問い合わせる)等も検討できるのだろうがどうもスマートではない感じがする・・・。非力なホストでやりたくもない・・・。
更に調べてわかったのは最近はdns lookupでMXやdnsのIPを引いて、それをBLで照会するのがポピュラーな様だ。ただmaiaの処理を考えるとそれも過剰だ。
ということでsenderの検証はとりあえずあきらめ。

本命であるamavisdへの転送前にエラー処理をするにはACLのrcptで処理するしかない。
rcptの段階でrecipientのverifyをした場合の設定がわからないのだが、portの指定が出来れば、verifyの時のみqmailのポートを指定することで解決するかもしれない。

これが無理であればeximにqmailのユーザーデータを参照させるしかないだろう。
これはかなり面倒な予感がする・・・。
ただDB連携ができればありとあらゆることができるだろうし、かなり無敵な感じがする。

前者が駄目そうなら後者にかかるしかないんだろう・・・。
・・・だれかいい知恵つけてくれないかなぁ・・・。



2007年3月5日月曜日

exim:ローカル宛のメールを転送する

local宛のメールを転送することに成功した。
以外と簡単だった。

local_system:
driver = redirect
file_transport = address_file
pipe_transport = address_pipe
data = ${lookup{$local_part}wildlsearch{/etc/aliases}}
# data = ${lookup{$local_part}lsearch{/etc/aliases}}
condition = "${if eq{$domain}{$primary_hostname} {yes}{no}}"
retry_use_local_part
pass_router = route_amavis


ACLは抜けるように設定。(うちはlocalにいれたけど、考えたらスパムにやられるかも・・・。ACLでlocalhostからのprimary_hostnameを許可した方がいいかも。)

送られてきたメールのdomain部分とprimary_hostnameが合った場合
/etc/aliasesファイルを見て転送する。
lsearchは通常の処理で無いものは処理しない。
wildsearchはワイルドカードが利用できるが多段の設定ができない。
例えば
test1:test
test2:test
test:postmaster
などとしても最初のしか適用されなくなる(らしい)

とりあえずすべてpostmaster宛に転送することにした。
*:postmaster

ちなみにうちのようなqmailとeximの多段設定で無ければこんな処理は必要ない。
qualifyの設定で問題ない。
Plesk&eximだと内部からのメールがqmailで発信される為に
こんな問題が発生するのだ・・・。

追記:
REWRITEを使えば上記の方法なんていりませーん(泣
まだ試してないけどそちらをご利用あれ・・・。
http://www.katontech.com/diary/?date=20050201
http://www.exim.org/exim-html-4.40/doc/html/spec_31.html#SECT31.4
E rewrite all envelope fields
F rewrite the envelope From field
T rewrite the envelope To field
b rewrite the Bcc: header
c rewrite the Cc: header
f rewrite the From: header
h rewrite all headers
r rewrite the Reply-To: header
s rewrite the Sender: header
t rewrite the To: header

問題なく動作しました。
*@mail.hoge.jp $1@hoge.jp Ebcfhrst




2007年3月4日日曜日

Eximの設定が上手くいかない・・・

現在
メール>25(exim)>10024(Amavisd)>10026(exim)>10025(qmail)
という流れだ。
推奨されている方法は25で受信したときに受信者チェックと送信者チェックをやってしまう。
そうしないと10025にリレーするときに受信者がいないとエラーになってしまいeximに差し戻される。
ここで受信者がいないとqmailに差し戻す。ピンポン・・・。

しかしeximは受信者情報を持たない。qmailのdbへアクセスすればいいのかもしれないが
pleskのqmailのdbは素直ではない。(要は面倒)
amavisdも同様にユーザー情報を(ある意味)もたない。
設定があるのかもしれないが、基本的には全部メールを受け取ってしまう。
maiaで関連づけてないものはドメインとして受け取ってしまうのだ。
ただ、これは正しくてログインしてないユーザーのデータは存在しないので
新規のユーザーのメールはログインするまではじいてしまう。それはまずい。
直接Qmailにverifyできればいいのだが、流れ的に無理っぽい・・・。

ローカルのメールも問題だ。
eximの設定をいぢってもだめだなぁ、とおもっていたら
sendmailはqmailにシンボリックリンクが張られていて、
これもさわれそうにない。
メールアドレスもフルドメイン追加されて送られてくるので
qualify_domainなどで調整することもできない。
かといってqmailの設定はいぢれない・・・。

うーん、面倒・・・。

1.amavisdに存在しないユーザーのメールは転送しないようにする。
2.1が不可能であればBounceをピンポンしないようにしてやる。
3.ローカルからのメールアドレスがローカルホスト名で来て送信エラーになる。

ひとつひとつつぶしていくしかないかぁ・・・。






2007年3月1日木曜日

SpamAssassin + MySQL

アホなことやってはまってしまった。MySQLでbayesが学習しなくなってしまったのだ。
原因は
INSERT INTO bayes_global_vars VALUES ('VERSION','3');
これがなかった為。どうも間違って消してしまったようだ。
local.cf
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn DBI:driver:database:hostname[:port]
bayes_sql_username dbusername
bayes_sql_password dbpassword



CREATE TABLE bayes_expire (
id int(11) NOT NULL default '0',
runtime int(11) NOT NULL default '0',
KEY bayes_expire_idx1 (id)
) TYPE=MyISAM;

CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default '',
value varchar(200) NOT NULL default '',
PRIMARY KEY (variable)
) TYPE=MyISAM;

INSERT INTO bayes_global_vars VALUES ('VERSION','3');

CREATE TABLE bayes_seen (
id int(11) NOT NULL default '0',
msgid varchar(200) binary NOT NULL default '',
flag char(1) NOT NULL default '',
PRIMARY KEY (id,msgid)
) TYPE=MyISAM;

CREATE TABLE bayes_token (
id int(11) NOT NULL default '0',
token char(5) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
atime int(11) NOT NULL default '0',
PRIMARY KEY (id, token),
INDEX bayes_token_idx1 (token),
INDEX bayes_token_idx2 (id, atime)
) TYPE=MyISAM;

CREATE TABLE bayes_vars (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(200) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
token_count int(11) NOT NULL default '0',
last_expire int(11) NOT NULL default '0',
last_atime_delta int(11) NOT NULL default '0',
last_expire_reduce int(11) NOT NULL default '0',
oldest_token_age int(11) NOT NULL default '2147483647',
newest_token_age int(11) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE bayes_vars_idx1 (username)
) TYPE=MyISAM;


学習しないと本当にスパムがはじけない・・・。



フォロワー