GNU/Linux >> Belajar Linux >  >> Ubuntu

Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 8.10)

Tutorial ini adalah Hak Cipta (c) 2008 oleh Falko Timme. Ini berasal dari tutorial dari Christoph Haas yang dapat Anda temukan di http://workaround.org. Anda bebas menggunakan tutorial ini di bawah lisensi Creative Commons 2.5 atau versi yang lebih baru.

Dokumen ini menjelaskan cara menginstal server email berbasis Postfix yang berbasis pada pengguna dan domain virtual, yaitu pengguna dan domain yang ada di database MySQL. Saya juga akan mendemonstrasikan instalasi dan konfigurasi Courier (Courier-POP3, Courier-IMAP), sehingga Courier dapat mengautentikasi terhadap database MySQL yang sama yang digunakan Postfix.

Server Postfix yang dihasilkan mampu SMTP-AUTH dan TLS dan kuota (kuota tidak ada di dalam Postfix secara default, saya akan menunjukkan cara menambal Postfix Anda dengan tepat). Kata sandi disimpan dalam terenkripsi formulir di database (sebagian besar dokumen yang saya temukan berurusan dengan kata sandi teks biasa yang merupakan risiko keamanan). Selain itu, tutorial ini mencakup pemasangan Amavisd , Pembunuh Spam dan ClamAV sehingga email akan dipindai dari spam dan virus. Saya juga akan menunjukkan cara menginstal SquirrelMail sebagai antarmuka webmail sehingga pengguna dapat membaca dan mengirim email serta mengubah kata sandi mereka.

Keuntungan dari pengaturan "virtual" seperti itu (pengguna dan domain virtual dalam database MySQL) adalah kinerjanya jauh lebih baik daripada pengaturan yang didasarkan pada pengguna sistem "nyata". Dengan penyiapan virtual ini, server email Anda dapat menangani ribuan domain dan pengguna. Selain itu, lebih mudah untuk diadministrasikan karena Anda hanya perlu berurusan dengan database MySQL ketika Anda menambahkan pengguna/domain baru atau mengedit yang sudah ada. Tidak ada lagi perintah postmap untuk membuat file db, tidak ada lagi reload Postfix, dll. Untuk administrasi database MySQL Anda dapat menggunakan alat berbasis web seperti phpMyAdmin yang juga akan diinstal di howto ini. Keuntungan ketiga adalah pengguna memiliki alamat email sebagai nama pengguna (bukan nama pengguna + alamat email) yang lebih mudah dipahami dan diingat.

Howto ini dimaksudkan sebagai panduan praktis; itu tidak mencakup latar belakang teoretis. Mereka diperlakukan di banyak dokumen lain di web.

Dokumen ini datang tanpa jaminan apapun! Saya ingin mengatakan bahwa ini bukan satu-satunya cara untuk mengatur sistem seperti itu. Ada banyak cara untuk mencapai tujuan ini tetapi ini adalah cara yang saya ambil. Saya tidak memberikan jaminan apa pun bahwa ini akan berhasil untuk Anda!

1 Catatan Awal

Tutorial ini didasarkan pada Server Ubuntu 8.10 (Intrepid Ibex), jadi Anda harus mengatur instalasi server Ubuntu 8.10 dasar sebelum melanjutkan dengan tutorial ini (misalnya seperti yang ditunjukkan pada halaman 1 - 3 dalam tutorial ini:Server Sempurna - Ubuntu Intrepid Ibex (Ubuntu 8.10)). Sistem harus memiliki alamat IP statis. Saya menggunakan 192.168.0.100 sebagai alamat IP saya dalam tutorial ini dan server1.example.com sebagai nama host.

Pastikan Anda login sebagai root (ketik

sudo su

untuk menjadi root), karena kita harus menjalankan semua langkah dari tutorial ini sebagai pengguna root.

Sangat penting bagi Anda untuk membuat /bin/sh sebagai symlink ke /bin/bash...

ln -sf /bin/bash /bin/sh

... dan bahwa Anda menonaktifkan AppArmor:

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

2 Instal Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Untuk menginstal Postfix, Courier, Saslauthd, MySQL, dan phpMyAdmin, kita cukup menjalankan

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 postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass 

Anda akan ditanya beberapa pertanyaan:

Kata sandi baru untuk pengguna "root" MySQL:<-- yourrootsqlpassword
Ulangi kata sandi untuk pengguna "root" MySQL:<-- yourrootsqlpassword
Buat direktori untuk administrasi berbasis web? <-- Tidak
Jenis umum konfigurasi email:<-- Situs Internet
Nama email sistem:<-- server1.example.com
Diperlukan sertifikat SSL <-- Oke
Server web untuk mengkonfigurasi ulang secara otomatis:<-- apache2

3 Terapkan Patch Kuota Ke Postfix

Kita harus mendapatkan sumber Postfix, menambalnya dengan tambalan kuota, membangun paket .deb Postfix baru dan menginstal paket .deb tersebut:

apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-server-dev-8.3 po-debconf dpatch libmysqlclient15-dev lsb-release libcdb-dev libdb-dev hardening-wrapper

cd /usr/src
apt-get source postfix

(Pastikan Anda menggunakan versi Postfix yang benar pada perintah berikut. Saya telah menginstal Postfix 2.5.5. Anda dapat mengetahui versi Postfix Anda dengan menjalankan

 postconf -d | grep mail_version

Outputnya akan terlihat seperti ini:

[dilindungi email]:/usr/src# postconf -d | grep mail_version
mail_version =2.5.5
milter_macro_v =$mail_name $mail_version
[email protected]:/usr/src#

)

wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix -2.5.5
patch -p1 <../postfix-2.5.5-vda-ng.patch
dpkg-buildpackage

Anda mungkin melihat peringatan seperti ini di akhir perintah dpkg-buildpackage:

dpkg-buildpackage: warning: Failed to sign .dsc and .changes file

Anda dapat mengabaikan pesan ini.

Sekarang kita naik satu direktori, di situlah paket .deb baru telah dibuat:

cd ..

Perintah

ls -l

menunjukkan kepada Anda paket yang tersedia:

[email protected]:/usr/src# ls -l
total 5872
drwxr-xr-x 19 root root    4096 2008-11-04 16:19 postfix-2.5.5
- rw-r--r--  1 root src   230154 2008-11-04 16:16 postfix_2.5.5-1.diff.gz
-rw-r--r--  1 root src     1170 2008-11- 04 16:16 postfix_2.5.5-1.dsc
-rw-r--r--  1 root src     3737 2008-11-04 16:21 postfix_2.5.5-1_i386.changes
-rw- r--r--  1 root src  1230234 2008-11-04 16:21 postfix_2.5.5-1_i386.deb
-rw-r--r--  1 root src  3157877 2008-09-03 17:04 postfix_2.5.5.orig.tar.gz
-rw-r--r--  1 root src    58389 2008-09-06 05:02 postfix-2.5.5-vda-ng.patch
- rw-r--r--  1 root src    41404 2008-11-04 16:21 postfix-cdb_2.5.5-1_i386.deb
-rw-r--r--  1 root src   140970 2008-11- 04 16:21 postfix-dev_2.5.5-1_all.deb
-rw-r--r--  1 root src   916504 2008-11-04 16:21 postfix-doc_2.5.5-1_all.deb
-rw-r--r--  1 root src    48652 2008-11-04 16:21 postfix-ldap_2.5.5-1_i386.deb
-rw-r--r--  1 root src    43332 2008- 11-04 16:21 postfix-mysql_2.5.5-1_ i386.deb
-rw-r--r--  1 root src    43256 2008-11-04 16:21 postfix-pcre_2.5.5-1_i386.deb
-rw-r--r-- 1 root src    43412 2008-11-04 16:21 postfix-pgsql_2.5.5-1_i386.deb
[email protected]:/usr/src#

Pilih paket postfix dan postfix-mysql dan instal seperti ini:

dpkg -i postfix_2.5.5-1_i386.deb postfix-mysql_2.5.5-1_i386.deb

4 Membuat Database MySQL Untuk Postfix/Courier

Sekarang kita membuat database bernama mail:

mysqladmin -u root -p create mail

Selanjutnya, kita pergi ke shell MySQL:

mysql -u root -p

Di shell MySQL, kami membuat pengguna mail_admin dengan passwort mail_admin_password (ganti dengan kata sandi Anda sendiri) yang memiliki hak istimewa SELECT,INSERT,UPDATE,DELETE pada database email. Pengguna ini akan digunakan oleh Postfix dan Courier untuk terhubung ke database email:

GRANT SELECT, INSERT, UPDATE, DELETE PADA email.* UNTUK 'mail_admin'@'localhost' DIIDENTIFIKASI DENGAN 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* UNTUK 'mail_admin'@'localhost. domain lokal' DIIDENTIFIKASI DENGAN 'mail_admin_password';
HAK ISTIMEWA FLUSH;

Masih di shell MySQL, kami membuat tabel yang dibutuhkan oleh Postfix dan Courier:

USE mail;

CREATE TABLE domain (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
kuota INT(10) DEFAULT '10485760',
PRIMARY KEY (email )
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE =MyISAM;

quit;

Seperti yang mungkin Anda perhatikan, dengan berhenti; perintah kami telah meninggalkan shell MySQL dan kembali ke shell Linux.

domain tabel akan menyimpan setiap domain virtual tempat Postfix harus menerima email (mis. example.com ).

domain
contoh.com

penerusan tabel adalah untuk aliasing satu alamat email ke yang lain, mis. teruskan email untuk [email protected] ke .

sumber tujuan
[dilindungi email] [dilindungi email]

pengguna tabel menyimpan semua pengguna virtual (yaitu alamat email, karena alamat email dan nama pengguna sama) dan kata sandi (dalam terenkripsi form!) dan nilai kuota untuk setiap kotak surat (dalam contoh ini nilai defaultnya adalah 10485760 byte yang berarti 10MB).

email sandi kuota
[dilindungi email] No9.E4skNvGa. ("rahasia" dalam bentuk terenkripsi) 10485760

transportasi tabel adalah opsional, ini untuk pengguna tingkat lanjut. Ini memungkinkan untuk meneruskan email untuk pengguna tunggal, seluruh domain atau semua email ke server lain. Misalnya,

domain transportasi
contoh.com smtp:[1.2.3.4]

akan meneruskan semua email untuk example.com melalui protokol smtp ke server dengan alamat IP 1.2.3.4 (tanda kurung siku [] berarti "jangan mencari data MX DNS" (yang masuk akal untuk alamat IP...). Jika Anda menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN), Anda tidak akan menggunakan tanda kurung siku.).

BTW, (Saya berasumsi bahwa alamat IP dari sistem server email Anda adalah 192.168.0.100) Anda dapat mengakses phpMyAdmin melalui http://192.168.0.100/phpmyadmin/ di browser dan masuk sebagai mail_admin. Kemudian Anda dapat melihat database. Nanti Anda dapat menggunakan phpMyAdmin untuk mengatur server email Anda.

5 Konfigurasi Postfix

Sekarang kita harus memberitahu Postfix di mana ia dapat menemukan semua informasi dalam database. Oleh karena itu kita harus membuat enam file teks. Anda akan melihat bahwa saya memberi tahu Postfix untuk terhubung ke MySQL pada alamat IP 127.0.0.1 alih-alih localhost. Ini karena Postfix berjalan di chroot jail dan tidak memiliki akses ke soket MySQL yang akan coba disambungkan jika saya memberi tahu Postfix untuk menggunakan localhost. Jika saya menggunakan 127.0.0.1 Postfix menggunakan jaringan TCP untuk terhubung ke MySQL yang tidak ada masalah bahkan di chroot jail (alternatifnya adalah memindahkan soket MySQL ke chroot jail yang menyebabkan beberapa masalah lain).

Harap pastikan bahwa /etc/mysql/my.cnf berisi baris berikut:

vi /etc/mysql/my.cnf
[...]
bind-address            = 127.0.0.1
[...]

Jika Anda harus mengubah /etc/mysql/my.cnf, silakan restart MySQL sekarang:

/etc/init.d/mysql restart

Jalankan

netstat -tap | grep mysql

untuk memastikan bahwa MySQL mendengarkan pada 127.0.0.1 (localhost.localdomain):

[dilindungi email]:/usr/src# netstat -tap | grep mysql
tcp       0      0 localhost.localdo:mysql *:*                  DENGARKAN      7224/mysqld
[email protected]:/usr/src#

Sekarang mari kita buat enam file teks kita.

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

Kemudian ubah izin dan grup file-file ini:

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

Sekarang kita membuat pengguna dan grup bernama vmail dengan direktori home /home/vmail. Di sinilah semua kotak surat akan disimpan.

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

Selanjutnya kita melakukan beberapa konfigurasi Postfix. Pastikan Anda mengganti server1.example.com dengan FQDN yang valid, jika tidak, Postfix Anda mungkin tidak berfungsi dengan baik!

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__resto_resto_recipient__resto -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'
-e 'transport_maps =proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize =yes'
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 ="Pengguna yang ingin Anda jangkau adalah $scanonicscanonicalo."'
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_remapender_mapender_mailbox_domains $remaponic_domains relokasi_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

Setelah itu kita buat sertifikat SSL yang dibutuhkan untuk TLS:

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

Nama Negara (kode 2 huruf) [AU]:<-- Masukkan Nama Negara Anda (mis., "DE").
Nama Negara Bagian atau Provinsi (nama lengkap) [Some-State]:<-- Masukkan Negara Bagian Anda atau Nama Provinsi.
Nama Lokalitas (mis., kota) []:<-- Masukkan Kota Anda.
Nama Organisasi (mis., perusahaan) [Internet Widgits Pty Ltd]:<-- Masukkan Nama Organisasi Anda (mis., nama perusahaan Anda).
Nama Unit Organisasi (mis., seksi) []:<-- Masukkan Nama Unit Organisasi Anda (mis. "Departemen TI").
Nama Umum (mis. nama ANDA) []:<-- Masukkan Nama Domain yang Memenuhi Syarat dari sistem (misalnya "server1.example.com").
Alamat Email []:<-- Masukkan Alamat Email Anda.

Kemudian ubah izin smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Konfigurasi Saslauthd

Jalankan pertama

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

Kemudian edit /etc/default/saslauthd.conf Setel MULAI ke ya dan ubah baris OPTIONS="-c -m /var/run/saslauthd" menjadi OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r":

vi /etc/default/saslauthd
#
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"

# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd"

# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Kemudian buat file /etc/pam.d/smtp. Seharusnya hanya berisi dua baris berikut (pastikan untuk mengisi detail database Anda yang benar):

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

Selanjutnya buat file /etc/postfix/sasl/smtpd.conf. Seharusnya terlihat seperti ini:

vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: 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'

Selanjutnya tambahkan pengguna postfix ke grup sasl (ini memastikan bahwa Postfix memiliki izin untuk mengakses saslauthd):

adduser postfix sasl

Kemudian restart Postfix dan Saslauthd:

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

7 Konfigurasikan Kurir

Sekarang kita harus memberi tahu Courier bahwa itu harus mengautentikasi terhadap database MySQL kita. Pertama, edit /etc/courier/authdaemonrc dan ubah nilai authmodulelist sehingga berbunyi:

vi /etc/courier/authdaemonrc
[...]
authmodulelist="authmysql"
[...]

Kemudian buat cadangan /etc/courier/authmysqlrc dan kosongkan file lama:

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

Kemudian buka /etc/courier/authmysqlrc dan masukkan baris berikut ke dalamnya:

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

Kemudian restart Kurir:

/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

Dengan menjalankan

telnet localhost pop3

Anda dapat melihat apakah server POP3 Anda berfungsi dengan benar. Seharusnya mengembalikan +OK Halo. (Ketik quit untuk kembali ke shell Linux.)

[email protected]:/etc/postfix# telnet localhost pop3
Mencoba 127.0.0.1...
Terhubung ke localhost.localdomain.
Karakter escape adalah '^]'.
+OK Halo.
keluar
+OK Semoga lain kali lebih beruntung.
Koneksi ditutup oleh host asing.
[email protected]:/etc/postfix#

8 Ubah /etc/aliases

Sekarang kita harus membuka /etc/aliases. Pastikan postmaster menunjuk ke root dan root ke nama pengguna atau alamat email Anda sendiri, mis. seperti ini:

vi /etc/aliases
[...]
postmaster: root
root: [email protected]
[...]

atau seperti ini (jika administrator adalah nama pengguna Anda sendiri):

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

Setiap kali Anda memodifikasi /etc/aliases, Anda harus menjalankan

newaliases

setelah itu dan mulai ulang Postfix:

/etc/init.d/postfix restart  

9 Instal amavisd-new, SpamAssassin, Dan ClamAV

Untuk menginstal amavisd-new, spamassassin dan clamav, jalankan perintah berikut:

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

Karena perintah ini menginstal AppArmor lagi sebagai dependensi, kita harus menonaktifkannya lagi:

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

Setelah itu kita harus mengkonfigurasi amavisd-new. Konfigurasi dibagi dalam berbagai file yang berada di direktori /etc/amavis/conf.d. Lihatlah masing-masing untuk menjadi akrab dengan konfigurasi. Sebagian besar pengaturan baik-baik saja, namun kita harus memodifikasi tiga file:

