2012年10月22日 星期一

postfix 查看、刪除佇列郵件

參考官方說明:http://www.postfix.org/postqueue.1.html

POSTQUEUE(1)                                                      POSTQUEUE(1)

NAME
       postqueue - Postfix queue control

SYNOPSIS
       postqueue [-v] [-c config_dir] -f
       postqueue [-v] [-c config_dir] -i queue_id
       postqueue [-v] [-c config_dir] -p
       postqueue [-v] [-c config_dir] -s site

--以下略--


官方上面只有這些參數,但是網路上一堆轉貼都是說

看被Queue的信:
postqueue -q
強迫將Queue信寄出:
postqueue -f
刪除所有被Queue的信:
postsuper -d ALL
刪除某封Queue的信:
postsuper -d queue_id
刪除所有正在 deferred 佇列中的郵件 ( 刪除曾經發送失敗的信 ):
postsuper -d ALL deferred
是版本的問題嗎?

不管他...

從 postfix 官方說明:http://www.postfix.org/qmgr.8.html
可查到佇列相關資訊。

另外也有人整理好相關資訊:

※ Mail Queue 所在的目錄 
/var/spool/mqueue
/var/spool/postfix -- 底下列出 postfix 的子目錄

 》active
  目前正在準備發送的信件。(在 message id 後會多加一個 * 號)
Messages  that  the  queue  manager  has opened for delivery. Only a  limited  number  of  messages  is allowed  to  enter  the  active queue (leaky bucket strategy, for a fixed delivery rate).

 》bounce
  每一位收件者的傳送狀態,並記載為何會被退信
Per-recipient status information about why mail  is bounced.    These   files  are  maintained  by  the bounce(8) daemon.

 》corrupt
  信件損毀導致無法傳送的信件
Unreadable  or  damaged  queue files are moved here for inspection.
 》defer
   暫時無法被傳送的信件,並記載為何會被延遲傳送。這種情形最常發生在你的 Mail Server 被列入灰名單(GrayList)的時候,你會看到訊息為「 Your access to this mail system has been rejected due to the sending MTA's poor reputation. If you believe that this failure is in error, please contact the intended recipient via alternate means.」
Per-recipient status information about why mail  is delayed. These files are maintained by the defer(8) daemon.

 》deferred
  無法被傳送的信件會放置在此目錄,但 Mail Server 還是會嘗試幫你繼續送,只是必須等 Backoff time。
Mail that could not be  delivered  upon  the  first attempt.  The  queue manager implements exponential backoff  by  doubling  the  time  between  delivery attempts.

 》hold
  被暫時停止發送的信件,如要發送出去,需要由手動(在 message id 後會多加一個 ! 號)
Messages that are kept  "on  hold"  are  kept  here until someone sets them free.

 》incoming
  從外部或本地寄送到本機的信件。
Inbound mail from the network, or mail picked up by the local pickup(8) daemon from the maildrop directory.
 知道這些就好辦了,直接到相對應的資料夾把信刪掉即可。


參考:Postfix Mail Queue - 一些簡單的管理指令





2012年10月18日 星期四

FreeBSD 帳號密碼移轉至 linux


FreeBSD的帳號密碼及其他資訊都存在master.passwd,Linux則分別存在passwd及shadow中。
master.passwd@FreeBSD
帳號:密碼:UID:GID:Login Class:Change:Expire:Full Name:家目錄:Login SHELL
  • Login Class:幾乎沒在用了,通常是空的
  • Change:強迫使用者改密碼的時間週期, 0 表示不設定
  • Expire:使用者帳號的使用期限, 0 表示不設定
passwd@Linux
帳號:密碼:UID:GID:Full Name:家目錄:Login SHELL
FreeBSD比Linux多了三個欄位
所以我們將那三個欄位捨棄,並把密碼那欄設為x,因為Linux的密碼是存在shadow
cat master.passwd.bsd | awk -F":" '$3>=1002&&$3<=60000{printf"%s:x:%s:%s:%s:%s:%s\n",$1,$3,$4,$8,$9,$10}' > passwd.linux


shadow@Linux
帳號:密碼:3:4:5:6:7:8:9
  • 3.last password change
  • 4.days until change allowed
  • 5.days before change required
  • 6.days warning for expiration
  • 7.days before account inactive
  • 8.date when account expires
  • 9.reserved for future use
