SMTP AUTH 関連

SMTP AUTH をやろう! ( その 1 )

Debian インストールから SMTP AUTH な送信サーバ構築まで

SMTP Authentication with qmail on Debian GNU/Linux Woody by SHIBATA Akira
作成 2004/03/13

世に spammer の種はつきまじ

なんちゅうか、最近 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 なサーバがあると差出人詐称してメイルだせるじゃん(爆)

spam を出さないためには

要するに踏み台にならなければいい。  smtp サーバを他人に使われないように発信ホストを限定する。 ←これはラクショー

ところが、今回仕事で SMTP AUTH なサーバを建てることになった。 ホスト限定なんかできやしない。 そこで smtp に何らかの認証をすればよろしいということになる。 

smtp 認証のためには

SMTP 認証には

などがある。 

で、はじめるにあたって

用意するもの
ハードウェアなんか適当な PC/AT 今回は Dell PowerEdge650
ソフトウェア

当方の基本的なインストール手順

  1. ハードは DEC21140 か i82559 か RTL8139/8029 あたりを設置(プログラムのダウンロード等の当面のネットワーク利用に使う)
  2. CD ブート( UNIX USER 2002 年 9 月号付録)
  3. パーティションは先頭から 10MB (/boot 用)、 1000MB ( swap 用)、 残り全部( / 用) に切る
  4. 基本的にはすべてデフォルト
  5. デフォルトじゃないのは時刻保持を Local time にすること MD5 を使うようにすること。 
  6. 基本インストールが終わったら、当方の基本欲しいパッケージを インストールする sudo と ssh
  7. ソッコー visudo して権限書き加え

基本インストール後カーネルをアップグレードするためにパッケージをインストール

$ sudo apt-get install kernel-package bin86 libncurses5-dev gcc kernel-source-2.4.18
いざというときのためにエマージェンシーな選択をつくっておく
$ cd /boot
$ sudo cp vmlinuz-2.4.18-bf2.4 emergency
$ cd ..
$ sudo ln -s boot/emergency emergency
$ sudo vi /etc/lilo.conf
スグに /bin/lilo しておくといいだろうが、カーネルコンパイルしてインストールするときに自動実行されるので、今はいいや。 

カーネルコンパイル開始

$ 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

で、基本部分はおけー

qmail インストールにはいる

まずは 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).
ターミナルをきりかえ元ターミナルでコンパイル継続するとインストールまで自動実行される。 

次に cmd5checkpw コンパイル→インストール→権限変更
$ 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
/etc/init.d/qmail 修正
$ sudo mv /etc/init.d/qmail.dpkg-new /etc/init.d/qmail
$ sudo vi /etc/init.d/qmail
qmail-smtpd を起動しているところを改造
        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 &"
権限変更をやっておかないと再起動時にササってシングルモードで起動する羽目に陥った。  また、 qmail がちゃんと動くように設定ファイル( Debian の場合は /etc/qmail/* )を書いておきましょう。 
$ 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

ユーザ追加スクリプト

$ 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
SMTP AUTH をやろう! ( その 2 )
Memorandum about Linux and Network | ほかのジャンルを見てみる | サイトマップ

免責

beacon

当方(SHIBATA Akira)は, 本サイトをご利用の際に起きるかもしれない不利益に対し, 一切責任を負いません.