メールサーバー · 9 min read · Sep 25, 2025

Postfix、Courier、MySQL、SquirrelMailを使用した仮想ユーザーとドメイン (Ubuntu 13.10)

このチュートリアルは、Falko Timme & Srijan Kishoreによる著作権(c) 2014です。これは、http://workaround.orgで見つけることができるChristoph Haasのチュートリアルから派生したものです。このチュートリアルは、クリエイティブ・コモンズライセンス2.5またはそれ以降のバージョンの下で自由に使用できます。

この文書では、仮想ユーザーとドメインに基づくPostfixメールサーバーのインストール方法を説明します。つまり、MySQLデータベースにあるユーザーとドメインです。また、Courier(Courier-POP3、Courier-IMAP)のインストールと設定も示します。これにより、CourierはPostfixが使用するのと同じMySQLデータベースに対して認証できます。

結果として得られるPostfixサーバーは、SMTP-AUTHTLS、およびクォータに対応しています(クォータはデフォルトではPostfixに組み込まれていませんので、Postfixを適切にパッチする方法を示します)。パスワードはデータベースに暗号化された形式で保存されます(私が見つけたほとんどの文書は、セキュリティリスクであるプレーンテキストパスワードを扱っていました)。さらに、このチュートリアルでは、スパムとウイルスのスキャンを行うためにAmavisdSpamAssassin、およびClamAVのインストールもカバーします。また、ユーザーがメールを読み書きし、パスワードを変更できるようにするためのWebメールインターフェースとしてSquirrelMailをインストールする方法も示します。

このような「仮想」セットアップ(MySQLデータベース内の仮想ユーザーとドメイン)の利点は、「実際の」システムユーザーに基づくセットアップよりもはるかにパフォーマンスが高いことです。この仮想セットアップを使用すると、メールサーバーは数千のドメインとユーザーを処理できます。さらに、新しいユーザー/ドメインを追加したり、既存のものを編集したりする際にMySQLデータベースのみを扱う必要があるため、管理が容易です。dbファイルを作成するためのpostmapコマンドも不要で、Postfixの再読み込みも不要です。MySQLデータベースの管理には、phpMyAdminのようなWebベースのツールを使用できます。このhowtoでもインストールされます。3つ目の利点は、ユーザーがユーザー名としてメールアドレスを持つことです(ユーザー名+メールアドレスの代わりに)。これは理解しやすく、記憶しやすいです。

このhowtoは実用的なガイドとして意図されています。理論的な背景はカバーしていません。それらはWeb上の他の多くの文書で扱われています。

この文書は、いかなる種類の保証もありません!このシステムを設定する唯一の方法ではないことを言いたいです。この目標を達成する方法はたくさんありますが、これが私の取る方法です。これがあなたにとって機能することを保証するものではありません!

1 前提条件

このチュートリアルはUbuntu 13.10 Server(Saucy Salamander)に基づいているため、このチュートリアルを続ける前に基本的なUbuntu 13.10サーバーのインストールを設定する必要があります。システムには静的IPアドレスが必要です。このチュートリアルでは、192.168.0.100をIPアドレスとして、server1.example.comをホスト名として使用します。

rootとしてログインしていることを確認してください(rootになるには

sudo su

と入力します)。このチュートリアルのすべてのステップをrootユーザーとして実行する必要があります。

/bin/shを/bin/bashへのシンボリックリンクにすることが非常に重要です…

dpkg-reconfigure dash

dashをデフォルトのシステムシェル(/bin/sh)として使用しますか? <– いいえ

… そしてAppArmorを無効にします:

/etc/init.d/apparmor stop   
update-rc.d -f apparmor remove   
apt-get remove apparmor apparmor-utils

2 Postfix、Courier、Saslauthd、MySQL、phpMyAdminのインストール

Postfix、Courier、Saslauthd、MySQL、およびphpMyAdminをインストールするには、単に次のコマンドを実行します。

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

いくつかの質問が表示されます:

