GNU/Linux >> Linux の 問題 >  >> Ubuntu

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

このチュートリアルは、Falko TimmeによるCopyright(c)2012です。これは、http://workaround.orgにあるChristophHaasのチュートリアルから派生しています。このチュートリアルは、クリエイティブコモンズライセンス2.5以降のバージョンで自由に使用できます。

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

結果として得られるPostfixサーバーはSMTP-AUTHに対応しています およびTLS および割り当て (デフォルトでは、quotaはPostfixに組み込まれていません。Postfixに適切にパッチを適用する方法を説明します)。パスワードは暗号化で保存されます データベース内のフォーム(私が見つけたほとんどのドキュメントは、セキュリティリスクであるプレーンテキストのパスワードを扱っていました)。これに加えて、このチュートリアルでは Amavisdのインストールについて説明します。 、 SpamAssassin およびClamAV 電子メールがスパムやウイルスについてスキャンされるようにします。 SquirrelMailのインストール方法も紹介します ユーザーがメールを読んだり送信したり、パスワードを変更したりできるようにするためのウェブメールインターフェースとして。

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

このハウツーは実用的なガイドとして意図されています。理論的背景については説明していません。それらは、Webの他の多くのドキュメントで扱われます。

このドキュメントには、いかなる種類の保証もありません。このようなシステムを構築する方法はこれだけではありません。この目標を達成する方法はたくさんありますが、これが私のやり方です。これがあなたのために働くという保証はありません!

1予備メモ

このチュートリアルはUbuntu12.04LTSサーバー(Precise Pangolin)に基づいているため、このチュートリアルを続行する前に、基本的なUbuntu 12.04サーバーのインストールをセットアップする必要があります(たとえば、このチュートリアルの1〜3ページに示されているように:Perfect Server-Ubuntu 12.04 LTS(Apache2、BIND、Dovecot、ISPConfig 3))。システムには静的IPアドレスが必要です。このチュートリアルでは、IPアドレスとして192.168.0.100を使用し、ホスト名としてserver1.example.comを使用しています。

rootとしてログインしていることを確認してください(入力

 sudo su 

rootになるには)、このチュートリアルのすべての手順をrootユーザーとして実行する必要があるためです。

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

 dpkg-reconfigure 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証明書が必要です<-OK
自動的に再構成するWebサーバー:<-apache2
dbconfig-commonを使用してphpmyadminのデータベースを構成しますか? <-いいえ

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

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

 apt-get build-dep postfix 

cd / usr / src
apt-get source postfix

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

 postconf -d | grep mail_version 

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

[メール保護]:/ usr / src#postconf -d | grep mail_version
mail_version =2.9.1
milter_macro_v =$ mail_name $ mail_version
[email protected]:/ usr / src#

wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.1.patch
cd postfix-2.9.1
patch -p1 <../postfix-vda-v11 -2.9.1.patch

次に、debian / rulesを開き、DEB_BUILD_HARDENINGを1から0に変更します。

 vi debian / rules 
 [...] export DEB_BUILD_HARDENING =0 [...] 

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

maildir.c:関数âdeliver_maildirâ:
maildir.c:974:17:エラー:フォーマットが文字列リテラルではなく、フォーマット引数がない[-Werror =format-security]
maildir.c:977:17 :エラー:フォーマットが文字列ではなく、フォーマット引数がない[-Werror =format-security]
maildir.c:983:17:エラー:フォーマットが文字列ではなく、フォーマット引数がない[-Werror =format-security ]
maildir.c:986:17:エラー:フォーマットは文字列リテラルではなく、フォーマット引数もありません[-Werror =format-security]
maildir.c:関数âsql2fileâ:
maildir。 c:404:25:警告:属性warn_unused_result [-Wunused-result]
maildir.c:417:26で宣言されたâreadâの戻り値を無視します:警告:属性warn_unused_result[-で宣言されたâwriteâの戻り値を無視しますWunused-result]
cc1:エラーとして扱われるいくつかの警告
make:***[maildir.o]エラー1
make:ディレクトリ`/usr/src/postfix-2.9を離れます。 1 / src / virtual'
make [1]:***[update]エラー1
make [1]:ディレクトリ `/ usr / src/postfixを離れます-2.9.1'
make:***[build]エラー2
dpkg-buildpackage:エラー:debian /rulesbuildがエラー終了ステータス2を与えました
[emailprotected]:/ usr / src / postfix-2.9.1#

これで、新しいPostfix.debパッケージをビルドできます。

 dpkg-buildpackage 

ここで、1つのディレクトリを上に移動します。ここに、新しい.debパッケージが作成されています。

 cd .. 

コマンド

 ls -l <​​/ pre> 

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

[メールで保護]:/ usr / src#ls -l <​​br /> total 6932
drwxr-xr-x 24 root root 4096 Apr 27 11:20 linux-headers-3.2.0-23
drwxr-xr-x 7 root root 4096 Apr 27 11:20 linux-headers-3.2.0-23-generic
drwxr-xr-x 18 root root 4096 May 7 15:57 postfix-2.9.1
-rw-r--r-- 1 root root 3814 May 7 15:58 postfix_2.9.1-4_amd64.changes
-rw-r--r-- 1 root root 1497792 May 7 15:58 postfix_2 .9.1-4_amd64.deb
-rw-r--r-- 1 root root 246141 May 7 15:51 postfix_2.9.1-4.diff.gz
-rw-r--r-- 1 root root 1492 May 7 15:51 postfix_2.9.1-4.dsc
-rw-r--r-- 1 root root 3768329 Mar 22 05:05 postfix_2.9.1.orig.tar.gz
-rw-r--r-- 1 root root 46620 May 7 15:58 postfix-cdb_2.9.1-4_amd64.deb
-rw-r--r-- 1 root root 160196 May 7 15:58 postfix-dev_2.9.1-4_all.deb
-rw-r--r-- 1 root root 1080772 May 7 15:58 postfix-doc_2.9.1-4_all.deb
-rw-r-- r-- 1 root root 55478 May 7 15:58 postfix-ldap_2.9.1-4_amd64.deb
-rw-r--r-- 1 root root 48550 Ma y 7 15:58 postfix-mysql_2.9.1-4_amd64.deb
-rw-r--r-- 1 root root 48718 May 7 15:58 postfix-pcre_2.9.1-4_amd64.deb
- rw-r--r-- 1 root root 48686 May 7 15:58 postfix-pgsql_2.9.1-4_amd64.deb
-rw-r--r-- 1 root root 550009 Apr 11 14:54 postfix- vda-v11-2.9.1.patch
[メール保護]:/ usr / src#

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

 dpkg -i postfix_2.9.1-4_amd64.deb postfix-mysql_2.9.1-4_amd64.deb 

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

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

 mysqladmin -u root -p create mail 

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

 mysql -u root -p 

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

