在使用qq等郵件服務器廠商提供的郵件服務後,發現他們的郵件發送數量是有限制的,隨着公司的業務的需求下,咱們須要搭建一個郵件服務器,郵件服務器能夠幫助咱們在一些提醒方面和消息推送方面起到幫助。html
理論性語句:linux
電子郵件系統基於郵件協議來完成電子郵件的傳輸,常見的郵件協議有下面這些。vim
簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP):用於發送和中轉發出的電子郵件,佔用服務器的25/TCP端口。centos
郵局協議版本3(Post Office Protocol 3):用於將電子郵件存儲到本地主機,佔用服務器的110/TCP端口。bash
Internet消息訪問協議版本4(Internet Message Access Protocol 4):用於在本地主機上訪問郵件,佔用服務器的143/TCP端口。服務器
一個最基礎的電子郵件系統確定要能提供發件服務和收件服務,爲此須要使用基於SMTP協議的Postfix服務程序提供發件服務功能,並使用基於POP3協議的Dovecot服務程序提供收件服務功能。這樣一來,用戶就可使用Outlook Express或Foxmail等客戶端服務程序正常收發郵件了。dom
實際操做:tcp
首先咱們檢查咱們的服務器可否telnet通咱們要發送的一些郵件服務商的端口,好比qq,163,gmail等,若是不通的話須要更換服務器,由於此服務器商將這些給攔截了,post
正常的現象是:測試
咱們須要開放咱們須要的端口,端口有25(SMTP服務,用於發送郵件),110(pop3服務,用於接收郵件)143(imap服務,用於接收郵件)
若是你只想用pop3服務,那麼咱們只須要打開110和25端口便可,若是咱們使用了ssl的話,
pop3就須要開放咱們的465(發件) 995(收件)端口
imap就須要開放咱們的465(發件) 993(收件)端口
firewall-cmd --add-port=25/tcp --permanent firewall-cmd –-add-port=110/tcp --permanent firewall-cmd --reload
rpm -e sendmail 或者 yum remove sendmail
咱們須要添加A記錄和mx記錄。首先添加A記錄解析到咱們的服務器ip。
在須要填入值的地方填入我圖片中的對應字符。
hostnamectl set-hostname mail.域名
alternatives --config mta
而後直接回車便可。
檢查一下是否是已經設置成功了。
alternatives --display mta
第一行能夠看到mta的狀態。 例如:mat - status is manual.就是ok了。
postfix是提供發件服務的(注意:修改配置文件需備份,如下步驟未包含備份。)
postfix服務程序主配置文件中的重要參數。
參數 |
做用 |
myhostname |
郵局系統的主機名 |
mydomain |
郵局系統的域名 |
myorigin |
從本機發出郵件的域名名稱 |
inet_interfaces |
監聽的網卡接口 |
mydestination |
可接收郵件的主機名或域名 |
mynetworks |
設置可轉發哪些主機的郵件 |
relay_domains |
設置可轉發哪些網域的郵件 |
在centos7裏咱們的postfix是系統自帶的,可是centos7之前的版本是默認不帶的,centos7版本之前是sendmail
若是沒有則安裝 :
yum install postfix
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
以上對應的對應的行數位置可能隨着版本不一樣會有差別。具體的一些參數含義在本小節前面有解釋
systemctl restart postfix
systemctl enable postfix
yum install dovecot
編輯文件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
郵件的用戶是和系統用戶一致的,也就是說系統用戶能夠當作郵件用戶。
建立用戶並設置密碼
useradd admin passwd admin
1中咱們須要選擇咱們以前開放端口對應的服務器類型。
2中 咱們只須要填入咱們的用戶名,例如admin,root
3中 咱們收件和發件都填入咱們的mail.域名。例 mail.abc.com
4 中 咱們若是使用了ssl的話就須要勾選,若是沒有使用的話就不須要勾選
填入相應信息後咱們便可登錄了。而後咱們能夠進行收發郵件了,咱們能夠測試給本身的qq發一封郵件.
若是咱們查看日誌發現 status=bounced ,那麼就意味着qq的郵件服務器將咱們這個服務器IP設爲惡意IP,不接收這個IP發送的郵件。也就意味着若是咱們要發郵件到qq郵箱的話,就須要更換服務器ip。
若是狀態是上面的話,就意味着能夠正常發送,還要注意一點的就是咱們郵件服務器的郵件不少時候會被放在垃圾箱裏,因此當你發送了郵件你在收件箱沒看到,你能夠去垃圾箱裏面看看有沒有。接收方面通常沒有什麼問題,用qq郵箱發送給本身便可(admin@abc.com)
若是你想郵件服務器配置SSL,那麼你能夠看看centos7郵件服務器SSL配置
咱們郵件服務器在設定mynetworks 這個值的時候,一行不要設置all,由於會有不少服務器會將你的服務器做爲中轉郵件服務器,最終致使的你的郵件服務器發送的郵件被qq,163,gamil,這些郵件服務商標記爲垃圾郵件。
當某天咱們檢查咱們的mail日誌(/var/log/maillog)時發現不少郵件發送,並且郵件不是咱們本身產生的話,那麼咱們的郵件服務器是出了問題的
這時咱們服務器必定有不少郵件堆積,而後本身郵件會發不出去。
咱們須要作的操做:檢查
du -sh /var/spool/postfix/*
查看目錄下的defer和deferred的目錄大小,經過postqueue –p來查看隊列的郵件,經過postsuper -d ALL 刪除全部的隊列郵件。
#!/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
參考文檔: