Linux下centos7搭建postfix郵件服務器系統
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
現在雖然有很多的免費郵局,不過我們發送的郵件有時候很多,或者很多同事在用,價格就會昂貴,其實并不是垃圾郵件,就是與其他廠商來交互的郵件,這時候就需要自己建立一個郵局比較好,下面我們就來說說centos7搭建postfix郵件系統;
1. 郵件系統的簡單介紹:
電子郵件系統基于郵件協議來完成電子郵件的傳輸,常見的郵件協議有下面這些。
簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP):用于發送和中轉發出的電子郵件,占用服務器的25/TCP端口。
郵局協議版本3(Post Office Protocol 3):用于將電子郵件存儲到本地主機,占用服務器的110/TCP端口。
Internet消息訪問協議版本4(Internet Message Access Protocol 4):用于在本地主機上訪問郵件,占用服務器的143/TCP端口。
一個最基礎的電子郵件系統肯定要能提供發件服務和收件服務,為此需要使用基于SMTP協議的Postfix服務程序提供發件服務功能,并使用基于POP3協議的Dovecot服務程序提供收件服務功能。這樣一來,用戶就可以使用Outlook Express或Foxmail等客戶端服務程序正常收發郵件了。
實際操作:
- 準備環境?,開放需要的端口,并卸載sedmail,域名解析配置,修改hostname
- 安裝并且配置好postfix發件服務
- 安裝并且配置好dovect收件服務
- 測試,檢查發送情況。
2. 準備環境:
?首先我們檢查我們的服務器能否telnet通我們要發送的一些郵件服務商的端口,比如qq,163,gmail等,如果不通的話需要更換服務器,因為此服務器商將這些給攔截了,
正常的現象是:出現220字樣才是正常的。
以下命令不需修改,復制執行即可
yum install xinetd telnet telnet-server -y
telnet smtp.qq.com 25
我們需要開放我們需要的端口,端口有25(SMTP服務,用于發送郵件),110(pop3服務,用于接收郵件)143(imap服務,用于接收郵件)
如果你只想用pop3服務,那么我們只需要打開110和25端口即可,如果我們使用了ssl的話,
pop3就需要開放我們的465(發件)?995(收件)端口
imap就需要開放我們的465(發件)?993(收件)端口
2.1 開放端口:
firewall-cmd --add-port=25/tcp --permanent firewall-cmd –-add-port=110/tcp --permanent firewall-cmd --reload
2.2?移除sendmail
rpm -e sendmail 或者 yum remove sendmail
2.3?域名解析配置
我們需要添加A記錄和mx記錄。首先添加A記錄解析到我們的服務器ip。
2.4?mx 記錄
在需要填入值的地方填入我圖片中的對應字符。
2.5?修改hostname
hostnamectl set-hostname mail.域名
2.6 修改MTA(默認郵件傳輸代理)
alternatives --config mta
然后直接回車即可。
檢查一下是不是已經設置成功了。
alternatives --display mta
第一行可以看到mta的狀態。 例如:mat - status is manual.就是ok了。
3. POSTFIX
postfix是提供發件服務的(注意:修改配置文件需備份,以下步驟未包含備份。)
postfix服務程序主配置文件中的重要參數。
參數 | 作用 |
myhostname | 郵局系統的主機名 |
mydomain | 郵局系統的域名 |
myorigin | 從本機發出郵件的域名名稱 |
inet_interfaces | 監聽的網卡接口 |
mydestination | 可接收郵件的主機名或域名 |
mynetworks | 設置可轉發哪些主機的郵件 |
relay_domains | 設置可轉發哪些網域的郵件 |
3.1 安裝 postfix
在centos7里我們的postfix是系統自帶的,但是centos7以前的版本是默認不帶的,centos7版本以前是sendmail
如果沒有則安裝 :
yum install postfix
3.2 配置:
1
|
vim? /etc/postfix/main .cf |
修改內容:
# 75行: 取消注釋,設置hostname myhostname = mail.abc.com # 83行: 取消注釋,設置域名 mydomain = abc.com # 99行: 取消注釋 myorigin = $mydomain # 116行: 默認是localhost,我們需要修改成all inet_interfaces = all # 119行: 推薦ipv4,如果支持ipv6,則可以為all inet_protocols = ipv4 # 164行: 添加 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 264行: 取消注釋,指定內網和本地的IP地址范圍 mynetworks = 127.0.0.0/8 # 419行: 取消注釋,郵件保存目錄 home_mailbox = Maildir/ # 571行: 添加 smtpd_banner = $myhostname ESMTP # 添加到最后 # 規定郵件最大尺寸為10M message_size_limit = 10485760 # 規定收件箱最大容量為1G mailbox_size_limit = 1073741824 # SMTP認證 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
以上對應的對應的行數位置可能隨著版本不同會有差異。具體的一些參數含義在本小節前面有解釋
3.3 開啟postfix服務并添加到系統自啟。
systemctl restart postfix systemctl enable postfix
4. 安裝并配置dovecot
???????4.1 安裝dovecot
yum install dovecot
4.2 配置dovect
編輯文件dovecot.conf
vim /etc/dovecot/dovecot.conf
更改內容:
# 26行: 如果不使用IPv6,請修改為* listen = * #在主配置文件中的第48行,設置允許登錄的網段地址,也就是說我們可以在這里限制只有來自于某個網段的用戶才能使用電子郵件系統。如果想允許所有人都能使用,則不用修改本參數 login_trusted_networks = 192.168.10.0/24更改內容
編輯文件10-auth.conf
vim /etc/dovecot/conf.d/10-auth.conf
更改內容:
# 9行: 取消注釋并修改 disable_plaintext_auth = no # 97行: 添加 auth_mechanisms = plain login
編輯文件10-mail.conf
vim /etc/dovecot/conf.d/10-mail.conf
更改內容:
# 30行: 取消注釋并添加 mail_location = maildir:~/Maildir
編輯文件10-master.conf
vim /etc/dovecot/conf.d/10-master.conf
更改內容:
# 88-90行: 取消注釋并添加 # Postfix smtp驗證 unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }
注意:如果我們沒有使用ssl的話需要進行下面的操作。使用了則不需要。
編輯文件10-ssl.conf
vim /etc/dovecot/conf.d/10-ssl.conf
更改內容
# 8行: 將ssl的值修改為 ssl = no
啟動dovecot并添加到開機自啟。
systemctl restart dovecot systemctl enable dovecot
5. 收發郵件測試
???5.1 創建用戶
郵件的用戶是和系統用戶一致的,也就是說系統用戶可以當做郵件用戶。
創建用戶并設置密碼
useradd admin passwd admin
?5.2 使用foxmail進行登陸
1中我們需要選擇我們之前開放端口對應的服務器類型。
2中 我們只需要填入我們的用戶名,例如admin,root
3中 我們收件和發件都填入我們的mail.域名。例?mail.abc.com
4?中 我們如果使用了ssl的話就需要勾選,如果沒有使用的話就不需要勾選
入相應信息后我們即可登陸了。然后我們可以進行收發郵件了,我們可以測試給自己的qq發一封郵件.
如果我們查看日志發現?status=bounced ,那么就意味著qq的郵件服務器將我們這個服務器IP設為惡意IP,不接收這個IP發送的郵件。也就意味著如果我們要發郵件到qq郵箱的話,就需要更換服務器ip。
如果狀態是上面的話,就意味著可以正常發送,還要注意一點的就是我們郵件服務器的郵件很多時候會被放在垃圾箱里,所以當你發送了郵件你在收件箱沒看到,你可以去垃圾箱里面看看有沒有。接收方面一般沒有什么問題,用qq郵箱發送給自己即可(admin@abc.com)
?注意事項:
我們郵件服務器在設定mynetworks?這個值的時候,一行不要設置all,因為會有很多服務器會將你的服務器作為中轉郵件服務器,最終導致的你的郵件服務器發送的郵件被qq,163,gamil,這些郵件服務商標記為垃圾郵件。
當某天我們檢查我們的mail日志(/var/log/maillog)時發現很多郵件發送,而且郵件不是我們自己產生的話,那么我們的郵件服務器是出了問題的
這時我們服務器一定有很多郵件堆積,然后自己郵件會發不出去。
我們需要做的操作:檢查
du -sh /var/spool/postfix/*
查看目錄下的defer和deferred的目錄大小,通過postqueue –p來查看隊列的郵件,通過postsuper -d ALL?刪除所有的隊列郵件。
?最后附上屏蔽刷postfix的 IP腳本
#!/bin/bash LOGFILE="/var/log/maillog" #統計maillog中authentication failure的IP個數與IP grep "authentication failure" $LOGFILE|awk '{print $7}'|grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"|sort|uniq -c > af_iplist.txt #取出AF出現大于300次時的IP awk '$1>300 {print $2}' af_iplist.txt > block_ip_list.txt #大于300次AF的IP添加到iptables中 cat block_ip_list.txt|while read line do /sbin/iptables -nL | grep $line if [ $? != 0 ] then iptables -I INPUT -s $line -j DROP fi done
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!