Postfix 電子郵件系統精要

Postfix 電子郵件系統精要php

做者:田逸([email]sery@163.com[/email])  from [url]http://www.51cto.com/art/200710/57530.htm[/url]css

 

配置一個postfix郵件系統,遠比我先前的想象複雜。此次共配置2個postfix系統,花了很多精力,其間也經歷很多麻煩,還好,最後都作成了!在配置過程當中,參考了《postfix權威指南》和網上其餘人寫的文章,但在實際的配置中,徹底按照這些文檔仍是不易順利完成。如今此行文披露我作這個事情的所有過程,但願對你們的工做有所幫助。html

◆運行環境node

操做系統是centos 5,其下載地址爲[url]www.centos.org[/url],它是redhat as 5最佳的替代品(緣由:開源且免費下載);postfix使用的版本是postfix-2.2.10.tar.gz,postfix([url]www.postfix.org[/url])當前的穩定版本是2.4,因爲2.4不支持SASL,因此我選了老一點的版本。其餘所需的軟件在下表列出:mysql

名稱 linux

用途ios

下載地址web

Apache (httpd-正則表達式

Web方式管理郵件sql

[url]www.apache.org[/url]

Php (php-)

Php 解釋器,與apache一塊兒使用

[url]www.php.org[/url]

Mysql (mysql-)

用數據庫存儲用戶信息

[url]www.mysql.com[/url]

Postfixadminpostfix-

郵件賬號後臺web管理工具

[url]http://sourceforge.net/projects/postfixadmin/[/url]

SASLcyrus-sasl-.tar.gz

驗證方法

[url]http://ftp.andrew.cmu.edu/pub/cyrus-mail/[/url]

Authlib(courier-authlib-.tar.bz2)

SASL一塊兒作驗證

[url]http://www.courier-mta.org/download.php[/url]

Postfix

郵件系統主程序

[url]http://www.postfix.org[/url]

Courier-imap (courier-imap-.tar.bz2)

Pop3IMAP服務

[url]http://www.courier-mta.org/[/url]

Perl (perl-)

解釋器

[url]http://www.cpan.org[/url]

Maildrop (maildrop-.tar.bz2)

郵件投遞代理,直觀的講就是把收到的郵件轉發到用戶的郵箱目錄

[url]http://www.courier-mta.org/[/url]

Clamav clamav-0.91.2.tar.gz

殺毒軟件

[url]http://www.clamav.org/[/url]

amavisd-newamavisd-new-.tar.gz

掃描郵件病毒

[url]http://www.ijs.si/software/amavisd[/url]

SpamassassinSpamAssassin

防垃圾郵件

[url]http://spamassassin.apache.org/[/url]

Pcre pcre-7.2.tar.bz2

安裝Imap須要-- Perl兼容正則表達式

[url]http://www.pcre.org[/url]

Extmail (extmail-.tar.gz)

webmail

[url]http://www.extmail.org[/url]

 

◆準備工做

一、下載所需的軟件:照上面給出的地址找到下載URL,而後用wget下載。因爲服務器通常不安裝 xwindow這樣的桌面環境,那怎樣知道下載文件的url呢?用windows呢,經過securecrt這樣的ssh工具鏈接和管理遠程linux服務器,這樣就很容易辦到了。在實際的工做中,我習慣把文件下載到/root目錄,緣由是普通用戶看不見我下載的東西。

圖 1

二、清理系統:無論你喜不喜歡,安裝系統時sendmail這個郵件服務軟件已經安裝上去了,但是一山不容二虎,既然咱們選定了功能強大的postfix,那麼sendmail就一邊歇着吧。運行命令 rpm -e -nodeps sendmail 就達到這個目的了。第2個須要卸載的軟件是SASL,爲何要卸載它呢?由於系統自帶的版本不太容易與authlib正常配合,因此須要把它刪除掉。第3 個要刪除的是perl.本打算用系統自帶的perl,但是在執行命令 perl -MCPAN -e  shell時竟然出現"segment fault",致使不少功能不能使用,看來也只好刪了重裝一個。下面總結一下這個過程:

1SASL

1)列出包

rpm -qa | grep sasl

cyrus-sasl--5.EL4

cyrus-sasl-gssapi--5.EL4

cyrus-sasl-devel--5.EL4

cyrus-sasl-ntlm--5.EL4

cyrus-sasl-md5--5.EL4

cyrus-sasl-sql--5.EL4

cyrus-sasl-plain--5.EL4

2)刪除包

rpm –e –nodeps cyrus-sasl--5.EL4  cyrus-sasl-gssapi--5.EL4  cyrus-sasl-devel--5.EL4  //把上面查查來的所有列在這後面全卸載掉。nodeps前面是兩」-「!

而後進目錄/usr/lib查一下 ls –al /usr/lib | grep sasl 應該沒有目錄saslsasl2了。

2Perl

1)列出包

rpm -qa | grep perl

perl-DateManip-3

perl-XML-Encoding-1.01-26

perl-LDAP-0.31-5

perl-XML-LibXML-Common-0.13-7

groff-perl-.1-3

openssl-perl--43.1

…………(省略若干)

perl-suidperl--12.1.1

2)刪除包

rpm –e –nodeps perl-DateManip-3   //照上面的例子刪除因此的包。因爲包太多,用一個//rpm命令後面帶的參數太長,建議一個一個收拾。注:用yum remove perl刪除更方便

執行完刪除命令後,再運行命令perl –v,若是出現「-bash: perl: command not found」則代表已經把perl清理掉了。

三、建立郵件系統運行時所需的用戶和組:建立用戶和組毫不僅僅是爲了練習userad和groupadd這兩個命令,由於安全方面的緣由,一些軟件不能以root用戶來運行,甚至在安裝過程當中,若是沒有爲該軟件預先建立用戶,安裝將不能進行下去,所以,咱們在這裏先建立這些運行postfix系統所需的用戶和組。對centos或redhat等發行版而言,用命令useradd建立用戶時也就建立了一個同名的組,而另一些linux發行版(如debian)或unix(如solaris 10),建立用戶時並不會同時建立同名的組,這須要手動執行命令單首創建所需的組。下面我用表格的方式列出postfix系統所須要建立的用戶及組的狀況:

用戶名

組名

做用

備註

mysql

Mysql

數據庫mysql運行用戶

vmail

Vmail

Postfix虛擬郵件賬號所使用的用戶及組

uid,gid:1001,1001

postfix

Postfix

Postfix主程序使用的賬號和組

Postdrop

Postfix  setgid_group

setgid_group=postdrop

amavis

Amavis

郵件掃描

clamav

Clamav

病毒掃描

這裏有2個值得注意的地方,它們是vmail用戶、組及postdrop組。在postfix郵件系統中,有好幾個程序是以vmail來運行的(這些狀況將在後面逐個說明);postdrop這個組,我看了不少人寫的文檔,無一例外的都有建立這個組的操做,但沒有任何人說明這個組是幹什麼用的,給人很突兀的感受,所以我在這裏特別把它列出來了-它的做用是setgid_group-在postfix的主配置文件main.cf裏標明瞭的。

[root@mail ~]# grep postdrop /etc/postfix/main.cf

setgid_group = postdrop

 

◆安裝apache,mysql和php

一、apache

tar zxvf httpd-2.2.0.tar.gz
cd httpd-2.2.0
./configure -prefix=/usr/local/apache -enable-so //選項prefix,enanle前面是兩個"-"
make
make install

上述步驟執行完畢後,將生成目錄/usr/local/apache,進入這個目錄檢查一下,看相關的文件和目錄是否存在?下圖是一個正確安裝apache後的目錄結構:

圖 2

執行命令 /usr/local/apache/bin/httpd -l檢查編譯進來的模塊有哪些。最主要的是mod_so模塊。即下面最後一個mod_so.c。這樣作的目的是爲了以模塊方式加載php.如今咱們先不忙着配置apache,等到後面再作這個工做。

二、mysql

tar zxvf mysql-5.0.41.tar.gz
cd mysql-5.0.41
./configure -prefix=/usr/local/mysql
make,make install     //安裝完成

useradd mysql
cp support-files/my-medium.cnf  /etc/my.cnf
cd /usr/local/mysql
/usr/local/mysql/bin/mysql_install_db  --user=mysql //初始化數據庫
chown -R root .
chown -R mysql var
chgrp -R mysql .

echo "/usr/local/mysql/lib/mysql">>/etc/ld.so.conf

ldconfig

echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile

source /etc/profile

紅色字體這幾行命令若是不在此處執行的話,之後在安裝courier-authlib將出現很多麻煩,切記!!設置mysql路徑的目的是未來須要使用mysql-config文件.

 

三、php

cd         //進/roor目錄
tar zxvf php-5.2.3.tar.gz
cd php-5.2.3

./configure -prefix=/usr/local/php -with-apxs2=/usr/local/apache/bin/apxs -with-mysql=/usr/local/mysql  //若是不先安裝mysql,這一步將不能進行下去

make;make install

cp  php.ini-dist /usr/local/php/lib/php.ini

在配置過程當中,除了指定安裝目錄外,還有-with-apxs2和-with-mysql這兩個選項。-with-apxs2的做用是與 apache的工具apxs配合,產生模塊文件到目錄/usr/local/apache/modules/,同時在apache的配置文件中寫入一行 "LoadModule php5_module        modules/libphp5.so";

[root@myest modules]# ll

total 12212

-rw-r--r--  1 root root     8873 Jul 30 14:55 httpd.exp

-rwxr-xr-x  1 root root 12473318 Jul 31 09:29 libphp5.so

