郵件服務器(Postfix)
MUA(mail user agent)郵件用戶代理,幫助用戶讀寫郵件
MTA 郵件傳輸代理。把郵件由一個服務器傳到另一個服務器
MDA郵件投遞代理,把郵件放到用戶的郵箱裏
軟件: postfix
netstat -nuptl |grep 25 查看服務是否起來
主配置文件 /etc/postfix/main.cf
運行參數配置/etc/postfix/master.cf
訪問控制文件 /etc/postfix/access
別名數據庫文件/etc/aliases
虛擬別名域庫文件/etc/postfix/virtual
主配置文件
myhostname = 主機名
mydomain = 域名
myorigin = $mydomain設置由本級寄出去的郵件所使用的域名或主機名
inet_interfaces = all 設置postfix服務監聽的網絡接口
mydestination = $mydomain, $myhostname設置可接受郵件的主機名和域名
mynetwork = 設置可轉發哪些網絡的郵件
relay_domains 設置可轉發哪些網域的郵件
第一季
-----------------------小知識命令
Postconf –d 顯示默認配置
Postconf –v 顯示被更改的配置信息
首先關於郵件服務的工作原理這裏就不說了,如果明白了郵件服務器工作原理和郵件接收發送的原理就能明白下面的內容:
Postfix配置文件中,
myhostname =
mydomain =
myorigin = $mydomain
這3個都是被註釋掉的,所以要自己取消註釋並修改
然後
inet_interfaces =
文件默認監聽自己還回口的(其實默認是監聽所有的,但是因爲紅帽爲了安全,在開發的時候就將文件裏面的這個改成了監聽還回口了,所以我們postconf –d |grep inet 的時候看到的是inet_interfaces = all)
參數myorigin = $mydomain,我們來改這個參數
因爲mydestination限制了自己能接收誰的郵件,所以我們測試的時候要在後面添加baidu.com這個域,
我們在desktop1.example.com上發郵件給server.example.com
發送郵件
telnet主機
telnet localhost 25
hello
mail from :tom(注意這裏tom後面不能接後綴)
rcpt to:jack郵件發送給jack
data
可以直接寫郵件內容
test first mail
以. 結束
然後quit
pop3服務
軟件dovecot
依賴包perl-DBI-*
mysql-*
dovecot-*
配置/etc/dovecot.conf
protocols = pops
用pop3接受郵件
telnet localhost 110
user TOM
pass tom
list (查看文件)
retr n(數字)查看郵件
別名配置
在/etc/postfix/main.cf
中確認是否有
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
編輯/etc/aliases
(格式)別名:真實名
執行service postfix restart或者newaliases生效
postmap /etc/aliases
postalias /etc/aliases
域名別名
在/etc/postfix/main.cd中
加入
virtual_alias_domains = 域名
virtual_alias_maps = hash:/etc/postfix/virtual
編輯/etc/postfix/virtual
域名別名 真實域名
postmap /etc/postfix/virtual
service postfix restart
訪問控制
在主配置文件/etc/postfix/main.cf中加入
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
然後配置/etc/postfix/access文件
127.0.0.1 OK
192.168.1.1 REJECT丟棄並返回信息
example。com DISCARD丟棄且不返回信息
192.168.2.1 RELAY轉發
立即生效 postmap /etc/postfix/access
service postfix reload
ssl實現
1,創建密鑰
make -C /etc/pki/tls/certs創建指定目錄
make -C /etc/pki/tls/certs dovecot.pem制定文件名
編輯/etc/dovecot.pem
2變價配置文件/etc/postfix/main.cf 開啓pop3s並取消如下2行註釋
ssl_cert_file = /etc/pki/certs/dovecot.pem
ssl_key_file = /etc/pki/certs/dovecot.pem
ssl_disable = no
3,立即生效
service dovecot restart
netstat -nutl |grep LINTEN
TLS(安全傳輸層協議)
服務:master和子進程,子進程間沒有父子關係
tcp(smtp) 25
tcp(tls) 465
配置文件:
/etc/postfix/main.cf
/etc/postfix/master.cf
/etc/postfix/*
/etc/alias
安裝postfix後要確定使用postfix
yum -y install system-switch-mail
選擇使用postfix爲默認郵件服務器
system-switch-mail
或者alternatives --config mta
service sendmail stop
chkconfig sendmail off
ps aux |grep postfix顯示有2個服務,其實後天是有21個服務在運行
大部分程序都運行在低權限上
每個單獨程序是分開的
沒有suid功能
可以實現內存動態分配,防止內存溢出
防止高負載
由master進程控制,沒有父子進程關係,
進程可以相互調用
當接受郵件大於處理隊列郵件能力的時候,或者達到負載的時候,就會先去處理接受郵件,而停止處理隊列郵件,因爲處理接受郵件的延遲比處理隊列郵件小!
master服務控制所有進程
管理21個子進程,可以選擇讓他運行哪些子服務
服務的管理是有/etc/postfix/master.cf
其中
第一列service表示服務類型
第二列private表示是否爲私有類型,默認爲yes(-表示默認,n表示不是)
第三列unpriv表示是否不是私有類型
第四列wakeup表示多久喚醒一次服務,例如
表示每60秒喚醒一次,這個設置主要是因爲如果每個服務都開啓,會浪費資源。
第五列maxpro表示最大的進程數
第六列command+args表示執行的命令和標誌
下面使用ps aux |grep 25會發現服務只監聽了25,並沒有監聽465(tls)
這裏可以讓服務同時監聽tls
做一下更改
將這3行註釋取消
表示強制只監聽465,也就是說不會監聽25了
郵件的接受
4個隊列:maildrop本地郵件放置在maildrop中,同時也被拷貝到incoming中。
incoming 放置正在到達或隊列管理進程尚未發現的郵件。
active 放置隊列管理進程已經打開了並正準備投遞的郵件,該隊列有長度的限制。
deferred放置臨時不能被投遞的郵件
corrupt 不可達或者損壞的郵件,每隔15分鐘嘗試發送一次
hold 如果一份郵件嘗試很長時間發送不出去就放在此目錄,表示不會再去發送了
在郵件服務器之間接受和發送郵件是使用的smtp
當一個郵件服務器A發送郵件給郵件服務器B時,先將郵件放在mialdrop隊列中,然後再由pickup這個服務去讀取隊列中的郵件,然後pickup和smtpd將郵件傳遞給cleanup這個服務(cleanup服務是將郵件傳遞給用戶的信箱裏,他可以負責內容檢測,過濾,頭部信息檢查),檢查完郵件,就傳遞給incoming隊列中區,然後通知qmgr這個進程
郵件的傳遞
正常的郵件都在/var/spool/postfix/incoming中
postfix中是有很多隊列目錄的
local服務負責本地的郵件間傳遞
smtp有用其他郵件服務器之間傳遞
隊列
postfix的隊列目錄在/var/spool/postfix
sendmail的隊列目錄在/var/spoll/mquque
postqueue -p 查看隊列中是否有郵件存在
postconf工具
默認是顯示和編輯/etc/postfix/main.cf
不加任何參數把默認和非默認的參數都顯示出來
-n非默認設置
-d默認設置
-e修改配置(postconf -e "mynetworks=192.168.0.0/24")
這裏是定義不僞裝的用戶,與myorigin相反,可以互補使用
中繼實驗演示
安全
這個是限制用戶通過vrfy命令探測服務器上的用戶信息。
默認是開啓的,所以我們這裏要關閉這個功能
下面演示一下如果沒有屏蔽vrfy功能,客戶端對服務器的操作
這裏可以看出,客戶很容易就測試出服務器上是否有user1這個用戶了!
所以我們
這個可以看到默認是沒有關閉vrfy功能的,所以我們將這行參數追加到main.cf文件裏,然後將no改爲yes
重啓服務後,再來測試一下
然後看一下另一個參數
這裏默認是關閉的,主要是指,本地用戶給郵件服務器發送郵件時,必須先要發送helo或者ehlo ,不然將無法把郵件成功發送到郵件服務器,這是對本地用戶來設置的,
對外用戶(其他郵件服務器)也可以做這個限制
這個意思就是外服務器想自己發送郵件的時候也要先發送helo
預防DOS***
這個參數默認值爲1
,
意思是當服務器接受郵件頻率過高(每秒接受的郵件數超過1封),則郵件服務器會拒絕工作。
local_destination_concurrency_limit=2,默認爲2
這個參數主要是,如果當同時給一個郵箱發送郵件數量超過2個時,就會認爲有人***
這個參數是限制一些內容中有通配符等字符串的郵件,主要是避免一些腳本在服務器上執行
默認是沒有啓用的,所以要導入到main.cf文件中,並改爲yes
/etc/postfix/access文件,主要用於屏蔽或者垃圾郵件過濾
這裏可以看到定義access文件時,先是用戶,然後是工作
下面的是一些其他的參數,這裏可以根據實際情況做多個更改
這裏是access文件中的內容,可以看到這裏嗎,默認的參數是check_client_access,
當然,可以根據實際情況來更改爲上面的那些參數
下面就要將這2行配置拷貝到/etc/postfix/main.cf中,
這裏也可以看到,當要用到多個參數的時候,是要用“,”分開的,(注意後面不一定就是要寫access文件,也可以定義自己的文件,但是要按access的模板來寫,)
然後編輯access文件
這裏表示,如果來自192.168.0.0的主機想通過我中繼,則會被我拒絕。
下面測試:
首先重啓postfix服務,然後要postconf /etc/postfix/access 來生成相應 的庫文件
黑名單列表
DNS黑洞列表
把一個我認爲是發垃圾郵件的服務器給拒絕掉,在dns服務器中給目標主機做個dns的反解,然後將下面的主機名改爲dns反解的ip
垃圾郵件過濾
對進來的郵件進行過濾,並告知被拒絕的對方郵件被拒絕(sendmail是不會退信告訴對方的)
postfix默認不啓用procmail和防垃圾郵件機制
這裏可以看到,默認是沒開啓的,
所以我們將mailbox_command導入到main.cf中,然後加上procmail文件所在的路徑
然後給procmail這個文件加上sgid
爲什麼要加sgid,是因爲每次傳遞過來的郵件,當執行procmail命令的時候就可以以mail這個組員的身份來執行,然後把郵寄放在/etc/spool/mail中
主要對4個方面進行過濾:
1,對郵件頭(主題)過濾 header_checks
2,對郵件的附件過濾 mime_header_checks
3,對郵件內容過濾 body_checks
4,對郵件大小過濾 body_checks_max_size(默認爲10M)
可以使用mutt直接發送郵件
開始做過濾
這裏的header_checks表示對郵件的主題過濾,這個文件是一個模板
首先在主配置文件main.cf中加入這樣一句話:
(在header_checks文件中說明了
)
當然在主配置文件中是可以定義多個規則的,
如
這裏就定義了對郵件主題,郵件中附件和郵件內容進行過濾,然後就要具體指明過濾規則了,所以就要去編輯後面對應的三個文件(這3個文件名可以隨意,但是改爲與前面的一樣,易於分辨)
下面就可以將模板複製成剛剛定義的文件
如
編輯
這裏前面的寫法可以使用正則表達式,中間reject表示採取的動作,後面表示退信內容
其他相應的文件,寫法一樣
!!!注意對附件進行過濾的時候需要拷貝模板中的一段話,然後做更改:
這裏可以看到我們複製了一下,然後更改成當附件包含有exe doc xls ppt結尾的附件時,就被拒絕
然後同樣使用mutt來測試
注意了,上面的這些操作其實都是procmail在進行的,所以必須將procmail打開
啓用sasl(simple authentication and security layer)和tls(transportation layer securityy)
sasl就是smtp的傳輸對用戶發送郵件時需要身份驗證
,tls就是安全的傳輸層協議,就是用來加密的
mkdir /etc/postfix/certs
將自己的私鑰,簽名後的證書和ca的證書都複製到certs目錄中
然後啓用tls
首先第一行查看的是要指向私鑰的
第二行是指向證書的
第三行是指向ca的證書
是否啓用日誌,默認爲0關閉
最後更改主配置文件如下
啓用sasl
兼容老的sasl版本的認證
匿名用戶不能發送
最後配置文件爲如下:
第一行表示,允許登錄的網絡用戶,允許通過sasl認證的用戶,拒絕不通過認證的
然後啓用2個服務
測試: