顯示具有 Postfix 標籤的文章。 顯示所有文章
顯示具有 Postfix 標籤的文章。 顯示所有文章

2019年1月21日 星期一

[Linux] Postfix mail 常用命令以及除錯mailq

maildrop:本地郵件放置在maildrop中,同時也被拷貝到incoming中。
incoming:放置正在到達隊列或管理進程尚未發現的郵件。
active:放置隊列管理進程已經打開了並正準備投遞的郵件,該隊列有長度的限制。
deferred:放置不能被投遞的郵件。可能是推遲發送的郵件
啟動postfix
/usr/sbin/postfix start
停止postfix
/usr/sbin/postfix stop
檢查postfix配置檔
/usr/sbin/postfix check
顯示Postfix當前生效的配置信息
postconf -n
重新讀取postfix配置檔
/usr/sbin/postfix reload
查看隊列中的郵件:
mailq
postqueue -p
查看隊列大小
mailq | wc -l
postqueue -p | wc -l
查看信件內容
postcat -q Queue_ID
強制發送隊列中的郵件
/usr/sbin/postfix flush
postqueue -f
暫緩發送隊列中的問題郵件
postsuper -h Queue_ID
postsuper -h ALL deferred
解除暫緩發送的郵件
postsuper -H Queue_ID
postsuper -H ALL deferred
重新加入隊列:
postsuper -r Queue_ID
postsuper -r ALL
刪除指定郵件
postsuper -d Queue_ID
清空隊列中的郵件
postsuper -d ALL
# 刪除隊列中有問題的郵件(正在deferred列表中的郵件,直接刪除郵件文檔,可看出哪些信被刪除了 ):
postsuper -d ALL deferred
find /var/spool/postfix/deferred -type f -exec rm -vf {} \;
# find /var/spool/postfix/defer -type f -exec rm -vf {} \;
列出所有問題郵件(目前所有無法發送的郵件)
find /var/spool/postfix/deferred -type f -exec ls -l --time-style=+%Y-%m-%d_%H:%M:%S {} \;
刪除已經3天未發出的郵件
find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f {} \;
刪除超過5天的問題郵件的退信記錄(超過5天的 “defer” 列表中的退信)
find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f {} \;
# 以下是一些相關的日誌
查看系統日誌:
tail -f /var/log/messages
查看郵件日誌:基本很全面,幾乎所有遇到的郵件問題都可以通過該日誌來處理
tail -f /var/log/maillog

2017年10月13日 星期五

Centos Postfix Server安裝設定教學

Postfix軟體需求CentOS 6
(此編教學都是在CentOS 6下進行的,其它的Linux版本或是CentOS 5之前的版本可能不適用)
Postfix安裝
安裝指令
1
yum install postfix
CentOS 5之前預設的Mail Server服務是Sendmail,而在CentOS 6 後即是以Postfix當作預設的 Mail Server,Postfix比起Sendmail在設定上更容易上手,因此不需要像網路上其它的教學安裝system-switch-mail,因為system-switch-mail是用來將Sendmail切換成Postfix。
Postfix最主要的功能則是啟動SMTP的服務,也就是架設一台MTA(Mail Transfer Agent)。
Postfix設定
Postmail的主要設定都在”etc/postfix/main.cf”,編輯的方式如下
1
#vi /etc/postfix/main.cf
以下就來介紹要架設完一台MTA(也就是Mail Server的SMTP服務)的相關設定
1.設定Hostname,Hostname即是我們的郵件伺服器的主機名稱,是由英文字母或數字所組成,比如www.google.com或mail.google.com就是一個Hostname。Postmail的Hostname設定如下
尋找”#myhostname =”字串,預設會看到”#myhostname = host.domain.tld”和”#myhostname = virtual.domain.tld”這二行字串
請在這二行後面增加以下的字串設定即可
1
2
3
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = 你的主機名稱 #新增此行,約加在第77
2.設定網域名稱(Domain Name),主機名稱通常都是在建立在網域名稱之內,像是www.google.com則是網頁服務,mail.google.com則會是郵件主機服務,通常網域名稱都會是主機名稱(Hostname)去掉第一個掉包含前面的文字部份,比如說www.google.com的Domain則是google.com。 以下則是Postfix的網域名稱設定方法
尋找”#mydomain =”字串,預設會看到”#mydomain =domain.tld”
新增一行如下
1
2
#mydomain =domain.tld
mydomain = 你的網域名稱         #新增此行,約加在第  85
3.設定Origin Name,Origin Name是我們的郵件位址在”@”後面的文字內容,比如像是stnet253@gmail.com,gmail.com就是我們的Origin Name,而stnet253則是郵件擁有人的帳號名稱。以下為Postfix的Origin Name的設定。
尋找”#myorigin = $mydomain”字串,將”#”移除,變成
1
2
3
#myorigin = $mydomain                               #刪除此行