選項-with-mysql的做用很是重要,若是不加這個,之後在使用web管理工具postfixadmin時將出現不能鏈接數據庫的錯誤。接着咱們須要把php與apache整合在一塊兒,這個過程很簡單,因爲在安裝php時已經完成了一部分工做,接下來只要在apache的配置文件 httpd.conf加上"AddType application/x-httpd-php .php"這麼一行就好了(注意:.php前面有一個空格)。在目錄/usr/local/apache/htdocs下建立一個最簡單的php測試文件,其內容爲:

vi test.php

<?


phpinfo();

?>

檢查一下apache配置文件是否正確(/usr/local/apache/bin/apachectl -t),輸出"Syntax OK"後就能夠啓動apache服務(/usr/local/apache/bin/apachectl start)。在別的機器的瀏覽器輸入咱們配置的這個服務器的url,正常的話,將獲得相似下圖的頁面:

圖 3

上面幾個軟件的安裝相對來講仍是比較容易操做的,這裏我全是用GNU源碼定製安裝,這相對於2進制包的安裝方式而已,有幾個好處:①軟件的相互依賴性較小(安裝過rpm包的人對這個應該有深入的認識)。②跨平臺。這樣的安裝方式適用各類unix/linux系統。③維護方便。使用了選項- prefix指定安裝目錄,全部的文件目錄都集中在這個安裝目錄裏,維護起來很是方便。所以,在這裏強烈推薦你們適用GNU源碼方式安裝。

◆安裝和配置SASL、Authlib

最好先安裝courier-authlib。爲何呢?由於後面配置 SASL驗證smtp時須要authlib的socket路徑。

一、安裝和配置courier-authlib

1)安裝

tar jxvf courier-authlib-0.59.3.tar.bz2
cd courier-authlib-0.59.3
./configure --with-redhat --with-authmysql=yes --with-mailuser=vmail\ --with-mailgroup=vmail --with-mysql-libs=/usr/local/mysql/lib/mysql\ --with-mysql-includes=/usr/local/mysql/include/mysql\
--prefix=/usr/local/authlib --without-stdheaderdir
make
make install
make install-configure

通常狀況下,anthlib的安裝應該是容易完成的。安裝完成後,咱們先找出配置文件中authdaemonvar的設置,這個值是幹什麼用的呢?它是後面SASL驗證SMTP所必須的,所以須要先把它找出來,以便後面的配置可以準確無誤。關於這個問題的教訓,在配置sasl的時候再作說明。在個人安裝中,authdaemonvar的設置以下:

[root@mail ~]# grep "authdaemonvar" /usr/local/authlib/etc/authlib/authdaemonrc

##NAME: authdaemonvar:2

# authdaemonvar is here, but is not used directly by authdaemond.  It's

authdaemonvar=/usr/local/authlib/var/spool/authdaemon

(2)配置authlib.在目錄/usr/local/authlib/etc/authlib中,修改文件authdaemonrc及authmysqlrc。

vi /usr/local/authlib/etc/authlib/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
DEBUG_LOGIN=2

修改上面3項,其餘的項保持不便。這個修改前2行表示用mysql認證模塊;把DEBUG_LOGIN的值有默認的「0」改爲「2」的用意是運行postfix時有更多的信息輸出,經過生成的日誌以幫助排錯。

vi /usr/local/authlib/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix

MYSQL_DATABASE postfix

MYSQL_SOCKET /tmp/mysql.sock
MYSQL_USER_TABLE mailbox
#MYSQL_CRYPT_PWFIELD password
MYSQL_CLEAR_PWFIELD password

DEFAULT_DOMAIN sery.com
MYSQL_UID_FIELD '1001'
MYSQL_GID_FIELD '1001'

MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/var/mailbox/'

MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD concat(quota,’S’)
MYSQL_WHERE_CLAUSE active='1'

照上面的格式修改,這是比較容易出錯的地方,要特別當心。我曾經把MYSQL_USER_TABLE mailbox這一項的mailbox寫成mailbov致使sasl驗證一直無法經過!特別注意MYSQL_UID_FIELDMYSQL_GID_FIELD字段的值,這裏是‘1001’,也能夠是其它的,但必定要與vmail用戶及組相一致(id vmail能夠得出這2者的值)

二、安裝和配置SASL.

(1)安裝

tar zxvf cyrus-sasl-2.1.21.tar.gz
cd cyrus-sasl-2.1.21
./configure  --disable-anon -enable-plain --enable-login  --enable-sql --with-mysql=/usr/local/mysql  --with-mysql-includes=/usr/local/mysql/include/mysql  --with-mysql-libs=/usr/local/mysql/lib/mysql  --with-authdaemond
make
make install

若是在編譯過程(make)出現錯誤,如「client.c:64: error: static declaration of 'global_callbacks' follows non-static declaration saslint.h:112…」,須要加一個補丁程序,而後再執行編譯過程。補充:若是使用cyrus-sasl-2.1.21這個版本,則不會出現這個問題.

用vi在當前位置建立補丁文件,起名爲sasl.patch,其內容包括:

--- cyrus-sasl-/lib/client.c~     2003-11-11 11:26:06.000000000 -0500

+++ cyrus-sasl-/lib/client.c      2005-05-31 22:34:14.000000000 -0400

@@ -61,7 +61,7 @@

 static cmech_list_t *cmechlist; /* global var which holds the list */

-static sasl_global_callbacks_t global_callbacks;

+sasl_global_callbacks_t global_callbacks;

 static int _sasl_client_active = 0;


ln -s /usr/local/lib/sasl2 /usr/lib/sasl2  //sasl的安裝目錄是/usr/local/lib/sasl
echo "/usr/local/lib" >> /etc/ld.so.conf  //指定動態鏈接庫的位置
ldconfig                   //共享動態連接庫生效

(2) 配置

建立文件 /usr/local/lib/sasl2/smtpd.conf,並加入以下內容:

pwcheck_method: authdaemond

mech_list: PLAIN LOGIN

log_level: 3

authdaemond_path: /usr/local/authlib/var/spool/authdaemon/socket

最後一行authdaemond_paeth的設置來自anthlib 的配置文件authlibdaemonrc,千萬不要把這個弄錯了,我當初的smtp驗證一直通不過就是因爲這個緣由。經過查看進程也能夠知道這個路徑(前提是authlib正常運行了),以下圖所示:

圖 4

Sasl2須要使用文件/usr/local/authlib/var/spool/authdaemon/socket,但默認狀況下,其屬性是744,須要把它加上執行權限,以便文件屬組(主)而外的其它用戶能夠執行。運行命令

chmod +x /usr/local/authlib/var/spool/authdaemon

便可,若是不這樣處理,smtp驗證無一例外會失敗的。那麼這裏所說的其它用戶是什麼用戶呢?答:postfix。


◆安裝和配置postfixadmin

Postfixadmin是postfix郵件系統的web管理工具,有了這個工具,管理和維護用戶賬號就方便多了。假如不用工具,就須要手動修改數據庫,誰願意這樣作?安裝postfixadmin比較簡單,解壓包postfixadmin-2.2.11.tar.gz,而後把它移動到某個目錄下,其過程以下:

cd /root

tar zxvf postfixadmin-.tar.gz

mv postfixadmin-/var/www/postfixadmin

如今postfixadmin的目錄是/var/www/postfixadmin,爲了可以讓它按照咱們的意願工做,須要用命令 chown -R vmail:vmail /var/www/postfixadmin 更改屬主。這樣,postfixadmin的安裝就算完成了。接着咱們來配置它,這個過程要複雜一點,我在這裏分幾步進行。

(1)修改相關的配置文件。Postfixadmin第一個須要修改配置文件是config.inc.php, 但事實上卻沒有這個文件,沒關係,把config.inc.php.sample搬過來就是了(cp config.inc.php.sample config.ini.php),再來看一下目錄結構:

[root@mailserv2 postfixadmin]# pwd

/var/www/postfixadmin

[root@mailserv2 postfixadmin]ll

total 236

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 ADDITIONS

drwxr-xr-x 2 vmail vmail  4096 Sep 16 19:31 admin

-rw-r--r-- 1 vmail vmail  1195 Sep 16 16:06 BACKUP_MX.TXT

-rw-r--r-- 1 vmail vmail 10155 Sep 16 16:06 CHANGELOG.TXT

-rw-r----- 1 vmail vmail  4700 Sep 16 16:14 config.inc.php

-rw-r--r-- 1 vmail vmail  4694 Sep 16 16:06 config.inc.php.sample

-rw-r----- 1 vmail vmail  3774 Sep 16 16:06 create-alias.php

-rw-r----- 1 vmail vmail  7379 Sep 16 19:24 create-mailbox.php

-rw-r--r-- 1 vmail vmail  4910 Sep 16 16:06 DATABASE_MYSQL.TXT

-rw-r--r-- 1 vmail vmail  4955 Sep 16 16:06 DATABASE_PGSQL.TXT

-rw-r----- 1 vmail vmail  2497 Sep 16 19:30 delete.php

-rw-r----- 1 vmail vmail  1727 Sep 16 16:06 edit-active.php

-rw-r----- 1 vmail vmail  3013 Sep 16 16:06 edit-alias.php

-rw-r----- 1 vmail vmail  4026 Sep 16 16:06 edit-mailbox.php

-rw-r----- 1 vmail vmail 25031 Sep 16 16:06 functions.inc.php

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 images

-rw-r----- 1 vmail vmail  3994 Sep 16 16:06 index.php

-rw-r--r-- 1 vmail vmail  2655 Sep 16 16:06 INSTALL.TXT

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 languages

-rw-r--r-- 1 vmail vmail  1651 Sep 16 16:06 LANGUAGE.TXT

-rw-r--r-- 1 vmail vmail  5375 Sep 16 16:06 LICENSE.TXT

-rw-r----- 1 vmail vmail  1743 Sep 16 16:06 login.php

-rw-r----- 1 vmail vmail   494 Sep 16 16:06 logout.php

-rw-r----- 1 vmail vmail   869 Sep 16 16:06 main.php

-rw-r--r-- 1 vmail vmail   981 Sep 16 16:06 motd-admin.txt.orig

-rw-r--r-- 1 vmail vmail   262 Sep 16 16:06 motd.txt

-rw-r--r-- 1 vmail vmail   262 Sep 16 16:06 motd-users.txt

-rw-r----- 1 vmail vmail  4827 Sep 16 16:06 overview.php

-rw-r----- 1 vmail vmail  2314 Sep 16 16:06 password.php

-rwxr-xr-x 1 vmail vmail   392 Sep 16 16:08 postfix_chmod.sh

-rw-r----- 1 vmail vmail  3233 Sep 16 16:06 search.php

-rw-r----- 1 vmail vmail  2119 Sep 16 16:06 sendmail.php

-rw-r----- 1 vmail vmail  5506 Sep 16 16:06 setup.php

-rw-r----- 1 vmail vmail  4204 Sep 16 16:06 stylesheet.css

-rw-r--r-- 1 vmail vmail   456 Sep 16 16:06 TABLE_BACKUP_MX.TXT

-rw-r--r-- 1 vmail vmail  3737 Sep 16 16:06 TABLE_CHANGES.TXT

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 templates

-rw-r--r-- 1 vmail vmail  2303 Sep 16 16:06 UPGRADE.TXT

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 users

-rw-r----- 1 vmail vmail  1949 Sep 16 16:06 variables.inc.php

-rw-r----- 1 vmail vmail  1965 Sep 16 16:06 viewlog.php

drwxr-xr-x 2 vmail vmail  4096 Sep 16 16:06 VIRTUAL_VACATION

在上面的目錄輸出中,我將要處理的文件或目錄用了粗字體來標識了,先從config.ini.php動手吧。

[root@mailserv2 postfixadmin]# more config.inc.php


//

// Postfix Admin

// by Mischa Peters

// Copyright (c) 2002 - 2005 High5!

// License Info: [url]http://www.postfixadmin.com/?file=LICENSE.TXT[/url]

//

// File: config.inc.php

//

if (ereg ("config.inc.php", $_SERVER['PHP_SELF']))

{

   header ("Location: login.php");

   exit;

}

// Postfix Admin Path

// Set the location to your Postfix Admin installation here.

$CONF['postfix_admin_url'] = '';

$CONF['postfix_admin_path'] = '';

// Language config

// Language files are located in './languages'.

$CONF['default_language'] = 'cn';

// Database Config

// mysql = MySQL 3.23 and 4.0

// mysqli = MySQL 4.1

// pgsql = PostgreSQL

$CONF['database_type'] = 'mysql';

$CONF['database_host'] = 'localhost';

$CONF['database_user'] = 'postfixadmin';

$CONF['database_password'] = 'postfixadmin';

$CONF['database_name'] = 'postfix';

$CONF['database_prefix'] = '';

…………………………省略若干……………………………………….

// Mailboxes

// If you want to store the mailboxes per domain set this to 'YES'.

// Example: /usr/local/virtual/domain.tld/username@domain.tld

$CONF['domain_path'] = 'YES';

// If you don't want to have the domain in your mailbox set this to 'NO'.

// Example: /usr/local/virtual/domain.tld/username

$CONF['domain_in_mailbox'] = 'NO';

…………………………省略若干……………………………………….

// Default Domain Values

// Specify your default values below. Quota in MB.

$CONF['aliases'] = '1000';

$CONF['mailboxes'] = '1000';

$CONF['maxquota'] = '1000';

…………………………省略若干……………………………………….

// Quota

// When you want to enforce quota for your mailbox users set this to 'YES'.

$CONF['quota'] = 'NO';

// You can either use '1024000' or '1048576'

$CONF['quota_multiplier'] = '1024000';

…………………………省略若干……………………………………….

?>

被改動過的內容用紅色粗體標記出來了,這些值可根據實際狀況做修改。下一個須要修改的文件是create-mailbox.php:

[root@mailserv2 postfixadmin]# more  create-mailbox.php


//

// Postfix Admin

// by Mischa Peters

// Copyright (c) 2002 - 2005 High5!

// License Info: [url]http://www.postfixadmin.com/?file=LICENSE.TXT[/url]

……………………………………省略若干…………………………………….

$tQuota = $CONF['maxquota'];

system("sudo /usr/sbin/maildirmake.sh $fDomain ".$_POST['fUsername']);

if ($fMail == "on")

……………………………………省略若干…………………………………….

?>

紅色字體那行是須要插入的,它的位置在210行,不要把位置放錯了,由於文件中有2行是"$tQuota = $CONF['maxquota'];"必定要把它放在第209行的那個"$tQuota = $CONF['maxquota'];"的後面纔會有做用。在這裏,頗有必要解釋一下插入這行的做用--在php腳本中執行系統的shell腳本--直接的後果就是建立用戶的郵箱目錄,這與執行在linux下執行命令行sudo /usr/sbin/maildirmake.sh sery.com sey至關。接下來咱們修改文件delete.php:

[root@mailserv2 postfixadmin]# vi delete.php

……………………………………….省略不少………………………………


require ("./variables.inc.php");

require ("./config.inc.php");

require ("./functions.inc.php");

include ("./languages/" . check_language () . ".lang");

$SESSID_USERNAME = check_session();

……………………………………….省略不少………………………………      $result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");

      $userarray=explode("@",$fDelete);

      $user=$userarray[0];

      $domain=$userarray[1];

      system("sudo /usr/sbin/maildirdel.sh $domain $user");

……………………………………….省略不少………………………………

 ?>

紅色字體標示的那4行是須要插入的,位置也是相當重要的,不能弄錯。到了這一步,仍是沒有完成,還須要進目錄admin裏修改2個同名文件 admin/create-mailbox.php和admin/delete.php,修改的方法是同樣的,只是插入位置的行號不一樣(如 admin/create-mail在200行的位置插入),見下面的截圖:

圖 5

這裏有一個疑惑:爲何在不一樣的目錄下有相同的文件呢?這是出於安全方面的緣由。Postfixadmin把管理員分紅2種:超級郵件系統管理員和通常郵件系統管理員,在admin目錄裏的是超級管理員的目錄,而普通的郵件系統管理員在/var/www/postfixadmin這個目錄。在上述過程當中,咱們使用了2個shell腳本/usr/sbin/maildirdel.sh及/usr/sbin/maildirmake.sh,這些腳本的內容和做用將在後面安裝配置maildrop時一併給出。

(2) 在mysql中建立postfix所需的數據庫。

[root@mailserv2 ~] # cd /var/www/postfixadmin
[root@mailserv2 ~] # mysql -u root < DATABASE_MYSQL.TXT

(3) 測試postfixadmin。先修改apache的配置文件/usr/local/apache/conf/httpd.conf,加入以下內容:

Alias /postfixadmin /var/www/postfixadmin

<Directory /var/www/postfixadmin>

     Options Indexes FollowSymLinks

     AllowOverride None

     Order allow,deny

     Allow from all

</Directory>

<Directory "/var/www/postfixadmin/admin">

    AuthType Basic

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "sery.mail Access"

    AuthUserFile /usr/local/apache/conf/htpasswd

    Require valid-user

</Directory>


保存後重起apache服務(/usr/local/apache/bin/apachectl restart),而後在別的機器的瀏覽器輸入郵件服務器的url如:[url]http://mail.sery.com/postfixadmin[/url] 

圖 6

點擊連接 setup,若是出現的都是ok,則代表postfixadmin配置正確。

圖 7


默認狀況下,頗有可能沒有安裝pcre(Perl Compatible Regular Expressions)這個軟件包。這個包是必須的,若是沒有這個包,安裝courier-maildrop將不能正常進行,關於pcre的安裝,咱們把它放到maildrop安裝這一部分。

Postfix安裝和配置

這是郵件系統的核心部分,所以安裝和配置是比較複雜的,特別是作配置時要格外當心,有時還須要反覆修改,反覆測試。

(1)安裝postfix.

[root@mailserv2 ~]# cd
[root@mailserv2 ~]# tar zxvf  postfix-2.2.11.tar.gz
[root@mailserv2 ~]# cd postfix-2.2.11
[root@mailserv2 postfix-2.2.11]# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'

若是沒有意外,make這一步很快就執行完了,接下來就是安裝,使用的命令是:

[root@mailserv2 postfix-2.2.11]# make install

程序先自動執行一陣子,而後會進入交互狀態,等待用戶的輸入,通常狀況下,一路回車便可完成全部的安裝。

(2)配置postfix。Postfix有自己有2個須要修改的配置文件/etc/postfix/main.cf和/etc/postfix/master.cf,由於咱們要用mysql虛擬賬號,所以須要手動加一些配置文件,下面挨個來作這些配置。

①main.cf。這個文件有不少行註釋,察看起來不是很方便,先用命令 [root@mailserv2 postfix]# sed -n '/^#/!p'  /etc/postfix/main.cf > /etc/postfix/main.cf.new 去掉註釋行並生成新文件/etc/postfix/main.cf.new,而後再把它覆蓋到 /etc/postfix/main.cf (cp /etc/postfix/main.cf.new /etc/postfix/main.cf)。修改後的文件以下所示:

[root@mailserv2 postfix]# more main.cf

config_directory = /etc/postfix

readme_directory = no

sample_directory = /etc/postfix

sendmail_path = /usr/sbin/sendmail

html_directory = no

setgid_group = postdrop

command_directory = /usr/sbin

manpage_directory = /usr/local/man

daemon_directory = /usr/libexec/postfix

newaliases_path = /usr/bin/newaliases

mailq_path = /usr/bin/mailq

queue_directory = /var/spool/postfix

mail_owner = postfix

###########################################################

content_filter = smtp-amavis:[127.0.0.1]:10024

max_use = 10

 

#=====================BASE=========================

myhostname = mail2.sery.com

mydomain = mail.sery.com

myorigin = $mydomain

mydestination = $myhostname localhost localhost.$mydomain

mynetworks = 127.0.0.0/8 220.94.159.0/24

inet_interfaces = all

 

#=====================Vritual Mailbox settings======================

virtual_mailbox_base = /var/mailbox

virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf

virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf

virtual_uid_maps = static:1001

virtual_gid_maps = static:1001

virtual_transport = maildrop

maildrop_destination_recipient_limit = 1

maildrop_destination_concurrency_limit = 1

 

#====================QUOTA========================

message_size_limit = 14336000

virtual_mailbox_limit = 20971520

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.

virtual_overquota_bounce = yes

 

#====================SASL========================

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,

reject_non_fqdn_hostname,

reject_unknown_sender_domain,

reject_non_fqdn_sender,reject_non_fqdn_recipient,

reject_unknown_recipient_domain,reject_unauth_pipelining,

reject_unauth_destination,

permit

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain =

smtpd_sasl_security_options = noanonymous

smtpd_sasl_application_name = smtpd

smtpd_banner=$myhostname ESMTP "Version not Available"

 

alias_maps = hash:/etc/aliases

unknown_local_recipient_reject_code = 450

上述配置中,須要特別注意的是mydomain和myhostname,這2個項的值不要設置成同樣,不然postfix將不能正確啓動。第2個要注意的地方是 virtual_uid_maps及virtual_gid_maps的值,它是vmail用戶的uid和vmail組的gid,與前面的文件 /usr/local/authlib/etc/authlib/authmysqlrc的 "MYSQL_UID_FIELD""MYSQL_GID_FIELD"必定要保持一致,本案的uid和gid都是1001.任何狀況下,經過執行

root@mailserv2 postfix]#  id vmail

uid=1001(vmail) gid=1001(vmail) groups=1001(vmail)

察看uid和gid。"content_filter = smtp-amavis:[127.0.0.1]:10024"這一行是防病毒和反垃圾郵件用的,稍後再作說明。

②建立目錄/etc/postfix/mysql,而後手動建立四個配置文件:mysql_virtual_alias_maps.cf, mysql_virtual_domains_maps.cf,mysql_virtual_mailbox_limit_maps.cf, mysql_virtual_mailbox_maps.cf。這4個文件的內容分別以下:

[root@mailserv2 mysql]# more mysql_virtual_alias_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = alias

select_field = goto

where_field = address

[root@mailserv2 mysql]# more mysql_virtual_domains_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = domain

select_field = description

where_field = domain

[root@mailserv2 mysql]# more mysql_virtual_mailbox_limit_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = mailbox

select_field = quota

where_field = username

[root@mailserv2 mysql]# more mysql_virtual_mailbox_maps.cf

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = mailbox

select_field = maildir

where_field = username

另一個配置文件是/etc/postfix/master.cf,因爲須要修改的地方不是不少,能夠先在這裏把它配置好。

[root@mailserv2 postfix]# more master.cf

#

# Postfix master process configuration file.  For details on the format

# of the file, see the Postfix master(5) manual page.

#

# ==========================================================================

# service type  private unpriv  chroot  wakeup  maxproc command + args

#               (yes)   (yes)   (yes)   (never) (100)

# ==========================================================================

smtp      inet  n       -       n       -       -       smtpd

#submission inet n      -       n       -       -       smtpd

#       -o smtpd_etrn_restrictions=reject

#       -o smtpd_client_restrictions=permit_sasl_authenticated,reject

#smtps    inet  n       -       n       -       -       smtpd

#  -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

#submission   inet    n       -       n       -       -       smtpd

#  -o smtpd_etrn_restrictions=reject

#  -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

#628      inet  n       -       n       -       -       qmqpd

pickup    fifo  n       -       n       60      1       pickup

cleanup   unix  n       -       n       -       0       cleanup

qmgr      fifo  n       -       n       300     1       qmgr

#qmgr     fifo  n       -       n       300     1       oqmgr

tlsmgr    unix  -       -       n       1000?   1       tlsmgr

rewrite   unix  -       -       n       -       -       trivial-rewrite

bounce    unix  -       -       n       -       0       bounce

defer     unix  -       -       n       -       0       bounce

trace     unix  -       -       n       -       0       bounce

verify    unix  -       -       n       -       1       verify

flush     unix  n       -       n       1000?   0       flush

proxymap  unix  -       -       n       -       -       proxymap

smtp      unix  -       -       n       -       -       smtp

# When relaying mail as backup MX, disable fallback_relay to avoid MX loops

relay     unix  -       -       n       -       -       smtp

        -o fallback_relay=

#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5

showq     unix  n       -       n       -       -       showq

error     unix  -       -       n       -       -       error

discard   unix  -       -       n       -       -       discard

local     unix  -       n       n       -       -       local

virtual   unix  -       n       n       -       -       virtual

lmtp      unix  -       -       n       -       -       lmtp

anvil     unix  -       -       n       -       1       anvil

scache    unix  -       -       n       -       1       scache

#

# ====================================================================

# Interfaces to non-Postfix software. Be sure to examine the manual

# pages of the non-Postfix software to find out what options it wants.

#

# Many of the following services use the Postfix pipe(8) delivery

# agent.  See the pipe(8) man page for information about ${recipient}

# and other message envelope options.

# ====================================================================

#

# maildrop. See the Postfix MAILDROP_README file for details.

# Also specify in main.cf: maildrop_destination_recipient_limit=1

#

maildrop  unix  -       n       n       -       -       pipe

  flags=DRhu user=vmail:vmail argv=/usr/local/maildrop/bin/maildrop -d ${recipient}

#

# The Cyrus deliver program has changed incompatibly, multiple times.

#

old-cyrus unix  -       n       n       -       -       pipe

  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}

# Cyrus(Amos Gouaux)

# Also specify in main.cf: cyrus_destination_recipient_limit=1

cyrus     unix  -       n       n       -       -       pipe

  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

#

# See the Postfix UUCP_README file for configuration details.

#

uucp      unix  -       n       n       -       -       pipe

  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

#

# Other external delivery methods.

#

ifmail    unix  -       n       n       -       -       pipe

  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

bsmtp     unix  -       n       n       -       -       pipe

  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient

#############################################################################

#                antispam                                                   #

#############################################################################

smtp-amavis unix - - n - 2 smtp

  -o smtp_data_done_timeout=1200

  -o smtp_send_xforward_command=yes

  -o disable_dns_lookups=yes

localhost:10025 inet n - n - - smtpd

  -o content_filter=

  -o local_recipient_maps=

  -o relay_recipient_maps=

  -o mynetworks=127.0.0.0/8

  -o smtpd_helo_restrictions=

  -o smtpd_client_restrictions=

  -o smtpd_sender_restrictions=

  -o smtpd_recipient_restrictions=permit_mynetworks,reject

  -o strict_rfc821_envelopes=yes

  -o smtpd_error_sleep_time=0

  -o smtpd_soft_error_limit=1001

  -o smtpd_hard_error_limit=1000

這個配置文件,"flags=DRhu user=vmail:vmail argv=/usr/local/maildrop/bin/maildrop -d ${recipient}"是修改過的,flags前面必須有2個空格,這點值得注意。至於"argv= /usr/local/maildrop/bin/maildrop"則是maildrop安裝的路徑及maildrop二進制執行文件的位置,當咱們安裝maildrop文件時,必定要和這個位置相一致。文件從註釋框 "antispam"後的一部份內容,是過濾垃圾郵件用的。

到這裏,postfix的配置文件基本上算配好了,可是其它相依賴的軟件尚未安裝和配置好,所以不能運行和測試postfix,等全部的相關軟件安裝和配置正確後再進行這個步驟。


Corurier-imap安裝配置

Postfix只是實現郵件系統的smtp功能,pop3或imap則須要另外的軟件來實現,這個軟件就是courier-imap(固然也有別的軟件能夠選擇)。

(1)安裝courier-imap

[root@mailserv2 ~]# cd

[root@mailserv2 ~]# tar jxvf courier-imap-.tar.bz2

[root@mailserv2 ~]# cd courier-imap-

 [root@mailserv2courier-imap-]#./configure  --prefix=/usr/local/imap  --with-redhat 

--disable-root-check  --enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030

--with-trashquota  --with-dirsync --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/ --with-authmysql --with-authmysql=yes

[root@mailserv2 courier-imap-]# make

[root@mailserv2 courier-imap-]# make install

[root@mailserv2 courier-imap-]# make install-configure

(2)修改配置文件/usr/local/imap/etc/pop3d及/usr/local/imap/etc/imapd。把/usr/local/imap/etc/pop3d 文件的行"POP3DSTART=NO"改爲"POP3DSTART=YES",再依照這個形式把文件 /usr/local/imap/etc/imapd的行"IMAPDSTART=NO"改爲"IMAPDSTART=YES"便可。

(3)複製文件 courier-imap.sysvinit到目錄/usr/local/imap/sbin,以便於啓動imap的守護進程。

[root@mailserv2 courier-imap-4.1.3]# cp courier-imap.sysvinit /usr/local/imap/sbin/imapd

(4)測試imap服務。

[root@mailserv2 courier-imap-4.1.3]# /usr/local/imap/sbin/imapd  start
Starting Courier-IMAP server: imap pop3

◆安裝courier-maildrop

Maiidrop的做用是本地投遞,即把收到的郵件移動到相應的用戶目錄。在前面配置postfix的時候,咱們已經把與maildrop相關的東西寫進文件/etc/postfix/master.cf了,所以這裏就再也不敘述。前面的步驟咱們也提到過pcre 這個軟件,它是安裝maildrop所必須的,因此須要先安裝這個軟件(若是系統不存在這個軟件的話)。

[root@mailserv2 courier-imap-]# cd

[root@mailserv2 courier-imap-]# tar jxvf pcre-7.2.tar.bz2

[root@mailserv2 courier-imap-]# cd pcre-7.2

[root@mailserv2 courier-imap-]# ./configure

[root@mailserv2 courier-imap-]# make

[root@mailserv2 courier-imap-]# make install

//安裝pcre應該是很是容易的事情,片刻之間就可搞定,接下來安裝maildrop.在執行配置過程當中,須要不少選項,不要疏漏。

[root@mailserv2 pcre-7.2]# cd

[root@mailserv2 pcre-7.2]# tar jxvf maildrop-.tar.bz2

[root@mailserv2 pcre-7.2]# cd maildrop-

[root@mailserv2 maildrop-]# ./configure  --prefix=/usr/local/maildrop  --enable-

sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail'  --enable-syslog=1 

--enable-maildirquota  --enable-maildrop-uid=1001  --enable-maildrop-gid=1001  --with

-trashquota --with-dirsync

[root@mailserv2 maildrop-]# make

[root@mailserv2 maildrop-]# make install

[root@mailserv2 maildrop-]# cp /usr/local/maildrop/bin/maildrop /usr/bin

下面的命令簡單驗證maildrop

[root@mailserv2 ~]# maildrop –v

maildroCopyright 1998-2005 Double Precision, Inc.

GDBM extensions enabled.

Courier Authentication Library extension enabled.

Maildir quota extension enabled.

This program is distributed under the terms of the GNU General Public

License. See COPYING for additional information.

輸出內容必定要有"Courier Authentication Library extension enabled"這一行。若是沒有這個輸出,那是很是不幸的事情了,返回去挨個排錯吧。那麼這個"Courier Authentication Library extension enabled"是怎麼一回事呢?這代表maildrop已經和前面咱們安裝配置的SASL和courier-authlib緊密結合在一塊兒了。

知道maildrop把郵件移動到哪一個用戶目錄仍是很是有必要的,這個操做就是maildrop的日誌記錄。這裏咱們建立一個新文件/etc/maildroprc,這個文件就2行內容:

[root@mailserv2 mailbox]# more /etc/maildroprc

logfile "/var/mailbox/maildrop.log" 

to "$HOME/$DEFAULT"

咱們來看一個正常運行的postfix郵件系統的maildrop日誌,就會對maildrop有更清楚的認識。

[root@mailserv2 mailbox]# tail  maildrop.log

Date: Sat Oct  6 12:45:20 2007

From: "Saundra Y. Echols" <[email]saundra@MS13.HINET.NET[/email]>

Subj: No girls laugh at me now, haha, i laugh at them

File: /mail/mailbox//sery.com/magazine/                              (3355)

上面的日誌代表收到一封來自[email]Saundra@ms13.hinet.net[/email]的信,maildrop把郵件移動到目錄/mail/mailbox/sery.com/magazine。

很惋惜maidrop沒有建立和刪除郵件用戶目錄的能力,在配置postfixadmin時,咱們提到須要使用2個shell腳本 /usr/sbin/maildirdel.sh及/usr/sbin/maildirmake.sh,這2個腳本的做用就是用來彌補maildrop不能建立/刪除目錄這個缺陷的。

[root@mailserv2 ~]# more /usr/sbin/maildirmake.sh

#!/bin/bash

set -e

if [ ! -d /var/mailbox/$1 ]

then

mkdir /var/mailbox/$1

fi 

chown -R vmail:vmail /var/mailbox/$1

cd "/var/mailbox/$1"

/usr/local/imap/bin/maildirmake $2

mkdir /var/mailbox/$1/$2/Maildir

chown -R vmail:vmail /var/mailbox/$1/$2

[root@mailserv2 ~]# more /usr/sbin/maildirdel.sh

#!/bin/bash

rm -rf /var/mailbox/$1/$2

這2個腳本由web調用,而web(apache)的執行用戶爲vmail,出於安全考慮,咱們給vmail用戶的權限很是有限,爲了保證這2個 shell腳本能正常執行,須要使用sudo這個工具來完成這個任務。儘管可使用vi這樣的編輯器來修改/etc/sudoers這個配置文件,但仍是不及visudo可靠,由於visudo能夠對修改的內容作語法檢查,若是更改不正確,保存文件是會給出提示。把行"vmail ALL = NOPASSWD: /usr/sbin/maildirmake.sh , /usr/sbin/maildirdel.sh"追加到文件末尾便可!

有的時候,在postfixadmin裏建立新的郵件賬號,賬號卻是建立成功了,卻並無在指定的位置生成相應的虛擬用戶目錄,從網上收集的信息來看,這個問題彷佛很廣泛,我本人也被這個問題困擾過--以vmail 用戶手動執行sudo /usr/sbin/maildirdel.sh就能建立目錄,用web方式就是不行-實驗屢次才找出緣由,原來是/etc/sudoers裏須要把 "Defaults    requiretty"這行註釋掉。有人可能要問,你怎麼知道要這樣作呢?答:我是經過看apache日誌知道要這樣乾的。

郵件病毒檢查和垃圾郵件過濾

抗病毒使用軟件是clamav,安裝時必定要用當前的最新版本。垃圾郵件過濾可以使用一個名爲SpamAssassin的perl模塊。經過採用amavisd-new這個容器,能夠把clamav和SpamAssassin整合起來。

(1)安裝配置clamav.

[root@mailserv2 ~]# useradd clamav
[root@mailserv2 ~]# cd
[root@mailserv2 ~]# cd clamav-0.91.2
[root@mailserv2 ~]# ./configure --prefix=/usr/local/clamav --with-dbdir=/usr/local/share/clamav --disable-zlib-vcheck
[root@mailserv2 ~]# make
[root@mailserv2 ~]# make install

Clamav有2個配置文件,一個主配置文件/usr/local/clamav/etc/clamd.conf,一個病毒更新配置文件/usr/local/clamav/etc/ freshclam.conf。現把修改好的配置文件列於下面:

[root@mailserv2 ~]# more /usr/local/clamav/etc/freshclam.conf | sed -n '/^#/!p'

DatabaseDirectory /usr/local/share/clamav

UpdateLogFile /var/log/clamav/freshclam.log

LogVerbose yes

LogSyslog yes

LogFacility LOG_MAIL

DatabaseOwner amavis

DatabaseMirror db.CN.clamav.net

DatabaseMirror database.clamav.net

[root@mailserv2 ~]# more /usr/local/clamav/etc/clamd.conf | sed -n '/^#/!p'

LogFile /var/log/clamav/clamd.log

LogSyslog yes

LogVerbose yes

PidFile /var/run/clamav/clamd.pid

DatabaseDirectory /usr/local/share/clamav

LocalSocket /var/run/clamav/clamd.socket

StreamMaxLength

User amavis

ScanMail yes

ScanArchive yes

這2個文件有不少註釋,我用sed把它過濾掉了。Clamd.conf中,有"User amavis"這樣一行。爲何不用默認的用戶clamav而使用amavis呢?這樣作的目的是爲了與amavis-new結合在一塊兒。既然沒有這個用戶,就手動建立一個(useradd amavis)。接下來須要手動建立一些目錄並賦予相應的權限,用來記錄日誌等用途;我把它做成一個shell腳本,直接執行便可,腳本的內容以下所示:

 [root@mailserv2 ~]# more  /root/clamav.sh

   #!/bin/bash

   # create directory for clamav

    mkdir /var/log/clamav
chmod -R 744 /var/log/clamav
chown -R amavis:amavis /var/log/clamav
chown -R amavis.amavis /usr/local/share/clamav
mkdir /var/run/clamav
chmod 700 /var/run/clamav
chown amavis.amavis /var/run/clamav

腳本執行成功後,再執行 [root@mailserv2 ~]# /usr/local/clamav/bin/freshclam 手動更新病毒庫。

(2)安裝和配置avamvis-new。解壓包amavisd-new-2.5.2.tar.gz,而後把它移動到相關的位置。這裏仍是用一個腳原本作這個事情,腳本的內容以下:

[root@mailserv2 ~]# more /root/amavis.sh

#!/bin/bash

cd /root

tar amavisd-new-2.5.2.tar.gz

cd  amavisd-new-2.5.2

mkdir -p /var/amavis /var/amavis/tmp /var/amavis/var /var/amavis/db
chown -R amavis:amavis /var/amavis
chmod -R 750 /var/amavis
cp amavisd /usr/local/sbin/
chown root /usr/local/sbin/amavisd
chmod 755 /usr/local/sbin/amavisd
cp amavisd.conf /etc/
chown root /etc/amavisd.conf
chmod 644 /etc/amavisd.conf

mkdir /var/virusmails
chown amavis:amavis /var/virusmails
chmod 750 /var/virusmails

執行完腳本後別忘記檢查一下是否都按咱們的意願工做,如/usr/local/sbin目錄是否有文件amavisd。

Amavisd的配置文件/etc/amavisd.conf比較複雜,須要修改的內容以下:

