Postfix send-only SMTP

Artikel ringkas kali ini adalah bagi memasang Postfix send-only SMTP.  Kegunaan adalah untuk aplikasi laman web seperti WordPress untuk menghantar email ke Internet.

Langkah 1 – Pasang “mailutils”

Dengan menggunakan privilege ‘root’, jalankan arahan berikut:

sudo apt-get install mailutils

Contoh:

The following NEW packages will be installed:
guile-2.0-libs libgsasl7 libkyotocabinet16 libltdl7 liblzo2-2 libmailutils4 libmysqlclient18 libntlm0 libunistring0 mailutils mailutils-common mysql-common postfix ssl-cert

0 upgraded, 14 newly installed, 0 to remove and 3 not upgraded.
Need to get 5,481 kB of archives.
After this operation, 26.9 MB of additional disk space will be used.
Do you want to continue? [Y/n

Pastikan pilih “Internet Site” apabila menu berikut muncul:

 

Masukkan domain yang anda gunakan apabila diminta pada “System mail name“.

Jika mailutils telah telah dipasang, jalankan arahan:

sudo dpkg-reconfigure postfix

Bagi mendapatkan semula menu di atas.

Langkah 2 – Edit Faik Konfigurasi Postfix

Edit konfigurasi:

sudo vi /etc/postfix/main.cf

Pastikan konfigurasi adalah seperti berikut:

inet_interfaces = loopback-only

Restart service Postfix:

sudo service postfix restart

 

Langkah 3 – Uji Penghantaran Email (Postfix Send-Only SMTP)

Jalankan arahan untuk pengujian:

echo "Ujian Postfix Send-Only SMTP" | mail -s "Perkara: Ujian SMTP" nazri@example.com

Tadaa… kini anda boleh menghantar email dari server ini dengan Postfix Send-Only SMTP.

Nota: Pastikan anda suda memasang konfigurasi DNS resolver yang betul sebelum ujian dijalankan.  Sekian, Selamat maju jaya!

Pasang Mail Server Bahagian 6 – Postfix, Courier, MySQL & AfterLogic WebMail

Artikel pasang mail server pada kali ini akan membincangkan aspek pengurusan akaun pengguna email.  Kita akan bincangkan 2 perkara pengurusan iaitu menambah dan menghapus akaun pengguna.  Seperti yang terdapat dalam artikel Pasang Mail Server (Bahagian 4), kita perlu untuk memasuki pangkalan data MySQL untuk menambah dan menghapus pengguna.  Artikel kali ini akan membantu memudahkan pengurusan ini dengan atursara ringkas yang dibangunkan dengan PHP.

AMARAN:  Aturcara PHP yang dibangunkan adalah sangat ringkas dan tidak selamat dari serangan laman web seperti SQL injection dan sebagainya. Maklumlah programmer amatur copy dan paste sana sini.  Pastikan anda tidak mendedahkan program ini di laman web tanpa sebarang perlindungan!  Sesiapa yang boleh menjadikan ianya lebih kacak dan selamat dialu-alukan…

18. Bina Direktori

Jika folder laman web anda adalah di /var/www/html:

cd /var/www/html
mkdir mailadmin

19. Konfigurasi “Basic HTTP Auth”

Pastikan dalam konfigurasi website anda (contoh di: /etc/apache2/sites-available/00-default.conf) mempunyai direktif seperti berikut:

Edit fail:

vi /etc/apache2/sites-available/00-default.conf

Kandungan:

[...]

 DocumentRoot /var/www/
 <Directory /var/www/>
    Options None
    AllowOverride All
    Order allow,deny
    Allow from all
 </Directory>

[...]

Masuk ke folder mailadmin:

cd /var/www/html/mailadmin

Bina fail .htaccess

vi .htaccess

Masukkan kandungan berikut:

AuthUserFile /var/www/html/mailadmin/.htpasswd
AuthName "Please Enter Password"
AuthType Basic
Require valid-user

Bina akaun pengguna dan password:

 htpasswd -c .htpasswd nazri

Tukar dengan nama pengguna yang anda mahu dan password yang KUKUH.

Tukar permission:

chmod 744 .htpasswd
chmod 744 .htaccess

Restart apache web server:

service apache2 restart

20. Menambah Pengguna

Aturcara ringkas ini akan memasukkan akaun pengguna email ke pangkalan data dan menghantar welcome email bagi membina Maidir secara automatik.

Bina aturcara ringkas berikut di dalam direktori yang sama (/var/www/mailadmin):

cd /var/www/html/mailadmin
vi add.html

Masukkan:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add User</title>
</head>
<body>
<form action="insert.php" method="post">
 <p>
 <label for="email">Email:</label>
 <input type="text" name="email" id="email">
 </p>
 <p>
 <label for="password">Password:</label>
 <input type="text" name="password" id="password">
 </p>
 <input type="submit" value="Add User">
</form>
<BR>
Click <a href="http://mail.datalead.com.my/mailadmin"> here </a> for main menu.
</body>
</html>

Tukar URL berwarna merah dengan alamat server anda.

Bina fail PHP untuk tambah pengguna:

vi insert.php

Masukkan kod berikut dan tukar maklumat yang berwarna merah:

<?php
/* Tambah akaun pengguna ke pangkalan data MySQL*/

$link = mysqli_connect("localhost", "mail", "password_mail_anda", "mail_db");

// Check connection
if($link === false){
 die("ERROR: Could not connect. " . mysqli_connect_error());
}

// Escape user inputs for security

$email = mysqli_real_escape_string($link, $_POST['email']);
$password = mysqli_real_escape_string($link, $_POST['password']);

// Tukar kuota mengikut cita rasa anda
$quota = 500485760;

// tambah ke pangkalan data
$sql = "INSERT INTO users (email, password, quota) VALUES ('$email', ENCRYPT('$password'), '$quota')";

if(mysqli_query($link, $sql)){
 echo "Records added successfully. <br>";
 $to = $email;
 $subject = "Email Account Activation";
 $message = "Hi $email, Welcome to DATALEAD MAILBOX!";
 $header = "From:postmaster@datalead.com.my \r\n";
 
 $retval = mail ($to,$subject,$message,$header);
 if( $retval == true )
 {
 echo "Message sent successfully...<br>";
 echo "Click <a href='http://mail.datalead.com.my/mailadmin'> here </a> for
 main menu. <br> ";
 }
 else
 {
 echo "Message could not be sent...";
 echo "Click <a href='http://mail.datalead.com.my/mailadmin'> here </a> for
 main menu. <br> ";
 }
 } else{
 echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
 }

// close connection
mysqli_close($link);
?>

21. Papar dan Hapus Pengguna

Bina fail “delete.php” dalam direktori yang sama:

vi delete.php

Masukkan kandungan berikut dan tukar maklumat yang berkenaan:

<html>
<head>
<title>Delete User</title>
</head>
<body>
<?php
$servername = "localhost";
$username = "mail";
$password = "password_mail_anda";
$dbname = "mail_db";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
 die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT email, password, quota FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {

// output data of each row
 while($row = mysqli_fetch_assoc($result)) {
 echo "Email: " . $row["email"] . "<br>";
 }
} else {
 echo "0 results";
}
echo "<br>";

mysqli_close($conn);
?>

<?php
if(isset($_POST['delete']))
{
$dbhost = 'localhost:3036';
$dbuser = 'mail';
$dbpass = 'password_mail_anda';
$db = 'mail';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}

$email = $_POST['email'];
$sql = "DELETE FROM users ".
 "WHERE email = '$email'" ;

mysql_select_db($db);
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
 die('Could not delete data: ' . mysql_error());
}
echo "Email $email deleted successfully. <br>";
echo "Don't forget to delete user mailbox at /home/vmail/datalead.com.my manually. <br>";
echo "Click <a href='http://mail.datalead.com.my/mailadmin'> here </a> for main menu. <br> ";