Pertama kita harus mengaktifkan ClamAV dan SpamAssassin di /etc/amavis/conf.d/15-content_filter_mode dengan menghapus komentar pada baris @bypass_virus_checks_maps dan @bypass_spam_checks_maps:

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

Filenya akan terlihat seperti ini:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # ensure a defined return

Dan kemudian Anda harus melihat pengaturan spam dan tindakan untuk spam-/virus-mails di /etc/amavis/conf.d/20-debian_defaults. Tidak perlu mengubah apa pun jika pengaturan default sudah sesuai untuk Anda. File berisi banyak penjelasan sehingga tidak perlu menjelaskan pengaturan di sini:

vi /etc/amavis/conf.d/20-debian_defaults
[...]
$QUARANTINEDIR = "$MYHOME/virusmails";
$quarantine_subdir_levels = 1; # enable quarantine dir hashing

$log_recip_templ = undef;    # disable by-recipient level-0 log entries
$DO_SYSLOG = 1;              # log via syslogd (preferred)
$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug';  # switch to info to drop debug output, etc

$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1

$inet_socket_port = 10024;   # default listening socket

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
[...]
$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)
[...]

Terakhir, edit /etc/amavis/conf.d/50-user dan tambahkan baris $pax='pax'; di tengah:

vi /etc/amavis/conf.d/50-user
use strict;

#
# Place your configuration directives here.  They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#

$pax='pax';

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

Setelah itu, jalankan perintah ini untuk menambahkan pengguna clamav ke grup amavis dan untuk memulai ulang amavisd-new dan ClamAV:

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

Sekarang kita harus mengkonfigurasi Postfix untuk menyalurkan email masuk melalui amavisd-new:

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

Setelah itu tambahkan baris berikut ke /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
        -o smtpd_bind_address=127.0.0.1

Kemudian restart Postfix:

/etc/init.d/postfix restart

Sekarang jalankan

netstat -tap

dan Anda akan melihat Postfix (master) mendengarkan pada port 25 (smtp) dan 10025, dan amavisd-new pada port 10024:

