
Debianを使ったサーバ構築のメモ
最終更新:2007年1月3日
6-1 Postfix のインストール
6-2 Courier-imap のインストール
6-3 Cyrus-sasl2 のインストール
6-4 Postgrey のインストール
6-5 Pflogsumm のインストール
みなさんは誰でも、ご自分のメールアドレスをお持ちだと思います。
でもそれは自分が欲しいアドレスが誰かに使われていたため ☆♪↑△□@xxxxxx.com の様に
仕方なく呪文の様なアドレスにしたのだと思います。
もしそれが自分が欲しいアドレスだったらもっと良いのにな〜と思ったことはありませんか?
私がサーバを立てようと思ったのは、そんな単純な動機からでした。
自分用のサーバがあればホームページだって好きに作れるし、メールアドレスだって無限に作れて、
友達なんかにも分けて上げられます。
これからDebian Linux (Sarge)
を使ってサーバを構築したときの個人的なメモを少しずつ思い出しながら残していきます。
サーバは、固定IPアドレス/独自ドメインで構成しました。
いろいろなサイトを参考にさせていただきました。ありがとうございまし
た。
これはあくまでも個人的なメモであり、その通りにやって不具合が生じても保証の限りではありません(免
責事項)
ご意見、ご質問がありましたら、postmaster@kazutoyo.com
へメールをいただけるとありがたいです。
1. 余っているintel系CPUを使ったノートPC (デスクトップでも良いですが、サーバは24時間365日稼働しますので、電気 代がばかになりません)
2. 少しばかりのやる気
3. 常時接続環境
こちらのネットワーク環境を紹介します。
思い出したら書き込み
ます
Gandi でIPアドレスとドメイン名を登録するので、ネームサーバの構築は不要です。
まず、DebianのサイトからネットワークでインストールするためのCDイメージをダウンロードして
CDにイメージを焼き、その後DebianをインストールするPCでCDから起動させます。
(1)
http://www.jp.debian.org/releases/sarge/debian-installer/
から debian-31r3-i386-netinst.iso (100MBくらい)をダウンロードしてISO形式でCDに焼きます。
(2) CDを入れて、CDから起動させます。
それ以降は質問に答えるかたちでインストールしていきます。
20分くらいで出来るようになりました。
昔のdebianに比べたら、ずいぶんインストールが楽になりましたね。
インストールが終わったら、まずネットワークの設定をします。
エディタで interfaces というファイルを開きます。
# vi /etc/network/interfaces
IPアドレス、ネットマスク等を設定します。
ここでは、IPアドレスを 192.168.0.2 としています。
#
The loopback network interface
auto lo eth0 ← eth0が入っていること。入っていないと自動起動できません。
iface lo inet loopback
# The primary network interface
iface eth0 inet static
address 192.168.0.2
netmask
255.255.255.0
network 192.168.0.0
broadcast
192.168.0.255
gateway 192.168.0.1
次に、ネームサーバを設定します。
# vi /etc/resolv.conf
ネームサーバが 192.168.0.2 の場合は
search
nameserver 192.168.0.2
を追加します。
次に、パッケージを最新にするために、aptの設定をしておきます。まずapt のソースリストを変更します
# vi /etc/apt/sources.list
以下の設定を追加します。
deb
http://ftp.jp.debian.org/debian/
sarge main contrib non-free
deb http://ftp.jp.debian.org/debian-non-US/
sarge/non-US main contrib non-free
この後、aptを使って最新のパッケージにアップデートします。
#
apt-get update
# apt-get upgrade
サーバ機とWindowsクライアント機で通信をするために、sshをインストールします。
サーバ機で直接キーボードから入力する場合はSSHのインストールは不要です。
# apt-get install ssh
接続するためのキーを作成します。セキュリティのため root ではなく、ユーザから接続します。
必要なら、接続後 root になります。
#
su xxxxxx ← ユーザ名
$ ssh-keygen -t rsa
パスワードを設定します。このパスワードを使って今後 Windows機から接続していきます。
ここで一度リブートしておきます。
ここから先は、Windows機から Tera Term Pro 等を使って接続し、サーバを構築して行きます。
debian (sarge) でインストールする ssh はプロトコル2の ssh2 ですので、標準の
Tera Term Proを使った接続はできません。
putty を使って接続するか、ssh2 の extension をインストールした Tera Term
Proを使用します。
Vectorさんからダウンロードできます。 http://www.vector.co.jp/soft/win95/net/se320973.html
その他必要なパッケージをインストールしておきます。
# apt-get install ftp nmap less dnsutils ntpdate rsync lv whois
よく使うコマンドを登録しておきます。
# vi ~/.bashrc
以下の様なaliasを追加します。
alias
ma='tail -100 /var/log/mail.info'
alias me='tail -100 /var/log/messages'
alias ud='apt-get update'
alias ug='apt-get upgrade'
alias du='apt-get dist-upgrade'
ここで設定を有効にしておきます。
# source ~/.bashrc
この後は、'ud' で apt-get update と 'ug' で apt-get upgrade
と同じことが出来るので楽ちんです。
kernel を最新にアップデートしておきます。
# apt-get install kernel-image
リストが表示されるので、最新を選びます。kernel のバージョンが 2.6.8-2 の場合は
# apt-get install kernel-image-2.6.8-2-686
次にサーバの時間を合わせるため、ntpdate を起動させます。福岡大学さんのサーバを使わせてもらいます。
# /usr/sbin/ntpdate -s -b 133.100.9.2
うまく時間を合わせることができたら、cronで毎日実行させます。
cron で毎日零時に時間を合わせる場合は
#
crontab -e
0 * * * * /usr/sbin/ntpdate -s -b 133.100.9.2
を追加します。
postfix を使ってメールサーバをインストールします。
メールサーバは以下のポリシーを基に作りました。
バーチャルドメインを使って複数のドメインをサポートする必要がないなら、Postfixをインストールする
だけで、ユーザ宛のメールは送受信できるようになります。
まず、apt で postfix 本体をインストールします。
# apt-get install postfix postfix-tls
次に、aliases, main.cf を準備します。 ※aliases の保存場所は
main.cf
で設定します。
aliases の例
postmaster:
root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
main.cf の例 (矢印より右側は不要です。)
#
See /usr/share/postfix/main.cf.dist for a commented, more complete
version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
← apt でインストールするとデフォルトで付きます。
biff = no ← apt
でインストールするとデフォルトで付きます。
# appending .domain is the MUA's job. ← apt
でインストールするとデフォルトで付きます。
append_dot_mydomain = no ← apt
でインストールするとデフォルトで付きます。
# Uncomment the next line to generate "delayed mail" warnings ← apt
でインストールするとデフォルトで付きます。
#delay_warning_time = 4h ← apt
でインストールするとデフォルトで付きます。
##### setting for mydomain #####
mydomain = aaaa.com ← ドメイン名を登録します。バーチャルの最初のドメイン。
myhostname =
mypc.aaaa.com ← サーバのホスト名を登録します。
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks_style = subnet
mynetworks = 192.168.0.0/24, 127.0.0.1/32
relay_domains = $mydestination alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
← aliasesのデータベースがある場所を指定します。
home_mailbox = Maildir/
← maiboxではなく、maildirでメールを格納します。
#### setting for virtual domain #### ← ここからバーチャルドメインの設定です。
virtual_transport = virtual virtual_mailbox_base = /home/vmailbox
← バーチャルドメインのメールボックスを格納する場所です。
virtual_mailbox_maps =
hash:/etc/postfix/vmailboxmap ← バーチャルドメインで扱うすべてのメールアドレスを登録
virtual_mailbox_domains =
hash:/etc/postfix/vmaildomains ← バーチャルドメイン名をすべて登録
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
local_transport = local
local_recipient_maps = unix:passwd.byname $alias_maps
virtual_alias_maps =
hash:/etc/postfix/virtual ← バーチャルドメインで扱うエイリアスを登録する。
allow_mail_to_commands = alias,forward,include
##### setting for spam #####
smtpd_sender_restrictions =
reject_non_fqdn_sender hash:/etc/postfix/reject_sender
← ここに設定したアドレスからのメールは受け取り拒否します。
smtpd_client_restrictions =
permit_mynetworks,
check_recipient_access hash:/etc/postfix/access_recipient,
← ここに設定したアドレスへのメールは無条件で受け取ります。
check_client_access regexp:/etc/postfix/whitelist,
← ここに設定した相手からの接続はすべて受け付けます。
reject_non_fqdn_recipient,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000
← postgreyを有効にします。
reject_rbl_client bl.spamcop.net,
← ブラックリストの指定
reject_rbl_client relays.ordb.org,
← ブラックリストの指定
reject_rbl_client opm.blitzed.org,
← ブラックリストの指定
reject_rbl_client list.dsbl.org,
← ブラックリストの指定
reject_rbl_client sbl.spamhaus.org, ← ブラックリストの指定
reject_rbl_client cbl.abuseat.org,
← ブラックリストの指定
permit ← 上記以外は全て受け取る。
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
reject_invalid_hostname,
check_helo_access regexp:/etc/postfix/helo_restrictions
##### setting for smtp auth #####
smtpd_sasl_auth_enable = yes ← smtp認証を使用します。
smtpd_sasl_local_domain = aaaa.com
← ドメイン名を指定します。
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
permit_mynetworks,
permit_auth_destination,
permit_sasl_authenticated,
reject_unauth_destination
broken_sasl_auth_clients = yes ←
OUTLOOK で使用する場合に必須です。
##### setting for mobile #####
transport_maps = hash:/etc/postfix/transport
maximal_queue_lifetime = 0 ← メールをキューに溜めません。
メール用のユーザを作ります。
また、それぞれのメールは/home/vmailbox以下にUID:10000, GID:10000として作成されることになるため
UID: 10000, GID: 10000というvmailboxというUNIXアカウントを事前に作成しておきます。
#
useradd -u 10000 vmailbox
# mkdir -p 0755 /home/vmailbox && chown 10000:10000
/home/vmailbox
vmailboxmap の例
postmaster@aaaa.com
aaaa.com/postmaster/Maildir/
ichiro@aaaa.com aaaa.com/ichiro/Maildir/
matsui@bbbb.com bbbb.com/matsui/Maildir/
taguchi@cccc.com cccc.com/taguchi/Maildir/
vmaildomains の例
aaaa.com
required to prevent relay access denied errors
bbbb.com required to prevent relay access denied errors
cccc.com required to prevent relay access denied errors
virtual の例
postmaster@aaaa.com
postmaster@aaaa.com,postmaster+aaaa.com
ichiro@aaaa.com ichiro@aaaa.com,ichiro+aaaa.com
matsui@bbbb.com matsui@bbbb.com,matsui+bbbb.com
taguchi@cccc.com taguchi+cccc.com
reject_sender の例
black@spam.com REJECT
access_recipient の例
ichiro@aaaa.com OK
whitelist の例
/\.bbtec.net$/ OK ← yahooからの接続は無条件に受け付ける
transport の例 携帯へは自分が契約している ASAHI-NETさん のメールサーバ経由で送信するため。
ezweb.ne.jp
:[mail.asahi-net.or.jp]
.ezweb.ne.jp :[mail.asahi-net.or.jp]
vodafone.ne.jp :[mail.asahi-net.or.jp]
.vodafone.ne.jp :[mail.asahi-net.or.jp]
docomo.ne.jp :[mail.asahi-net.or.jp]
.docomo.ne.jp :[mail.asahi-net.or.jp]
helo_restrictions の例
/^(.+\.)?aaaa\.com$/ REJECT ← こちらのドメイン名で hello を返してくる明らかに怪しい接続は拒否する
以上で準備した設定ファイルをデータベース化します。
#
cd /etc/postfix ← postfix のディレクトリに移動
# postmap vmailboxmap
# postmap vmaildomains
# postmap virtual
# postmap reject_sender
# postmap access_recipient
# postmap whitelist
# postmap transport
# postmap helo_restrictions
全ての設定ファイルをデータベース化しておきます。
postfix をスタートさせます。
# postfix start
メールを送信してユーザのディレクトリを作ります。
#
mail ichiro@aaaa.com
test ←本文です
Ctrl+D ←CtrlをおしながらDをおす
これで、/home/vmailbox/aaaa.com/ichiro/Maildir/ が作られます。
postfix でメールサーバが起動し、メールが送れることが確認できたら、次にOUTLOOK等のメーラーからメールを読むための POP/IMAP を準備します。
#
apt-get install courier-imap courier-pop
# vi /etc/courier/authdaemonrc
以下の認証の箇所を修正します。
authmodulelist="authcustom
authuserdb authpam"
authmodulelistorig="authcustom authuserdb authpam"
バーチャルドメインのユーザの作成
(1)
メールボックスを設定します。
# userdb ichiro@aaaa.com set home=/home/vmailbox/aaaa.com/ichiro
mail=/home/vmailbox/aaaa.com/ichiro/Maildir uid=10000 gid=10000
(2)popのパスワードを設定します。
# userdbpw -md5 | userdb ichiro@aaaa.com set pop3pw Password:******
Reenter
password:*****
(3)imapのパスワードを設定します。
# userdbpw -md5 | userdb ichiro@aaaa.com set imappw Password:******
Reenter password:*****
上記の(1)(2)(3)を全てのメールユーザについて実行します。次にこのデータをデータベース化します。
#
cd /etc/courier/
# chmod 600 userdb
# makeuserdb
もし、旧サーバなどからバックアップした userdb を使用してデータベースを作る場合は
#
cp userdb.bak userdb
# chmod 600 userdb
# makeuserdb
とします。
送信時のsmtp認証を実現させるために、cyrus-sasl2 をインストールします。
# apt-get install sasl2-bin libsasl2-modules
smtp認証させるためには、main.cf も修正する必要があります。
#
vi /etc/postfix/master.cf
smtp inet n - - - - smtpd -o smtpd_sasl_auth_enable=yes ← に修正する
パスワードを設定します。
#
saslpasswd2 -u aaaa.com -c aaaa Password:******
Again (for verification):******
# saslpasswd2 -u aaaa.com -c bbbb Password:******
Again (for verification):******
# saslpasswd2 -u aaaa.com -c cccc Password:******
Again (for verification):******
データベースのアクセス権を変更します。
#
mv /etc/sasldb2 /var/spool/postfix/etc
# ln -s /var/spool/postfix/etc/sasldb2 /etc
# chgrp postfix /var/spool/postfix/etc/sasldb2
smtpd.conf に認証方法を設定します。なければ新規に作成します。
#
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop
認証のテスト
#
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mypc.cccc.com ESMTP Postfix (Debian/GNU)
EHLO localhost ← 入力する
250-mypc.cccc.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME auth plain a2dX8AW8Aa2F6d ← 入力する※
235 Authentication successful quit ← quitで終了させます。
※ perl -MMIME::Base64 -e 'print
encode_base64("username\0username\0password");'
で出来たコード。
Authentication successful が返ってきたら設定完了。
SPAM対策として Postgrey をインストールします。
Postgrey は 昨今のSPAMはプロバイダのDHCPで一時的に割り振られたIPアドレスからゲリラ的
に
送信して、受け取りを拒否されても再送はしないという特性を利用したSPAM対策です。
最初にメールを送りつけてくる接続をいったん拒否し、ある一定以上の時間たって
再度接続してくる正統なIPアド
レスからのメールは受け取ります。
ちゃんと一定時間後に再送してくる正統なSPAMは、SpamCop等のブラックリストで拒否します。
一度メールを受け取った正統なIPアドレスはしばらく憶えておくので、それ以降のメールは
正しく受信します。
最初にdebian用のPostgreyのパッチを以下のサイトからダウンロードさせていただきます。
ダウンロードはユーザアカウントで
>
wget k2net.hakuba.jp/pub/rgrey-0.2-1.21-debian.tar.gz
> tar -zxf rgrey-0.2-1.21.tar.gz
> su
次に、aptを使ってpostgreyをインストールします。
#
apt-get install postgrey
# echo postgrey hold | dpkg --set-selections
# cd rgrey-0.2-1.21
# cp greylist_clients /etc/postgrey
# cp rgrey-0.2-1.21.patch /usr/sbin
# cd /usr/sbin
# patch < rgrey-0.2-1.21.patch
# /etc/init.d/postgrey restart
設定を以下の様に修正します。
この場合は3分後(180秒後)に再度接続してきたメールサーバからのメールを受け
取り
その送信元を14日憶えておきます。
無条件で受け取るホワイトリストは必要なら準備し、ここに設定します。
#
vi /etc/default/postgrey
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=180 --max-age=14"
main.cf に下記を追加します。
smtpd_client_restrictions
= permit_mynetworks,
reject_non_fqdn_recipient,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000 ← これを追加します。
reject_rbl_client bl.spamcop.net,
reject_rbl_client relays.ordb.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
permit
Postfix のログを解析する pflogsumm をインストールします。
#
apt-get install pflogsumm
# pflogsumm /var/log/mail.info > /var/log/postfix.log
今日のログを見る時は
# pflogsumm -d today /var/log/mail.info | less
昨日のログを見る時は
# pflogsumm -d yesterday /var/log/mail.info | less
.bashrc に登録しておけば、簡単にログを見られるので便利です。
alias
pf='pflogsumm /var/log/mail.info > /var/log/postfix.log'
alias pt='pflogsumm -d today /var/log/mail.info | less'
alias py='pflogsumm -d yesterday /var/log/mail.info | less'
バーチャルFTPサーバを構築するため、vsftpd をインストールします。
# apt-get install vsftpd
設定ファイルを修正します。
# vi /etc/vsftpd.conf
以下の部分を有効にします。
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
ルートディレクトリより上層のフォルダへ移動できるユーザを設定します。
# vi /etc/vsftpd.chroot_list
(例)ichiro
を設定しておきます。
ユーザのホームディレクトリにしか入れないようにしているため、ユーザのホームディレクトリを必要に応じて変更します。
#
vipw ichiro:x:1001:1001:,,,:/home/ichiro:/bin/bash を
ichiro:x:1001:1001:,,,:/xxxx/xxxx/xxxx:/bin/bash ← に変更します。
特定のIPアドレスからの接続を拒否する場合は
vsftpd.conf の最後に
tcp_wrappers=YES
を追加します。
hosts.deny の最後に拒否するIPアドレスを記述します。
#
vi /etc/hosts.deny
vsftpd : xxx.xxx.xxx.xxx ← 接続を拒否するIPアドレス
apache2本体をインストールします。
# apt-get install apache2
設定を変更します。
# vi /etc/apache2/apache2.conf
デフォルトでドキュメントルートは、
/var/www
になります。