GRANT SELECT、INSERT、UPDATE、DELETEONmail。*TO'mail_admin'@'localhost' IDENTIFIED BY'mail_admin_password';
GRANT SELECT、INSERT、UPDATE、DELETEONmail。*TO'mail_admin'@'localhost。 localdomain'IDENTIFIED BY' mail_admin_password';
FLUSH PRIVILEGES;

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

メールを使用;

CREATE TABLEドメイン(
domain varchar(50)NOT NULL、
PRIMARY KEY(domain))
ENGINE =MyISAM;

CREATE TABLE転送(
source varchar(80)NOT NULL、
destination TEXT NOT NULL、
PRIMARY KEY(source))
ENGINE =MyISAM;

CREATE TABLEユーザー(
email varchar(80)NOT NULL、
password varchar(20)NOT NULL、
quote INT(10)DEFAULT '10485760'、
PRIMARY KEY(email )
)ENGINE =MyISAM;

CREATE TABLEトランスポート(
ドメインvarchar(128)NOT NULLデフォルト''、
トランスポートvarchar(128)NOT NULLデフォルト''、
一意キードメイン(ドメイン)
)エンジン=MyISAM;

終了;

お気づきかもしれませんが、やめます。コマンドMySQLシェルを終了し、Linuxシェルに戻りました。

ドメイン テーブルには、Postfixがメールを受信する必要がある各仮想ドメインが格納されます(例: example.com )。

ドメイン
example.com

転送 テーブルは、あるメールアドレスを別のメールアドレスにエイリアスするためのものです。 [メール保護]のメールを転送する [メール保護]

ソース 宛先
[メール保護] [メール保護]

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

メール パスワード クォータ
[メール保護] No9.E4skNvGa。 (暗号化された形式の「秘密」) 10485760

トランスポート テーブルはオプションで、上級ユーザー向けです。これにより、単一ユーザー、ドメイン全体、またはすべてのメールのメールを別のサーバーに転送できます。たとえば、

ドメイン トランスポート
example.com smtp:[1.2.3.4]

example.comのすべてのメールを転送します SMTPプロトコルを介してIPアドレス 1.2.3.4を持つサーバーに接続します (角かっこ [] 「MXDNSレコードを検索しない」という意味です(これはIPアドレスにとって意味があります...)。代わりに完全修飾ドメイン名(FQDN)を使用する場合は、角かっこを使用しません。)

ところで、(メールサーバーシステムのIPアドレスは192.168.0.100だと思います)ブラウザでhttp://192.168.0.100/phpmyadmin/からphpMyAdminにアクセスし、mail_adminとしてログインできます。次に、データベースを確認できます。後で、phpMyAdminを使用してメールサーバーを管理できます。

5Postfixを設定する

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

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

 vi /etc/mysql/my.cnf 
 [...]#スキップネットワークの代わりに、デフォルトでは、互換性が高く安全性が低くないローカルホストでのみリッスンするようになりました。 bind-address =127.0.0.1 [...] 

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

 /etc/init.d/mysql restart 

実行

 netstat -tap | grep mysql 

MySQLが127.0.0.1(localhost.localdomain)でリッスンしていることを確認するには:

[メールで保護]:/ usr / src#netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 3895 / mysqld
[email protected]:/ usr / src#

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

 vi /etc/postfix/mysql-virtual_domains.cf 
 user =mail_adminpassword =mail_admin_passworddbname =mailquery =SELECT domain AS virtual FROM domain WHERE domain ='%s' hosts =127.0.0.1 
 vi /etc/postfix/mysql-virtual_forwardings.cf 
 user =mail_adminpassword =mail_admin_passworddbname =mailquery =SELECT destination FROM forwardings WHERE source ='%s' hosts =127.0.0.1 
 vi /etc/postfix/mysql-virtual_mailboxes.cf 
 user =mail_adminpassword =mail_admin_passworddbname =mailquery =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_adminpassword =mail_admin_passworddbname =mailquery =SELECT email FROM users WHERE email ='%s' hosts =127.0.0.1 
 vi /etc/postfix/mysql-virtual_transports.cf 
 user =mail_adminpassword =mail_admin_passworddbname =mailquery =SELECTトランスポートFROMトランスポートWHEREドメイン='%s'ホスト=127.0.0.1 
 vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf 
 user =mail_adminpassword =mail_admin_passworddbname =mailquery =SELECT Quarter 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_authenticate -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="到達しようとしているユーザーが割り当てを超えています。"'
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 $ template_

その後、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」)。
州名または州名(フルネーム)[一部の州]:<-州を入力しますまたは州名。
地域名(例:市)[]:<-市区町村を入力してください。
組織名(例:会社)[Internet Widgits Pty Ltd]:<-組織名を入力してください(例:会社名)
組織単位名(例:セクション)[]:<-組織単位名(例:「IT部門」)を入力します。
一般名(例:あなたの名前)[]:<-システムの完全修飾ドメイン名を入力します(例: "server1.example.com")。
メールアドレス[]:<-メールアドレスを入力します。

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

 chmod o =/etc/postfix/smtpd.key 

6Saslauthdを構成する