MySQL「root」ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL「root」ユーザーのパスワードを再入力してください: <– yourrootsqlpassword
Webベースの管理用のディレクトリを作成しますか? <– いいえ
メール構成の一般的なタイプ: <– インターネットサイト
システムメール名: <– server1.example.com
SSL証明書が必要ですか? <– はい
自動的に再構成するWebサーバー: <– apache2
phpmyadminのデータベースをdbconfig-commonで構成しますか? <– いいえ

3 Postfixにクォータパッチを適用する

Postfixソースを取得し、クォータパッチでパッチを当て、新しいPostfix.debパッケージをビルドしてそれらの.debパッケージをインストールする必要があります:

apt-get build-dep postfix
cd /usr/src  
apt-get source postfix

(次のコマンドで正しいPostfixバージョンを使用していることを確認してください。私はPostfix 2.10.2をインストールしています。次のコマンドを実行してPostfixのバージョンを確認できます。

postconf -d | grep mail_version

出力は次のようになります:

root@server1:/usr/src# postconf -d | grep mail_version  
mail_version = 2.10.2  
milter_macro_v = $mail_name $mail_version  
root@server1:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch  
cd postfix-2.10.2  
patch -p1 < ../postfix-vda-v13-2.10.0.patch

次に、debian/rulesを開いてDEB_BUILD_HARDENINGを1から0に変更します:

vi debian/rules

| [...] export DEB_BUILD_HARDENING=0 [...] |

これを行わないと、次のエラーメッセージでビルドが失敗します:

maildir.c: In function âdeliver_maildirâ:  
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c: In function âsql2fileâ:  
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]  
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]  
cc1: some warnings being treated as errors  
make: * [maildir.o] Error 1  
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'  
make[1]: * [update] Error 1  
make[1]: Leaving directory `/usr/src/postfix-2.10.2'  
make: *** [build] Error 2  
dpkg-buildpackage: error: debian/rules build gave error exit status 2  
root@server1:/usr/src/postfix-2.10.2#

新しいPostfix.debパッケージをビルドできます:

dpkg-buildpackage

次に、一つ上のディレクトリに移動します。そこに新しい.debパッケージが作成されました:

cd ..

コマンド

ls -l

は、利用可能なパッケージを表示します:

root@server1:/usr/src# ls -l  
total 7124  
drwxr-xr-x 18 root root    4096 Apr 16 04:29 postfix-2.10.2  
-rw-r--r--  1 root root   48594 Apr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root  161974 Apr 16 04:29 postfix-dev_2.10.2-1_all.deb  
-rw-r--r--  1 root root 1094344 Apr 16 04:29 postfix-doc_2.10.2-1_all.deb  
-rw-r--r--  1 root root   57342 Apr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50554 Apr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50804 Apr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50756 Apr 16 04:29 postfix-pgsql_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch  
-rw-r--r--  1 root root  282175 Apr 16 04:28 postfix_2.10.2-1.diff.gz  
-rw-r--r--  1 root root    1522 Apr 16 04:28 postfix_2.10.2-1.dsc  
-rw-r--r--  1 root root    3899 Apr 16 04:29 postfix_2.10.2-1_amd64.changes  
-rw-r--r--  1 root root 1542368 Apr 16 04:29 postfix_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root 3828326 Sep 12  2013 postfix_2.10.2.orig.tar.gz

postfixおよびpostfix-mysqlパッケージを選択し、次のようにインストールします:

dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb

4 Postfix/Courier用のMySQLデータベースを作成する

次に、mailという名前のデータベースを作成します:

mysqladmin -u root -p create mail

この質問が表示されます:

パスワードを入力してください: <– yourrootsqlpassword

次に、MySQLシェルに移動します:

mysql -u root -p

MySQLシェルで、mailデータベースに対してSELECT、INSERT、UPDATE、DELETE権限を持つmail_adminというユーザーを作成します(自分のパスワードに置き換えてください)。このユーザーはPostfixとCourierがメールデータベースに接続するために使用されます:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';  
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';  
FLUSH PRIVILEGES;

MySQLシェルのままで、PostfixとCourierに必要なテーブルを作成します:

USE mail;
CREATE TABLE domains (  
domain varchar(50) NOT NULL,  
PRIMARY KEY (domain) )  
ENGINE=MyISAM;
CREATE TABLE forwardings (  
source varchar(80) NOT NULL,  
destination TEXT NOT NULL,  
PRIMARY KEY (source) )  
ENGINE=MyISAM;
CREATE TABLE users (  
email varchar(80) NOT NULL,  
password varchar(20) NOT NULL,  
quota INT(10) DEFAULT '10485760',  
PRIMARY KEY (email)  
) ENGINE=MyISAM;
CREATE TABLE transport (  
domain varchar(128) NOT NULL default '',  
transport varchar(128) NOT NULL default '',  
UNIQUE KEY domain (domain)  
) ENGINE=MyISAM;
quit;

ご覧のとおり、quit;コマンドでMySQLシェルを終了し、Linuxシェルに戻りました。

domainsテーブルは、Postfixがメールを受信する各仮想ドメインを保存します(例:example.com)。

domain
example.com

forwardingsテーブルは、1つのメールアドレスを別のメールアドレスにエイリアスするためのものです。たとえば、[email protected]のメールを[email protected]に転送します。

sourcedestination
[email protected][email protected]

usersテーブルは、すべての仮想ユーザー(すなわちメールアドレス、メールアドレスとユーザー名が同じであるため)とパスワード(暗号化された形式!)および各メールボックスのクォータ値を保存します(この例では、デフォルト値は10485760バイト、つまり10MBです)。

emailpasswordquota
[email protected]No9.E4skNvGa.(暗号化された「秘密」)10485760

transportテーブルはオプションであり、高度なユーザー向けです。特定のユーザー、全ドメイン、またはすべてのメールを別のサーバーに転送することを可能にします。たとえば、

domaintransport
example.comsmtp:[1.2.3.4]

は、example.comのすべてのメールをsmtpプロトコルを介してIPアドレス1.2.3.4のサーバーに転送します(角括弧[]は「MX DNSレコードのルックアップを行わない」という意味です(これはIPアドレスに対して意味があります…)。完全修飾ドメイン名(FQDN)を代わりに使用する場合は、角括弧を使用しません)。

ちなみに、(あなたのメールサーバーシステムのIPアドレスが192.168.0.100であると仮定しています)ブラウザでhttp://192.168.0.100/phpmyadmin/にアクセスし、mail_adminとしてログインできます。次に、データベースを確認できます。後でphpMyAdminを使用してメールサーバーを管理できます。

5 Postfixの設定

次に、Postfixにデータベース内のすべての情報を見つける場所を教える必要があります。したがって、6つのテキストファイルを作成する必要があります。Postfixにlocalhostの代わりにIPアドレス127.0.0.1に接続するように指示していることに注意してください。これは、Postfixがchrootジャイル内で実行されており、localhostを使用するように指示した場合に接続しようとするMySQLソケットにアクセスできないためです。127.0.0.1を使用すると、PostfixはTCPネットワークを使用してMySQLに接続します。これはchrootジャイル内でも問題ありません(代替手段はMySQLソケットをchrootジャイルに移動することですが、他の問題を引き起こします)。

/etc/mysql/my.cnfに次の行が含まれていることを確認してください:

vi /etc/mysql/my.cnf

| [...] # skip-networkingの代わりに、デフォルトは現在localhostのみにリッスンすることです。 # これはより互換性があり、セキュリティが低下することはありません。 bind-address = 127.0.0.1 [...] |

/etc/mysql/my.cnfを変更した場合は、今すぐMySQLを再起動してください:

/etc/init.d/mysql restart

次のコマンドを実行して、MySQLが127.0.0.1(localhost.localdomain)でリッスンしていることを確認します:

netstat -tap | grep mysql
root@server1:~# netstat -tap | grep mysql  
tcp        0      0 localhost.localdo:mysql *:*                      LISTEN      24970/mysqld      
root@server1:~#

次に、6つのテキストファイルを作成しましょう。

vi /etc/postfix/mysql-virtual_domains.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_forwardings.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailboxes.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_email2email.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_transports.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |

次に、これらのファイルの権限とグループを変更します:

chmod o= /etc/postfix/mysql-virtual_*.cf  
chgrp postfix /etc/postfix/mysql-virtual_*.cf

次に、/home/vmailというホームディレクトリを持つvmailというユーザーとグループを作成します。ここにすべてのメールボックスが保存されます。

groupadd -g 5000 vmail  
useradd -g vmail -u 5000 vmail -d /home/vmail -m

次に、Postfixの設定を行います。server1.example.comを有効なFQDNに置き換えることを確認してください。そうしないと、Postfixが正しく機能しない可能性があります!

postconf -e 'myhostname = server1.example.com'  
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'  
postconf -e 'mynetworks = 127.0.0.0/8'  
postconf -e 'virtual_alias_domains ='  
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'  
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'  
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'  
postconf -e 'virtual_mailbox_base = /home/vmail'  
postconf -e 'virtual_uid_maps = static:5000'  
postconf -e 'virtual_gid_maps = static:5000'  
postconf -e 'smtpd_sasl_auth_enable = yes'  
postconf -e 'broken_sasl_auth_clients = yes'  
postconf -e 'smtpd_sasl_authenticated_header = yes'  
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'  
postconf -e 'smtpd_use_tls = yes'  
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'  
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'  
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'  
postconf -e 'virtual_maildir_extended = yes'  
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'  
postconf -e 'virtual_mailbox_limit_override = yes'  
postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'  
postconf -e 'virtual_overquota_bounce = yes'  
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

その後、TLSに必要なSSL証明書を作成します:

cd /etc/postfix  
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

国名(2文字コード)[AU]: <– 国名を入力します(例:「DE」)。
州または州名(フルネーム)[Some-State]: <– 州または州名を入力します。
市名(例:都市)[]: <– 市を入力します。
組織名(例:会社)[Internet Widgits Pty Ltd]: <– 組織名を入力します(例:会社名)。
組織単位名(例:部門)[]: <– 組織単位名を入力します(例:「IT部門」)。
共通名(例:あなたの名前)[]: <– システムの完全修飾ドメイン名を入力します(例:「server1.example.com」)。
メールアドレス[]: <– メールアドレスを入力します。

次に、smtpd.keyの権限を変更します:

chmod o= /etc/postfix/smtpd.key

6 Saslauthdの設定

最初に実行します。

mkdir -p /var/spool/postfix/var/run/saslauthd

次に、/etc/default/saslauthdを編集します。STARTをyesに設定し、OPTIONS=”-c -m /var/run/saslauthd”の行をOPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”に変更します:

vi /etc/default/saslauthd

| # # saslauthdデーモンの設定 # 詳細については/usr/share/doc/sasl2-bin/README.Debianをお読みください。 # # saslauthdは自動的に起動時に実行されるべきですか?(デフォルト:いいえ) START=yes # このsaslauthdインスタンスの説明。推奨されます。 #(提案:SASL認証デーモン) DESC="SASL認証デーモン" # このsaslauthdインスタンスの短い名前。強く推奨されます。 #(提案:saslauthd) NAME="saslauthd" # saslauthdが使用する認証メカニズムは何ですか?(デフォルト:pam) # # このDebianパッケージで利用可能なオプション: # getpwent -- getpwent()ライブラリ関数を使用 # kerberos5 -- Kerberos 5を使用 # pam -- PAMを使用 # rimap -- リモートIMAPサーバーを使用 # shadow -- ローカルシャドウパスワードファイルを使用 # sasldb -- ローカルsasldbデータベースファイルを使用 # ldap -- LDAP(設定は/etc/saslauthd.confにあります) # # 一度に1つのオプションのみ使用できます。詳細については、saslauthdのmanページを参照してください。 # # 例:MECHANISMS="pam" MECHANISMS="pam" # このメカニズムの追加オプション。(デフォルト:なし) # メカニズム固有のオプションについては、saslauthdのmanページを参照してください。 MECH_OPTIONS="" # saslauthdプロセスをいくつ実行する必要がありますか?(デフォルト:5) # 0の値は、各接続のために新しいプロセスをフォークします。 THREADS=5 # その他のオプション(デフォルト:-c -m /var/run/saslauthd) # 注意:-mオプションを指定しないと、saslauthdは実行されません! # # 警告:-dオプションを指定しないでください。 # -dオプションは、saslauthdをデーモンとしてではなく、フォアグラウンドで実行させます。これにより、システムが正常にブートしなくなります。デバッグモードでsaslauthdを実行したい場合は、安全のために手動で実行してください。 # # /usr/share/doc/sasl2-bin/README.Debianを参照して、Debian固有の情報を確認してください。 # saslauthdのmanページおよび'saslauthd -h'の出力を参照して、これらのオプションに関する一般的な情報を確認してください。 # # chroot Postfixユーザーの例:"-c -m /var/spool/postfix/var/run/saslauthd" # 非chroot Postfixユーザーの例:"-c -m /var/run/saslauthd" # # Postfixがchrootで実行されているかどうかを確認するには、/etc/postfix/master.cfを確認してください。 # "smtp inet n - y - - smtpd"または"smtp inet n - - - - smtpd"という行があれば、Postfixはchrootで実行されています。 # "smtp inet n - n - - smtpd"という行があれば、Postfixはchrootで実行されていません。 #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |

次に、/etc/pam.d/smtpというファイルを作成します。このファイルには、次の2行のみを含める必要があります(正しいデータベースの詳細を入力してください):

vi /etc/pam.d/smtp

| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |

次に、/etc/postfix/sasl/smtpd.confというファイルを作成します。このファイルは次のようになります:

vi /etc/postfix/sasl/smtpd.conf

| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u@%r' |

次に、postfixユーザーをsaslグループに追加します(これにより、Postfixがsaslauthdにアクセスする権限を持つことが保証されます):

adduser postfix sasl

次に、PostfixとSaslauthdを再起動します:

/etc/init.d/postfix restart  
/etc/init.d/saslauthd restart

7 Courierの設定

次に、CourierにMySQLデータベースに対して認証するように指示する必要があります。最初に、/etc/courier/authdaemonrcを編集し、authmodulelistの値を次のように変更します:

vi /etc/courier/authdaemonrc

| [...] authmodulelist="authmysql" [...] |

次に、/etc/courier/authmysqlrcのバックアップを作成し、古いファイルを空にします:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig  
cat /dev/null > /etc/courier/authmysqlrc

次に、/etc/courier/authmysqlrcを開き、次の行を追加します:

vi /etc/courier/authmysqlrc

| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |

インストール中に、IMAP-SSLおよびPOP3-SSL用のSSL証明書がlocalhostというホスト名で作成されます。これを正しいホスト名(このチュートリアルではserver1.example.com)に変更するには、証明書を削除します…

cd /etc/courier  
rm -f /etc/courier/imapd.pem  
rm -f /etc/courier/pop3d.pem

… 次に、次の2つのファイルを修正します。CN=localhostをCN=server1.example.comに置き換えます(必要に応じて他の値も変更できます):

vi /etc/courier/imapd.cnf

| [...] CN=server1.example.com [...] |

vi /etc/courier/pop3d.cnf

| [...] CN=server1.example.com [...] |

次に、証明書を再作成します…

mkimapdcert  
mkpop3dcert

… そしてCourierを再起動します:

/etc/init.d/courier-authdaemon restart  
/etc/init.d/courier-imap restart  
/etc/init.d/courier-imap-ssl restart  
/etc/init.d/courier-pop restart  
/etc/init.d/courier-pop-ssl restart

次のコマンドを実行して、POP3サーバーが正しく動作しているかどうかを確認できます。

telnet localhost pop3

+OK Hello there.と返されるはずです。(quitと入力してLinuxシェルに戻ります。)

root@server1:/etc/courier# telnet localhost pop3  
Trying ::1...  
Connected to localhost.localdomain.  
Escape character is '^]'.  
+OK Hello there.  
<-- quit  
+OK Better luck next time.  
Connection closed by foreign host.  
root@server1:/etc/courier#

8 /etc/aliasesの修正

次に、/etc/aliasesを開く必要があります。postmasterがrootを指し、rootが自分のユーザー名またはメールアドレスを指すことを確認してください。たとえば、次のようにします:

vi /etc/aliases

| [...] postmaster: root root: [email protected] [...] |

または、次のようにします(administratorが自分のユーザー名の場合):

| [...] postmaster: root root: administrator [...] |

/etc/aliasesを変更するたびに、次のコマンドを実行する必要があります:

newaliases

その後、Postfixを再起動します:

/etc/init.d/postfix restart

9 amavisd-new、SpamAssassin、ClamAVのインストール

amavisd-new、spamassassin、clamavをインストールするには、次のコマンドを実行します:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

その後、amavisd-newを設定する必要があります。設定は/etc/amavis/conf.dディレクトリにあるさまざまなファイルに分かれています。それぞれを確認して、設定に慣れましょう。ほとんどの設定は問題ありませんが、3つのファイルを変更する必要があります:

最初に、/etc/amavis/conf.d/15-content_filter_modeでClamAVとSpamAssassinを有効にするために、@bypass_virus_checks_mapsと@bypass_spam_checks_mapsの行のコメントを外します:

vi /etc/amavis/conf.d/15-content_filter_mode

ファイルは次のようになります:

| use strict; # このファイルを変更して、spamassassinによるSPAMチェックを再有効化し、 # ウイルスチェックを再有効化できます。 # # デフォルトのウイルスチェックモード # ウイルスチェックはデフォルトで無効になっています。 # 有効にしたい場合は、次の行のコメントを外してください: @bypass_virus_checks_maps = ( \\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # デフォルトのSPAMチェックモード # スパムチェックはデフォルトで無効になっています。 # 有効にしたい場合は、次の行のコメントを外してください: @bypass_spam_checks_maps = ( \\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # 定義された戻り値を確保 |

次に、/etc/amavis/conf.d/20-debian_defaultsでスパム設定とスパム/ウイルスメールのアクションを確認します。デフォルト設定が問題ない場合は、何も変更する必要はありません。このファイルには多くの説明が含まれているため、ここで設定を説明する必要はありません:

vi /etc/amavis/conf.d/20-debian_defaults

| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # クォータインディレクトリのハッシュ化を有効にする $log_recip_templ = undef; # 受取人レベル0のログエントリを無効にする $DO_SYSLOG = 1; # syslogdを介してログを記録する(推奨) $syslog_ident = 'amavis'; # syslog識別タグ、すべてのメッセージに追加される $syslog_facility = 'mail'; $syslog_priority = 'debug'; # デバッグ出力を削除するにはinfoに切り替えます $enable_db = 1; # BerkeleyDB/libdbの使用を有効にする(SNMPおよびナニー) $enable_global_cache = 1; # $enable_db=1の場合、libdbベースのキャッシュの使用を有効にする $inet_socket_port = 10024; # デフォルトのリッスニングソケット $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # このレベル以上でスパム情報ヘッダーを追加 $sa_tag2_level_deflt = 6.31; # このレベルで「スパム検出」ヘッダーを追加 $sa_kill_level_deflt = 6.31; # スパム回避アクションをトリガー $sa_dsn_cutoff_level = 10; # DSNが送信されないスパムレベル [...] $final_virus_destiny = D_DISCARD; # (データは失われません、ウイルス隔離を参照) $final_banned_destiny = D_BOUNCE; # フロントエンドMTAの場合はD_REJECT $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # 偽陽性の可能性がある(スパム用) [...] |

最後に、/etc/amavis/conf.d/50-userを編集し、$pax=’pax’;の行を追加します:

vi /etc/amavis/conf.d/50-user

| use strict; # # ここに設定ディレクティブを配置します。これにより、以前のファイルの設定が上書きされます。 # # このファイルで使用できるディレクティブのドキュメントと例については、 # /usr/share/doc/amavisd-new/を参照してください。 # $pax='pax'; #------------ この行の下のものは変更しないでください ------------- 1; # 定義された戻り値を確保 |

その後、clamavユーザーをamavisグループに追加し、amavisd-newとClamAVを再起動するために次のコマンドを実行します:

adduser clamav amavis  
/etc/init.d/amavis restart  
/etc/init.d/clamav-freshclam restart  
/etc/init.d/clamav-daemon restart

次に、Postfixを設定して、受信メールをamavisd-newを介してパイプします:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'  
postconf -e 'receive_override_options = no_address_mappings'

その後、次の行を/etc/postfix/master.cfに追加します:

vi /etc/postfix/master.cf

| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |

次に、Postfixを再起動します:

/etc/init.d/postfix restart

次に、次のコマンドを実行します:

netstat -tap

Postfix(master)がポート25(smtp)および10025でリッスンしており、amavisd-newがポート10024でリッスンしていることが確認できます:

root@server1:/etc/courier# netstat -tap  
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 *:http                  *:*                     LISTEN      6134/apache2  
tcp        0      0 *:ssh                   *:*                     LISTEN      610/sshd  
tcp        0      0 *:smtp                  *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      21937/amavisd-new (  
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      4308/mysqld  
tcp        0     52 server1.example.com:ssh 192.168.0.206:57597     ESTABLISHED 976/0  
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      610/sshd  
tcp6       0      0 [::]:smtp               [::]:*                  LISTEN      23128/master  
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN      18191/couriertcpd  
tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN      18259/couriertcpd  
tcp6       0      0 [::]:pop3               [::]:*                  LISTEN      18222/couriertcpd  
tcp6       0      0 [::]:imap2              [::]:*                  LISTEN      18154/couriertcpd  
root@server1:/etc/courier#
 

10 Razor、Pyzor、DCCのインストールとSpamAssassinの設定

Razor、Pyzor、DCCは、協調フィルタリングネットワークを使用するスパムフィルターです。RazorとPyzorをインストールするには、次のコマンドを実行します:

apt-get install razor pyzor

DCCはUbuntu 13.10のリポジトリには存在しないため、次のようにインストールします:

cd /tmp  
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z   
tar xzvf dcc-dccproc.tar.Z  
cd dcc-dccproc-1.3.1.154  
./configure --with-uid=amavis  
make  
make install  
chown -R amavis:amavis /var/dcc  
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

次に、SpamAssassinにこれら3つのプログラムを使用するように指示する必要があります。/etc/spamassassin/local.cfを編集し、次の行を追加します:

vi /etc/spamassassin/local.cf

| [...] #dcc use_dcc 1 dcc_path /usr/local/bin/dccproc #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |

次に、SpamAssassinでDCCプラグインを有効にする必要があります。/etc/spamassassin/v310.preを開き、loadplugin Mail::SpamAssassin::Plugin::DCCの行のコメントを外します:

vi /etc/spamassassin/v310.pre

| [...] # DCC - DCCメッセージチェックを実行します。 # # DCCはオープンソースではないため、ここでは無効になっています。DCCの # ライセンスの詳細については、DCCライセンスをご覧ください。 # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |

次のコマンドを実行して、SpamAssassinの設定を確認できます:

spamassassin --lint

エラーが表示されないはずです。

その後、amavisd-newを再起動します:

/etc/init.d/amavis restart

次に、次のコマンドを実行してSpamAssassinのルールセットを更新します:

sa-update --no-gpg

定期的にルールセットが更新されるようにcronジョブを作成します。次のコマンドを実行します:

crontab -e

cronジョブエディタが開きます。次のcronジョブを作成します:

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

これにより、ルールセットが毎日4時23分に更新されます。

Share: X/Twitter LinkedIn

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

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