mysql_close($conn);
}
else
{
?>

<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="100">Delete Email</td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td width="100"> </td>
<td> </td>
</tr>
<tr>
<td width="100"> </td>
<td>
<input name="delete" type="submit" id="delete" value="Delete">
</td>
</tr>
</table>
</form>
<BR>
Click <a href="http://mail.datalead.com.my/mailadmin"> here </a> for main menu.

</body>
</html>

Seperti di dalam aturcara di atas, kita perlu menghapuskan Maildir yang berkaitan dengan akaun pengguna di atas secara manual.

22. Bina Laman Utama

Edit fail “index.html” dalam direktori yang sama:

vi index.html

Masukkan kod HTML ringkas dan malas berikut (hehehe):

<A HREF='add.html'>ADD</A><BR>
<A HREF='delete.php'>DELETE</A><BR>

Tukar kesemua permission dan fail ownership:

cd /var/www/html
chown www-data.www-data mailadmin -R
chmod 755 mailadmin -R

Kini anda boleh layari atrucara ringkas melalui alamat http://mail.datalead.com.my/mailadmin.  Masukkan akaun pengguna dan kata laluan yang dibina dalam langkah (19).  Terimalah program ringkas dan malas mailadmin berikut:

Laman utama:

 

 

Tambah pengguna:

 

Papar dan hapus pengguna:

 

23. Penutup

Sekian sahaja artikel bahagian ke-6 siri pasang mail server. Tuan-tuan yang mempunyai skill yang tinggi dalam PHP programming dialu-alukan untuk menambah baik program di atas :-).  Dengan ini tamatlah keseluruhan siri artikel untuk pasang email server.  Selamat mencuba dan jumpa lagi pada lain-lain artikel pada masa hadapan.

 

____________________________________________________

BAHAGIAN 1 | BAHAGIAN 2 | BAHAGIAN 3 | BAHAGIAN 4 | BAHAGIAN 5 | BAHAGIAN 6

 

Pasang Mail Server Bahagian 5 – Postfix, Courier, MySQL & AfterLogic WebMail