最初の実行

 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を実行する必要があります起動時に自動的に? (デフォルト:no)START =yes#このsaslauthdインスタンスの説明。推奨。#(提案:SASL認証デーモン)DESC ="SASL認証デーモン"#このsaslauthdインスタンスの短縮名。強くお勧めします。#(提案:saslauthd)NAME ="saslauthd"#saslauthdはどの認証メカニズムを使用する必要がありますか? (デフォルト:pam)##このDebianパッケージで使用可能なオプション:#getpwent-getpwent()ライブラリ関数を使用します#kerberos5-Kerberos 5を使用します#pam-PAMを使用します#rimap-リモートIMAPサーバーを使用します#shadow- -ローカルシャドウパスワードfile#sasldbを使用します-ローカルsasldbデータベースfile#ldapを使用します-LDAPを使用します(構成は/etc/saslauthd.confにあります)##一度に使用できるオプションは1つだけです。詳細については、saslauthdのマニュアルページ#を参照してください。##例:MECHANISMS ="pam" MECHANISMS ="pam"#このメカニズムの追加オプション。 (デフォルト:なし)#mech固有のオプションについては、saslauthdのマニュアルページを参照してください。MECH_OPTIONS=""#実行するsaslauthdプロセスの数はいくつですか。 (デフォルト:5)#値0は、接続ごとに新しいプロセスをフォークします。THREADS=5#その他のオプション(デフォルト:-c -m / var / run / saslauthd)#注:-mオプションまたはsaslauthdは実行されません!##警告:-dオプションを指定しないでください。#-dオプションを指定すると、saslauthdがデーモンとしてではなくフォアグラウンドで実行されます。これにより、システムが正しく起動しなくなります。 #saslauthdをデバッグモードで実行したい場合は、安全のために手動で実行してください。## Debian固有の情報については、/ usr / share / doc / sasl2-bin / README.Debianを参照してください。#saslauthdのmanページを参照してください。これらのオプションに関する一般的な#情報の「saslauthd-h」の出力。## chroot Postfixユーザーの例: "-c -m / var / spool / postfix / var / run / saslauthd"#非chrootPostfixユーザーの例:"-c -m / var / run / saslauthd" ## Postfixがchrootを実行しているかどうかを確認するには、/ etc / postfix / master.cfを確認してください。#「smtpinet n --y---smtpd」という行がある場合または"smtpinet n --- --- smtpd"#の場合、Postfixはchrootで実行されています。#行が "smtp inet n --n --- smtpd"の場合、Postfixはchrootで実行されていません。 ="-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 =1account十分なpam_mysql.souser=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:saslauthdmech_list:plain loginallow_plaintext:trueauxprop_plugin:sqlsql_engine:mysqlsql_hostnames:127.0.0.1sql_user:mail_adminsql_passwd:mail_admin_passwordsql_database:mailsql_select:select password from users '%[メール保護]%r' 

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

 adduser postfix sasl 

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

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

7クーリエの構成

次に、MySQLデータベースに対して認証する必要があることをCourierに通知する必要があります。まず、/ 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 localhostMYSQL_USERNAME mail_adminMYSQL_PASSWORD mail_admin_passwordMYSQL_PORT 0MYSQL_DATABASE mailMYSQL_USER_TABLE usersMYSQL_CRYPT_PWFIELDパスワード#MYSQL_CLEAR_PWFIELD passwordMYSQL_UID_FIELD 5000MYSQL_GID_FIELD 5000MYSQL_LOGIN_FIELD emailMYSQL_HOME_FIELD "" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(電子メール、 '@'、vmail /ホーム/ -1)、'/'、SUBSTRING_INDEX(email、'@'、1)、'/')#MYSQL_NAME_FIELDMYSQL_QUOTA_FIELDクォータ

インストール中に、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

実行することで

 telnet localhost pop3 

POP3サーバーが正しく機能しているかどうかを確認できます。 +OKこんにちは。 (Linuxシェルに戻るにはquitと入力します。)

[メール保護]:/ etc / courier#telnet localhost pop3
127.0.0.1を試しています...
localhost.localdomainに接続しました。
エスケープ文字は「^]」です。
+OKこんにちは。
<-終了
+OK次回は頑張ってください。
外部ホストによって接続が閉じられました。
[メール保護]:/ etc / courier#

8 / etc/aliasesを変更します

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

 vi / etc / aliases 
 [...] postmaster:rootroot:[メール保護] [...] 

またはこのように(管理者が自分のユーザー名の場合):

 [...] postmaster:rootroot: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つのファイルを変更する必要があります:

まず、@bypass_virus_checks_mapsと@bypass_spam_checks_mapsの行のコメントを解除して、/ etc / amavis / conf.d/15-content_filter_modeでClamAVとSpamAssassinを有効にする必要があります。

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

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

 use strict;#このファイルを変更して、spamassassin#によるSPAMチェックを再度有効にし、アンチウイルスチェックを再度有効にすることができます。##デフォルトのアンチウイルスチェックmode#ウイルス対策チェックはデフォルトで無効になっていることに注意してください。#有効にする場合は、次の行のコメントを解除してください。スパムチェックモード#デフォルトではアンチウイルスチェックが無効になっていることに注意してください。#有効にする場合は、次の行のコメントを解除してください。; #定義されたリターンを確保する

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

 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 identタグ、すべてのメッセージの前に追加$ syslog_facility ='mail'; $ syslog_priority ='debug'; #情報に切り替えてデバッグ出力などを削除します$ enable_db =1; #BerkeleyDB / libdb(SNMPおよびnanny)の使用を有効にする$ enable_global_cache =1; #$ enable_db =1 $ inet_socket_port =10024の場合、libdbベースのキャッシュの使用を有効にします。 #デフォルトのリスニングソケット$ 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 
 usestrict;##ここに構成ディレクティブを配置します。これらは、以前のファイルの#をオーバーライドします。##このファイルで使用できるディレクティブのドキュメントと例については、/ 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

次に、受信メールをamavisd-new経由でパイプするようにPostfixを設定する必要があります:

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 =yes127.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_ 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(マスター)がポート25(smtp)と10025でリッスンし、amavisd-newがポート10024でリッスンしているのが見えるはずです:

[メールで保護]:/ etc / courier#netstat -tap
アクティブなインターネット接続(サーバーと確立済み)
ProtoRecv-QSend-Qローカルアドレス外部アドレスcpnameState
Program PID 0 0 localhost.localdo:10025 *:* LISTEN 25911 /マスター
TCP 0 0 localhost.localdo:mysqlの*:* LISTEN 3895 / mysqldを
TCP 0 0 *:HTTP *:* LISTEN 4845 / apache2の
TCP 0 0 *:SSH *:* LISTEN 649 / sshdの
TCP 0 0 *:SMTP *:* LISTEN 25911 /マスター
TCP 0 0 localhost.localdo:10024 *:* LISTEN 24534 / amavisd(mast
tcp 0 52 server1.example.com:ssh 192.168.0.199:4745 ESTABLISHED 847/0
tcp6 * 209:0 [::]:pop3 couriertcpd
tcp6 0 0 [::]:IMAP2 [::]:* LISTEN 20921 / couriertcpd
にtcp6 0 [::]:SSH [::]:* LISTEN 649 / sshdの
にtcp6 0 0: :]:SMTP [::]:IMAPS [::]:* LISTEN 20958 / couriertcpd
にtcp6 0 [::]:POP3S * 25911 /マスター
にtcp6 0 [::]試聴[::]:*聞く21026 / couriertcpd
[メールで保護]:/ etc / courier#

 

10 Razor、Pyzor、DCCをインストールし、SpamAssassinを構成します

Razor、Pyzor、およびDCCは、協調フィルタリングネットワークを使用するスパムフィルターです。 RazorとPyzorをインストールするには、

