轉載自:https://www.cnblogs.com/operationhome/p/9056870.html
在使用qq等郵件服務器廠商提供的郵件服務后,發現他們的郵件發送數量是有限制的,隨着公司的業務的需求下,我們需要搭建一個郵件服務器,郵件服務器可以幫助我們在一些提醒方面和消息推送方面起到幫助。
理論性語句:
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等,如果不通的話需要更換服務器,因為此服務器商將這些給攔截了,
正常的現象是:
我們需要開放我們需要的端口,端口有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 配置:
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)
如果你想郵件服務器配置SSL,那么你可以看看centos7郵件服務器SSL配置
注意事項:
我們郵件服務器在設定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