Artikel pasang mail server bahagian 5 pula akan menyentuh pemasangan AfterLogic WebMail untuk kemudahan bersama.  Jika anda lebih selesa menggunakan Squirrel, boleh rujuk artikel asal dalam bahasa Inggeris.  Versi yang digunakan adalah versi percuma iaitu WebMail Lite PHP (http://www.afterlogic.org/webmail-lite).

15. Pasang AfterLogic WebMail

Edit fail /etc/sources.list

vi /etc/sources.list

Dan masukkan kandungan di bawah sekali:

deb http://apt.afterlogic.com ./

Pasang PGP public key berikut:

wget -qO – http://apt.afterlogic.com/pubkey.asc | apt-key add –

Kemas kini APT cache:

apt-get update

Sekarang kita boleh pasang pakej perisian AfterLogic webmail:

apt-get install afterlogic-webmail

Seterusnya jalankan arahan:

afterlogic install

Semasa pemasangan, anda akan diminta untuk memasukkan kata laluan “root” bagi MySQL.

Fail-fail bagi AfterLogic webmail PHP lite ini akan disimpan di direktori “/usr/share/afterlogic”.

16. Pengunaan AfterLogic Webmail

Kini anda boleh mencapai webmail yang dipasang di:

  • http://mail.datalead.com.my/afterlogic
  • http://mail.datalead.com.my/afterlogic/adminpanel

Akaun peyenggara bagi admin panel ini adalah “mailadm” dengan kata laluan “12345“. SILA TUKAR PASSWORD INI SEKARANG!

Gunakan akaun yang anda bina semasa pemasangan iaitu alamat email sebagai akaun pengguna dan password yang anda set sebelum ini:

 

Tadaaa dah boleh masuk webmail anda:

 

 

Untuk menghantar email, klik butang atau menu “New Message“:

 

 

Seterusnya, untuk tukar skin dan berapa baris email yang hendak dipaparkan, klik menu “Settings -> Common“:

 

Untuk set nama anda dan setting server, gunakan menu “Settings -> Email Account“.  Lihat contoh di bawah:

 

Bagi membina signature pula “Settings -> Email Account -> Signature“:

 

Sila godek-godek untuk kepuasan maksima 😀

17.  Tambah Fungsi Tukar Katalaluan

Secara default, AfterLogic webmail PHP lite yang dipasang tidak mempunyai fungsi bagi pengguna menukar kata laluan.

Mari kita tambah fungsi ini:

cd /usr/share/afterlogic/data/plugins
mkdir ispconfig-change-password
cd ispconfig-change-password

Bina fail index.php di dalam direktori yang kita baru bina:

vi index.php

Masukkan kandungan berikut, tukar password yang diwarnakan merah dengan password_mail_anda:

<?php

/*
 *
 * Distributed under the terms of the license described in COPYING
 *
 */

class_exists('CApi') or die();

CApi::Inc('common.plugins.change-password');

class CCustomChangePasswordPlugin extends AApiChangePasswordPlugin
{
 /**
 * @param CApiPluginManager $oPluginManager
 */
 public function __construct(CApiPluginManager $oPluginManager)
 {
 parent::__construct('1.0', $oPluginManager);
 }

/**
 * @param CAccount $oAccount
 * @return bool
 */
 public function validateIfAccountCanChangePassword($oAccount)
 {
 $bResult = false;
 if ($oAccount instanceof CAccount)
 {
 $bResult = true;
 }
 
 return $bResult;
 }

/**
 * @param CAccount $oAccount
 * @return bool
 */
 public function ChangePasswordProcess($oAccount)
 {
 $bResult = false;
 if (0 < strlen($oAccount->PreviousMailPassword) && $oAccount->PreviousMailPassword !== $oAccount->IncomingMailPassword)
 {
    $aISPConfig = ["host" => CApi::GetConf('plugins.ispconfig-change-password.config.host', '127.0.0.1'),
    "dbuser" => CApi::GetConf('plugins.ispconfig-change-password.config.dbuser', 'mail'),
    "dbpassword" => CApi::GetConf('plugins.ispconfig-change-password.config.dbpassword', 'password_mail_anda'),
    "dbname" => CApi::GetConf('plugins.ispconfig-change-password.config.dbname', 'mail_db'),];

//connect to ispconfig database
 $mysqlcon=mysqli_connect($aISPConfig['host'],$aISPConfig['dbuser'],$aISPConfig['dbpassword'],$aISPConfig['dbname']);

if($mysqlcon){
 //check old pass is correct
 $email = $oAccount->IncomingMailLogin;
 $password = $oAccount->PreviousMailPassword;
 $new_password = $oAccount->IncomingMailPassword;
 $sql = "SELECT * FROM users WHERE email='$email' AND password=ENCRYPT('$password');";
 $result = mysqli_query($mysqlcon,$sql);

 if(!$result){
   throw new CApiManagerException(Errs::UserManager_AccountNewPasswordUpdateError);
 } else {
         if($password=$new_password) {
                                       $sql = "UPDATE users SET password=ENCRYPT('$new_password') WHERE email='$email'";
                                       $update = mysqli_query($mysqlcon,$sql);
                                       if (!$update){
                                            //password update error
                                            throw new CApiManagerException(Errs::UserManager_AccountNewPasswordUpdateError);
                                       }
                                      }
 else {
 //old and new passwords dont match
 throw new CApiManagerException(Errs::UserManager_AccountOldPasswordNotCorrect);
      }
 }

 //disconnect from database
 mysqli_close($mysqlcon);

 }else{
 //could not connect to database
 throw new CApiManagerException(Errs::UserManager_AccountNewPasswordUpdateError);
 }
}

return $bResult;
 }
}
return new CCustomChangePasswordPlugin($this);

Edit konfigurasi di /usr/share/afterlogic/data/settings dan edit fail config.php:

cd /usr/share/afterlogic/data/settings
vi config.php

Pastikan kandungan fail seperti berikut (tambah baris berwarna merah):

<?php

 $aSieveDomains = array('imap.domain1.com', 'imap.domain2.com');
 return array(
 'sieve' => false,
 'sieve.autoresponder' => true,
 'sieve.forward' => true,
 'sieve.filters' => true,
 'sieve.config.host' => '',
 'sieve.config.port' => 2000,
 'sieve.config.filters-folder-charset' => 'utf-8', // [utf7-imap, utf-8]
 'sieve.config.domains' => $aSieveDomains,
 'plugins.ispconfig-change-password' => true,
  'links.importing-contacts' => 'http://www.afterlogic.com/wiki/Importing_contacts_(WebMail_Lite)'
);

Restart Apache web server anda:

service apache2 restart

Kini anda boleh tukar password melalui menu “Settings -> Email Account” :

 

Tekan butang change password:

 

 

Kini anda boleh menukar kata laluan dengan memasukkan kata laluan lama, dan kata laluan baru yang hendak anda gunakan.  Sekian sahaja untuk artikel pasang mail server bahagian 5. Artikel pasang mail server berikutnya pada bahagian ke 6, kita akan menyentuh secara ringkas untuk bagaimana kita boleh membuat program ringkas menggunakan PHP bagi membina atau menghapus akaun pengguna pada pangkalan data bagi email server ini. Tunggu….

 

____________________________________________________

BAHAGIAN 1 | BAHAGIAN 2 | BAHAGIAN 3 | BAHAGIAN 4 | BAHAGIAN 5 | BAHAGIAN 6

 

Pasang Mail Server Bahagian 3 – Postfix, Courier, MySQL & AfterLogic WebMail

Kita teruskan artikel pasang mail server bahagian 3 bagi pemasangan pakej perisian Postfix, Courier, MySQL dan AfterLogic WebMail-Lite. Artikel pasang mail server bahagian 3 ini akan menyentuh pemasangan perlindungan keselamatan anti spam, anti virus dan kuota bagi sistem mail.

 

9. Pasang Amavisd, Spam Assassin dan ClamAV

Pasang pakej perisian amavisd-new, spamassassin dan clamav, jalankan arahan:

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

Pasang konfigurasi amavisd-new. Fail-fail konfigurasi adalah di direktori/etc/amavis/conf.d.

Pertama, aktifkan ClamAV dan SpamAssassin di /etc/amavis/conf.d/15-content_filter_mode dengan membuang komen pada baris yang mempunyai direktif  “@bypass_virus_checks_maps” dan “@bypass_spam_checks_maps”:

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

Fail tersebut hendaklah kelihatan seperti berikut:

use strict;

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

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


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


#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


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

1;  # ensure a defined return

Kedua, lihat konfigurasi spam dan direktif spam-/virus-mails di /etc/amavis/conf.d/20-debian_defaults.

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

Perhatikan konfigurasi sama seperti di bawah ini:

[...]
$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)
[...]