を実行します。
 apt-get install razor pyzor 

DCCはUbuntu12.04リポジトリでは利用できないため、次のようにインストールします。

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.142
./configure --with-uid =amavis
make
make install
chown -R amavis:amavis / var / dcc
ln -s / var / dcc / libexec / dccifd / usr / local / bin / dccifd

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

 vi /etc/spamassassin/local.cf 
 [...] #dccuse_dcc 1dcc_path / usr / local / bin / dccproc#pyzoruse_pyzor 1pyzor_path / usr / bin / pyzor#razoruse_razor2 1razor_config / etc / razor / razor-agent.conf#bayesuse_bayes 1use_bayes_rules 1bayes_auto_learn 1 

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

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

次のコマンドを実行して、SpamAssassinの構成を確認できます。

 spamassassin --lint 

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

amavisd-newinitスクリプトに小さなバグがあります。 /etc/init.d/amavisを開きます...

 vi /etc/init.d/amavis 

...そしてSTOP="-stop --quiet --pidfile $ PIDFILE --name $ {DAEMONNAME}"行をコメントアウトし、代わりにSTOP ="-stop --quiet --pidfile$PIDFILE"を追加します。

 [...] set -eSTART ="-start --quiet --pidfile $ PIDFILE --name $ {DAEMONNAME} --startas $ {DAEMON} "#STOP =" --stop --quiet --pidfile $ PIDFILE --name $ {DAEMONNAME} "STOP =" --stop --quiet --pidfile $ PIDFILE "PARAMS =check_noncompatible_upgrade()[。 ..] 

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 

これにより、ルールセットが2日おきに4.23時間で更新されます。

11クォータ超過通知

クォータを超えているすべての電子メールアカウントに関する通知を受け取りたい場合は、ファイル/ usr / local / sbin/quota_notifyを作成します。

cd / usr / local / sbin /
viquota_notify

#!/ usr / bin / perl -w#作成者<[メール保護]> ##このスクリプトは、postfixのメインのdefined#にあるvirtual_mailbox_baseを想定しています.cfファイル。このディレクトリには、仮想ユーザーのmaildirを含む#ディレクトリが含まれていると想定されます。#例:## ----------- /#|#|#home / vmail / domains /#| |#| |#example.com/ foo.com/# |#|#-----------------#| | |#| | |#user1 / user2 / user3 /#|#|#maildirsize#use strict; my $ POSTFIX_CF ="/etc/postfix/main.cf"; my $ MAILPROG ="/ usr / sbin / sendmail -t"; my $ WARNPERCENT =80; my @POSTMASTERS =('[email protected]'); my $ CONAME ='My Company'; my $ COADDR ='[email protected]'; my $ SUADDR ='[email protected]'; my $ MAIL_REPORT =1; my $ MAIL_WARNING =1; #get virtual namespace base from postfix configopen(PCF、 "<$ POSTFIX_CF")or die $ !; my $ mboxBase; while(){next until / virtual_mailbox_base \ s * =\ s *(。*)\ s * /; $ mboxBase =$ 1;} close(PCF);#ドメイン名のサブディレクトリの1つのレベルを想定my @domains; opendir(DIR、$ mboxBase)or die $ !; while(defined(my $ name =readdir(DIR))){次の場合$name=〜/^\.\.?$/; #skip'。'および'..'next until(-d "$ mboxBase / $ name"); push(@domains、$ name);} closedir(DIR);#username/maildirsizeファイルのドメインを反復処理my@users;chdir($ mboxBase); foreach my $ domain(@domains){opendir(DIR、$ domain)または死ぬ$!; while(defined(my $ name =readdir(DIR))){next if $ name =〜/^\.\.?$/; #skip'。'および'..'next until(-d "$ domain / $ name"); push(@users、{"$ name \ @ $ domain" => "$ mboxBase / $ domain / $ name"}); }} closedir(DIR); #getユーザークォータと使用率my(%lusers、$ report); foreach my $ href(@users){foreach my $ user(keys%$ href){my $ quotefile ="$ href-> {$ user} / maildirsize ";次の場合(-f $ quotefile); open(QF、 "<$ quotefile")またはdie $ !; my($ firstln、$ quote、$ used); while(){my $ line =$ _; if(!$ firstln){$ firstln =1; ($ line =〜/ ^(\ d +)S /);でない限り、「エラー:quotafile$quotafileが破損しています」 $ quote =$ 1;最後の場合(!$ quote);次; } die "エラー:破損したquotafile $ quotefile"($ line =〜/ \ s *(-?\ d +)/); $ used + =$ 1; } close(QF);次の場合(!$ used);私の$percent=int($ used / $ quote * 100); $ lusers {$ user} =$percentでない限り$percent; }}#postmastersif($ MAIL_REPORT){open(MAIL、 "| $ MAILPROG");にレポートを送信します。 select(MAIL); map {print "To:$ _ \ n"} @POSTMASTERS; print "From:$ COADDR \ n";印刷"件名:日次割り当てレポート。\ n";印刷"DAILYQUOTA REPORT:\ n \ n";印刷"----------------------------------------------\ n "; print "|%使用法|アカウント名| \ n";印刷"----------------------------------------------\ n "; foreach my $ luser(sort {$ lusers {$ b} <=> $ lusers {$ a}} keys%lusers){printf( "|%3d |%32s | \ n"、$ lusers {$ luser}、$ luser);印刷"---------------------------------------------\ n"; } print "\ n-\ n";印刷"$CONAME \ n"; close(MAIL);}#quotaif($ MAIL_WARNING){foreach my $ luser(keys(%lusers)){next until $ lusers {$ luser}> =$ WARNPERCENT; #quota open(MAIL、 "| $ MAILPROG");の下にあるものをスキップします。 select(MAIL);印刷"宛先:$ luser \ n"; map {print "BCC:$ _ \ n"} @POSTMASTERS; print "From:$ SUADDR \ n"; print "件名:警告:メールボックスは$ lusers {$ luser}%満杯です。\ n";印刷"返信先:$ SUADDR \ n"; print "メールボックス:$luserは$lusers {$ luser}%がいっぱいです。\ n \ n";印刷"電子メールボックスが1か月のストレージ割り当てを超えたら\n";印刷"毎月の請求は自動的に調整されます。\n"; print "電子メールを削除し、ごみ箱フォルダを空にしてスペースを空けることを検討してください。\ n \ n";印刷"詳細については、<$SUADDR>にお問い合わせください。\n \ n";印刷"ありがとうございます。\n\ n";印刷"-\n";印刷"$CONAME \ n"; close(MAIL); }} 

