proxmox mail gateway 初體驗

偏安太久, 直到遇上了 節神(節省工具箱)

前一陣子偶花很多時間將 esxi 重心改成proxmox ve, 好不容易告一段落.

但是節神又丟出來 mail gateway 這個怪獸,

原來是 proxmox mail gateway(PMG) 開源了(open-source software license GNU AGPL,v3).

這很不得了!

早在 2007 咖啡偶就開始使用 mail gateway 這個概念來過濾郵件, 過濾後才丟到公司內部郵件伺服器.

偶們公司的 mail gateway 使用 linux + postfix + amavisd-new 的方式,

設定極其複雜,  當時還無法透過套件安裝 , 要自行下載甚至編譯 perl 相關模組, 才能使用,

過了幾年為了能達到公司 SSO(single sign on) 的要求, 還研究好久 , 讓 mail gateway 與公司的網域主控站結合,

慘的是公司網域使用工號登入, 工號與郵件名稱又不一樣, 設定起來夭壽雜亂, 設定好之後就不敢動, 也怕動.

但還有些好處, 新人來的時候, 可以拿這個威風一下,  瀟灑地把秘笈丟過去.

現在裝了proxmox mail gateway 5.2 (pmg) , 真想罵髒話(哎喲, 我是彰化人...) ,  居然可以輕易取代公司目前使用的mg.

這裡記下一些設定上的眉角:

1.  綁定網域主控站( ldap )

但是要注意一些相關屬性, 例如Base DN(確認帳號是否存在), BaseDN for Groups(確認是否有此群組) , Email 存放在哪個屬性

2.1 設定Who Objects, 這將用來查詢帳號是否在ldap 裡面

新增一個who物件, 於這個物件中綁定步驟1的ldap設定 , 並且務必指定 Unknow LDAP address, 代表無此帳號的意思

2.2. 設定aliases, 因為原本mail gateway 並沒有aliases這個機制, 但公司的郵件伺服器有aliases, 這時候可以這樣做

2.3 設定危險內容(exe, java ,或是副檔名是vbs, shs, 偶是額外加上ace這個副檔名)

3. 新增規則

規則號碼越高,越優先執行,rules with higher priority are executed first

以下範例, 請依現況調整優先順序(但是aliases必須要在ldap之前),  

Rule: 100 若符合aliases就通過

Rule: 99  若在ldap搜尋不到該email , 就阻擋 

Rule: 98 若符合危險內容就阻擋

4. 設定Relay Domains

5.

5.設定轉寄到內部郵件伺服器

6.

6. 取消灰名單, 以前的經驗告訴偶, 不要啟用這東西, 因為跟公司往來的客戶或廠商, 並不見得有好的mail server

7. 取消寄發到使用者的報表,別讓使用者覺得困擾

8. 一般來說,初體驗會很high, 但是久了就淡了, 因此可以考慮取消各式各樣的報表 status report , 有空再來看就好了

systemctl stop pmgreport.timer

9. 設定 TLS 讓pmg的網頁, 與郵件傳輸使用TLS加密的方式傳輸

9.1 確認是否有DNS CAA

pmg網站需要設定一個對外ip, 與對應dns名稱, 並確保有Certificate Authority Authorization (CAA)功能, 請參閱這裡

9.2 ssh 登入pmg

9.3 取得憑證

安裝工具以便取得免費的證書 LetsEncrypt

apt-get install certbot

certbot certonly --standalone --preferred-challenges http -d <主機dns名稱>

ps. 成功後會在 /etc/letsencrypt/live/<主機名稱>  找到相關的證書, 需要有fullchain.pem , privkey.pem

9.4. 設定憑證

將 fullchain.pem , privkey.pem 合併成一個pem檔案, 並且取代/etc/pmg/pmg-tls.pem  , /etc/pmg/pmg-apt.pem

新增並修改renew.sh內容如下

vi /etc/pmg/renew.sh

#!/bin/bash

/usr/bin/certbot renew

/bin/cat /etc/letsencrypt/live/<主機dns名稱>/fullchain.pem /etc/letsencrypt/live/<主機dns名稱>/privkey.pem  > /etc/pmg/pmg-tls.pem
/bin/cat /etc/letsencrypt/live/<主機dns名稱>/fullchain.pem /etc/letsencrypt/live/<主機dns名稱>/privkey.pem  > /etc/pmg/pmg-api.pem
/bin/chmod 600 /etc/pmg/pmg-tls.pem
/bin/chmod 640 /etc/pmg/pmg-api.pem
/bin/chown root:root /etc/pmg/pmg-tls.pem
/bin/chown root:www-data /etc/pmg/pmg-api.pem

/bin/systemctl restart pmgproxy

