|
|
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已! |
|
恭喜您是本站第 1672330
位訪客!
登入 | 註冊
|
|
|
|
發表者 |
討論內容 |
冷日 (冷日) |
發表時間:2012/11/20 7:26 |
- Webmaster
- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]用 SendMail 建立備援交換站
- __用 SendMail 建立備援交換站 ( Backup MX )︰
說明︰ ﹒『我們的郵件並非真的完全轉到下一個 MX 主機接收﹐而是先將郵件 暫時佇列( queue ) 在那台機器上﹐當原來的 MX 主機恢復連線之後﹐郵件會 自動的從佇列主機那邊送回來』
﹒Backup MX 以 SendMail 為基礎以 Mailscanner 搭配 clamav 和 greylist 及 ORDB 資料庫做檢查!
﹒所有的觀念及設定皆來自 Study-Area 網友所提供的,並非原創只是 加以整理及實做後重新發表。~特此說明~
__方法如下︰ 在 DNS Server 上設定如下﹕
$ORIGIN my.domain.com.
@ IN MX 10 a.my.domain.com.
@ IN MX 20 b.my.domain.com.
a IN A 1.2.3.4
b IN A 1.2.3.5
接下來在 a 機器上面做如下動作﹕
echo "my.domain.com" >> /etc/mail/local-host-names
echo "a.my.domain.com" >> /etc/mail/local-host-names
service sendmail restart
再於 b 機器上面做如下動作﹕
echo "b.my.domain.com" >> /etc/mail/local-host-names
echo "my.domain.com RELAY" >> /etc/mail/access
echo "a.my.domain.com RELAY" >> /etc/mail/access
makemap hash /etc/mail/access.db < /etc/mail/access
service sendmail restart
# 注意﹕ 在 b 機器上的 /etc/mail/local-host-names 檔案中不能有 my.domain.com ﹗ 否則會視為 local 而不是 queue ﹐請再三確認。
__另須製作 SSH RSA Key 不用密碼可立即登入的 Server User 架設方式可參考鳥哥網站!網址如下︰ http://linux.vbird.org/linux_server/031 ... sshdconfig
~僅做重點說明︰ ﹒Mail(主要) SSH Server Config 檔: 因我須保有原有 pam 認證及新的 RSA Key 免密碼登入,雙重模式!
# vi /etc/ssh/sshd_config
PermitRootLogin no
...
PasswordAuthentication yes # 改成 no,這樣子沒有私鑰就會無法登入了
...
RSAAuthentication yes # 是否使用純的 RSA 認證!?僅針對 version 1 !
PubkeyAuthentication yes # 是否允許 Public Key ?當然允許啦!僅針對 version 2
AuthorizedKeysFile .ssh/authorized_keys # 使用不需要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名!
...
#PermitEmptyPasswords no
需注意︰ _1. 產生 RSA Key 必須用 Client 端產生,本例是在 (Backup MX) 主機上用 root user 去產生 id_rsa (私鑰)及 id_rsa.pub(公鑰) _2. 在 Mail (主要) 主機上,指定登入 user 帳號下擺入 id_rsa.pub 檔案在 [UserHome]\.ssh 目錄下產生 authorized_keys 檔案! cat ../id_rsa.pub >> authorized_keys _3. 檢查 Mail (主要) 主機上, ﹒userhome 目錄下 ~./ssh 是否是 744 的權限 ﹒檢查是否存在 ~/.ssh/authorized_keys ﹒並且 ~/.ssh/authorized_keys 的權限是否是 644 _4. 當 Backup MX 主機上第一次執行,請依下列步驟︰
# cd
# cd .ssh
# rm -f known_hosts
# cd ..
# ssh test@10.10.20.20 [該 ip 為 Mail (主要) 機器]
The authenticity of host '10.10.20.20 (10.10.20.20)' can't be established.
RSA key fingerprint is 07:d2:a4:93:b7:99:b2:39:2a:45:db:e1:6f:c7:d8:32.
Are you sure you want to continue connecting (yes/no)?yes
你會發現該 Key 值並非原先透過 # ssh-keygen -t rsa 所產生 Key 值一樣,不要擔心請按 yes 就完成!下次再重 run 一次就 直接登入。
重點回顧︰ Client 必須製作出 Public & Private 這兩把 keys,且 Private 需放到 ~/.ssh/ 內; Server 必須要有 Public Key ,且放置到使用者家目錄下的 ~/.ssh/authorized_keys;
__重頭戲要上演了!雖然建立備援交換站 (Backup MX)已可正常工作,但 實際上確發生一大推已離職員工或不存在 user 被由 Mail (主要)機器 退回 mail 而 queue 住(因 mail header 已被 Backup MX 改寫),久而 久之到達 queue 上限而造成 Backup queue Mail Server 停擺!
雖然可定時擺入 crontab 以 Shell scripts 方式去 kill sendmail queue 但並非完美方式;經參加 study-area 舉辦 1/27 日研討會,得知其他 網管其作法是將 mail 帳號產生一份清單擺在 Backup queue MX 主機上去 驗證使用者,就可以解決此問題!
~作法如下︰ ﹒主要主機 postfix 是採用 PAM 機制,故寫一隻 Shell scripts ! 去抓取 /etc/passwd 檔產生使用者清單,程式碼如下︰
# vi /etc/rc.d/emaills
# >>>>>>>>>> The filename "naliases" must be
# >> NOTE >> manual add eMail User aliases
# >>>>>>>>>> please add root account
#
cd /etc/rc.d
echo -e "# $(date) " > rcptlist
cat /etc/passwd |awk -F":" '$3>=500 && $3 <=60000 {printf("%s@aaa.com.tw\n",$1);}' >> rcptlist
cat /etc/postfix/naliases >> rcptlist
上述中 email 別名檔,是由手動方式去維護 naliase 檔案,必竟不多且變動不大 因只須存入不存在帳號使用者,及要收 Backup MX 主機上帳號!
# chmod 666 rcptlist ←─ 一定要變更為 rw 權限,讓由 Backup MX 主機啟動 ssh 指令 透過非 root user 去執行!
~備援交換站 ( Backup MX )︰
# vi /etc/mail/up_account
cd /etc/mail
rm -f rcptlist
ssh test@10.10.20.20 /etc/rc.d/emaills
scp -p test@10.10.20.20:/etc/rc.d/rcptlist .
if [ -f /etc/mail/rcptlist ]; then
makemap hash -er /etc/mail/rcptlist < /etc/mail/rcptlist
fi
# chmod 755 up_account
新增 crontab 排程! 由於採用 eMail 帳號清單,是否開放 relay 功能!故必須修改此檔 或者將此地帳號加入 naliases 檔案內即可。
# vi /etc/crontab
...
30 11 * * * root /etc/mail/up_account > /dev/null 2>&1
00 17 * * * root /etc/mail/up_account > /dev/null 2>&1
# /etc/rc.d/init.d/crond restart
# cat /etc/mail/rcptlist
james@abc.om
rock@abc.com
1.將下面加入sendmail.cf中. 直接手動加入 sendmail.cf 原本 sendmail.cf 中,應有一行 SLocal_check_rcpt,
修改如下即可!只需採用其中一個範例即可! (注意中間是 Tab,幾個沒差)
2.規則為當進來的recipient email address不存在 rcptlist中, 就 reject. 規則也可以 discard. 熟 sendmail,就好應用.試試看
# vi /etc/mail/sendmail.cf
__尋找 SLocal_check_rcpt 位置(約 1251 行),將下列範例全部置換!
~例 1︰(reject)
Krcptlist hash -m -a% /etc/mail/rcptlist
SLocal_check_rcpt
R$*<$*>$*[tab]$: $2
R$*[tab]$: $(rcptlist $1 $:? $) $| $1
R?$|$*[tab]$#error $@ 5.7.1 $: "550 Relaying denied"
R$*[tab]$@ ok
~例 2︰(discard)
Krcptlist hash -m -a% /etc/mail/rcptlist
SLocal_check_rcpt
R$*<$*>$*[tab]$: $2
R$*[tab]$: $(rcptlist $1 $:? $) $| $1
R?$|$*[tab]$#discard $: discard
R$*[tab]$@ ok
附 註︰ 刪除 sendmail eMail queue shell scripts 如下︰
# cat /etc/mail/killmail
su -l root -c '/etc/rc.d/init.d/MailScanner stop'
sleep 3
su -l root -c '/etc/rc.d/init.d/sendmail stop'
sleep 1
# fixed Argument list too long
cd /var/spool/mqueue
ls -C1 |xargs -i rm {}
su -l root -c '/etc/rc.d/init.d/MailScanner start'
到此完成後!就打造完美 Mail System 僅此拋磚引玉, 給有需求網友作參考!
原文出處:鳥哥的 Linux 私房菜-新手討論區 • 檢視主題 - [分享] Postfix 進階篇
|
|
討論串
|