FreeBSD2.2.xにqmailをインストールする。
sendmail運用中にインストールするので、なるべくメール不配達が起こらないように したい。
こんだけ落とした。どっかのサイト見て書いてある通りに落としただけ。 前設定した時、ずいぶん面倒だった記憶があるが、確かに面倒だ。が、幸い なことに全てmake & make setupでうまく行った。
# cd qmail-1.03 # wget http://www.ckdhr.com/ckd/qmail-103.patch # wget http://www.ckdhr.com/ckd/qmail-103.patch # wget http://www.qmail.org/qmail-smtpd-relay-reject # patch < qmail-date-localtime.patch # patch < qmail-103.patch # patch < qmail-smtpd-relay-reject
INSTALL/INSTALL.idsを見ながら作成。
# mkdir /var/qmail # pw groupadd nofiles # pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent # pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent # pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent # pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent # pw groupadd qmail # pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent # pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent # pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
スーパーユーザーじゃないと上手く行かない。
# make setup check % ./configure
postmasterのエイリアス等を作る
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root) # chmod 644 ~alias/.qmail*
inetd.confを書きかえる。pop3の行をコメントアウト
# vi /etc/inetd.conf # kill -HUP 119(ps -ax | grep inetd で調べたinetdのプロセス番号)
/etc/tcp.smtpを作る。
# vi /etc/tcp.smtp # tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# cp ./checkpassword /usr/local/bin/checkpassword
/var/qmail/bin/newaliases
を実行。/etc/aliases.cdb を更新する。結構エラーが出る。遊びで作った
....@kaede.to
が動かない。確かにRFC的には間違ってる。なるほど。
で、そのままほっといたら/etc/aliasesと/etc/aliases.dbの不整合でエラーが出てた。 すぐさま
/usr/sbin/newaliases
を実行。こんどはコメントアウト「#」が行頭にないのでエラー。/etc/aliasesって そんな規則あったっけ。
fastforward を動かすためには、 /var/qmail/alias/.qmail-defaultに、
| fastforward -d /etc/aliases.cdb
をいれる。これで完了
/usr/sbin/sendmailをqmail用の物と差し替えてみる。 今思うと馬鹿なことをした。qmail用のスプールに溜まるんだから、届くわけない。
慌てて元に戻す。が、うまく送れない。ログを見ると、
Cannot create "qfPAA19943" in "/var/spool/mqueue" (euid=1000): Permission denied
ってなってる。
ls -l /var/spool/mqueue
を見ると、
drwxr-xr-x 2 root daemon 512 Nov 10 09:57 /var/spool/mqueue/
あれ?ここってどうなってたっけ?Stickyビット?だとしたら、何故外れてるんだ? と混乱したが、しばらく考え直してみて、原因は
ls -l /usr/sbin/sendmail -rwxr-xr-x 5 root kmem 290816 Apr 24 1999 /usr/sbin/sendmail*
こっちだよな普通。リネームしたときにパーミッションがクリアされてたらしい。
-r-s--x--x 5 root kmem 290816 Apr 24 1999 /usr/sbin/sendmail*
これでよし。危ない危ない。というか、不必要な手間を取ってしまった。
スプールをどうするか悩んでたんだが、mbox2maildirというのがあるらしい。検索 すれば多分出てくる。Perlスクリプトだ。なんか
require 'stat.pl';
という行でエラーがでるんだが、使ってないようなのでコメントアウトしたら動いた。 ~/Maildirを作ってガリガリ変換してくれる。
で、/var/qmail/rcから、
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
の部分だけ取り出して実行。が、popすると$USER/Maildirがない、と怒られる。 いや、あるぞと思っていろいろ調べてみたら、
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup ns.kaede.to /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
なぜかHOST名の部分が欠けてた。qmail自動設定シェルスクリプトから適当な 部分を切り張りして実行させてたから、ここに$HOSTかなんか書いてあったんだろう。
これでうまくいった。あとは、popper止めて、他のユーザのMaildirも作ってやるだけだ。
上の手順で、大体合ってたんだけど、各Home Directoryに.qmailを入れるのを 忘れていた&その所有者設定に気付かなかったため、しばらくサービスを止めてしまう。
あとは大体OKのように見えた。しかし……。
canada-mlへの送信ができない。canada-mlは、canada-mへ転送になっている。UNIX アカウント名が8文字しか認められていないためだ。
~alias/.qmail-canada-mlを設定しているのにちっとも動かない。/var/qmail/bin/newaliases を使ってみたり、いろいろ手を尽くしたが全滅。
2時間くらいハマったあと、待てよ……と思い、~canada/.qmail-mlを設定。
……動いた。
要するに、[既存のユーザ名]-xxというエイリアスは作れないってことね。 Mboxが存在しなくても、~alias/.qmail-*は探しに行ってくれないと。
あー時間食った。
あと、送信ができない。これは分かる。踏み台にされない為でしょ。前i-3のサーバ 立てたときどうしたっけなー、と思い起こす。あ、POP before SMTP入れて解決した んだけっけか。あーめんどくせ。
relay-ctrl-3.1.1.tar.gz
とりあえずこれをダウンロードしてきてコンパイル・インストール。
# cd relay-ctrl-3.1.1 # make && ./installer # mkdir /var/spool/relay-ctrl/allow # mkdir /var/spool/relay-ctrl/ # mkdir /var/spool/relay-ctrl/allow # chmod 700 /var/spool/relay-ctrl/ # chmod 777 /var/spool/relay-ctrl/allow/ # mkdir /etc/relay-ctrl # vi RELAY_CTRL_DIR
envdirが無かったが、 よく説明読むとenvで代用できる範囲なのでenvに書き換える。
とりあえず、/var/qmail/rcを書き直して、daemonを全部killして再起動。なんとか うまく行く。
(あ、あとsmtpdよりも先にpopdを立ち上げておかないとうまくいかないようだ:2003/05/19補遺)
とたんにエラー頻発。spamの踏み台にされてたようだ……。しばし落ち込む。
踏み台にされてるって事は…。
http://openrbl.org/ip/210/248/74/50.htm
やっぱり。Open Relay List(踏み台可能なSMTPサーバのリスト)に登録されてる。 しかし、今までこれで跳ねられた事なかったから、あまり利用してる人はいないのかな?
とにかく、片っ端から削除依頼を出しておく。
以下のものを追加。本文のチェックもするようにした。 日本語だと、[ -~]とタブとエスケープ文字だけで大丈夫だろうか?
「未承諾広告」については、shがEUCを通してくれない(8bitの文字を落としてしまう) ので、JISのエスケープシーケンス抜きのものを使用。この方が移植性(?)も高い気が。
nkfの古いバージョン(nkf1.5等)の-mオプションは、「iso-2022-jp」のように小文字の MIME名を通さないので注意。nkf1.9なら大丈夫。
# 韓国語のものを切る |bouncesaying 'Error: KM' grep -i 'charset="*euc-kr' > /dev/null |bouncesaying 'Error: KM' grep -i 'charset="*KS_C_5601-1987' > /dev/null #### # textパートすら持たないHTMLメールは蹴る |bouncesaying 'Error: HM' sh -c "822field Content-Type | grep -i 'text/html'" > /dev/null #### # 未承諾広告は蹴る( 未承諾広告 = 'L$>5Bz9-9p' ) |bouncesaying 'Error: MK' sh -c "822field | nkf -jm | grep 'L$>5Bz9-9p'" > /dev/null #### # サブジェクトにバイナリが入ってるのも蹴る #|bouncesaying 'Error: BH' sh -c "822field | grep '[^ -~]'" > /dev/null #### # ヘッダ、ボディともバイナリが入ってるのは全部蹴る # エスケープ文字は許可しないと、ISO-2022-JPが通らない。[TAB]と[ESC]はviから直打ち。 |bouncesaying 'error BHT' grep '[^[TAB][ESC] -~]' > /dev/null #### # フォワード処理(sky.pl) | dot-forward .forward #### # 配信 ./Maildir/
変なエラーメールが頻発。存在しないkaede.toアドレスからのメールが、User Unknownで 大量に返ってきている。kaede.toがOpen Relayだったせいだろうと思っていたが、どうやら、 他のOpen Relay(しかもFrom/To両方同時に偽装できるやつ)経由でkaede.toを騙っている らしい。こうなったらRBL入れるしかない。
で、ucspi-tcpには、rblsmtpdなるものが入っているので、これが使えると思って いたのだが、これはDNSのTXTレコードを引くタイプのもので、現行のAレコードを 引く方法だとうまく動かない。ので、
http://work-rss.mail-abuse.org/rss/qmail/ucspi-rss.diff
からパッチを拾ってきて patch -p2 < ucspi-rss.diffでパッチを当てる。
make && make setup
これでよし。デフォルトのDNSも死んでるようなので-rオプションで追加する。
テストは、
env TCPREMOTEIP=[SPAMMERS_IP_ADDRESS] rblsmtpd cat
で行った。Open RelayじゃないIPでもチェックすること。spamじゃないIPの時だけ STDINからSTDOUTに流れていればOK。
で、起動rcを、
# SMTPdの起動 env RELAY_CTRL_DIR="/var/spool/relay-ctrl/allow" /usr/local/bin/relay-ctrl-chdir \ /usr/local/bin/tcpserver -R -H -x /etc/tcp.smtp.cdb -v -u 3004 -g 1003 0 smtp \ /usr/local/bin/rblsmtpd -r list.dsbl.org -r unconfirmed.dsbl.org \ /usr/local/bin/relay-ctrl-check \ /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
のように書き換える。