接著處理shadow
cat master.passwd.bsd | awk -F":" '$3>=1002&&$3<=60000{printf "%s:%s:13367:0:99999:7:::\n",$1,$2 }' > shadow.linux

再來處理group
cat group.bsd | awk -F":" '$3 >=1002&&$3<=60000{printf "%s::%s:%s\n",$1,$3,$4 }' > group.linux

接著把他們附加到原本的檔案後面
cat shadow.linux >> /etc/shadow
cat passwd.linux >> /etc/passwd
cat group.linux >> /etc/group



home、mail的移轉只需要用tar將資料夾打包即可。

如果不移轉home的資料,但是需要建立user home,寫迴圈來建立。
cd /tmp
vim create_user_home.sh
#!/usr/bin/ksh
for users in `awk -F: '{print $1}' passwd.linux`
do
mkdir /home/$users
chown $users:
$users /home/$users
chmod 700
done
執行sh
./create_user_home.sh




註:$3 >=1002  的部份是uid,需按照系統預設起始值修改


參考:
http://mail.lsps.tp.edu.tw/~gsyan/freebsd2001/Linux2FreeBSD.html
[轉錄] FreeBSD帳號密碼轉移至Linux

2012年10月8日 星期一

ssh斷線後,利用screen套件恢復被中斷的作業


參考來源:

使用 GNU Screen 回復被中斷的遠端存取作業階段
SSH 斷線了怎麼辦?沒關係,還有 Screen 幫你保留! 


套件:
screen

使用:

#screen 開啟一個新的作業階段,如果連線中斷,此作業階段依舊會被保留住。

檢視工作階段列表:
$ screen -ls
There are screens on:
        13454.pts-2.mail        (Attached)
        13670.pts-4.mail        (Detached)
2 Sockets in /var/run/screen/S-zongyan..

其中,13670.pts-4.mail        (Detached)代表中斷的作業階段。
 復原作業階段:
#screen -r [作業階段識別號]
例如:
#screen -r 13670.pts-4.mail
切換到Attached的作業階段:
#screen -d -r [作業階段識別號]
例如:
#screen -d -r 13454.pts-2.mail
離開作業階段方式:
#exit

2012年10月3日 星期三

CentOS 6.3 + dovecot + postfix + SquirrelMail

起因:
目前公司mail架構為 freebsd + postfix +openwebmail (mailbox)
mailbox的最大缺點就是在於鎖定的問題,隨著公司人數上升,問題的發生率就越來越頻繁
對客服單位(信件量大、即時處理)發生的機率更大。
於是幫客服部門另外架設一台備份、線上查詢用的mail server
這台mail server改用maildir的架構,將每封信單獨成一個檔案存放,雖然效能下降,但是能有效解決lock的問題。

環境:
由於機器的raid驅動問題,freebsd在安裝時便無法抓到硬碟,freebsd官方的硬體支援列表也沒列出該raid晶片(要裝也是可以,不過太費工了),故改用CentOS
搭配套件:
dovecot(imap、pop3)
postfix (smtp)
SquirrelMail  (webmail)
httpd (apache)
php

安裝方式:
一切以最簡單的yum安裝

  1. 安裝dovecot

    • yum install dovecot

    • 修改設定檔
      vi /etc/dovecot/dovecot.conf

      將protocols設為imap
      protocols = imap

    • 修改mail存放位置
      vi /etc/dovecot/conf.d/10-mail.conf

      mail_location = maildir:~/Maildir
       
    • 修改認證
      vi /etc/dovecot/conf.d/10-auth.conf
      disable_plaintext_auth = no
       
  2. postfix (系統內建,centos安裝時要選擇 basic server)
    • vi /etc/postfix/main.cf
    • inet_interfaces = localhost 這行前面加上 #號註解
       
    • 設定domain、host
      myhostname = (自行帶入)
      mydomain =
      (自行帶入)
     
  3. 安裝httpd、php(不贅述)
     
  4. 安裝SquirrelMail
    SquirrelMail目前在centos6.3的yum上面找不到,
    於是我到http://rpmfind.net/尋找
    找到 squirrelmail-1.4.8-5.el5.centos.13.noarch.rpm

    • 抓取rpm
      wget ftp://rpmfind.net/linux/centos/5.8/updates/x86_64/RPMS/squirrelmail-1.4.8-5.el5.centos.13.noarch.rpm

    • 安裝
      rpm -i squirrelmail-1.4.8-5.el5.centos.13.noarch.rpm
      如果有跳出有相依性套件,再依說明安裝所需套件

    • 環境設定
      cd /usr/share/squirrelmail/config/

      ./conf.pl

      進入設定介面 

      D
      輸入 dovecot
       
    • 設定語系,選 10
      squirrelmail_default_language = 'zh_TW';
      default_charset       = 'big5';

       
    • 其他的設定很明確,進去看一看就知道怎麼用了,基本上不用改,故不贅述。

    • 存檔 S,退出 Q
      
    • 新增change passwd plugins
      到官方網站:http://squirrelmail.org/plugin_view.php?id=117 下載適合的版本。
      (依照squirrelmail對應版本下載,筆者squirrelmail為1.4.8-5,可選擇Version 4.0,Requires: SquirrelMail 1.2.8, Compatibility plugin 1.3

      cd /usr/share/squirrelmail/plugins
       
      wget http://www.squirrelmail.org/plugins/change_passwd-4.0-1.2.8.tar.gz
       
      tar -zxvf change_passwd-4.0-1.2.8.tar.gz
       
      cd /usr/share/squirrelmail/config
       
      ./conf.pl
      
      # 選 8.  Plugins -> 將 Available Plugins: 內的 change_passwd 加入模組 -> 選 S 儲存設定 -> 選 Q 後離開
       
    • 安裝 Compatibility plugin 1.3 SquirrelMail 官方plugins下載)官方網站:http://squirrelmail.org/plugin_view.php?id=152找1.3版
      cd /usr/share/squirrelmail/plugins/
        
      wget http://www.squirrelmail.org/plugins/compatibility-1.3.tar.gz
        
      tar -zxvf compatibility-1.3.tar.gz
       
      cd /usr/share/squirrelmail/config
       
      ./conf.pl
      
      # 選 8.  Plugins -> 將 Available Plugins: 內的 Compatibility 加入模組 
      
      
    • 安裝 vacation(auto reply)套件
      官方網站:http://squirrelmail.org/plugin_view.php?id=172
      Requires: SquirrelMail 0.5 or above
      (需求說明的部份,官方網頁上漏掉2個需求。1.ftp server (直接yum安裝vsftp,不贅述)  2.vacation 程式)

      cd /usr/share/squirrelmail/plugins/
       
      wget http://www.squirrelmail.org/plugins/autorespond-0.5.1-1.4.tar.gz
       
      tar -zxvf autorespond-0.5.1-1.4.tar.gz 
       
      cd /usr/share/squirrelmail/config
       
      ./conf.pl
      
      # 選 8.  Plugins -> 將 Available Plugins: 內的 autorespond 加入模組 
      
      
    • 安裝 vacation 程式
      官方網站:http://www.csamuel.org/software/vacation
      直接抓最新版的來裝(目前為1.2.7.1)

      cd /tmp

      wget http://downloads.sourceforge.net/project/vacation/vacation/1.2.7.1/vacation-1.2.7.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvacation%2Ffiles%2Fvacation%2F1.2.7.1%2F&ts=1351066441&use_mirror=nchc

      tar -zxvf vacation-1.2.7.1.tar.gz

      cd vacation-1.2.7.1

      make


      執行make後會產生執行檔 vacation

      cp vacation /usr/bin




設定開機自動啟動:
chkconfig dovecot on
chkconfig httpd on
或是
ntsysv
進入services選擇
webmail網址:http://{host IP}/webmail

一開始登入時遇到
ERROR
Error connecting to IMAP server: localhost.
13 : Permission denied
這個錯誤訊息,找了老半天找不出結果,maillog也沒有紀錄,最後查到
setsebool httpd_can_network_connect=1
直接下這行就可解決。

檢測config狀況,可以瞭解SquirrelMail 哪邊出狀況
http://{host IP}/webmail/src/configtest.php

最後,我把seLinux關閉,他給我不少困擾....
vi /etc/selinux/config
SELINUX=disabled



reboot



參考:
http://blog.pmail.idv.tw/?p=363
http://www.wretch.cc/blog/jerry0822/13870081
http://www.fedoraforum.org/forum/archive/index.php/t-59291.html
http://www.ichiayi.com/wiki/tech/poppassd


更新日誌:
20121024
  • 更新change passwd模組安裝說明。原使用的模組需另外安裝poppassd server,但poppassd遇到密碼中有空白字元時會造成判斷錯誤。
  • 新增vacation(auto reply)安裝方式。