$max_servers=8; 
$daemon_user = 'amavis';
$daemon_group = 'amavis';
$mydomain = 'sery.com';
$db_home = "$MYHOME/db";
$inet_socket_port = 10024;
$sa_tag_level_deflt = -100; 
$sa_tag2_level_deflt = 6.3; 
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$virus_admin = "virusalert@$mydomain";
$sa_spam_subject_tag = '***SPAM*** ';
$notify_method = $forward_method;
$forward_method = 'smtp:127.0.0.1:10025'; 
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_DISCARD;
$final_spam_destiny = D_PASS;
['ClamAV-clamd',
&ask_daemon, ["CONTSCAN {}n", "/var/run/clamav/clamd.socket"],
qr/bOK$/, qr/bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

上述修改確認無誤後,執行 [root@mailserv2 ~]# /usr/local/sbin/amavisd debug 測試amavis。通常而言,測試皆不能正常進行,由於所須要的不少perl模塊極可能沒有被安裝。還好,報錯信息給出了所需的模塊。這時你須要到[url]www.cpan.org[/url]下載相關的模塊,而後安裝;也可能遇到包依賴,再下載依賴的包,安裝這個依賴,再反回來安裝先前那個包,如此反覆,非常煩人,極考驗人的耐性。等到 /usr/local/sbin/amavisd debug 輸出沒有錯誤方纔完成。有另一種方法,即運行 [root@mailserv2 ~]# perl MCPAN -e shell ,而後執行 cpan> install Time::HiRes 這樣的命令挨個安裝缺乏的perl模塊。根據個人經驗,這樣幹很耗時,而且有的模塊用這種方法安裝還不靈,因此還不如在網站下載模塊安裝有效。下面給出一個perl模塊的安裝實例:

[root@mailserv2 ~]# cd

[root@mailserv2 ~]# tar zxvf BerkeleyDB-0.32.tar.gz

[root@mailserv2 ~]# cd BerkeleyDB-0.32

[root@mailserv2 ~]# perl Makefile.PL

[root@mailserv2 ~]# make

[root@mailserv2 ~]# make install

修正:用cpan 加模塊名(如 cpan  Compress::Zlib),比較省事.

解決"Can't locate Crypt/OpenSSL/RSA.pm in @IN"報錯的方法:cpan Crypt::OpenSSL::RSA便可.其它的perl模塊可如法炮製.

 

Webmail安裝配置

可供postfix選擇的webmail不是很豐富,經過比較,我選擇extmail做爲postfix的webmail客戶端工具,原本 extmail也包括像postfixadmin這樣的web管理工具(extman),由於前面咱們已經用了postfixadmin, 這裏我只用extmail。

下載ExtMail-Solution-Linux-0.1.tar.gz後解壓,而後把它移動到目錄/var/www/extsuite/extmail。在apache的配置文件httpd.conf末尾追加下面的內容以便用戶能夠經過web方式訪問extmail:

DirectoryIndex  index.html index.php  index.cgi

ScriptAlias /extmail/cgi/   /var/www/extsuite/extmail/cgi/

<Directory "/var/www/extsuite/extmail/cgi">

    AllowOverride None

    Options None

    Order allow,deny

    Allow from all

</Directory>

Alias /extmail /var/www/extsuite/extmail/html

<Directory /var/www/extsuite/extmail/html>

     Options Indexes FollowSymLinks

     AllowOverride None

     Order allow,deny

     Allow from all

</Directory>


保存文件,重啓apache服務便可在瀏覽器輸入郵件服務器的url訪問了。

圖 8

若是少了相應的perl模塊,web頁面會給出提示,按照提示把perl模塊安裝上去就正常了。到這裏,extmail的配置尚未完呢,至少還有 2個文件須要修改,這2個文件是webmail.cf和 /var/www/extsuite/extmail/html/default/index.html.前一個是extmail的配置文件,後一個是頁面文件顯示方式。

webmail.cf的內容:更改過的內容用斜體紅色字體顯示

[root@mailserv2 extmail]# more webmail.cf

# sys_config, the config file and webmail programe root

SYS_CONFIG = /var/www/extsuite/extmail/

# sys_langdir, the i18n dir

SYS_LANGDIR = /var/www/extsuite/extmail/lang

# sys_templdir, the template dir

SYS_TEMPLDIR = /var/www/extsuite/extmail/html

# sys_warn, show system warning or not, default to yes

SYS_SHOW_WARN = 0

# sys_permit_noquota, permit an account without qouta?

SYS_PERMIT_NOQUOTA = 1

# sys_sess_dir, the session dir

SYS_SESS_DIR = /tmp/

# sys_log_on = 1 | 0 - enable logging or not

SYS_LOG_ON = 1

# sys_log_type = file|syslog|nsyslog, syslog will save login

# or error info into mail.*, nsyslog is a replacement to syslog

# that will send log message to network syslogd

SYS_LOG_TYPE = syslog

# sys_log_file - path to log file, if sys_log_type = file

SYS_LOG_FILE = /var/log/extmail.log

# sys_sess_timeout, session timeout, default 3 hours (3h) format:

# number+(s|m|h|d|M|y); or only number, the 0 means that the

# session will last for 0 seconds, but if you specify the

# sys_sess_cookie_only = 1 then it means the session will expire

# after you close your browser :)

SYS_SESS_TIMEOUT = 0

# sys_sess_cookie_only = 0|1 use cookie only or include cgi "sid"

# parameter ? if set to true(1), the session will be expired after

# sys_sess_timeout if there is no any active request from browser

SYS_SESS_COOKIE_ONLY = 1

# sys_user_psize, user default page_size

SYS_USER_PSIZE = 10

# sys_user_tsize, user mail subject truncate size, valid type:

# auto    => full text

# screen1 => 800x600

# screen2 => 1024x768

# screen3 => 1280x1024

SYS_USER_SCREEN = auto

# sys_user_lang, user default language

SYS_USER_LANG = en_US

# sys_user_template, user default template

SYS_USER_TEMPLATE = default

# sys_user_charset, user default charset

SYS_USER_CHARSET = utf-8

# sys_user_trylocal, user default outgoing encoding mechanism

SYS_USER_TRYLOCAL = 1

# sys_user_timezone, user default timezone

SYS_USER_TIMEZONE = +0800

# sys_user_* default parameters

SYS_USER_CCSENT = 0

SYS_USER_SHOW_HTML = 1

SYS_USER_COMPOSE_HTML = 1

SYS_USER_CONV_LINK =1

SYS_USER_ADDR2ABOOK = 1

# sys_min_pass_len, minimal password length, default 2

SYS_MIN_PASS_LEN = 2

# sys_mfilter_on, default is off

SYS_MFILTER_ON = 1

# sys_netdisk_on, default is off

SYS_NETDISK_ON = 0

# sys_debug_on, default is off

SYS_DEBUG_ON = 0

# sys auth type, mysql/ldap/authlib

SYS_AUTH_TYPE = mysql

# maildir_base, the base dir of user maildir, use absolute path

# if not set.

SYS_MAILDIR_BASE = /var/mailbox

# sys_auth_schema, vpopmail1/vpopmail2/virtual

# vpopmail1 => all user accounts in one table

# vpopmail2 => accounts in per domain table

SYS_AUTH_SCHEMA = virtual

# crypt_type, the default encrypt type of password, possible type

# currently is crypt|cleartext|plain|md5|md5crypt|plain-md5|ldap-md5|sha|sha1

SYS_CRYPT_TYPE = md5crypt

# if mysql, all relate parameters should prefix as SYS_MYSQL

SYS_MYSQL_USER = postfix

SYS_MYSQL_PASS = postfix

SYS_MYSQL_DB = postfix

SYS_MYSQL_HOST = localhost

SYS_MYSQL_SOCKET = /tmp/mysql.sock

# table name

SYS_MYSQL_TABLE = mailbox

SYS_MYSQL_ATTR_USERNAME = username

SYS_MYSQL_ATTR_DOMAIN = domain

SYS_MYSQL_ATTR_PASSWD = password

# sys_mysql_attr_clearpw - attribute to save clear password, useful for

# postmaster withdraw the original passwd if the end user forgot, but

# we highly recommend that you don't enable it for security reason

# SYS_MYSQL_ATTR_CLEARPW = clearpwd

SYS_MYSQL_ATTR_QUOTA = quota

SYS_MYSQL_ATTR_NDQUOTA = netdiskquota

SYS_MYSQL_ATTR_HOME = homedir

SYS_MYSQL_ATTR_MAILDIR = maildir

# service enable/disable attributes

# comment them out if you don't want their function

SYS_MYSQL_ATTR_DISABLEWEBMAIL = disablewebmail

SYS_MYSQL_ATTR_DISABLENETDISK = disablenetdisk

SYS_MYSQL_ATTR_ACTIVE = active

# if ldap, all relate parameters should prefix as SYS_LDAP

SYS_LDAP_BASE = o=extmailAccount,dc=example.com

SYS_LDAP_RDN = cn=Manager,dc=example.com

SYS_LDAP_PASS = secret

SYS_LDAP_HOST = localhost

# ldif attributes

SYS_LDAP_ATTR_USERNAME = mail

SYS_LDAP_ATTR_DOMAIN = virtualDomain

SYS_LDAP_ATTR_PASSWD = userPassword

# sys_ldap_attr_clearpw - attribute to save clear password, useful for

# postmaster withdraw the original passwd if the end user forgot, but

# we highly recommend that you don't enable it for security reason

# SYS_LDAP_ATTR_CLEARPW = clearPassword

SYS_LDAP_ATTR_QUOTA = mailQuota

SYS_LDAP_ATTR_NDQUOTA = netdiskQuota

SYS_LDAP_ATTR_HOME = homeDirectory

SYS_LDAP_ATTR_MAILDIR = mailMessageStore

# service enable/disable attributes

# comment them out if you don't want their function

SYS_LDAP_ATTR_DISABLEWEBMAIL = disablewebmail

SYS_LDAP_ATTR_DISABLENETDISK = disablenetdisk

SYS_LDAP_ATTR_ACTIVE = active

# if authlib, all relate parameters should prefix as AUTHLIB

SYS_AUTHLIB_SOCKET = /usr/local/authlib/var/spool/authdaemon/socket

# Global Abook support

# sys_g_abook_type, global abook type, valid is ldap|file, currently

# only support ldap, file module is under development :-)

SYS_G_ABOOK_TYPE = file

# if ldap, all relate parameters should prefix as SYS_G_ABOOK_LDAP

SYS_G_ABOOK_LDAP_HOST = localhost

SYS_G_ABOOK_LDAP_BASE = ou=AddressBook,dc=example.com

SYS_G_ABOOK_LDAP_ROOTDN = cn=Manager,dc=example.com

SYS_G_ABOOK_LDAP_ROOTPW = secret

SYS_G_ABOOK_LDAP_FILTER = objectClass=OfficePerson

# if file, all relate parameters should prefix as SYS_G_ABOOK_FILE

SYS_G_ABOOK_FILE_PATH = /var/www/extsuite/extmail/globabook.cf

SYS_G_ABOOK_FILE_LOCK = 1

SYS_G_ABOOK_FILE_CONVERT = 0

SYS_G_ABOOK_FILE_CHARSET = utf-8

在文件/var/www/extsuite/extmail/html/default/index.html 加入下面的標識,能夠獲得不

<TR>

<TD><%domain%></TD>

<TD><select name="domain" size="1" class="input_select"></option><option value="mail.sery.com">mail.sery.com</option>

<optionvalue="sery.com">sery.com</option></select><!--<INPUT TYPE="text" class="input_n" NAME="domain">--></TD>

</TR>

郵件域的下拉列表,從而方便用戶的使用。

圖 9

到這裏,postfix的安裝配置算是完成了。咱們來逐個檢查這些服務的正確性,簡單的方法就是啓動每個服務,根據服務的運行來掌握各個服務是否正常。爲了方便全部服務隨開機自動啓動,我把它們都加在了文件/etc/rc.local裏,這些內容包括:

################ normal services ############################

/usr/local/apache/bin/apachectl start

/usr/local/mysql/bin/mysqld_safe --user=mysql&

/usr/local/authlib/sbin/authdaemond start

############## postfix relatively ###########################

postfix start

/usr/local/imap/sbin/imapd start

################ antivirus and antispam #####################

/usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid

/usr/local/sbin/amavisd start

/usr/local/clamav/sbin/clamd

病毒庫和垃圾郵件的列表則放在crontab裏:

[root@mailserv2 extmail]# crontab -l

0 0 1 * * root wget -N -P /usr/share/spamassassin [url]www.ccert.edu.cn/spam/sa/Chinese_rules.cf;kill[/url] -HUP `cat /var/run/spamd.pid`

00 00 * * * /usr/local/clamav/bin/freshclam

待全部的服務都正常後,用postfixadmin建立郵件域和用戶。建立完畢,經過查看postfix日誌/var/log/maillog瞭解操做是否成功;同時經過查看目錄/var/mailbox裏是否生成與建立的郵件賬戶同名的目錄。

郵件系統的備份

在系統崩潰之後,沒有提早備份將使你無限懊悔。一次沒有成功的在線內核升級引發的系統崩潰(在我沒來得及備份時發生),爲恢復崩潰郵件系統,曾讓我精疲力竭。因此作好備份是一個好主意。固然咱們不能每天手動去執行這個備份任務,用腳本吧!下面是個人一個postfix的備份腳本,供你們參考:

[root@mailserv2 virusalert]# more /usr/local/bin/data_backup.sh

#!/bin/bash

BackupPath=/var/data_bk

Mysql_bk_dir=$BackupPath/mysqlbk

Mail_bk_dir=$BackupPath/mailbk

LogFile=$BackupPath/backuplog

MailBoxDir=/var/mailbox

####################################################################

# define mysql variables                                                     #

####################################################################

NewFile="$Mysql_bk_dir"/postfix$(date +%Y%m%d).tgz

DumpFile="$Mysql_bk_dir"/postfix$(date +%Y%m%d).sql

OldFile="$Mysql_bk_dir"/postfix$(date +%Y%m%d --date='5 days ago').tgz

DbUser=root

DbPasswd=husb^R

DbName=postfix

####################################################################

#   mysql backup proccess                                                 #

####################################################################

echo "-------------------------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

#Delete Old File

if [ -f $OldFile ]

then

   rm -f $OldFile >> $LogFile 2>&1

   echo "[$OldFile]Delete Old File Success!" >> $LogFile

else

   echo "[$OldFile]No Old Backup File!" >> $LogFile

fi

if [ -f $NewFile ]

then

   echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile

else

    cd $Mysql_bk_dir

/usr/local/mysql/bin/mysqldump -u $DbUser -p$DbPasswd --opt $DbName > $DumpFile

    tar czf $NewFile postfix$(date +%Y%m%d).sql >> $LogFile 2>&1

    echo "[$NewFile]Backup Success!" >> $LogFile

    rm -rf $DumpFile

fi

######################################################################

#     backup mail's user directories and files                                     #

######################################################################

MailFileBk=$Mail_bk_dir/mail$(date +%Y%m%d).tgz

OldMailFileBk=$Mail_bk_dir/mail$(date +%Y%m%d --date='14 days ago').tgz

if [ -f $OldMailFileBk ]

then

   rm -rf $OldMailFileBk

fi

if [  -f $MailFileBk ]

   then

   echo "[$MailFileBk]The Backup File is exists,Can't Backup!" >> $LogFile

   else

   cd /mail

   tar czf $MailFileBk mailbox  >> $LogFile 2>&1

fi

echo "-------------------------------------------" >> $LogFile

這個腳本對postfix數據庫和用戶的郵件作了備份。由於磁盤空間始終是有限的,所以是一邊備份一邊刪除就的備份。若是條件容許,建議進行異地備份。手動執行一下這個腳本,看它是否按咱們的意願工做了,若是一些如願,則把它放入crontab裏讓它每晚自動進行。

[root@mailserv2 ~]# crontab -l

0 0 1 * * root wget -N -P /usr/share/spamassassin [url]www.ccert.edu.cn/spam/sa/Chinese_rules.cf;kill[/url] -HUP `cat /var/run/spamd.pid`

00 01 * * * /usr/local/bin/data_backup.sh

00 00 * * * /usr/local/clamav/bin/freshclam

系統加固及安全

一、內核優化:用腳本實現

[root@mailserv2 ~]# more /usr/local/bin/kernel_optimize

#!/bin/bash

#kernel optimize optimize ,create by

#enable broadcast echo protection

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#disble source routed packets

#for f in /proc/sys/net/ipv4/conf/*/accept_source_rout; do

#    echo 0 > $f

#done

#enable tcp syn cookie protection

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#disable icmp redirect acceptance

for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do

    echo 0 > $f

done

#don't send redirect messages

for f in /proc/sys/net/ipv4/conf/*/send_redirects; do

    echo 0 > $f

done

#drop spoofed packets

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do

    echo 1 > $f

done

#log packets with impossible addresses

for f in /proc/sys/net/ipv4/conf/*/log_martians; do

    echo 1 > $f

done

二、防火牆策略:在配置postfix鏈接mysql數據庫時,用戶名postfix,密碼postfix,相似的情形還有好幾處呢。若是某人在別的機器用mysql客戶端鏈接郵件服務器的mysql數據庫,不費吹灰之力就能夠把郵件賬號全刪了,這確定會激起用戶的憤怒!趕快把這個漏洞堵上,下面是個人防火牆策略腳本:

[root@mailserv2 ~]# more /usr/local/bin/firewall

#!/bin/bash

#this is a common firewall created by

#define some variable

IPT=/sbin/iptables

CONNECTION_TRACKING="1"

INTERNET="eth0"

CLASS_A=".0/8"

CLASS_B="172.16.0.0/12"

CLASS_C="192.168.0.0/16"

CLASS_D_MULTICAST="224.0.0.0/4"

CLASS_E_RESERVED_NET="240.0.0.0/5"

BROADCAST_SRC=".0"

BROADCAST_DEST="255.255.255.255"

IPADDR=220. 94.58.245

LOOPBACK_INTERFACE="lo"

#Remove any existing rules

$IPT -F

$IPT -X

#setting default firewall policy

$IPT --policy OUTPUT ACCEPT

$IPT --policy FORWARD DROP

$IPT -P INPUT DROP

#stop firewall

if [ "$1" = "stop" ]

then

echo "Filewall completely stopped!no firewall running!"

exit 0

fi

#setting for loopback interface

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

# Stealth Scans andFlags

# All of the bits are cleared

$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set

$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set

$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST are both set

$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK

$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK

$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK

$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

# Usingto By-pass Rule Checking

if [ "$CONNECTION_TRACKING" = "1" ]; then

    $IPT -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    $IPT -A INPUT -m state --state INVALID -j DROP

    $IPT -A OUTPUT -m state --state INVALID -j DROP

fi

##################################################################

# Source Address Spoofing and Other Bad Addresses

# Refuse spoofed packets pretending to be from

# the external interface.s IP address

$IPT -A INPUT  -i $INTERNET -s $IPADDR -j DROP

# Refuse packets claiming to be from a Class A private network

$IPT -A INPUT  -i $INTERNET -s $CLASS_A -j DROP

# Refuse packets claiming to be from a Class B private network

$IPT -A INPUT  -i $INTERNET -s $CLASS_B -j DROP

# Refuse packets claiming to be from a Class C private network

$IPT -A INPUT  -i $INTERNET -s $CLASS_C -j DROP

$IPT -A INPUT -i $INTERNET -s.0/8 -j DROP

$IPT -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP

$IPT -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP

###################################################################

#setting access rules

#enable ssh connect

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 22 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 25 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 80 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 110 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 143 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 783 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 5666 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 10024 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp  --dport 10025 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p udp  --dport 123 -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p icmp -j ACCEPT

$IPT -A INPUT  -i $INTERNET -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT這條規則是阻止外部機器鏈接mysql數據庫。端口5666是nagios監控所用。把內核優化和防火牆腳本加在文件/etc/rc.local中,實現開機即啓。

[root@mailserv2 ~]# more /etc/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

################ normal services ############################

/usr/local/apache/bin/apachectl start

/usr/local/mysql/bin/mysqld_safe --user=mysql&

/usr/local/authlib/sbin/authdaemond start

############## postfix relatively ###########################

postfix start

/usr/local/imap/sbin/imapd start

################ antivirus and antispam #####################

/usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid

/usr/local/sbin/amavisd start

/usr/local/clamav/sbin/clamd

############### system optimize #############################

/usr/local/bin/kernel_optimize

/usr/local/bin/firewall

################### NRPE nagios remote plugin execute $$$$$$$$$

/usr/local/nrpe/bin/nrpe -c /usr/local/nrpe/etc/nrpe.cfg -d


關於多郵件域和用戶限額

Postfix支持多郵件域,當咱們用postfixadmin建立多個郵件域的時候,別忘記在DNS服務器上作好主機記錄解析和MX解析。多郵件域的情形是多個mx記錄指向同一個主機ip地址。

默認狀況下,postfix 數據庫的mailbox表的字段"quota"值是"0",它表示用戶的油箱大小是100M,假如咱們要把用戶的郵箱大小設置成500M,則只需鏈接數據庫postfix更改mailbox表"quota"字段的值爲"524288000"。

mysql> use postfix;

mysql> update mailbox set quota='524288000';

Query OK, 1 row affected (0.03 sec)

Rows matched: 191  Changed: 1  Warnings: 0

圖 10

全部的工做都作完之後,重啓linux。檢查進程看與postfix相關的守護進程是否在運行,而後在用foxmail來收發郵件,再也 webmail(extmail)方式收發。儘管postfix涉及不少方面的內容,但在大部分狀況下,經過日誌文件/var/log/maillog能夠得出一些很是有用的信息,從排除故障這個角度講,postfix的日誌文件將會爲排除故障提供很好的幫助。

[root@mailserv2 ~]# ps auxww  //部分進程快照

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

vmail     1481  0.0  1.2  12644  6568 ?           0:00 /usr/local/apache/bin/httpd -k start

postfix   1622  0.0  0.2   4000  1276 ?           0:08 anvil -l -t unix -u

vmail     1843  0.0  1.2  12644  6568 ?           0:00 /usr/local/apache/bin/httpd -k start

root      1972  0.0  0.1   1688   620 ?        Ss   Sep20   2:41 syslogd -m 0

root      1975  0.0  0.0   1644   400 ?        Ss   Sep20   0:01 klogd -x

root      1994  0.0  0.1   5424   984 ?        Ss   Sep20   0:22 /usr/sbin/sshd

ntp       2012  0.0  0.9   4672  4672 ?        SLs  Sep20   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g

root      2027  0.0  0.2   5224  1104 ?        Ss   Sep20   0:00 crond

root      2042  0.0  0.0   2200   424 ?        Ss   Sep20   0:00 /usr/sbin/atd

root      2050  0.0  1.3  12644  7016 ?        Ss   Sep20   0:00 /usr/local/apache/bin/httpd -k start

root      2056  0.0  0.0   1628   400 ?        S    Sep20   0:18 /usr/local/authlib/sbin/courierlogger -pid=/usr/local/authlib/var/spool/authdaemon/pid -start /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2067  0.0  0.1   2732   848 ?           0:00 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2075  0.0  0.1   2776  1008 ?           0:10 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2076  0.0  0.1   2776  1008 ?           0:11 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2077  0.0  0.1   2776  1008 ?           0:10 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2078  0.0  0.1   2776  1008 ?           0:10 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2079  0.0  0.1   2776  1008 ?           0:10 /usr/local/authlib/libexec/courier-authlib/authdaemond

root      2143  0.0  0.2   3972  1244 ?        Ss   Sep20   4:57 /usr/libexec/postfix/master

postfix   2146  0.0  0.2   4040  1308 ?        S    Sep20   1:44 qmgr -l -t fifo -u

root      2153  0.0  0.0   1624   404 ?        S    Sep20   0:00 /usr/local/authlib/sbin/courierlogger -pid=/var/run/imapd.pid -start -name=imapd /usr/local/imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup 143 /usr/local/imap/sbin/imaplogin /usr/local/imap/bin/imapd Maildir

root      2154  0.0  0.1   1728   536 ?        S    Sep20   0:00 /usr/local/imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup 143 /usr/local/imap/sbin/imaplogin /usr/local/imap/bin/imapd Maildir

root      2159  0.0  0.0   1628   404 ?        S    Sep20   0:03 /usr/local/authlib/sbin/courierlogger -pid=/var/run/pop3d.pid -start -name=pop3d /usr/local/imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup 110 /usr/local/imap/sbin/pop3login /usr/local/imap/bin/pop3d Maildir

root      2160  0.0  0.1   1728   536 ?        S    Sep20   0:03 /usr/local/imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup 110 /usr/local/imap/sbin/pop3login /usr/local/imap/bin/pop3d Maildir

amavis    2169  0.0 17.2 113196 89072 ?        Ss   Sep20   7:00 /usr/local/clamav/sbin/clamd

root      2251  0.0  0.0   1624   440 tty1     Ss+  Sep20   0:00 /sbin/mingetty tty1

root      2252  0.0  0.0   1624   436 tty2     Ss+  Sep20   0:00 /sbin/mingetty tty2

root      2253  0.0  0.0   1624   440 tty3     Ss+  Sep20   0:00 /sbin/mingetty tty3

root      2254  0.0  0.0   1624   440 tty4     Ss+  Sep20   0:00 /sbin/mingetty tty4

root      2255  0.0  0.0   1624   440 tty5     Ss+  Sep20   0:00 /sbin/mingetty tty5

root      2256  0.0  0.0   1628   444 tty6     Ss+  Sep20   0:00 /sbin/mingetty tty6

root      3626  0.0  0.2   4440  1104 ?           0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql

mysql     3644  0.0  4.1 133256 21460 ?        Sl   Sep20   8:33 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --pid-file=/usr/local/mysql/var/mailserv2.pid --skip-locking

root     12456  0.0  0.4   8272  2504 ?        Ss   20:13   0:00 sshd: root@pts/2

root     12458  0.0  0.2   4624  /2    Ss+  20:13   0:00 -bash

amavis   12624  0.0  9.7  59064 50236 ?        Ss   20:21   0:01 amavisd (master)

postfix  14269  0.0  0.2   4132  1460 ?        S    22:07   0:00 trivial-rewrite -n rewrite -t unix -u

amavis   14518  0.0 10.6  63740 54748 ?        S    22:18   0:05 amavisd (ch18-avail)

amavis   14875  0.0 10.4  62724 53768 ?        S    22:43   0:04 amavisd (ch11-avail)

amavis   14883  0.1 10.3  62592 53452 ?        S    22:44   0:04 amavisd (ch14-avail)

root     14890  0.0  0.4   8276  2512 ?        Ss   22:45   0:00 sshd: root@pts/1

root     14892  0.0  0.2   4616  /1    Ss   22:45   0:00 -bash

amavis   15160  0.0 10.2  61812 52728 ?        S    22:59   0:02 amavisd (ch5-avail)

amavis   15164  0.1 10.3  62464 53488 ?        S    22:59   0:04 amavisd (ch13-avail)

amavis   15211  0.1 10.3  62020 53060 ?        S    23:03   0:04 amavisd (ch13-avail)

amavis   15292  0.0 10.2  61700 52648 ?        S    23:08   0:02 amavisd (ch7-avail)

amavis   15383  0.1 10.2  62124 52964 ?        S    23:12   0:03 amavisd (ch8-avail)

postfix  15762  0.0  0.4   4520  2300 ?        S    23:40   0:00 smtpd -n smtp -t inet -u

postfix  15865  0.0  0.2   4004  1156 ?        S    23:47   0:00 pickup -l -t fifo -u

root     15941  0.0  0.1   4220   /1    R+   23:55   0:00 ps auxww

nagios   18752  0.0  0.1   4836   944 ?        Ss   Sep22   0:05 ../bin/nrpe -c nrpe.cfg -d

vmail    24853  0.0  1.2  12644  6664 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24854  0.0  1.2  12644  6596 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24884  0.0  1.2  12644  6568 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24885  0.0  1.3  12780  6696 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24886  0.0  1.2  12644  6568 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24967  0.0  1.2  12644  6596 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    24970  0.0  1.2  12644  6552 ?           0:00 /usr/local/apache/bin/httpd -k start

vmail    28305  0.0  1.3  12788  6724 ?           0:00 /usr/local/apache/bin/httpd -k start

root     29390  0.0  5.5  33232 28576 ?        Ss   Oct01   0:00 /usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid

root     29392  0.0  5.2  33232 27068 ?           0:00 spamd child

root     29393  0.0  5.2  33232 26988 ?           0:00 spamd child

相關文章
相關標籤/搜索