podman 安裝自製mail server全紀錄

自製mail server只在docker使用過, 這次挑戰podman

  • 安裝let’s encrypt
dnf install certbot
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
systemctl stop httpd
certbot certonly --standalone --preferred-challenges http -d  mail.test.com

# 若要renew 請加到crontab
certbot renew --post-hook "systemctl restart httpd"
  • 搜尋容器
podman search inmethod
pod man pull docker.io/inmethod/docker-postfix-ad:3.3
  • 建立volume
podman volume create postfixldap_vmail    
podman volume create postfixldap_postfix    
podman volume create postfixldap_dovecot    
podman volume create postfixldap_log    
podman volume create postfixldap_rspamd_conf    
podman volume create postfixldap_rspamd_var    
podman volume create postfixldap_opendkim     
  • 啟用mail server容器

假設我們的AD主機IP : 10.192.130.227
郵件網域 : test.com
郵件主機 : mail.test.com
Ldap SEARCH_BASE : OU=group,DC=test,DC=com
BIND_DN : “cn=ldap,cn=Users,dc=test, dc=com”
BIND_PW: “password”
時區 : “America/New_York” (台灣Asia/Taipei)

我寫了一個自動產生腳本的scripts
https://williamfromtw.github.io/docker-Postfix-AD/genLaunchCommand.html
可以產生以下指令

podman run --name mailserver \
 -v /etc/letsencrypt:/etc/letsencrypt \
 -v mailserver_vmail:/home/vmail \
 -v mailserver_opendkim:/etc/opendkim \
 -v mailserver_postfix:/etc/postfix \
 -v mailserver_dovecot:/etc/dovecot \
 -v mailserver_rspamd_conf:/etc/rspamd\
 -v mailserver_rspamd_var:/var/lib/rspamd  \
 -v mailserver_log:/var/log \
 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587  -p 993:993 -p 995:995 -p 4190:4190 -p 11334:11334 \
 -e DOMAIN_NAME="test.com" \
 -e HOST_NAME="mail.test.com" \
 -e HOST_IP="10.192.130.227" \
 -e SEARCH_BASE="DC=test,DC=com" \
 -e BIND_DN="CN=ldap,CN=Users,DC=test,DC=com" \
 -e BIND_PW="your BIND_DN password" \
 -e TZ="America/New_York" \
 -e ALIASES="OU=aliases,DC=test,DC=com" \
 -e ENABLE_QUOTA="false" \
 --label=disable -d  --restart always  --net=host \
 docker.io/inmethod/docker-postfix-ad:3.3

相關port防火牆要開,DNS mx要設定,dkmi key請參照https://github.com/WilliamFromTW/docker-Postfix-AD,就可以測試看看了。

國際擋廣告組織spamhaus 提供 DQS 服務

spamhaus 是國際組織, 旨在提供”郵件是否為垃圾郵件”的檢查服務, DQS(Data Query Service) 便是首推的新架構.

以postfix郵件伺服器為例子, 原本main.cf設定如下, 非常簡單

smtpd_recipient_restrictions =
 ...
 reject_rbl_client zen.spamhaus.org

但是近年來, spamhaus 已經不提供以上檢查服務.

spamhaus擋廣告改採用DQS方式, 而且建議不要用postfix強硬阻擋, 請整合 spamassassin 或是 rspamd 這種依分數多寡來判斷的架構比較有彈性.


以下紀錄 rspamd 啟用 DQS 設定方式:

  • 申請一個spamhaus帳號

https://www.spamhaus.com/free-trial/free-trial-for-data-query-service/
免費試用30天,功能多,體驗完居然無法轉成免費帳號, 要試用要有心理準備


https://www.spamhaus.com/free-trial/sign-up-for-a-free-data-query-service-account/
免費使用,似乎要每年renew一次


申請完畢, 請到此登入 , 可以找到 Query Key , 請記下來

  • 到github下載設定檔案, 並將裡面的Query Key改成自己申請的
git clone https://github.com/spamhaus/rspamd-dqs
cd rspamd-dqs
cd 3.x
# 請取代紅色部分(我們申請的Query Key)
sed -i -e 's/your_DQS_key/paxxxxxxxbji/g' *.conf rspamd.local.lua
# 若為付費帳號
cp *.conf /etc/rspamd/local.d
cp rspamd.local.lua /etc/rspamd
# 若為免費帳號
cp rbl.conf rbl_group.conf /etc/rspamd/local.d
# 檢查語法, 若成功, 重啟rspamd即可生效
rspamadm configtest

rspamd 啟用 DQS 詳細設定,可參考 https://github.com/spamhaus/rspamd-dqs


  • 若不想使用rspamd, spamhaus 貼心準備好各種設定, 幾乎都是複製貼上即可.

只要登入到網站,就可以點選Manual , 取得相關設定資料, 該資料直接套用登入者Query Key 呢.

Rocky Linux 9安裝let’s Encrypt

dnf install certbot
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
# 申請mail.test.com 憑證
systemctl stop httpd
certbot certonly --standalone --preferred-challenges http -d  mail.test.com

# 若要renew 請加到crontab
certbot renew --post-hook "systemctl restart httpd"

Rocky Linux 9 安裝podman

 dnf install podman container-tools

讓系統自動啟用podman

systemctl enable podman
systemctl enable podman-restart

修改預設儲存路徑(預設是”/var/lib/containers/storage”)

mkdir -p /podman/storage
vi /etc/containers/storage.conf

讓selinux開放使用

semanage fcontext -a -e /var/lib/containers/storage /podman/storage
restorecon -R -v /podman/storage/

將新的podman storage綁定到原本的/var/lib/container