[email protected]:/etc/postfix# netstat -tap
Koneksi Internet aktif (server dan terbentuk)
Proto Recv-Q Send-Q Local Address          Foreign Address         State   0 0 localhost.localdo:10024*:*Dengarkan 22356 /AMAVISD (MAST
TCP 0 0 LOCALHOST.LOCALDO:10025*:*Dengarkan 23581 /MASTER
TCP 0 0 LOCALHOST.LOCALDO:MYSQL*:* Dengarkan 7224 /mysqld
tcp 0 0*:www*:*Dengarkan 6237 /Apache2
TCP 0 0*:SSH*:*Dengarkan 3648 /sshd
TCP 0 0*:SMTP* *Dengarkan 23581/Master
TCP 0 148 Server1.example.com:ssh Localhost:3220 Didirikan 3698/0
TCP6 0 0 [::]:IMAPS [::]:*Dengarkan 19408/curiertcpd
tcp 6 0 0 [::]:POP3S [::]:*Dengarkan 19476 /Couriertcpd
TCP6 0 0 [::]:POP3 [::]:*Dengarkan 19439 /Couriertcpd
TCP6 0 0 [ ::]:imap2 [::]:*Dengarkan 19371/curiertcpd
tcp6 0 0 [::]:ssh [::]:*dengarkan 3648/sshd
[email dilindungi]:/etc/ postfix#

 

10 Instal Razor, Pyzor Dan DCC Dan Konfigurasi SpamAssassin

Razor, Pyzor, dan DCC adalah filter spam yang menggunakan jaringan penyaringan kolaboratif. Untuk menginstal Razor dan Pyzor, jalankan

apt-get install razor pyzor

DCC tidak tersedia di repositori Ubuntu 8.10, jadi kami menginstalnya sebagai berikut:

cd /tmp
wget http://launchpadlibrarian.net/11564361/dcc-server_1.3.42-5_i386.deb
wget http://launchpadlibrarian.net/11564359/dcc-common_1.3.42-5_i386. deb
dpkg -i dcc-common_1.3.42-5_i386.deb
dpkg -i dcc-server_1.3.42-5_i386.deb

Sekarang kita harus memberitahu SpamAssassin untuk menggunakan ketiga program tersebut. Edit /etc/spamassassin/local.cf dan tambahkan baris berikut ke dalamnya:

vi /etc/spamassassin/local.cf
[...]
#dcc
use_dcc 1
dcc_path /usr/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

Kemudian kita harus mengaktifkan plugin DCC di SpamAssassin. Buka /etc/spamassassin/v310.pre dan batalkan komentar pada loadplugin Mail::SpamAssassin::Plugin::DCC line:

vi /etc/spamassassin/v310.pre
[...]
# DCC - perform DCC message checks.
#
# DCC is disabled here because it is not open source.  See the DCC
# license for more details.
#
loadplugin Mail::SpamAssassin::Plugin::DCC
[...]

Anda dapat memeriksa konfigurasi SpamAssassin Anda dengan menjalankan:

spamassassin --lint

Seharusnya tidak menunjukkan kesalahan apa pun.

Mulai ulang amavisd-new setelahnya:

/etc/init.d/amavis restart

Sekarang kami memperbarui aturan SpamAssassin kami sebagai berikut:

sa-update --no-gpg

Kami membuat pekerjaan cron sehingga kumpulan aturan akan diperbarui secara berkala. Jalankan

crontab -e

untuk membuka editor pekerjaan cron. Buat tugas cron berikut:

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

Ini akan memperbarui set aturan setiap hari kedua pada 4.23h.

11 Pemberitahuan Melebihi Kuota

Jika Anda ingin mendapatkan pemberitahuan tentang semua akun email yang melebihi kuota, lakukan ini:

cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify

Buka /usr/local/sbin/quota_notify dan edit variabel di atas. Lebih jauh ke bawah dalam file (menjelang akhir) ada dua baris di mana Anda harus menambahkan tanda %:

vi /usr/local/sbin/quota_notify
[...]
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;
[...]
           print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";
[...]
           print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";
[...]

Jalankan

crontab -e

untuk membuat tugas cron untuk skrip itu:

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

12 Uji Postfix

Untuk melihat apakah Postfix siap untuk SMTP-AUTH dan TLS, jalankan

telnet localhost 25

Setelah Anda membuat koneksi ke server email Postfix, ketik

ehlo localhost

Jika Anda melihat garis

250-STARTTLS

dan

250-AUTH LOGIN PLAIN

semuanya baik-baik saja:

[email protected]:/usr/local/sbin# telnet localhost 25
Mencoba 127.0.0.1...
Terhubung ke localhost.localdomain.
Karakter escape adalah '^]'.
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 LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
keluar
221 2.0.0 Sampai jumpa
Koneksi ditutup oleh host asing.
[email protected]:/usr/local/sbin#

Ketik

quit

untuk kembali ke shell sistem.

13 Mengisi Database Dan Menguji

Untuk mengisi database Anda dapat menggunakan shell MySQL:

mysql -u root -p
GUNAKAN email;

Setidaknya Anda harus membuat entri di tabel domain dan pengguna :

INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `users` (`email`, `password`, `quota`) NILAI ('[email protected]', ENCRYPT('rahasia'), 10485760);

(Harap berhati-hati bahwa Anda menggunakan sintaks ENCRYPT dalam pernyataan INSERT kedua untuk mengenkripsi kata sandi!)

Jika Anda ingin membuat entri di dua tabel lainnya, tampilannya akan seperti ini:

INSERT INTO `forwardings` (`source`, `destination`) NILAI ('[email protected]', '[email protected]');
INSERT INTO `transport` (`domain`, `transport`) NILAI ('contoh.com', 'smtp:mail.contoh.com');

Untuk keluar dari shell MySQL, ketik

quit;

Bagi kebanyakan orang akan lebih mudah jika mereka memiliki front-end grafis ke MySQL; oleh karena itu Anda juga dapat menggunakan phpMyAdmin (dalam contoh ini di bawah http://192.168.0.100/phpmyadmin/ atau http://server1.example.com/phpmyadmin/) untuk mengelola mail basis data. Sekali lagi, saat Anda membuat pengguna, pastikan Anda menggunakan fungsi ENCRYPT untuk mengenkripsi kata sandi:

Saya tidak berpikir saya harus menjelaskan domain dan tabel pengguna lebih lanjut.

Tabel penerusan dapat memiliki entri seperti berikut:

sumber tujuan  
[dilindungi email] [dilindungi email] Mengalihkan email untuk [email protected] ke [email protected]
@example.com [dilindungi email] Membuat akun Catch-All untuk [email protected] Semua email ke example.com akan tiba di [email protected], kecuali yang ada di tabel users (yaitu, jika [email protected] ada di tabel pengguna, email ke [email protected] akan tetap sampai di [email protected]).
@example.com @anotherdomain.tld Ini mengalihkan semua email ke example.com ke pengguna yang sama di domain lain.tld. Misalnya, email ke [email protected] akan diteruskan ke [email protected]
[dilindungi email] [dilindungi email], [dilindungi email] Teruskan email untuk [email protected] ke dua atau lebih alamat email. Semua alamat email yang terdaftar di bawah tujuan menerima salinan email.

Tabel transport dapat memiliki entri seperti ini:

domain transportasi  
contoh.com : Mengirimkan email untuk example.com secara lokal. Ini seolah-olah catatan ini tidak akan ada di tabel ini sama sekali.
contoh.com smtp:mail.anotherdomain.tld Mengirim semua email untuk example.com melalui smtp ke server mail.anotherdomain.com.
contoh.com smtp:mail.anotherdomain.tld:2025 Mengirimkan semua email untuk example.com melalui smtp ke server mail.anotherdomain.com, tetapi pada port 2025, bukan 25 yang merupakan port default untuk smtp.
contoh.com

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

Kurung kotak mencegah Postfix melakukan pencarian data DNS MX untuk alamat dalam kurung siku. Masuk akal untuk alamat IP.
.example.com smtp:mail.anotherdomain.tld Email untuk setiap subdomain dari example.com dikirimkan ke mail.anotherdomain.tld.
* smtp:mail.anotherdomain.tld Semua email dikirim ke mail.anotherdomain.tld.
[dilindungi email] smtp:mail.anotherdomain.tld Email untuk [email protected] dikirimkan ke mail.anotherdomain.tld.

Lihat

man transport 

untuk lebih jelasnya.

Harap diingat bahwa urutan entri dalam tabel transportasi itu penting! Entri akan diikuti dari atas ke bawah.

Penting: Postfix menggunakan mekanisme caching untuk transport, oleh karena itu mungkin diperlukan beberapa saat sampai perubahan Anda pada tabel transport diterapkan. Jika Anda ingin segera berlaku, jalankan

postfix reload 

setelah Anda membuat perubahan di tabel transport.

14 Kirim Email Selamat Datang Untuk Membuat Maildir

Saat Anda membuat akun email baru dan mencoba mengambil email dari akun tersebut (dengan POP3/IMAP), Anda mungkin akan mendapatkan pesan kesalahan yang mengatakan bahwa Maildir tidak ada. Maildir dibuat secara otomatis ketika email pertama tiba untuk akun baru. Oleh karena itu, sebaiknya kirim email selamat datang ke akun baru.

Pertama, kita install paket mailx:

apt-get install mailx

Untuk mengirim email selamat datang ke [email protected], kami melakukan ini:

mailx [email protected]

Anda akan diminta untuk subjek. Ketik subjek (misalnya Selamat datang), lalu tekan ENTER, dan di baris berikutnya ketik pesan Anda. Setelah pesan selesai, tekan ENTER lagi sehingga Anda berada di baris baru, lalu tekan CTRL+D; jika Anda tidak ingin cc email, tekan ENTER lagi:

[dilindungi email]:/usr/local/sbin# mailx [dilindungi email]
Subjek:Selamat datang <- ENTER
Selamat datang! Bersenang-senanglah dengan akun email baru Anda. <-- ENTER
<-- CTRL+D
Cc:<-- ENTER
[email protected]:/usr/local/sbin#

15 Memasang SquirrelMail

SquirrelMail adalah antarmuka webmail yang memungkinkan pengguna Anda mengirim dan menerima email di browser. Bab ini menunjukkan cara menginstalnya dan menyesuaikannya dengan pengaturan kami sehingga pengguna bahkan dapat mengubah kata sandi akun email mereka dari antarmuka SquirrelMail.

Untuk menginstal SquirrelMail, kami menjalankan:

apt-get install squirrelmail php-pear

Selanjutnya kita salin konfigurasi Apache yang disertakan dengan paket SquirrelMail ke direktori /etc/apache2/conf.d dan restart Apache:

cp /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
/etc/init.d/apache2 restart

SquirrelMail hadir dengan beberapa plugin yang sudah diinstal sebelumnya, sayangnya tidak satupun dari mereka yang mampu membiarkan kita mengubah kata sandi email kita di database MySQL kita. Tapi ada plugin Change SQL Password yang bisa kita install secara manual:

Plugin ini bergantung pada paket Pear-DB jadi kami menginstalnya:

pear install DB

Kemudian kita instal plugin Change SQL Password itu sendiri:

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_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

Sekarang kita harus mengedit config.php dan menyesuaikannya dengan setup kita. Harap sesuaikan variabel $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static, dan $csp_delimiter sebagai berikut dan beri komentar $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 = '@';
[...]

File lengkapnya terlihat sebagai berikut:

<?php

/**
  * SquirrelMail Change SQL Password Plugin
  * Copyright (C) 2001-2002 Tyler Akins
  *               2002 Thijs Kinkhorst <[email protected]>
  *               2002-2005 Paul Lesneiwski <[email protected]>
  * This program is licensed under GPL. See COPYING for details
  *
  * @package plugins
  * @subpackage Change SQL Password
  *
  */


   // Global Variables, don't touch these unless you want to break the plugin
   //
   global $csp_dsn, $password_update_queries, $lookup_password_query,
          $force_change_password_check_query, $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_lowercase_letter_in_password,
          $include_nonalphanumeric_in_password;



   // csp_dsn
   //
   // Theoretically, any SQL database supported by Pear should be supported
   // here.  The DSN (data source name) must contain the information needed
   // to connect to your database backend. A MySQL example is included below.
   // For more details about DSN syntax and list of supported database types,
   // please see:
   //   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
   //
   // This plugin will always verify the user's old password
   // against their login password, but an extra check can also
   // be done against the database for more security if you
   // desire.  If you do not need the extra password check,
   // make sure this setting is empty.
   //
   // This is a query that returns a positive value if a user
   // and password pair are found in the database.
   //
   // This query should return one value (one row, one column), the
   // value being ideally a one or a zero, simply indicating that
   // the user/password pair does in fact exist in the database.
   //
   //   %1 in this query will be replaced with the full username
   //      (including domain), such as "[email protected]"
   //   %2 in this query will be replaced with the username (without
   //      any domain portion), such as "jose"
   //   %3 in this query will be replaced with the domain name,
   //      such as "example.com"
   //   %4 in this query will be replaced with the current (old)
   //      password in whatever encryption format is needed per other
   //      plugin configuration settings (Note that the syntax of
   //      the password will be provided depending on your encryption
   //      choices, so you NEVER need to provide quotes around this
   //      value in the query here.)
   //   %5 in this query will be replaced with the current (old)
   //      password in unencrypted plain text.  If you do not use any
   //      password encryption, %4 and %5 will be the same values,
   //      except %4 will have double quotes around it and %5 will not.
   //
   //$lookup_password_query = '';
   // TERRIBLE SECURITY: $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
   //
   // An array of SQL queries that will all be executed
   // whenever a password change attempt is made.
   //
   // Any number of queries may be included here.
   // The queries will be executed in the order given here.
   //
   //   %1 in all queries will be replaced with the full username
   //      (including domain), such as "[email protected]"
   //   %2 in all queries will be replaced with the username (without
   //      any domain portion), such as "jose"
   //   %3 in all queries will be replaced with the domain name,
   //      such as "example.com"
   //   %4 in all queries will be replaced with the new password
   //      in whatever encryption format is needed per other
   //      plugin configuration settings (Note that the syntax of
   //      the password will be provided depending on your
   //      encryption choices, so you NEVER need to provide quotes
   //      around this value in the queries here.)
   //   %5 in all queries will be replaced with the new password
   //      in unencrypted plain text - BEWARE!  If you do not use
   //      any password encryption, %4 and %5 will be the same
   //      values, except %4 will have double quotes around it
   //      and %5 will not.
   //
//   $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 users SET crypt_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
   //
   // A query that checks for a flag that indicates if a user
   // should be forced to change their password.  This query
   // should return one value (one row, one column) which is
   // zero if the user does NOT need to change their password,
   // or one if the user should be forced to change it now.
   //
   // This setting should be an empty string if you do not wish
   // to enable this functionality.
   //
   //   %1 in this query will be replaced with the full username
   //      (including domain), such as "[email protected]"
   //   %2 in this query will be replaced with the username (without
   //      any domain portion), such as "jose"
   //   %3 in this query will be replaced with the domain name,
   //      such as "example.com"
   //
   //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"';
   //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"';
   $force_change_password_check_query = '';



   // password_encryption
   //
   // What encryption method do you use to store passwords
   // in your database?  Please use one of the following,
   // exactly as you see it:
   //
   //   NONE          Passwords are stored as plain text only
   //   MYSQLPWD      Passwords are stored using the MySQL password() function
   //   MYSQLENCRYPT  Passwords are stored using the MySQL encrypt() function
   //   PHPCRYPT      Passwords are stored using the PHP crypt() function
   //   MD5CRYPT      Passwords are stored using encrypted MD5 algorithm
   //   MD5           Passwords are stored as MD5 hash
   //
   //$password_encryption = 'MYSQLPWD';
   $password_encryption = 'MYSQLENCRYPT';


   // csp_salt_query
   // csp_salt_static
   //
   // Encryption types that need a salt need to know where to get
   // that salt.  If you have a constant, known salt value, you
   // should define it in $csp_salt_static.  Otherwise, leave that
   // value empty and define a value for the $csp_salt_query.
   //
   // Leave both values empty if you do not need (or use) salts
   // to encrypt your passwords.
   //
   // The query should return one value (one row, one column) which
   // is the salt value for the current user's password.  This
   // query is ignored if $csp_salt_static is anything but empty.
   //
   //   %1 in this query will be replaced with the full username
   //      (including domain), such as "[email protected]"
   //   %2 in this query will be replaced with the username (without
   //      any domain portion), such as "jose"
   //   %3 in this query will be replaced with the domain name,
   //      such as "example.com"
   //
   //$csp_salt_static = 'LEFT(crypt_password, 2)';
   //$csp_salt_static = '"a4"';  // use this format with MYSQLENCRYPT
   //$csp_salt_static = '$2$blowsomefish$';  // use this format with 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
   //
   // You may ensure that SSL encryption is used during password
   // change by setting this to the port that your HTTPS is served
   // on (443 is typical).  Set to zero if you do not wish to force
   // an HTTPS connection when users are changing their passwords.
   //
   // You may override this value for certain domains, users, or
   // service levels through the Virtual Host Login (vlogin) plugin
   // by setting a value(s) for $vlogin_csp_secure_port in the vlogin
   // configuration.
   //
   $csp_secure_port = 0;
   //$csp_secure_port = 443;



   // csp_non_standard_http_port
   //
   // If you serve standard HTTP web requests on a non-standard
   // port (anything other than port 80), you should specify that
   // port number here.  Set to zero otherwise.
   //
   // You may override this value for certain domains, users, or
   // service levels through the Virtual Host Login (vlogin) plugin
   // by setting a value(s) for $vlogin_csp_non_standard_http_port
   // in the vlogin configuration.
   //
   //$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
   //
   // You can set the minimum and maximum password lengths that
   // you accept or leave those settings as zero to indicate that
   // no limit should be applied.
   //
   // Turn on any of the other settings here to check that the
   // new password contains at least one digit, upper case letter,
   // lower case letter and/or one non-alphanumeric character.
   //
   $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
   //
   // if your system has usernames with something other than
   // an "@" sign separating the user and domain portion,
   // specify that character here
   //
   //$csp_delimiter = '|';
   $csp_delimiter = '@';



   // debug mode
   //
   $csp_debug = 0;



?>

Plugin Change SQL Password juga bergantung pada plugin Compatibility yang kita install sebagai berikut:

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.11- 1.0.tar.gz
tar xvfz compatibility-2.0.11-1.0.tar.gz

Sekarang kita harus masuk ke konfigurasi SquirrelMail dan memberitahu SquirrelMail bahwa kita menggunakan Courier sebagai server POP3 dan IMAP dan mengaktifkan plugin Change SQL Password dan Compatibility:

/usr/sbin/squirrelmail-configure

Anda akan melihat menu berikut. Navigasikan melaluinya seperti yang ditunjukkan:

Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
--------------------------------- ------------------------
Menu Utama --
1. Preferensi Organisasi
2. Setelan Server
3. Folder Default
4. Opsi Umum
5. Tema
6. Buku Alamat
7. Pesan Hari ini (MOTD)
8. Plugin
9. Basis data
10. Bahasa

D. Setel setelan yang telah ditentukan sebelumnya untuk server IMAP tertentu

C   Aktifkan warna
S   Simpan data
Q   Keluar

Perintah >> <-- D


Konfigurasi SquirrelMail : Baca: config.php
--------------------------- ------------------------------
Sementara kami telah membangun SquirrelMail, kami telah menemukan beberapa
preferensi yang berfungsi lebih baik dengan beberapa server yang tidak berfungsi dengan baik
dengan server lain. Jika Anda memilih server IMAP Anda, opsi ini akan
menyetel beberapa setelan yang telah ditentukan sebelumnya untuk server tersebut.

Harap diperhatikan bahwa Anda masih harus melakukan dan memastikan
semuanya benar. Ini tidak mengubah semuanya. 
Hanya ada beberapa setelan yang akan diubah.

Harap pilih server IMAP Anda:
    bincimap    = Server IMAP Binc
    kurir     = Server Kurir /IMAP
>    cyrus       = Server IMAP Cyrus
    dovecot     = Server IMAP Dovecot Secure
    pertukaran    = Server IMAP Microsoft Exchange
    hmailserver=  < Server Mailmer /32
    uw         = Server IMAP Universitas Washington

    keluar       = Jangan ubah apa pun
Perintah >> <-- kurir


imap_server_type =kurir
default_folder_prefix =inbox.
trash_folder =trash
sent_folder =kirim
draft_folder =drafts
false_prefix_option =false
default_sub_of_inbox =false /false /false =false
default_sub_of_inbox =false /false /false =false
default_sub_of_inbox =false /false /false =false
default_sub_of_inbox =false /false /false =false
default_sub_of_inbox =false /false /false => show_contain_subfolders_option = false
          optional_delimiter = .
     delete_folder = true

Tekan tombol apa saja untuk melanjutkan... <-- tekan beberapa tombol


Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
------------------------------------------------------------------- -----------
Menu Utama --
1. Preferensi Organisasi
2. Setelan Server
3. Folder Default
4. Opsi Umum
5. Tema
6. Buku Alamat
7. Pesan Hari ini (MOTD)
8. Plugin
9. Basis data
10. Bahasa

D. Setel setelan yang telah ditentukan sebelumnya untuk server IMAP tertentu

C   Aktifkan warna
S   Simpan data
Q   Keluar

Perintah >> <-- 8


Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
---------------------- -----------------------------------
Plugin
  Plugin Terpasang

  Plugin yang Tersedia:
    1. abook_take
    2. administrator
    3. bug_report
    4. kalender
    5. change_sqlpass
  < br />    7. delete_move_next
    8. demo
    9. filter
    10. keberuntungan
    11. info
    12. daftar perintah
    13. />    14. message_details
    15. newmail
    16. sent_subfolders
    17. spamcop
    18. squirrelspell
    19. test
  akhir>
R   Kembali ke Menu Utama
C   Aktifkan warna
S   Simpan data
Q   Keluar

Command >> <-- 6 (atau nomor berapa pun plugin kompatibilitas memiliki - dibutuhkan oleh t dia change_sqlpass plugin)


Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
----------------- ----------------------------------------
Plugin
  Terpasang Plugin
    1. kompatibilitas

  Plugin Tersedia:
    2. abook_take
    3. administrator
    4. bug_report
    5. kalender
    6. change_sqlpass
    7. delete_move_next
    8. demo
    9. filter
   10. keberuntungan
   11. info
    12. daftar perintah 13. mail_fetch
    14. message_details
    15. newmail
    16. sent_subfolders
    17. spamcop
    18. squirrelspell
     19. . translate

R   Kembali ke Menu Utama
C   Aktifkan warna
S   Simpan data
Q   Keluar

Perintah >> <-- 6 (jumlah plugin change_sqlpass)


Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
------------ ---------------------------------------------
P lugins
  Plugin Terpasang
    1. kompatibilitas
    2. change_sqlpass

  Plugin yang Tersedia:
    3. abook_take
    4. administrator
5. bug_report
    6. kalender
    7. delete_move_next
    8. demo
    9. filter
    10. keberuntungan
    11.  
. listcommands
    13. mail_fetch
    14. message_details
    15. newmail
    16. sent_subfolders
    17. spamcop
    18. uji
    20. terjemahkan

R   Kembali ke Menu Utama
C   Aktifkan warna
S   Simpan data
Q   Keluar

Perintah >> <-- S


Konfigurasi SquirrelMail : Baca: config.php (1.4.0)
-------------- -------------------------------------------------------
Plugin
  Plugin yang Terpasang
    1. kompatibilitas
    2. change_sqlpass

  Plugin yang Tersedia:
    3. abook_take
    4. administrator
 bug_ 5.
    6. kalender r
    7. delete_move_next
    8. demo
    9. filter
    10. keberuntungan
    11. info
    12. listcommands
  _ ambil
    14. message_details
    15. newmail
    16. sent_subfolders
    17. spamcop
    18. squirrelspell
    19. trans 
br />
R   Kembali ke Menu Utama
C   Aktifkan warna
S   Simpan data
Q   Keluar

Command >> S

Data disimpan di config.php
Tekan enter untuk melanjutkan... <-- tekan beberapa tombol


Konfigurasi SquirrelMail : Baca: config.php (1.4.0 )
-------------------------------------------------------- ------------
Plugin
  Plugin Terpasang
    1. kompatibilitas
    2. change_sqlpass

  Plugin yang Tersedia:
    3. abook_take
    4. administrator
    5. bug_report
    6. kalender
    7. delete_move_next
    8. demo
    >    10. keberuntungan
    11. info
    12. daftar perintah
    13. mail_fetch
    14. message_details
    15. newmail
    16. sent_subfolders
    17. spamcop
    18. 
spell
    20. terjemahkan

R   Kembali ke Menu Utama
C   Aktifkan warna
S   Simpan data
Q   Keluar

Perintah>> <-- T

Sekarang Anda dapat mengetikkan http://server1.example.com/squirrelmail atau http://192.168.0.100/squirrelmail di browser Anda untuk mengakses SquirrelMail.

Masuk dengan alamat email Anda (misalnya [dilindungi email]) dan sandi Anda:

Anda akan menemukan email selamat datang di kotak masuk Anda:

Untuk mengubah kata sandi Anda, buka Opsi lalu pilih Ubah Kata Sandi:

Ketikkan kata sandi Anda saat ini dan kemudian kata sandi baru Anda dua kali:

SquirrelMail akan memberi tahu Anda jika kata sandi telah berhasil diubah:

16 Referensi

  • Tutorial:Layanan Email ala ISP dengan Debian-Sarge dan Postfix 2.1:http://workaround.org/articles/ispmail-sarge/
  • Postfix + Kuota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
  • Kata Sandi Email Dienkripsi menggunakan saslauthd:http://www.syscp.de/docs/public/contrib/cryptedmailpws

  • MTA Postfix:http://www.postfix.org/
  • Tambalan Kuota Pascaperbaikan:http://web.onda.com.br/nadal/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • SquirrelMail:http://www.squirrelmail.org/
  • Ubuntu:http://www.ubuntu.com/

Ubuntu
  1. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 14.04LTS)

  2. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 13.10)

  3. Pengguna dan Domain Virtual Dengan Sendmail

  1. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 14.04LTS

  2. Pengguna Virtual Dan Domain Dengan Postfix, Courier Dan MySQL (Ubuntu 6.10 Edgy Eft)

  3. Server surat dengan pengguna dan domain virtual menggunakan Postfix dan Dovecot pada CentOS 6 VPS

  1. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 8.04 LTS)

  2. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 8.04 LTS

  3. Pengguna dan Domain Virtual Dengan Postfix, Courier, MySQL, dan SquirrelMail (Ubuntu 8.10)