Debian インストールから SMTP AUTH な送信サーバ構築まで
なんちゅうか、最近 spam がひどいんですわ。 ドレくらいすげーかというと毎日たぶん 100 通(2004/03/09,10,11 実績 305 通)くらいくるんですわ。 あまり読んでないにいしても同期間で ham 145 通ということで、まとめると毎日 150 通のメイルのうち 100 通がひとめ見てわかる spam で、残りの 50 が、まぁ用のあるかも知れないメイルって感じですか?
もうちっとマジに調べてみました。 当方のプライベートアドレスにきたメイルについて…調査期間 2004/04/19 00:00 ~ 2004/04/27 24:00
合計 2,162 通 ham 私信・待っているアナウンス等 19 サーバレポート( cvs とか)・プレスリリース・ virus alert 等 60 メイリングリスト 303 spam バイアグラ・儲かる・ちんことか 1,779
まとめると毎日 240 通くるメイルの内、心待ちしてにいるメイルは 2 通で、ゴミは 200 通ってことですな。
で、自分のところで受け取るのは許すとして(笑)、やっぱり送り出さないようにしないとねということで、 smtp authentication を導入して、せめて自分の足元からは spam の踏み台を作らないようにしようと思ったわけですわ。
それに自分が使える smtp auth なサーバがあると差出人詐称してメイルだせるじゃん(爆)
要するに踏み台にならなければいい。 smtp サーバを他人に使われないように発信ホストを限定する。 ←これはラクショー
ところが、今回仕事で SMTP AUTH なサーバを建てることになった。 ホスト限定なんかできやしない。 そこで smtp に何らかの認証をすればよろしいということになる。
SMTP 認証には
用意するもの
ハードウェア | なんか適当な PC/AT 今回は Dell PowerEdge650 |
ソフトウェア |
|
当方の基本的なインストール手順
いざというときのためにエマージェンシーな選択をつくっておく$ sudo apt-get install kernel-package bin86 libncurses5-dev gcc kernel-source-2.4.18
スグに /bin/lilo しておくといいだろうが、カーネルコンパイルしてインストールするときに自動実行されるので、今はいいや。$ cd /boot $ sudo cp vmlinuz-2.4.18-bf2.4 emergency $ cd .. $ sudo ln -s boot/emergency emergency $ sudo vi /etc/lilo.conf
カーネルコンパイル開始
カーネルインストール$ cd /usr/src $ sudo tar jxfv kernel-source-2.4.18.tar.bz2 $ cd kernel-source-2.4.18 $ sudo make menuconfig $ sudo make-kpkg --revision 2004030601 kernel_image
$ cd .. $ sudo dpkg --install kernel-image-2.4.18_2004030601_i386.deb
よけーなものは全部とめる
$ sudo vi /etc/inetd.conf
e1000 ドライバを作るぜ(インストールまで自動)
で、基本部分はおけー$ mkdir e1000 $ cp e1000-5.1.13.tar.gz e1000/ $ cd e1000 $ tar fzxv e1000-5.1.13.tar.gz $ cd e1000-5.1.13 $ ls $ cd src $ sudo make install ← 一回再起動していればこれだけで済んだ ココでエラーでた。 カーネルのバージョンがどうとか・・・ $ uname -r $ vi Makefile ← あたらしいカーネルでリブートしてなかったのでカーネルバージョンが取れてなかったので改造 $ sudo make install $ find /lib/modules/ -name e1000.o -print $ /sbin/ifconfig -a $ sudo vi /etc/modules ← ドライバモジュール e1000 を記述してないと認識されない $ sudo /sbin/shutdown -ht0 now
まずは ucspi-tcp をソースインストールしてコンパイル
$sudo apt-get install ucspi-tcp-src $sudo build-ucspi-tcp
続いて qmail のソースコンパイル
このタイミングでパッチを当てる ↓$sudo apt-get install qmail-src $sudo build-qmail
よく読めば最後のパラグラフに「パッチ当てるなら今だ!」みたいなことが書いてあるので ターミナルをきりかえ別ターミナルで下記を実行$ sudo build-qmail This script unpacks the qmail source into a directory, and compiles it to produce a binary qmail*.deb file. The directory where this is done will end up containing the source and package files for the qmail binary package, along with a directory containing the unpacked source. Enter a directory where you would like to do this [/tmp/qmail] dpkg-source: extracting qmail in qmail-1.03 dpkg-source: extracting qmail in qmail-1.03 Binary package qmail will be compiled now If you want to apply a custom patch, switch to another console and do it now This can take long time, depending on your machine Press ENTER to continue...
ターミナルをきりかえ元ターミナルでコンパイル継続するとインストールまで自動実行される。$ mkdir smtpauth $ cp qmail-smtpd-auth-0.31.tar.gz smtpauth/ $ cd smtpauth/ $ tar -xzf qmail-smtpd-auth-0.31.tar.gz $ ls qmail-smtpd-auth-0.31 CHANGES README.auth auth.patch base64.c base64.h $ cd /tmp/qmail/qmail-1.03/ $ sudo cp ~/smtpauth/qmail-smtpd-auth-0.31/base64.* . $ cat ~/smtpauth/qmail-smtpd-auth-0.31/auth.patch | sudo patch -p0 patching file Makefile patching file TARGETS patching file qmail-smtpd.8 patching file qmail-smtpd.c Hunk #2 succeeded at 63 (offset 1 line). Hunk #3 succeeded at 262 (offset 21 lines). Hunk #4 succeeded at 437 (offset 23 lines). Hunk #5 succeeded at 667 (offset 23 lines).
/etc/init.d/qmail 修正$ mkdir ~/cmd5checkpwdir $ cp cmd5checkpw-0.22.tar.gz ~/cmd5checkpwdir/ $ cd ~/cmd5checkpwdir $ tar xvfz cmd5checkpw-0.22.tar.gz $ cd ~/cmd5checkpwdir/cmd5checkpw-0.22 $ make gcc -c -g -Wall -O3 -c -o main.o main.c main.c:72: warning: return type of `main' is not `int' gcc -g -o cmd5checkpw main.o md5c.o hmac_md5.o $ sudo make install cp cmd5checkpw /bin/ ; cp cmd5checkpw.8 /usr/man/man8/ $ ls -l /bin/cmd5checkpw -rwxr-xr-x 1 root root 33689 Apr 18 15:07 /bin/cmd5checkpw $ sudo useradd smtpauth $ sudo chown smtpauth /bin/cmd5checkpw $ sudo chmod a+s /bin/cmd5checkpw $ ls -l /bin/cmd5checkpw -rwsr-sr-x 1 smtpauth root 33689 Apr 18 15:07 /bin/cmd5checkpw
qmail-smtpd を起動しているところを改造$ sudo mv /etc/init.d/qmail.dpkg-new /etc/init.d/qmail $ sudo vi /etc/init.d/qmail
権限変更をやっておかないと再起動時にササってシングルモードで起動する羽目に陥った。 また、 qmail がちゃんと動くように設定ファイル( Debian の場合は /etc/qmail/* )を書いておきましょう。sh -c "start-stop-daemon --start --quiet --user qmaild \ --exec /usr/bin/tcpserver -- -R -H \ -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \ /usr/sbin/qmail-smtpd \ ドメイン名 \ /bin/cmd5checkpw \ /bin/true 2>&1 | $logger -t qmail -p mail.notice &"
でもってちょっくらおまじない$ sudo chown smtpauth /etc/poppasswd $ sudo chmod 400 /etc/poppasswd
$ sudo tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp < /etc/tcp.smtp
SMTP AUTH をやろう! ( その 2 )$ sudo cat /usr/local/bin/reguser #!/bin/sh # ユーザ ID は 4 要素で作成 # 固有キー (外部で規定 $1 に投入 # 作成年 (下二桁 # 作成月 (二桁 # カウンター(下二桁、ぐるぐる回る $COUNT で利用 # ホームディレクトリは作成するがログインできないようにして pop アカウント名を保存する(このスクリプト中には記述なし) NEWPASSWD=$(/usr/local/bin/genpasswd) SMTPAUTHPASS=/etc/poppasswd COUNTERDATAFILE=/var/log/counterdata COUNT=$(/bin/cat $COUNTERDATAFILE) NEWCOUNT=$(( COUNT + 1 )) echo $NEWCOUNT | /usr/bin/tail -c 3 > $COUNTERDATAFILE USERNAME=$1$(/bin/date +%y%m)$(echo '00'$NEWCOUNT | /usr/bin/tail -c 3) /usr/sbin/useradd -s /bin/false -m -k /etc/skel -d /home/$USERNAME $USERNAME /bin/echo "$USERNAME:$NEWPASSWD" >> $SMTPAUTHPASS
当方(SHIBATA Akira)は, 本サイトをご利用の際に起きるかもしれない不利益に対し, 一切責任を負いません.