讓renew.sh變成可以執行的屬性 chmod +x /etc/pmg/renew.sh

9.5. 設定排程

我是設定1個月,但理論上3個月執行就可以了

crontab -e

輸入

0 0 1 * * /etc/pmg/renew.sh

9.6 啟用TLS

到pmg網頁, Configuration: Mail Proxo : TLS 勾選啟用

9.7.確認是否啟用startssl ,

請輸入 telnet localhost 25   , 再輸入 ehlo localhost , 即可查詢是否有starttls功能

9.8. 測試是否有加密連線

使用gmail寄信, 觀查 /var/log/mail.log 是否出現 starttls=1 字樣

Apr 16 17:43:24 pmg postfix/smtpd[13252]: disconnect from mail-pg1-f170.google.com[209.85.215.170] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7

10. /etc/postfix/main.cf 加上拒絕反查無主機名稱的郵件伺服器IP

smtpd_sender_restrictions =
...
...
        reject_unknown_reverse_client_hostname

然後重啟postfix ,

systemctl restart postfix

11. 還沒想到

windows 2003 從esxi轉到pve出現藍屏(0x000007B)錯誤

esxi轉到pve的時候, 通常只要把硬碟類型改成ide , 就能開機成功了

但是windows 2003實在是太老舊了, 改ide居然失敗, 出現藍屏0x000007B的錯誤.

偶試過很多方式, 除了更新硬碟類型 scsi , sata , ide 外 , 還使用台灣之光再生龍( clonezilla ) 將esxi端vm備份起來, 還原到pve上, 可惜還是失敗.

找了一陣子, proxmox論壇找到此篇文章, 裡面提到使用 mergeide 把esxi的windows 2003開機後執行mergeide, 將硬碟相關驅動程式幹掉, 隨即立即關機, 之後再轉換到pve上面, 設定成ide類型, 開機後就能重新抓取硬碟,正常啟動了.

mergeide的方式, 與微軟為了解決大量佈署作業系統建立 sysprep 架構有關, 把底層一些驅動資料清空, 讓系統保留原本的軟體, 又能重新抓取新的硬體資訊, 來達到異機安裝的目的.

哈!成功開機, 偶想說一切非常美好, 世界和平了,

但是問題又冒出來, windows 2003開機後, 需要重新啟用, 可惜無論如何修改啟用方式, 包括用原版序號都啟用失敗,

後來參考蘇老碎碎念-Windows Server 2003 OEM隨機版系統轉大量授權版本

使用蘇老建議的方法2, 把 windows 2003 升級成為大量授權版, 很神奇的就能正常啟用了.

哈!成功啟用, 偶想說和平又再一次降臨, 

但是問題又又冒出來了, 正常啟用後, 居然還遇到裡面的 MS SQL server 2005 無法使用的情況, 查了一下最後發現原因是 .net framework 2.0 sp2失效了, 這應該跟mergeide清除底層有關, 本來想移除重新安裝, 但無論如何都無法移除失效的.net framework 2.0 , 更不用說直接重裝.

好險微軟官網出了.Net Framework移除工具可以移除到目前為止所有出過的版本(4.7).

下載移除工具之後, 可以只選擇移除 .net framework 2.0 , 等待移除完畢, 就可以重新安裝.

最後最後, 終於完成移轉這個該死的windows 2003 server, 真正的世界和平到來.

 

 

esxi轉centos 5 到pve失敗,出現 mount could not find system /dev/root

咖啡偶最近進行一系列從esxi轉到pve的工作, 其中出現轉CentOS 5這種老舊vm失敗的狀況, 錯誤如下:

Unable to access resume device (LABEL=SWAP-hda3)

mount: could not find filesystem ‘/dev/root’

測試過很多方式, 例如改ide, sata, scsi 等方式都不行,  最後終於找到重建開機程序 initrd 的方式解決,

解決方式如下:

  1. 下載相對應大版本OS , Centos 5.x 都可以
  2. 掛載 Centos 5開機片開機, 輸入 linux rescue(救援模式)
  3. 輸入 chroot /mnt/sysimage 讓系統暫時恢復成原系統的狀態
  4. 刪除/boot/initrd-xxx.img 開機檔案 xxx代表原系統開機時的版本號碼
  5. 查詢一下 /lib/module 是否有xxx版本號碼
  6. 重建開機檔案  mkinitrd /boot/initrd-xxx.img   xxx
  7. 重開機, 卸載Centos 5開機片, ,改由原系統開機測試是否能成功

Proxmox ve出現 cluster not ready – no quorum?錯誤

咖啡偶使用pve的時候, 突然出現兩台pve無法登入,但vm正常的情狀, 情急之下重開機, 但是重開機之後出現: 

 cluster not ready – no quorum?