上部の変数(特に[メールで保護された]メールアドレス)を調整してください。

ファイルを実行可能にする必要があります:

 chmod 755quota_notify 

実行

 crontab -e 

そのスクリプトのcronジョブを作成するには:

 0 0 * * * / usr / local / sbin / quote_notify&> / dev / null 

12テストPostfix

PostfixがSMTP-AUTHおよびTLSに対応しているかどうかを確認するには、

を実行します。
 telnet localhost 25 

Postfixメールサーバータイプへの接続を確立した後

 ehlo localhost 

線が表示されている場合

 250-STARTTLS 

および

 250-AUTH PLAIN LOGIN 

すべてが順調です:

[メール保護]:/ usr / local / sbin#telnet localhost 25
127.0.0.1を試しています...
localhost.localdomainに接続しました。
エスケープ文字は「^]」です。
220 server1.example.com ESMTP Postfix(Ubuntu)
<-ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH =PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 -8BITMIME
250 DSN
<-quit
2212.0.0さようなら
外部ホストによって接続が閉じられました。
[メール保護]:/ usr / local / sbin #

タイプ

終了

システムシェルに戻ります。

13データベースにデータを入力してテストする

データベースにデータを入力するには、MySQLシェルを使用できます。

 mysql -u root -p 
メールを使用;

少なくとも、テーブルドメインにエントリを作成する必要があります およびユーザー :

INSERT INTO `domains`(` domain`)VALUES('example.com');
INSERT INTO `users`(` email`、 `password`、` quote`)VALUES('[email protected]'、 ENCRYPT('secret')、10485760);

(パスワードを暗号化するために、2番目のINSERTステートメントでENCRYPT構文を使用するように注意してください!)

他の2つのテーブルにエントリを作成する場合は、次のようになります。

INSERT INTO `forwardings`( `source`、` destination`)VALUES('[email protected]'、'[email protected]');
INSERT INTO `transport`(` domain`、 `transport`)VALUES ('example.com'、'smtp:mail.example.com');

MySQLシェルを終了するには、次のように入力します

終了;