Ketiga, edit fail etc/amavis/conf.d/50-user dan tambah baris $pax=’pax’; ditengah-tengah fail:

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

Kandungan fail:

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

Jalankan arahan untuk tambah akaun pengguna clamav ke dalam amavis group.  Restart service amavisd-new dan ClamAV:

adduser clamav amavis
service amavis restart
service clamav-freshclam restart
service clamav-daemon restart

Jalankan konfigurasi Postfix untuk pipe email yang masuk ke amavisd-new:

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

Tambah baris berikut ke /etc/postfix/master.cf:

vi /etc/postfix/master.cf

Kandungan:

[...]
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

Kemudian restart Postfix:

service postfix restart

Jalankan arahan:

netstat -tap

Kini anda dapat lihat Postfix (master) dihidupkan melalui port 25 (smtp) dan 10025, dan amavisd-new pada port 10024:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:http                  *:*                     LISTEN      12834/apache2   
tcp        0      0 *:ssh                   *:*                     LISTEN      754/sshd        
tcp        0      0 *:smtp                  *:*                     LISTEN      21165/master    
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      19982/amavisd-new (
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      21165/master    
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      30573/mysqld    
tcp6       0      0 [::]:imap2              [::]:*                  LISTEN      2005/couriertcpd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      754/sshd        
tcp6       0      0 [::]:smtp               [::]:*                  LISTEN      21165/master    
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN      2050/couriertcpd
tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN      2136/couriertcpd
tcp6       0      0 [::]:pop3               [::]:*                  LISTEN      2089/couriertcpd

 

10. Pasang Razor, Pyzor, DCC dan konfigurasi SpamAssassin

Pasang Razor dan Pyzor:

apt-get install razor pyzor

Pasang DCC:

cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z 
tar xzvf dcc-dccproc.tar.Z

Anda akan dapat versi terkini.  Dalam pemasangan yang saya jalankan, versi 1.3.154:

cd dcc-dccproc-1.3.154
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

Edit /etc/spamassassin/local.cf untuk aktifkan Razor, Pyzor dan DCC:

vi /etc/spamassassin/local.cf

Kandungan:

[...]
#dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Aktifkan DCC plugin pada SpamAssassin. Edit /etc/spamassassin/v310.pre dan buang komen pada baris loadplugin Mail::SpamAssassin::Plugin::DCC:

vi /etc/spamassassin/v310.pre

Buang komen:

[...]
# 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
[...]

Semak konfigurasi dengan arahan:

spamassassin --lint

Pastikan tiada sebarang ralat atau error message dikeluarkan.

Restart service:

service amavis restart

Kemaskini ruleset SpamAssassin:

sa-update --no-gpg

Bina cronjob untuk kemaskini ruleset:

crontab -e

Masukkan:

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

Ruleset akan dikemaskini pada setiap hari jam 4:23.

11. Pasang Notifikasi Kuota

Pasang notifikasi quota pada akaun pengguna:

cd /usr/local/sbin/
vi quota_notify

Masukkan kandungan berikut (copy+paste):

#!/usr/bin/perl -w

# Author <jps@tntmax.com>
#
# This script assumes that virtual_mailbox_base in defined
# in postfix's main.cf file. This directory is assumed to contain
# directories which themselves contain your virtual user's maildirs.
# For example:
#
# -----------/
#            |
#            |
#    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 = ('postmaster@datalead.com.my');
my $CONAME = 'DATALEAD sdn bhd';
my $COADDR = 'postmaster@datalead.com.my';
my $SUADDR = 'postmaster@datalead.com.my';
my $MAIL_REPORT = 1;
my $MAIL_WARNING = 1;

#get virtual mailbox base from postfix config
open(PCF, "< $POSTFIX_CF") or die $!;
my $mboxBase;
while (<PCF>) {
   next unless /virtual_mailbox_base\s*=\s*(.*)\s*/;
   $mboxBase = $1;
}
close(PCF);

#assume one level of subdirectories for domain names
my @domains;
opendir(DIR, $mboxBase) or die $!;
while (defined(my $name = readdir(DIR))) {
   next if $name =~ /^\.\.?$/;        #skip '.' and '..'
   next unless (-d "$mboxBase/$name");
   push(@domains, $name);
}
closedir(DIR);
#iterate through domains for username/maildirsize files
my @users;
chdir($mboxBase);
foreach my $domain (@domains) {
        opendir(DIR, $domain) or die $!;
        while (defined(my $name = readdir(DIR))) {
           next if $name =~ /^\.\.?$/;        #skip '.' and '..'
           next unless (-d "$domain/$name");
      push(@users, {"$name\@$domain" => "$mboxBase/$domain/$name"});
        }
}
closedir(DIR);

#get user quotas and percent used
my (%lusers, $report);
foreach my $href (@users) {
   foreach my $user (keys %$href) {
      my $quotafile = "$href->{$user}/maildirsize";
      next unless (-f $quotafile);
      open(QF, "< $quotafile") or die $!;
      my ($firstln, $quota, $used);
      while (<QF>) {
         my $line = $_;
              if (! $firstln) {
                 $firstln = 1;
                 die "Error: corrupt quotafile $quotafile"
                    unless ($line =~ /^(\d+)S/);
                 $quota = $1;
            last if (! $quota);
            next;
         }
         die "Error: corrupt quotafile $quotafile"
            unless ($line =~ /\s*(-?\d+)/);
         $used += $1;
      }
      close(QF);
      next if (! $used);
      my $percent = int($used / $quota * 100);
      $lusers{$user} = $percent unless not $percent;
   }
}

#send a report to the postmasters
if ($MAIL_REPORT) {
   open(MAIL, "| $MAILPROG");
   select(MAIL);
   map {print "To: $_\n"} @POSTMASTERS;
   print "From: $COADDR\n";
   print "Subject: Daily Quota Report.\n";
   print "DAILY QUOTA REPORT:\n\n";
   print "----------------------------------------------\n";
   print "| % USAGE |            ACCOUNT NAME          |\n";
   print "----------------------------------------------\n";
   foreach my $luser ( sort { $lusers{$b} <=> $lusers{$a} } keys %lusers ) {
      printf("|   %3d   | %32s |\n", $lusers{$luser}, $luser);
      print "---------------------------------------------\n";
   }
        print "\n--\n";
        print "$CONAME\n";
        close(MAIL);
}

#email a warning to people over quota
if ($MAIL_WARNING) {
        foreach my $luser (keys (%lusers)) {
           next unless $lusers{$luser} >= $WARNPERCENT;       # skip those under quota
           open(MAIL, "| $MAILPROG");
           select(MAIL);
           print "To: $luser\n";
      map {print "BCC: $_\n"} @POSTMASTERS;
           print "From: $SUADDR\n";
           print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";
           print "Reply-to: $SUADDR\n";
           print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";
           print "Once your e-mail box has exceeded your monthly storage quota\n";
      print "your monthly billing will be automatically adjusted.\n";
      print "Please consider deleting e-mail and emptying your trash folder to clear some space.\n\n";
           print "Contact <$SUADDR> for further assistance.\n\n";
           print "Thank You.\n\n";
           print "--\n";
           print "$CONAME\n";
           close(MAIL);
        }
}

Tukar alamat email postmaster dengan domain anda.  Tukar file permission untuk jadikan ia executable:

chmod 755 quota_notify

Jalankan arahan:

crontab -e

Masukkan baris berikut untuk semak kuota pengguna pada setiap hari:

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

 

Sekian.  Tunggu bahagian berikutnya untuk pasang mail server anda!

____________________________________________________

BAHAGIAN 1 | BAHAGIAN 2 | BAHAGIAN 3 | BAHAGIAN 4 | BAHAGIAN 5 | BAHAGIAN 6

 

Pasang Mail Server Bahagian 2 – Postfix, Courier, MySQL & AfterLogic WebMail

Posting kali ini adalah bagi artikel pasang mail server bahagian ke-dua (2).  Kita akan pasang mail server sendiri dengan pakej perisian Postfix, Courier, MySQL dan AfterLogic WebMail-Lite.

 

5. Konfigurasi Postfix

Pastikan konfigurasi MySQL menggunakan alamat IP 127.0.0.1, bukan “localhost”.  Bukan fail “/etc/mysql/my.conf” untuk semak:

vi /etc/mysql/my.cnf

Semak:

[...] 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 

bind-address = 127.0.0.1 

[...]

Jika anda ada membuat perubahan pada fail konfigurasi MySQL ini,  restart server:

service restart mysql

Semak mysql telah dijalankan pada alamat IP 127.0.0.1:

netstat -tap | grep mysql

Output:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      30573/mysqld

Sekarang kita akan bina konfigurasi Postfix untuk membaca rekod-rekod berkenaan dalam pangkalan data MySQL.  Jangan lupa untuk gunakan password yang anda set sebelum ini:

Konfigurasi virtual domain:

vi /etc/postfix/mysql-virtual_domains.cf

Masukkan:

user = mail
password = password_mail_anda
dbname = mail_db
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1

Konfigurasi forwarding:

vi /etc/postfix/mysql-virtual_forwardings.cf

Masukkan kandungan:

user = mail
password = password_mail_anda
dbname = mail_db
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

Konfigurasi virtual mailbox:

vi /etc/postfix/mysql-virtual_mailboxes.cf

Masukkan:

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

Konfigurasi virtual email:

vi /etc/postfix/mysql-virtual_email2email.cf

Masukkan:

user = mail
password = password_mail_anda
dbname = mail_db
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

Konfigurasi virtual transport:

vi /etc/postfix/mysql-virtual_transports.cf

Masukkan:

user = mail
password = password_mail_anda
dbname = mail_db
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1

Konfigurasi kuota:

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

Masukkan:

user = mail
password = password_mail_anda
dbname = mail_db
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1

Tukar file permission, ownership dan group:

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

Bina akaun pengguna “vmail” dengan home directory di “/home/vmail“.  Mailbox pengguna mengikut domain akan disimpan dalam direktori ini:

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

Bina konfigurasi dengan arahan-arahan berikut.  Pastikan anda tukar nama server dengan nama yang anda gunakan!

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

Bina certificate untuk protokol keselamatan TLS.  Tukar dengan maklumat yang berkaitan:

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

Masukkan:

Country Name (2 letter code) [AU]: MY
State or Province Name (full name) [Some-State]: Labu
Locality Name (eg, city) []: Negeri Sembilan
Organization Name (eg, company) [Internet Widgits Pty Ltd]: DATALEAD sdn bhd
Organizational Unit Name (eg, section) []: Tech Team
Common Name (eg, YOUR name) []: mail.datalead.com.my
Email Address []: postmaster@datalead.com.my

Jangan lupa tukar dengan settings yang berkaitan dengan mail server anda!

Tukar file permission:

chmod o= /etc/postfix/smtpd.key

6. Konfigurasi Saslauthd

Bina direktori berikut:

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

Edit fail “/etc/default/saslauthd”.

vi /etc/default/saslauthd

Set START kepada “yes” dan tukar OPTIONS=”-c -m /var/run/saslauthd” kepada OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:

#
# 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 chroot Postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Example for non-chroot Postfix users: "-c -m /var/run/saslauthd"
#
# To know if your Postfix is running chroot, check /etc/postfix/master.cf.
# If it has the line "smtp inet n - y - - smtpd" or "smtp inet n - - - - smtpd"
# then your Postfix is running in a chroot.
# If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
# running in a chroot.
#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Bina fail /etc/pam.d/smtp:

vi /etc/pam.d/smtp

Masukkan:

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

Bina fail /etc/postfix/sasl/smtpd.conf:

vi /etc/postfix/sasl/smtpd.conf

Masukkan:

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

Tambah akaun pengguna “postfix” ke group “sasl”:

adduser postfix sasl

 

Restart service:

service postfix restart
service saslauthd restart

7. Konfigurasi Courier

Edit /etc/courier/authdaemonrc:

vi /etc/courier/authdaemonrc

Set konfigurasi untuk guna MySQL:

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

Backup fail etc/courier/authmysqlrc dan kosongkan fail asal:

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

Edit fail /etc/courier/authmysqlrc:

vi /etc/courier/authmysqlrc

Isi kandungan baru:

MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD password_mail_anda
MYSQL_PORT 0
MYSQL_DATABASE mail_db
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

Buang fail berikut:

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

Tukar nama server pada fail-fail berikut:

vi /etc/courier/imapd.cnf

Tukar:

[...]
CN=mail.datalead.com.my
[...]

Dan fail ini..

vi /etc/courier/pop3d.cnf

Tukar:

[...]
CN=mail.datalead.com.my
[...]

Bina certificate baru:

mkimapdcert
mkpop3dcert

Restart service:

service courier-authdaemon restart
service courier-imap restart
service courier-imap-ssl restart
service courier-pop restart
service courier-pop-ssl restart

Uji pop3 anda untuk memastikan ianya telah berfungsi:

telnet localhost pop3

Ujian:

Trying ::1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.

 

8. Ubah fail “/etc/aliases”

Edit fail:

vi /etc/aliases

Pastikan ianya mempunyai konfigurasi berikut:

[...]
postmaster: root
root: postmaster@datalead.com.my
[...]

Jana newaliases yang baru:

newaliases

Restart service:

service postfix restart

 

Ok.  Nanti kita sambung bahagian ke-tiga (3) pula untuk pasang mail server anda!

____________________________________________________

BAHAGIAN 1 | BAHAGIAN 2 | BAHAGIAN 3 | BAHAGIAN 4 | BAHAGIAN 5 | BAHAGIAN 6

 

 

 

Pasang Mail Server Bahagian 1 – Postfix, Courier, MySQL & AfterLogic WebMail

Artikel ini akan membantu anda untuk pasang mail server sendiri pada sistem pengoperasian Linux dengan ciri-ciri berikut:

  • Pasang mail server untuk terima dan hantar mail dengan perkhidmatan asas seperti POP3, IMAP, SMTP;
  • Pasang mail server dengan virtual users dan domain (akaun pengguna dan domain disimpan di dalam pangkalan data MySQL. Anda juga boleh memasang email untuk pelbagai domain dalam satu server);
  • Ciri-ciri keselamatan seperti SSL/TLS, anti spam dan anti virus; dan
  • Capai mail melalui mail client seperti Mozilla Thunderbird, Gmail atau WebMail anda sendiri.

Artikel ini adalah berdasarkan terjemahan dari artikel asal yang diubah serba sedikit mengikut selera penulis:

https://www.howtoforge.com/virtual-users-and-domains-with-postfix-courier-mysql-and-squirrelmail-ubuntu-14.04-lts

Apa yang anda perlukan?

  • Server sendiri yang mempunyai public IP address (i.e., saya menggunakan Virtual Private Server (VPS));
  • Sistem pengoperasian Ubuntu 14.04 atau lebih terkini; dan
  • Mempunyai domain (DNS) sendiri (boleh register dengan MyNIC atau GoDaddy etc.) dan telah menghalakan MX record kepada alamat IP mail server.

Contoh pemasangan dalam artikel ini adalah terhadap nama domain: “datalead . com . my“, gantikan nama domain ini dengan nama domain server anda yang berkenaan.  Alamat email server yang digunakan adalah ” mail . datalead . com . my” dan alamat email akan menggunakan ” @ datalead. com . my“.

 

Artikel ini menggunakan format seperti berikut, arahan sistem pengoperasian Linux atau MySQL.  Anda boleh copy+paste pasa sistem pengoperasian anda:

arahan

Output arahan:

output

Input atau sebarang direktif yang anda perlu masukkan atau tukar akan diwarnakan dengan warna “merah“.

1. Persediaan Pasang Mail Server

Pastikan anda mempunyai saiz storan yang mencukupi bagi direktori “/home“.  Semua mailbox dan mail pengguna akan disimpan di sini!

Anda perlu menggunakan akaun yang mempunyai “rootprivilege untuk pasang mail server ini.  Gunakan arahan “sudo“:

sudo su

Tukar konfigurasi untuk menggunakan bash shell bagi mengantikan shell yang asal:

dpkg-reconfigure dash

Masukkan “No“:

Use dash as the default system shell (/bin/sh)?  No

Matikan fungsi “apparmour” untuk mengelakkan sebarang kesulitan semasa pemasangan:

service apparmor stop 
update-rc.d -f apparmor remove 
apt-get remove apparmor apparmor-utils

2. Pasang pakej dan konfigurasi Postfix, Courier, Saslauthd dan MySQL

Pasang pakej perisian dengan arahan:

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

Semasa pemasangan, anda perlu memasukkan input seperti berikut:

New password for the MySQL "root" user: password_root_mysql_anda
Repeat password for the MySQL "root" user: password_root_mysql_anda
Create directories for web-based administration? No
General type of mail configuration: <-- pilih Internet Site
System mail name: mail.datalead.com.my
SSL certificate required: Ok
Web server to reconfigure automatically: apache2

Nota: tukar password_root_mysql_anda dan nama mail server mail.datalead.com.my kepada yang sepatutnya!

3. Pasang patch Postfix untuk fungsi Kuota pengguna

Edit source repositories anda untuk pasang mail server:

vi /etc/apt/sources.list

Masukkan maklumat berikut:

deb http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu trusty partner


deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.canonical.com/ubuntu trusty partner

Kemaskini source repositories anda dengan arahan:

apt-get update
apt-get build-dep postfix

Jalankan arahan untuk mula memasang patch:

cd /usr/src
apt-get source postfix

Pastikan versi Postfix anda seperti berikut:

postconf -d | grep mail_version

Output:

mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version

Muat turun dan pasang patch:

wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.patch

Edit fail debian/rules dan ubah direktif DEB_BUILD_HARDENING daripada 1 kepada 0:

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

Compile dan bina pakej debian (“*.deb”):

Lihat pakej debian yang telah dibina:

dpkg-buildpackage

Anda akan dapat lihat pakej postfix untuk pasang mail server dibina seperti berikut:

cd ..
ls -l

Output:

total 6824
drwxr-xr-x 18 root root    4096 Apr 30 04:28 postfix-2.11.0
-rw-r--r--  1 root root   46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r--r--  1 root root  142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r--r--  1 root root  851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r--r--  1 root root   53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch
-rw-r--r--  1 root root  267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r--r--  1 root root    1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r--r--  1 root root    3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r--r--  1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r--r--  1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz

Dalam kes sistem pengoperasian yang saya gunakan, ianya adalah seperti berikut:

drwxr-xr-x 18 root root 4096 Mar 20 10:17 postfix-2.11.0
-rw-r--r-- 1 root root 46824 Mar 20 10:17 postfix-cdb_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 142754 Mar 20 10:17 postfix-dev_2.11.0-1ubuntu1_all.deb
-rw-r--r-- 1 root root 852186 Mar 20 10:17 postfix-doc_2.11.0-1ubuntu1_all.deb
-rw-r--r-- 1 root root 53922 Mar 20 10:17 postfix-ldap_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 48568 Mar 20 10:17 postfix-mysql_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 48662 Mar 20 10:17 postfix-pcre_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 48396 Mar 20 10:17 postfix-pgsql_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r--r-- 1 root root 263550 Mar 20 10:16 postfix_2.11.0-1ubuntu1.diff.gz
-rw-r--r-- 1 root root 1550 Mar 20 10:16 postfix_2.11.0-1ubuntu1.dsc
-rw-r--r-- 1 root root 3752 Mar 20 10:17 postfix_2.11.0-1ubuntu1_amd64.changes
-rw-r--r-- 1 root root 1327564 Mar 20 10:17 postfix_2.11.0-1ubuntu1_amd64.deb
-rw-r--r-- 1 root root 4034741 Feb 12 2014 postfix_2.11.0.orig.tar.gz

Pasang pakej Postfix anda yang baru (postfix dan postfix-mysql):

 dpkg -i postfix_2.11.0-1ubuntu1_amd64.deb postfix-mysql_2.11.0-1ubuntu1_amd64.deb

4. Bina pangkalan data untuk mail server

Bina pangkalan data “mail_db”:

mysqladmin -u root -p create mail_db

Anda akan diminta untuk memasukkan password “root”:

Enter Password: password_root_mysql_anda

Jalankan sambungan ke MySQL & masukkan kata laluan sama seperti sebelum ini:

mysql -u root -p

 

Bina akaun pengguna untuk pangkalan data ini. Pastikan anda tidak menggunakan password yang sama dengan ‘password_root_mysql_anda’:

mysql> create user 'mail'@'localhost' identified by 'password_mail_anda';

Berikan privilege untuk capai pangkalan data:

mysql> grant all on mail_db.* to 'mail'@'localhost';

Flush privilege:

mysql> flush privileges;

Pilih pangkalan data yang baru kita bina:

mysql> use mail_db;

Bina table bagi pangkalan data.

Table: domains untuk simpan rekod domain yang hendak digunakan seperti “datalead.com.my” atau “example.com”

mysql> CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;

Table: forwardings untuk simpan maklumat email yang hendak kita forward seperti “sales@datalead.com.my” ke “ali@datalead.com.my”

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

Table: users untuk simpan maklumat akaun pengguna iaitu “user@datalead.com.my”, kata laluan dan kuota

mysql> CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;

Table: transport, optional untuk forward ke mail server lain.  Tidak digunakan dalam artikel ini.

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

Keluar dari pangkalan data MySQL:

mysql> quit;

Sekian untuk bahagian pertama untuk pasang mail server.  Nantikan bahagian ke dua (2) pada artikel berikutnya. Selamat mencuba!

____________________________________________________

BAHAGIAN 1 | BAHAGIAN 2 | BAHAGIAN 3 | BAHAGIAN 4 | BAHAGIAN 5 | BAHAGIAN 6