上網查了一下,好像只能連到主要pve, 然後手動這樣處理, 接下來就看偶有沒有時間回過頭來仔細想想問題在哪了,以及如何正確處理這問題.

pvecm expected 1
service pve-cluster restart

pve的備份檔案vma

pve 內建的備份檔案是vma格式, 加上lzo壓縮或是gzip壓縮 .
因此要了解裡面有甚麼檔案, 需先解壓縮後, 再使用vma這指令解開裡面的檔案.

解開vma

 vma extract xxx.vma  "目錄名稱"

解開檔案之後,就可以進行編輯,編輯之後, 再做成vma檔案, 其中比較特別的是若檔案名稱是 disk-drive-sata0 , 做成vma的時候要指定檔名為 drive-sata0 , 否則做出來的檔案, 名稱會不一樣, 指令如下:

vma create xxx.vma -c 目錄名稱/qemu-server.conf  drive-sata0=目錄名稱/disk-drive-sata0.raw

若要還原,可以執行qmrestore (107是主機代號,可改):

 qmrestore xxx.vma 107

解開vma檔案覺得太大時,可以縮小:

qemu-img convert -O qcow2 xxx.raw new_xxx.raw
或
qemu-img convert -O qcow2 -c  xxx.raw new_xxx.raw

安裝Proxmox VE 5.3 注意事項

這陣子積極將vmware esx 轉成 pve 5.3 , 以後遇到安裝注意事項就寫在這裡.安裝

額外安裝套件

1. 查看iscsi設備

  apt-get install  lsscsi

可使用 lsscsi 查看目前iscsi 設備

2. 安裝multipath-tools

 apt-get install multipath-tools

這方式原本是想要讓系統使用iscsi MPIO 的功能,能夠自動切換線路,但似乎設定上很麻煩, 不過還是先安裝起來.
因為這作法可以解決pve若有兩個不同網段網卡連接到Nas的兩個網卡, 造成pve出現兩個相同device的錯誤,

WARNING: PV Lk4DU4-4HO7-of10-g9cR-tsK4-f9Ka-s2FqfC on /dev/sdd was already found on /dev/sdc.

安裝 multipath-tools 之前 , 執行 pvscan 會出現

PV /dev/sdd    VG LVM-FreeNasVM   lvm2

但是安裝之後, 會出現

PV /dev/mapper/36589cfc000000e54a909f483d8485fb6   VG LVM-FreeNasVM

掛載NFS可考慮使用soft的方式掛載,以免因斷線或是線路不穩造成災難:

編輯 /etc/pve/storage.cfg , 在NFS區塊找出 options vers=3 最後面加上 ,soft 參數

列出/刪除cluster的node

1. 列出 pvecm nodes 
2. 刪除 pvecm delnode "Node Name" , 最後記得刪除相關檔案(也可以備份) rm /etc/pve/nodes/"Node Name"

proxmox ve如何刪修iscsi target連線(使用指令)

查看目前scsi連線,有兩個方法
1.
  apt install lsscsi
  lsscsi  

2. 查看目前scsi連線 
  iscsiadm -m node

解除iscsi連線
1. 查詢iscsi連線
  iscsiadm -m node
2. 登出
  iscsiadm -m node -T  --logout
3. 刪除連線
  iscsiadm -m node -o delete -T 
  target name = ign....
  

 刪除proxmox 上LVM的group name
 1. 將LVM group name 狀態改成離線
   vgchange -a n <group name>
 2. 移除
  vgremove <group name>

proxmox ve如何擴充 lvm

原本使用 lvm 掛載FreeNas 的 iscsi (1T容量) , 但是不夠用了,因此紀錄一下擴充方式:

1. 到FreeNas擴充該iscsi的容量到3T

2. 此時原本 pve 上面的 lvm 還是 1T, 可輸入pvdisplay確認,並且記下iscsi對應到哪個路徑 ,例如:  /etc/sdb

3. ssh終端機登入 pve 主機, 輸入 pvresize /dev/sdb  , 再輸入 pvdisplay 查看

移轉esxi vm至pve

1.  esxi匯出 ova 檔案或是ovf檔案, 並且注意該vm的硬體配置

2. 將ova檔案移至pve能存取的storage 上

3. ssh 登入pve, 使用tar vfx 方式解開ova檔案

4. ssh 登入pve, 將解開的檔案裡面的vmdk轉成qcow2

 qemu-img convert -f vmdk xxx.vmdk -O qcow2 xxx.qcow2

5. 到pve新增vm, 並且確認esxi vm的硬碟, 使用sata或是ide(這部份弄錯會導致無驅動程式,而無法開機)

等到vm新增完畢, 再將步驟4的qcow2檔案覆蓋過去pve上新的vm檔案

 

1 2