mount -o bind /podman/storage/ /var/lib/containers
#上面指令綁定,若確認成功,改成開機就綁定
vi /etc/fstab
/podman/storage/ /var/lib/containers bind bind 0 0

重開機,或下指令讓podman 跑起來

systemctl start podman

查看修改的路徑是否生效

podman info

Rocky Linux 9 minimal 安裝後,必須額外安裝的套件

有遇到就加在這裡

#找semanage成是在哪個套件
dnf provides semanage 
dnf install policycoreutils-python-utils
#epel
dnf install epel-release
# CRB
dnf config-manager --enable crb
# net tools include ifconfig
dnf install net-tools
# httpd mod_ssl
dnf install httpd mod_ssl
# git
dnf install git
# sshpass (remote command by ssh )
dnf install sshpass

RockyLinux 9 簡易安裝 mariadb

好久沒安裝mysql了, 我之前都是docker 無腦安裝, 並不需要了解太多, 但是因為我先前安裝的 piwigo docker版本升級不利, 想說手動安裝piwigo看看, 當然第一步就是安裝mariadb囉.

這次RL9預設的mariadb是10.5, 安裝相當簡單

dnf install mariadb-server

接下來就是改密碼,預設console直接可以使用root登入

mysql -p -uroot

跟之前不一樣,我還停留mysql舊時代改密碼方式 update user set password=password(‘you password’) where user=’root’
居然失敗了, 爬了文, 反正就是跟上主流,改用oracle類似的變更方式了

alter user root@localhost identified by 'your password';
flush privileges;

很多相關設定可參考原廠文件

CentOS 7 docker 防火牆設定

CentOS 7安裝docker之後, 要確認防火牆是否阻擋不需要對外的container

iptables -I DOCKER 1 -i <對外網卡介面名稱>  -p tcp  --dport <埠號碼> -j DROP
# example
# iptables -I DOCKER 1 -i ens19 -p tcp --dport 4822 -j DROP

之前一直以為firewall-cmd 預設都會擋下來, 沒想到docker安裝後,container 似乎都開放了, 看起來還是要小心為妙

2023/09/06

後來發現還是無法阻止外面連到container port 這很奇怪,可能我是早期的docker 20.10.x ,最後追加以下指令直接阻擋container ip

firewall-cmd --direct --add-rule ipv4 filter DOCKER 0 -i eth0 -d 172.0.0.0/8 -j DROP

安裝自己的照片管理軟體-piwigo

這陣子研究清末明初古幣, 於是想起乾脆架設一個照片管理服務器(self hosting), 功能也不用太多, 有hash tag, 搜尋功能也不是很需要, 試用了一款最有名的 https://photoprism.app/ 發現功能太多, 還有AI自動辨識功能, 不符合我的需求.

最後終於找到簡單好用的 https://piwigo.org/ piwigo也有docker版本, 真是太棒了.

我架設了錢幣照片管理網站 – 布書 , 有不輸之意, 古代為錢之意.

安裝piwigo非常簡單

  • 先準備好mysql 這個container, 底下範例,名字叫做 my-mariadb
  • 指令如下, 請注意紅色部分需修改
docker volume create piwigo_config
docker volume create piwigo_gallery

docker run -d  --restart always --name=piwigo --link  my-mariadb:mysql -e PUID=1000 -e PGID=1000 -e TZ=Asia/Taipei -p 2342:80 -v piwigo_config:/config -v  piwigo_gallery:/gallery --restart unless-stopped  lscr.io/linuxserver/piwigo:12.3.0
  • 登入 http://ip:2342
    數據庫輸入mysql , 對應到以上指令中的 –link my-mariadb:mysql
    再輸入該資料庫的帳號密碼, 以及資料庫名稱(這部分我是先創建好資料庫, 沒試過未創建是否自己建立)
    加上 httpd 反向代理, 這樣就大功告成了

更改預設頁面,例如改成tags, docker 進入container, 修改設定檔案

cd /gallery/local/config
vi /gallery/local/config/config.inc.php
############################
$conf['random_index_redirect'] = array(
PHPWG_ROOT_PATH.'tags.php' => 'return true;',
);
############################

2022/10/15

piwigo釋出13.0.0 , 我迫不急待進行升級,結果失敗, 原因應該是我使用非官方的docker版本.
最後只能硬著頭皮,
1. 把舊版(12.3.0) piwigo_images 資料表匯出到新版本(13.0.0)去,
2.並且把舊版本/gallery/_data/i 目錄, 以及/gallery/upload 目錄複製到新版本去, 這樣新版本就告訴你有未處裡的照片, 再自己手動重新建立相本吧, 這也是無可奈何的事情, 希望官方能有解決方案.

python起手式,建立python虛擬環境

網管人員學python, 看到虛擬環境,第六感覺得這很重要

  1. 安裝python
    https://www.python.org/downloads/
    ps. windows安裝,記得要把python程式路徑加到PATH的選項打勾
  1. 安裝virtualenv建立虛擬環境程式
windows:
  pip3 install virtualenv
linux:
  sudo pip3 install virtualenv
  or
  sudo apt install python3-virtualenv
  1. 使用virtualenv建立虛擬環境
virtualenv -p <python程式位置>  <虛擬環境名稱>
or 
sudo -p <python程式位置>  <虛擬環境名稱>

#範例
windows :
  virtualenv -p C:\Users\x\AppData\Local\Programs\Python\Python310\python.exe my-env
linux:
  sudo virtualenv -p /usr/bin/python3 my-env
  1. 進入虛擬環境

    Windows:
    .\xxx\Scripts\activate.bat

Linux:
source ./xxx/bin/activate

william@william-Inspiron-3891:~$ source ./my-env/bin/activate
(my-env) william@william-Inspiron-3891:~$ 
1 2 3 4 5 6 ... 17