メールサーバー · 2 min read · Dec 25, 2025

Arch Linux上のシンプルなメールサーバー (Postfix + Dovecot)

Arch Linux上のシンプルなメールサーバー (Postfix + Dovecot)

著者: Jeffrey Gelens
バージョン: 1.3
日付: 2009年4月12日

はじめに

このチュートリアルでは、Arch LinuxマシンまたはVPS上にPostfixとDovecotを使用して完全なメールサーバーをインストールする方法を説明します。この特定のチュートリアルは、私の256MB VPSに基づいています。基本的なLinuxの知識が必要です。すべてのステップを詳細に説明しているわけではありません。

基本システム

基本イメージはArch Linux 2008.06です。ブート後、SSHサーバーでのrootログインを無効にし、次のように新しいユーザーを作成することをお勧めします:

adduser   
usermod -a -G wheel,users,nobody,mail 

Arch Linuxのミラーを速度でランク付けすることはオプションですが、インストールを速くするかもしれません:

pacman -Sy  
pacman -S python  
sed -ie'' 's/^#S/S/g' /etc/pacman.d/mirrorlist  
rankmirrors -v /etc/pacman.d/mirrorlist | tee /etc/pacman.d/mirrorlist.new && mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist

このセットアップに必要な基本パッケージをインストールします:

pacman -Syu  
pacman -S sudo base-devel abs

メールサーバー

基本パッケージをインストールしたので、次のステップはメールサーバーのインストールです。SMTPサーバーとしてPostgreyをインストールします。これはスパム対策に最適なツールですので、これもインストールしましょう。グレイリスティングは、メッセージ自体をスキャンすることなくスパムをブロックする非常に効果的な方法であり、CPUサイクルを無駄にしません。私のサーバーでは、約95%のスパムをブロックしており、残りの5%はSpamassassinが処理しています。グレイリスティングの唯一の欠点は、受信メールが数分遅れることです。

pacman -S postfix dovecot spamassassin procmail  
groupadd -g 5001 spamd  
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd  
chown spamd:spamd /var/lib/spamassassin

Spamassassin

–max-childrenを好みに合わせて編集します。Spamassassinは多くのメモリを使用するため、ユーザーが数人だけのメールサーバーでは1つの子プロセスで十分です。

/etc/conf.d/spamd

SAHOME="/var/lib/spamassassin/"
SPAMD_OPTS="-c --max-children 1 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log --pidfile /var/run/spamd.pid"

証明書

まず、DovecotとPostfix用の自己署名証明書を生成する必要があります。パスフレーズを求められますが、任意のランダムな文字列で大丈夫です。覚えておく必要はありません。

cd /etc/ssl/certs  
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt  
openssl rsa -in mail.key -out mail.key  
mv mail.key /etc/ssl/private

Dovecot

DovecotとPostfixを設定して、メールを保存するためにMaildir構造を使用します。これにより、各ユーザーのメールがデータベースではなくホームディレクトリに保存されます。このセットアップには適していますが、ユーザー数が多い場合はMySQLまたはPostgreSQLを使用する方が良いです。Dovecotは、ユーザーがIMAPおよびIMAPs(SSL)を使用できるように設定されます。また、DovecotにはSASL認証サーバーが組み込まれているため、別のSASLサーバーを設定する必要がなく、メモリを節約できます。

/etc/dovecot/dovecot.conf

protocols = imap imaps
disable_plaintext_auth = yes
log_timestamp = "%b %d %H:%M:%S "
ssl = yes
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key
mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/run/dovecot/auth-client
      user = postfix
      group = postfix
      mode = 0660
    }
  }
}

Postfix

次はPostfixです。設定ファイルは非常に複雑です。幸運なことに、私はすべての調査を行ったので、ほとんどすべてをコピー&ペーストできます。次の設定は変更する必要があります:

myhostnameこれはメールサーバーの場所です(例: mail.example.com)。myoriginこれはメールアドレスの@の後のドメインです(例: [email protected])。virtual_alias_domainsこれはmyoriginと同じです。

/etc/postfix/main.cf

# パス
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# ドメイン設定
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
# タイムアウト設定とその他の制限
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# SMTP設定
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
#smtp_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination,
                               check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
# ネットワーク設定
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# メールとメールボックスの設定
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0
# その他
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +

master.cfを編集して、PostfixがメールをPostgrey(次の章で説明します)とSpamassassinを通過させるようにします。

/etc/postfix/master.cf

次の行を置き換えます:

smtp      inet  n       -       n       -       -       smtpd

これらの2行に:

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

ファイルの最後に次の3行を追加します:

spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Spamassassinのルールを設定します。required_scoreを少し調整する必要があるかもしれません。デフォルトの6.31は私には素晴らしいようです。

/etc/mail/spamassassin/local.cf

rewrite_header Subject ***SPAM***
required_score 6.31
report_safe 1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

/etc/procmailrc

スパムを自動的にJunkフォルダーにコピーするには、このファイルを作成します:

DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/

:0:
* ^X-Spam-Status: Yes
.Junk/

ユーザーアカウントの作成

各メールユーザーのために適切なアカウントを作成し、手動で行いたくない場合は独自のスクリプトを作成します。

useradd -m -G mail -s /sbin/nologin   
cd ~  
umask 077  
mkdir -p Maildir/{cur,new,tmp}  
mkdir -p Maildir/.Drafts/{cur,new,tmp}  
mkdir -p Maildir/.Sent/{cur,new,tmp}  
mkdir -p Maildir/.Trash/{cur,new,tmp}  
chmod 0700 Maildir/{cur,new,tmp}  
chmod 0700 Maildir/.Drafts/{cur,new,tmp}  
chmod 0700 Maildir/.Sent/{cur,new,tmp}  
chmod 0700 Maildir/.Trash/{cur,new,tmp}  
chown -R :users *

新しいユーザーのメールアドレスが仮想ユーザーマップに追加されていることを確認してください。

/etc/postfix/virtual

[email protected] jeffrey@localhost

このファイルを保存した後、次のコマンドを実行します:

postmap /etc/postfix/virtual

Postgrey

Postgreyはデフォルトのpacmanリポジトリにはないため、AURからダウンロードします。次のコマンドは通常のユーザーとして実行し、rootとしてではないことを確認してください。

cd ~  
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz  
tar xzvf yaourt.tar.gz  
cd yaourt  
makepkg -i  
yaourt --noconfirm -S postgrey

オプションで、/etc/postfix/postgrey_whitelist_recipientsファイルを編集して、信頼するドメインやメールアドレスをホワイトリストに追加できます。これは、これらのアドレスがグレイリスティングのために遅延されないため便利です。

サーバーの起動

ついに!完了しました。すべてのサーバーを起動し、すべてが正常に動作することを願いましょう。

/etc/rc.confを編集し、リストされたデーモンを追加してください:

DAEMONS=(spamd postgrey dovecot postfix)

これにより、すべてのデーモンが再起動時に自動的に起動されるようになります。今のところ、手動で起動します:

/etc/rc.d/spamd start  
/etc/rc.d/postgrey start  
/etc/rc.d/dovecot start  
/etc/rc.d/postfix start

mail.example.comをお気に入りのメールクライアントに追加し、ユーザーアカウント設定を入力し、オプションでSSLを有効にすれば、あなたの個人的なフル機能のメールサーバーが準備完了です!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。