Debianを使ったサーバ構築のメモ

最終更新:2007年1月3日

リンク Ubuntu Server Editon を使ったサーバ構築のメモ
リンク 坂村酒店
リンク HBサロン

もくじ

1.はじめに

2.用意するのも

3.Gandi で自分用のドメインを取得する

4. Debian のインストール

5.SSH の準備、その他

6.メールサーバの構築

6-1 Postfix のインストール
6-2 Courier-imap のインストール
6-3 Cyrus-sasl2 のインストール
6-4 Postgrey のインストール
6-5 Pflogsumm のインストール

7.FTPサーバの構築

8.Webサーバの構築


はじめに

みなさんは誰でも、ご自分のメールアドレスをお持ちだと思います。
でもそれは自分が欲しいアドレスが誰かに使われていたため ☆♪↑△□@xxxxxx.com の様に
仕方なく呪文の様なアドレスにしたのだと思います。
もしそれが自分が欲しいアドレスだったらもっと良いのにな〜と思ったことはありませんか?
私がサーバを立てようと思ったのは、そんな単純な動機からでした。

自分用のサーバがあればホームページだって好きに作れるし、メールアドレスだって無限に作れて、
友達なんかにも分けて上げられます。

これからDebian Linux (Sarge) を使ってサーバを構築したときの個人的なメモを少しずつ思い出しながら残していきます。
サーバは、固定IPアドレス/独自ドメインで構成しました。
いろいろなサイトを参考にさせていただきました。ありがとうございまし た。

これはあくまでも個人的なメモであり、その通りにやって不具合が生じても保証の限りではありません(免 責事項)
ご意見、ご質問がありましたら、postmaster@kazutoyo.com へメールをいただけるとありがたいです。

用意するもの

1. 余っているintel系CPUを使ったノートPC (デスクトップでも良いですが、サーバは24時間365日稼働しますので、電気 代がばかになりません)

2. 少しばかりのやる気

3. 常時接続環境

こちらのネットワーク環境を紹介します。

Gandi で自分用のドメインを取得する

  思い出したら書き込み ます

Gandi でIPアドレスとドメイン名を登録するので、ネームサーバの構築は不要です。

Debian のインストール

まず、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


SSH の準備、その他

サーバ機と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 を使ってメールサーバをインストールします。

メールサーバは以下のポリシーを基に作りました。

  1. メールサーバは、3つのバーチャルドメイン(aaaa.com, bbbb.com, cccc.com)をサポートします。
  2. 携帯へのメールは拒否られないように、お世話になってる ASAHI-NET さんのサーバ経由で送信します。
  3. スパム対策として、postgrey, ブラックリスト(spamcop, relays.ordb.org等)を使わせていただきます。
  4. 送信は スパムの踏み台にならないように smtp認証させます。

バーチャルドメインを使って複数のドメインをサポートする必要がないなら、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/ が作られます。


Courier-imap のインストール

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

とします。


Cyrus-sasl2 のインストール

送信時の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 が返ってきたら設定完了。


Postgrey のインストール

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


Pflogsumm のインストール

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サーバの構築

バーチャル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アドレス


Webサーバの構築

apache2本体をインストールします。

# apt-get install apache2

設定を変更します。

# vi /etc/apache2/apache2.conf

デフォルトでドキュメントルートは、

/var/www

になります。