myorigin = $mydomain                 #新增此行,約加在第  100
4.設定 postfix 的監聽介面,Postfix預設只會監聽來自於本機端的所傳出的封包,必須使用下列設定,才可以傳收所有來自於網路端的所有封包。
尋找”#inet_interfaces = all”字串,將”#”移除 (表示此行Enable) 。
後面的”inet_interfaces = localhost”字串,在最前面加上”#”(表示disable此行設定)
此步驟的設定內容整理如下
1
2
3
4
inet_interfaces = all #修改此行,約在第 114
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, locatlhost
#inet_interfaces = localhost #修改此行,約在第 117 行
5.修改Postfix的通訊協定,目前網路的協定主流有IPv4與IPv6,在大部份的情況下,我們都是利用IPv4在通訊的,如果你的Mail Server沒有需要使用到IPv6,可以做以下的設定修改。
尋找” inet_protocols = all”字串,改成
1
inet_protocols = ipv4 #約在第 120
6.設定能收收信件的主機名稱,Postfix預設只能收到設定的Hostname與Domain Name以及本機端的信件,此步驟是再增加能收信件的網路名稱。
尋找”mydestination = $myhostname, localhost.$mydomain, localhost”字串,在最前面加入”#”(表示此行disable)。
將”#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain”的”#”移除(表示此行Enable)。
#mydestination = $myhostname, localhost.$mydomain, localhost
1
2
3
4
5
#修改此行,約在第 165行

mydestination = $myhostname, localhost.$mydomain, localhost, mydomain

#修改此行,約在第 166行
7.設定信任的用戶端,當要寄信時,會參考此值,若非信任的用戶,則不會幫你的信件轉到其它的MTA主機上
尋找”#mynetworks =”,在”#mynetworks = hash:/etc/postfix/networks”這行後面加上
1
2
3
4
5
#mynetworks = hash:/etc/postfix/networks

mynetworks = 127.0.0.0/8, 192.168.1.0/24, hash:/etc/postfix/access

#加入此行,約在268行
8.規範可以 relay 的 MTA 主機位址,通常這個都直接設為mydestination
尋找”#relay_domains = $mydestination”,將”#”移除,變成
1
relay_domains = $mydestination                 #修改此行,約在第 298
9.設定郵件別名的路徑
檢查” alias_maps”設定是否為以下字串設定
1
alias_maps = hash:/etc/aliases                     #約在第 388
10.設定指定郵件別名表資料庫路徑
檢查” alias_ database”設定是否為以下字串設定
1
alias_database = hash:/etc/aliases               #約在第 399
在main.cf的設定整理如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
myhostname = 你的主機名稱                    #約在第  77

mydomain = 你的網載名稱                        #約加在第  85

myorigin = $myhostname                             #約在第 100

inet_interfaces = all                       #約在第 114 行,117 行要註解掉

inet_protocols = ipv4                     #約在第 120

mydestination = $myhostname, localhost.$mydomain, localhost, mydomain  #約在第166

mynetworks = 127.0.0.0/8, 192.168.1.0/24, hash:/etc/postfix/access #約在268

relay_domains = $mydestination                 #約在第 298

alias_maps = hash:/etc/aliases                     #約在第 388

alias_database = hash:/etc/aliases               #約在第 399
11.設定完成後,請在終端機下輸入以下二行指令(詳細請參考後面章節” 設定郵件主機使用權限與過濾機制”及” 郵件別名”)

1
2
3
# postmap hash:/etc/postfix/access

# postalias hash:/etc/aliases
12.重啟postfix就可以利用smtp的服務收發信件,在終端機視窗下輸入

1
# service postfix restart
13.檢查SMTP服務是否開啟,如果有的話,輸入下列命列,會看到Port 25正在監聽的狀態

1
# netstat -tlunp | grep ':25'
Postfix測試
1.寄信測試
此時我們已經可以利用此台主機使用smtp收送電子郵件了, 利用mail指令來測試
mail root@網域名稱
Subject:Test
This is test mail
.
EOT
2.收信測試
當我們從內部或外部寄信過來時,預設的郵件存放位址如下:
/var/spool/mail(或 /var/mail)
從此目錄裡查看帳號名稱的檔案,我們所收發的信件都會存在這裡
如果使用 ip:222.222.222.222 的主機經由outlook smtp寄信 會被
554 5.7.1 <username@gmail.com>: Relay access denied
請在main.cf中mynetworks設定後面加入
1
mynetworks = 127.0.0.0/8, 192.168.1.0/24, hash:/etc/postfix/access

1
2
cd /etc/postfix
vi access
加入外寄允許的ip
222.222.222.222  OK
不允許smtp
222.222.222.222 REJECT
修改完畢後要下行

1
postmap /etc/postfix/access