ほとんどの人にとって、MySQLのグラフィカルなフロントエンドがあれば簡単です。したがって、phpMyAdminを使用することもできます(この例では、 http://192.168.0.100/phpmyadmin/ またはhttp://server1.example.com/phpmyadmin/)を使用して、メールを管理します。 データベース。繰り返しになりますが、ユーザーを作成するときは、必ずENCRYPT関数を使用してパスワードを暗号化してください。

ドメインとユーザーの表についてこれ以上説明する必要はないと思います。

転送テーブルには、次のようなエントリを含めることができます。

[メール保護]のメールを[メール保護]にリダイレクトします [emailprotected]のCatch-Allアカウントを作成しますexample.comへのすべてのメールは[emailprotected]に到着します。ただし、usersテーブルに存在するものは除きます(つまり、[emailprotected]がユーザーテーブルの場合、[メール保護]宛てのメールは引き続き[メール保護]に届きます)。 [保護されたメール]のメールを2つ以上のメールアドレスに転送します。宛先の下にリストされているすべての電子メールアドレスは、電子メールのコピーを受け取ります。
ソース 宛先
[メール保護] [メール保護]
@ example.com [メール保護]
@ example.com @ anotherdomain.tld これにより、example.com宛てのすべてのメールがanotherdomain.tldの同じユーザーにリダイレクトされます。たとえば、[メール保護]へのメールは[メール保護]に転送されます
[メール保護] [メール保護]、[メール保護]

トランスポートテーブルには、次のようなエントリを含めることができます。

example.comなどのメールをローカルに配信します。これは、このレコードがこのテーブルにまったく存在しないかのようです。 example.comなどのすべての電子メールをSMTP経由でサーバーmail.anotherdomain.comに配信します。 すべての電子メール(example.comなど)をsmtp経由でサーバーmail.anotherdomain.comに配信しますが、smtpのデフォルトポートである25ではなくポート2025で配信します。 example.comのサブドメインのメールはmail.anotherdomain.tldに配信されます。 すべてのメールはmail.anotherdomain.tldに配信されます。 [メール保護]のメールはmail.anotherdomain.tldに配信されます。
ドメイン 輸送
example.com
example.com smtp:mail.anotherdomain.tld
example.com smtp:mail.anotherdomain.tld:2025
example.com

smtp:[1.2.3.4]
smtp:[1.2.3.4]:2025
smtp:[mail.anotherdomain.tld]

角かっこは、Postfixが角かっこで囲まれたアドレスのMXDNSレコードを検索できないようにします。 IPアドレスには意味があります。
。example.com smtp:mail.anotherdomain.tld
* smtp:mail.anotherdomain.tld
[メール保護] smtp:mail.anotherdomain.tld

を参照してください
人の移動

詳細については。

トランスポートテーブルのエントリの順序が重要であることに注意してください。エントリは上から下に続きます。

重要: Postfixはトランスポートにキャッシュメカニズムを使用するため、トランスポートテーブルの変更が有効になるまでに時間がかかる場合があります。それらをすぐに有効にする場合は、

を実行します。
postfixリロード

移送テーブルに変更を加えた後。

14Maildirを作成するためのウェルカムメールを送信する

新しい電子メールアカウントを作成し、そこから(POP3 / IMAPを使用して)電子メールを取得しようとすると、Maildirが存在しないことを示すエラーメッセージが表示される可能性があります。 Maildirは、新しいアカウントの最初の電子メールが到着したときに自動的に作成されます。したがって、新しいアカウントにウェルカムメールを送信することをお勧めします。

まず、mailxパッケージをインストールします:

 apt-get install mailutils 

[メール保護]にウェルカムメールを送信するには、次のようにします。

mailx[メール保護]

件名の入力を求められます。件名(例:ようこそ)を入力し、Enterキーを押して、次の行にメッセージを入力します。メッセージが終了したら、Enterキーをもう一度押して新しい行を表示し、Ctrlキーを押しながらDキーを押します。メールをccしたくない場合は、もう一度Enterキーを押します。

[メール保護]:/ usr / local / sbin#mailx[メール保護]
Cc:<-ENTER
件名:ようこそ<-ENTER
ようこそ!新しいメールアカウントを楽しんでください。 <-ENTER
<-CTRL + D
[メール保護]:/ usr / local / sbin#

15SquirrelMailのインストール

SquirrelMailは、ユーザーがブラウザでメールを送受信できるようにするウェブメールインターフェースです。この章では、ユーザーがSquirrelMailインターフェースからメールアカウントのパスワードを変更できるように、インストールしてセットアップに合わせて調整する方法を示します。

SquirrelMailをインストールするには、次のコマンドを実行します:

 apt-get install squirrelmail squirrelmail-compatibility php-pear php-db 

次に、SquirrelMailパッケージに付属するApache構成を/etc/apache2/conf.dディレクトリーにシンボリックリンクし、Apacheを再起動します。

ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
/etc/init.d/apache2 restart

SquirrelMailにはいくつかのプラグインがプリインストールされていますが、残念ながら、MySQLデータベースの電子メールパスワードを変更できるプラグインはありません。ただし、手動でインストールできるSQLパスワードの変更プラグインがあります:

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/plugins/change_sqlpass-3.3-1.2.tar.gz
tar xvfz change_sqlpass-3.3-1.2.tar.gz
cd change_sqlpass
cp config.php.sample config.php

次に、config.phpを編集して、セットアップに合わせて調整する必要があります。 $ csp_dsn、$ lookup_password_query、$ password_update_queries、$ password_encryption、$ csp_salt_static、および$ csp_delimiterの変数を次のように調整し、$csp_salt_queryをコメントアウトしてください。

 vi config.php 
 [...] $ csp_dsn ='mysql:// mail_admin:[email protected] / mail'; [...] $ lookup_password_query ='SELECT count(*)FROM users WHERE email ="%1" AND password =%4'; [...] $ password_update_queries =array('UPDATE users SET password =%4 WHERE email ="%1"'); [...] $ password_encryption ='MYSQLENCRYPT'; [...] $ csp_salt_static ='LEFT(password、2)'; [...] // $ csp_salt_query ='SELECT salt FROM users WHERE username ="%1 "'; [...] $ csp_delimiter ='@'; [...] 

完全なファイルは次のようになります。

 <?php / ** * SquirrelMail Change SQL Password Plugin * Copyright(C)2001-2002 Tyler Akins * 2002 Thijs Kinkhorst  * 2002-2005 Paul Lesneiwski <[emailprotected]>*このプログラムはGPLの下でライセンスされています。詳細については、COPYINGを参照してください。 $ password_encryption、$ csp_salt_query、$ csp_salt_static、$ csp_secure_port、$ csp_non_standard_http_port、$ csp_delimiter、$ csp_debug、$ min_password_length、$ max_password_length、$ include_digit_in_password、$ include_uppercase_letter_in_password、$ include_uppercase_letter_in_password、 // csp_dsn // //理論的には、PearでサポートされているSQLデータベースは//ここでサポートされている必要があります。 DSN(データソース名)には、データベースバックエンドに接続するために//必要な情報が含まれている必要があります。 MySQLの例を以下に示します。 // DSN構文とサポートされているデータベースタイプのリストの詳細については、//以下を参照してください。//http://pear.php.net/manual/en/package.database.db.intro-dsn.php // / / $ csp_dsn ='mysql:// user:[email protected] / email_users'; $ csp_dsn ='mysql:// mail_admin:[email protected] / mail'; // lookup_password_query // //このプラグインは、常にユーザーの古いパスワードを//ログインパスワードと照合しますが、//必要に応じて、データベースに対して追加のチェックを行うこともできます。追加のパスワードチェックが必要ない場合は、//この設定が空であることを確認してください。 // //これは、データベースでユーザーとパスワードのペアが見つかった場合に//正の値を返すクエリです。 // //このクエリは1つの値(1行1列)を返す必要があります。//値は理想的には1または0であり、//ユーザーとパスワードのペアが実際にデータベースに存在することを示します。 // //このクエリの%1は、 "[email protected]"などの//完全なユーザー名(ドメインを含む)に置き換えられます//このクエリの%2は、//ドメインなしのユーザー名に置き換えられます部分)、たとえば "jose" //このクエリの%3はドメイン名に置き換えられます// "example.com"のように//このクエリの%4は現在の(古い)//に置き換えられます//他のプラグイン構成設定ごとに必要な暗号化形式のパスワード(//パスワードの構文は暗号化の選択に応じて//提供されるため、//クエリでこの値を引用符で囲む必要はありません。 //このクエリの%5は、暗号化されていないプレーンテキストの現在の(古い)//パスワードに置き換えられます。 //パスワード暗号化を使用しない場合、%4と%5は同じ値になります。ただし、//%4は二重引用符で囲まれ、%5はそうではありません。 // // $ lookup_password_query =''; //ひどいセキュリティ:$ lookup_password_query ='SELECT count(*)FROM users WHERE username ="%1" AND plain_password ="%5"'; // $ lookup_password_query ='SELECT count(*)FROM users WHERE username ="%1" AND crypt_password =%4'; $ lookup_password_query ='SELECT count(*)FROM users WHERE email ="%1" AND password =%4'; // password_update_queries////パスワード変更が試行されるたびに//すべて実行されるSQLクエリの配列。 ////ここには任意の数のクエリを含めることができます。 //クエリはここに指定された順序で実行されます。 // //すべてのクエリの%1は完全なユーザー名に置き換えられます//(ドメインを含む)「[emailprotected]」など//すべてのクエリの%2はユーザー名に置き換えられます(//ドメインなし)部分)、たとえば "jose" //すべてのクエリの%3はドメイン名に置き換えられます// "example.com"のように//すべてのクエリの%4は//新しいパスワードに置き換えられます//プラグイン構成設定ごとに暗号化形式が必要です(//パスワードの構文は//暗号化の選択に応じて提供されるため、ここでのクエリで//この値の前後に引用符を指定する必要はありません。) //すべてのクエリの%5は、暗号化されていないプレーンテキストの//新しいパスワードに置き換えられます-注意! //パスワード暗号化を使用しない場合、%4と%5は同じ//値になりますが、%4は//二重引用符で囲まれ、%5はそうではありません。 //// $ password_update_queries =array(//'UPDATE users SET crypt_password =%4 WHERE username ="%1"'、//'UPDATE user_flags SET force_change_pwd =0 WHERE username ="%1"'、//'UPDATEユーザーSETcrypt_password=%4、force_change_pwd =0 WHERE username ="%1"'、//); $ password_update_queries =array('UPDATE users SET password =%4 WHERE email ="%1"'); // force_change_password_check_query////ユーザーにパスワードの変更を強制する必要があるかどうかを示すフラグを//チェックするクエリ。このクエリは、// 1つの値(1行1列)を返す必要があります。これは、//ユーザーがパスワードを変更する必要がない場合はゼロ、//ユーザーが今すぐパスワードを変更する必要がある場合は1です。 // //この機能を有効にしたくない場合は、この設定を//空の文字列にする必要があります。 // //このクエリの%1は、 "[email protected]"などの//完全なユーザー名(ドメインを含む)に置き換えられます//このクエリの%2は、//ドメインなしのユーザー名に置き換えられます部分)、たとえば "jose" //このクエリの%3はドメイン名に置き換えられます//"example.com"など////$ force_change_password_check_query ='SELECT IF(force_change_pwd ="yes"、1 、0)FROMユーザーWHERE username ="%1"'; // $ force_change_password_check_query ='SELECT force_change_pwd FROM users WHERE username ="%1"'; $ force_change_password_check_query =''; // password_encryption // //データベースにパスワードを保存するために//どの暗号化方法を使用しますか?次のいずれかを使用してください。//表示どおりに////なしパスワードはプレーンテキストとしてのみ保存されます//MYSQLPWDパスワードはMySQLpassword()関数を使用して保存されます//MYSQLENCRYPTパスワードはMySQL暗号化を使用して保存されます()function //PHPCRYPTパスワードはPHPcrypt()関数を使用して保存されます//MD5CRYPTパスワードは暗号化されたMD5アルゴリズムを使用して保存されます//MD5パスワードはMD5ハッシュとして保存されます//// $ password_encryption ='MYSQLPWD'; $ password_encryption ='MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // //ソルトを必要とする暗号化タイプは、//そのソルトを取得する場所を知る必要があります。一定の既知のソルト値がある場合は、//$csp_salt_staticで定義する必要があります。それ以外の場合は、その//値を空のままにして、$csp_salt_queryの値を定義します。 // //パスワードを暗号化するためにソルトを//必要としない(または使用しない)場合は、両方の値を空のままにします。 // //クエリは1つの値(1行1列)を返す必要があります。これは//現在のユーザーのパスワードのソルト値です。 // $ csp_salt_staticが空以外の場合、この//クエリは無視されます。 // //このクエリの%1は、 "[email protected]"などの//完全なユーザー名(ドメインを含む)に置き換えられます//このクエリの%2は、//ドメインなしのユーザー名に置き換えられます部分)、たとえば「jose」//このクエリの%3は、ドメイン名に置き換えられます。//「example.com」など// // $ csp_salt_static ='LEFT(crypt_password、2)'; // $ csp_salt_static ='"a4"'; //MYSQLENCRYPTでこの形式を使用します//$csp_salt_static ='$ 2 $ blowsomefish $'; //この形式をPHPCRYPTで使用します//$csp_salt_static =''; $ csp_salt_static ='LEFT(password、2)'; // $ csp_salt_query ='SELECT SUBSTRING_INDEX(crypt_password、' $'、1)FROM users WHERE username ="%1"'; // $ csp_salt_query ='SELECT SUBSTRING(crypt_password、(LENGTH(SUBSTRING_INDEX(crypt_password、' $'、2))+ 2))FROM users WHERE username ="%1"'; // $ csp_salt_query ='SELECT salt FROM users WHERE username ="%1"'; // $ csp_salt_query =''; // csp_secure_port // //パスワード中にSSL暗号化が使用されるようにすることができます//これをHTTPSが提供されるポートに設定することで//変更します(443が一般的です)。ユーザーがパスワードを変更するときに//HTTPS接続を強制したくない場合は、ゼロに設定します。 // //仮想ホストログイン(vlogin)プラグインを介して//vlogin構成で$vlogin_csp_secure_portの値を設定することにより、特定のドメイン、ユーザー、または//サービスレベルのこの値をオーバーライドできます。 // $ csp_secure_port =0; // $ csp_secure_port =443; // csp_non_standard_http_port ////非標準のポート(ポート80以外)で//標準のHTTP Webリクエストを処理する場合は、ここで//ポート番号を指定する必要があります。それ以外の場合はゼロに設定します。 // //仮想ホストログイン(vlogin)プラグインを介して//vlogin構成で$vlogin_csp_non_standard_http_port //の値を設定することにより、特定のドメイン、ユーザー、または//サービスレベルのこの値をオーバーライドできます。 // // $ csp_non_standard_http_port =8080; $ csp_non_standard_http_port =0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // //これらの設定を受け入れるか、ゼロのままにして//制限がないことを示すことができます適用されます。 // //ここで他の設定をオンにして、//新しいパスワードに少なくとも1桁の数字、大文字、//小文字、および/または1文字の英数字が含まれていないことを確認します。 // $ min_password_length =6; $ max_password_length =0; $ include_digit_in_password =0; $ include_uppercase_letter_in_password =0; $ include_lowercase_letter_in_password =0; $ include_nonalphanumeric_in_password =0; // csp_delimiter // //システムに//ユーザーとドメイン部分を区切る「@」記号以外のユーザー名がある場合は、//ここでその文字を指定します// // $ csp_delimiter ='|'; $ csp_delimiter ='@'; //デバッグモード//$csp_debug =0;?> 

次に、SquirrelMail構成に入り、POP3およびIMAPサーバーとしてCourierを使用し、SQLパスワードの変更と互換性プラグインを有効にすることをSquirrelMailに通知する必要があります。

 / usr / sbin / squirrelmail-configure 

次のメニューが表示されます。示されているようにナビゲートします:

SquirrelMailの構成:読み取り:config.php(1.4.0)
--------------------------------- ------------------------
メインメニュー-
1。組織の設定
2。サーバー設定
3。フォルダのデフォルト
4。一般的なオプション
5。テーマ
6。名簿
7。今日のメッセージ(MOTD)
8。プラグイン
9。データベース
10。言語

D.特定のIMAPサーバー用に事前定義された設定を設定します

C色をオンにします
Sデータを保存します
Q終了します

コマンド>><-D


SquirrelMailの構成:読み取り:config.php
--------------------------- ------------------------------
SquirrelMailを構築している間に、いくつかの
設定を発見しましたこれは、他のサーバーではうまく機能しない一部のサーバーでうまく機能します。
IMAPサーバーを選択した場合、このオプションにより、そのサーバーに事前定義された設定が
設定されます。

引き続き、すべてを確認する必要があることに注意してください。
正しい。これによってすべてが変わるわけではありません。
これが変更される設定はごくわずかです。

IMAPサーバーを選択してください:
bincimap =BincIMAPサーバー
courier=クーリエIMAPサーバー
cyrus =Cyrus IMAP server
dovecot =Dovecot Secure IMAP server
exchange =Microsoft Exchange IMAP server
hmailserver =hMailServer
/ 32
uw=ワシントン大学のIMAPサーバー
gmail=Googleメール(Gmail)アカウントへのIMAPアクセス

変更しない
変更しない
- 宅配便


imap_server_type =宅配
default_folder_prefix =INBOX
trash_folder =ゴミ箱
sent_folder =送信
draft_folder =下書き
show_prefix_option =false
default_sub_of_inbox =false
show_contain_subfolder s_option =false
optional_delimiter=。
delete_folder=true

Enterキーを押して続行します...<-Enterキーを押します


S構成:読み取り:config.php(1.4.0)
---------------------------------- -----------------------
メインメニュー-
1。組織の設定
2。サーバー設定
3。フォルダのデフォルト
4。一般的なオプション
5。テーマ
6。名簿
7。今日のメッセージ(MOTD)
8。プラグイン
9。データベース
10。言語

D.特定のIMAPサーバー用に事前定義された設定を設定します

C色をオンにします
Sデータを保存します
Q終了します

コマンド>><-8


SquirrelMailの構成:読み取り:config.php(1.4.0)
---------------------- -----------------------------------
プラグイン
インストールされているプラ​​グイン
1. view_as_html

利用可能なプラグイン:
2.管理者
3. bug_report
4. calendar
5. change_sqlpass
6.互換性
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. send_subfolders
17. spamcop
18. squirrelspell
19. test

20。>
Rメインメニューに戻ります
C色をオンにします
Sデータを保存します
Q終了します

コマンド>><-6(または任意の数互換性プラグインは持っています-それはによって必要とされますchange_sqlpassプラグイン)


SquirrelMail構成:読み取り:config.php(1.4.0)
----------------- ----------------------------------------
プラグイン
インストール済みプラグイン
1.view_as_html
2.互換性

利用可能なプラグイン:
3.管理者
4. bug_report
5.カレンダー
6. change_sqlpass
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
14. message_details
15. newmail
16. send_subfolders
17. spamcop
18. squirrelspell
19. test
.translate

Rメインメニューに戻る
C色をオンにする
Sデータを保存する
Q終了する

コマンド>><- 6(change_sqlpassプラグインの番号)


SquirrelMail Configuration:Read:config.php(1.4.0)
------------ ---------------------------------------------
プラグイン
インストールされているプラ​​グイン
1.view_as_html
2.互換性
3.change_sqlpass

使用可能なプラグイン:
4.管理者
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11.info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. send_subfolders
17. spamcop
br 18. rs 19.テスト
20.翻訳

Rメインメニューに戻る
C色をオンにする
Sデータを保存する
Q終了する

コマンド>><-S


SquirrelMail構成:読み取り:config.php(1.4.0)
------------ ---------------------------------------------
プラグイン
インストールされたプラグイン
1.view_as_html
2.互換性
3.change_sqlpass

利用可能なプラグイン:
4.管理者
5。 。bug_report
6。カレンダー
7.delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. send_subfolders
17. spamcop
18. squirrelspell
19. test
20。 br />
Rメインメニューに戻る
C色をオンにする
Sデータを保存する
Q終了する

コマンド>>S

config.phpに保存されたデータ
Enterキーを押して続行します...<-Enterキーを押します


SquirrelMail構成:読み取り:config.php(1.4.0)
---------------------------------------------- -----------
プラグイン
インストールされているプラ​​グイン
1.view_as_html
2.互換性
3.change_sqlpass

利用可能なプラグイン:
4.管理者
5. bug_report
6. calendar
7. delete_move_next
8. demo
9.フィルタ
11.情報
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. send_subfolders
17. spamcop
18. squirrelspell
20. translate

Rメインメニューに戻る
C色をオンにする
Sデータを保存する
Q終了する

コマンド>><-Q

これで、ブラウザにhttp://server1.example.com/squirrelmailまたはhttp://192.168.0.100/squirrelmailと入力して、SquirrelMailにアクセスできます。

メールアドレス(例:[メール保護])とパスワードを使用してログインします:

受信トレイにウェルカムメールがあります:

パスワードを変更するには、[オプション]に移動し、[パスワードの変更]を選択します:

現在のパスワードを入力してから、新しいパスワードを2回入力します。

パスワードが正常に変更された場合は、次のエラーメッセージが表示されます。これは、新しいパスワードで再度ログインする必要があることを意味します(古いパスワードはもうアクティブではないため)。

16 VMA(仮想メール管理インターフェース)

Virtual Mail Admin(VMA)は、このガイドで設定された電子メールシステムを管理するために作成された小さなPHPベースのWebアプリです。テストはしていませんが、共有したいと思いました。

これは、開発者(Charl Loubser)が私にメールで書いたものです:

「こんにちは。

これが好きかどうか、またはこれがあなたに役立つかどうかはわかりませんが、共有したいと思いました:

Howtoで行ったセットアップ用のばかげた小さなWebアプリを作成しました:https://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu-10.04

承認してチュートリアルで共有する価値があると思われる場合は、大歓迎です。気軽に共有できます。

readmeで述べたように、これは完璧なアプリではありません。しかし、今のところは機能します。閉じた環境(サーバー間のLANセットアップ)では比較的安全だと思います。

アプリのrarファイルが添付されていますが、次のURLからダウンロードすることもできます。 :http://code.google.com/p/vma/ "


17の参照

  • チュートリアル:Debian-SargeおよびPostfix 2.1を使用したISPスタイルの電子メールサービス:http://workaround.org/articles/ispmail-sarge/
  • Postfix + Quota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
  • saslauthdを使用して暗号化されたメールパスワード:http://www.syscp.de/docs/public/contrib/cryptedmailpws

  • Postfix MTA:http://www.postfix.org/
  • Postfix Quota Patch:http://web.onda.com.br/nadal/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • SquirrelMail:http://www.squirrelmail.org/
  • Ubuntu:http://www.ubuntu.com/
  • 仮想メール管理インターフェース(VMA):http://code.google.com/p/vma/

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

  2. Sendmailを使用した仮想ユーザーとドメイン

  3. CentOS6VPSでPostfixとDovecotを使用する仮想ユーザーとドメインを備えたメールサーバー

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

  2. Ubuntu 16.04(LTS)Apache、PHP 7、およびMySQLを使用したLAMPサーバーのチュートリアル

  3. Ubuntu18.04LTSにPHP-FPM7とMySQL5.7を使用してLighttpdをインストールする方法

  1. Postfix、Courier、MySQLを使用した仮想ユーザーとドメイン(Ubuntu 6.10 Edgy Eft)

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

  3. Ubuntu 8.04 LTSでのProftpdとMySQL(クォータを含む)を使用した仮想ホスティング