在 HestiaCP 里设置邮件域转发 manualroute

需求:将指定邮件域名转发到其它机子。

步骤:

  1. vi /etc/exim4/exim4.conf.template # 编辑配置文件,在 route 节里,添加相应的内容,例如:

    route_to_another_server:
    driver = manualroute
    transport = remote_smtp
    route_list = *exmaple.com  1.1.1.1
    no_more
    no_verify
  2. systemctl restart exim4 # 重启 exim4 服务
  3. 在 HestiaCP 里添加邮件域 example.com,添加用户邮箱,如 route@exmaple.com ,再将 route@example.com 设置为 catch-all 功能
  4. 收信测试

参考:

在 Debian 11 里 为 postfix 设置多实例运行 且 使用 saslauthd pam 认证

目标:因需设置每个 postfix 实例使用指定的 公网 IP地址,所以通过 postmulti 来创建新实例,且使用 asalauth pam 来认证用户。

步骤:

  1. postmulti -e create -I postfix-8 # 创建新的 postfix 实例,实例名为 postfix-8
  2. vi /etc/postfix-8/main.cf # 修改配置内容,如添加不同的 myhostname 和 inet_interfaces

    master_service_disable =
    myhostname = test8.example.com
    inet_interfaces = 1.1.1.1
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    broken_sasl_auth_clients = yes
  3. cp -a /etc/postfix/sasl /etc/postfix-8/ # 将默认实例的 sasl 配置目录(中的 smtpd.conf)复制到新的实例配置目录中
  4. postmulti -i postfix-8 -e enable # 启用 postfix-8 新实例
  5. 挂载 chroot 环境里可用的 sock 路径:

    mkdir /var/spool/postfix-8/var
    mount --bind /var/spool/postfix/var /var/spool/postfix-8/var
  6. postmulti -i postfix-8 -p start # 启动 postfix-8 新实例

参考:

在 debian 11 里,为 postfix 配置 saslauthd pam 验证 用户名和密码

目标:在 debian 11 系统里,安装 postfix ,且配置 saslauthd pam 验证用户登录。

步骤:

  1. hostnamectl set-hostname my.example.com # 设置主机名
  2. 127.0.0.1 my.example.com # 在 /etc/hosts 里添加一行,保存主机名配置
  3. apt install postfix sasl2-bin libsasl2-modules # 安装 postfix , sasl 框架
    在弹出的 postfix 配置框时,选择 Internet Site ,表示 机子将直接发送和收取邮件;System mail name 会自动显示在第一步时设置的,保持不变就行
  4. 因为 postfix 默认运行在 chroot 环境中,所以要创建一个 saslauthd 跟它搭配
    4.1 创建配置文件:/etc/postfix/sasl/smtpd.conf 内容如下:

    pwcheck_method: saslauthd
    mech_list: CRAM-MD5 DIGEST-MD5 LOGIN PLAIN

    4.2 cp /etc/default/saslauthd /etc/default/saslauthd-postfix 复制默认的配置文件内容,且修改成如下内容:

    START=yes
    DESC="SASL Authentication for postfix"
    NAME="saslauthd-postf"
    MECHANISMS="pam"
    MECH_OPTIONS=""
    THREADS=5
    OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

    4.3 设置目录的权限:dpkg-statoverride --add root postfix 710 /var/spool/postfix/var/run/saslauthd

  5. 修改 /etc/postfix/main.cf 文件内容,确保有以下 sals 相关的内容:

    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    broken_sasl_auth_clients = yes
  6. systemctl restart postfix # 重启 postfix 服务
  7. 顺利的话,就可以使用普通用户发出邮件的,如:
    swaks --to he@example.com --from wuhan@example.com --server localhost --auth LOGIN --auth-user wuhan --auth-password yourpassword

参考:https://wiki.debian.org/PostfixAndSASL

买 “忆百特” 的 E104-BT5040U - 刷 Canokey 的固件 - 充当 GPG 智能卡使用

目的:使用 gpg 创建个人的密匙对,然后将“加密”、“签名”和“认证”的子私匙放到 E104-BT5040U 里,当 gpg 智能卡使用。例如,需要远程登录 Linux 服务器时,插入 U 盘形状的 E104-BT5040U ,然后在 MobaXterm 里发起 ssh 登录,最后在弹出的询问框里,输入 gpg 智能卡的 PIN 码,登录成功

用到的:
a. 1台 Debian 12 虚拟机或物理机,用于编译出固件 canokey.hex 、执行初始化任务(生成序列号等)和 管理 gpg 密匙对等
b. 1台 Windows 10 机,用于烧录固件
c. 两个 E104-BT5040U ,因为卖家的淘宝店里有“试用套装”——一次买两个,比单个买,价格实惠些。一个日常使用,另一个作为备用
c. 1个 U 盘,用于备份 gpg 的密匙等

编译出 canokey.hex 文件

请在 Debian 12 机里编译:

  1. apt install cmake gcc-arm-none-eabi gdb-arm-none-eabi # 安装编译环境
  2. 从 github 里复制 canokey 的文件

    clone https://github.com/canokeys/canokey-nrf52
    cd canokey-nrf52/
    git submodule update --init --recursive
  3. unzip -d nrf_sdk nRF5_SDK_17.1.0_ddde560.zip # 把下载好的 nRF5_SDK 放到目录里的 nrf_sdk 目录里
  4. mkdir build && cd build # 创建 build 目录
  5. 开始 cmake ,

    cmake \
    -DCROSS_COMPILE=/usr/bin/arm-none-eabi- \
    -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake \
    -DCMAKE_BUILD_TYPE=Release ..
  6. make canokey_flash.uf2
  7. apt install libnewlib-arm-none-eabi # 如果提示找不到 string.h ,请安装 libnewlib
  8. ln -s /usr/bin/python3 /usr/bin/python # 如果提示找不到 python,请创建一个软链接

烧录 canokey.hex 文件

按网友的指导,在 Windows机 里下载、安装好厂家“诺迪克” nrfconnect 的软件,将 canokey.hex 烧录到 E104-BT5040U 设备里。

nrfconnect 烧录 canokey.hex

初始化 canokey ,随机生成序列号

回到 Debian 12 机,执行 device-config-init.sh 脚本,初始化 canokey:

  1. apt install pcscd pcsc-tools scdaemon # 安装相应的工具
  2. apt install python3.11-venv # 如果提示,建议使用 venv 安装非 deb 的 python 包,那么先安装 venv
  3. python3 -m venv /root/canokeypy/venv # 创建一个新的 python 和 pip 目录
  4. /root/canokeypy/venv/bin/pip install scriptor # 安装 scriptor
  5. export PATH="/root/canokeypy/venv/bin:$PATH"
  6. pcsc_scan # 插入扫描 usb 设备,如果顺利,可以看到有“Canokeys Canokey [OpenPGP PIV OATH] (00000000) 00 00”的设备
    pcsc_scan 扫出来的设备
  7. ./device-config-init.sh 'Canokeys Canokey [OpenPGP PIV OATH] (00000000) 00 00' # 在 canokey/utils 里执行脚本
    初始化 canokey 设备
  8. gpg --card-status # 如果顺利,那么在 gpg 的智能卡信息页里,序列号将是非全 0 ,是随机生成的

ssh 远程登录 认证

  1. Windows 机里安装 gpg4win ,安装过程中,要选上 gpg agen ,创建好密匙对,备份好
  2. 在 Kleopatra 配置里,GnuPG 系统,Private Keys ,勾选 Enable ssh upport 和 Enable putty support
  3. gpg-connect-agent killagent /bye # 退出当前的 agent
  4. gpg-connect-agent /bye # 重新运行。也可以使用重载的命令:gpg-connect-agent.exe reload /bye
  5. 将导出的 ssh-key (--export-ssh-key)公钥内容追加到 ssh 服务端的 ~/authorized_keys 文件中
  6. 顺利的话,putty 发起 ssh 连接时,会弹框要求输入智能卡的 PIN 码
    弹框输 PIN 码,完成认证
  7. 习惯使用 MobaXterm 的话,请在 Settings 里的 SSH 页里,勾选 Use external Pageant
    MobaXterm 配置 external Pageant

console.canokeys

a. 在 Windows 机里,插入设备,右下角会弹框提示可以访问 console ,如 https://console.canokeys.org/#/settings 会显示具体的设备信息,如果型号、固件版本和序号等
新版 web console
b. 如果转到旧版 console ,https://console-legacy.canokeys.org/#/ ,可以看到 gpg 的详情
旧版 web console

参考:

为 iredmail 1.7.1 安装 z-push 2.7.5

环境:Ubunt 24.04,iredmail 1.7.1 ,安装时,勾选了 SOGo 组件,因为需要使用它的 CalDAV 和 CardDAV 服务

步骤:

  1. apt install php-imap php-curl libawl-php php-curl php-xml php-ldap php-soap php-mbstring php-intl # 安装 php 扩展
  2. mkdir /usr/local/lib/z-push/ /var/log/z-push /var/lib/z-push # 创建 z-push 的相关目录
  3. chown www-data:www-data /var/log/z-push /var/lib/z-push # 目录给 web 用户权限
  4. wget https://github.com/Z-Hub/Z-Push/archive/refs/tags/2.7.5.tar.gz # 下载 z-push 文件
  5. cp -a src/* /usr/local/lib/z-push/ # 解压后,将得到的 src 目录里的文件,复制
  6. chown -R www-data:www-data /usr/local/lib/z-push/ # 给 web 用户权限
  7. vi /etc/nginx/templates/sogo.tmpl # 修改 sogo.tmpl 的文件内容,注释或删除原 SOGo 的 Microsoft-Server-ActiveSync 内容,用新的 z-push 替换:

    location ^~ /Microsoft-Server-ActiveSync {
     proxy_pass http://127.0.0.1:20000/SOGo/Microsoft-Server-ActiveSync;
    
     proxy_connect_timeout 3540;
     proxy_send_timeout 3540;
     proxy_read_timeout 3540;
    
     proxy_busy_buffers_size   64k;
     proxy_buffers             8 64k;
     proxy_buffer_size         64k;
    }
    
    location ^~ /SOGo/Microsoft-Server-ActiveSync {
     proxy_pass http://127.0.0.1:20000/SOGo/Microsoft-Server-ActiveSync;
    
     proxy_connect_timeout 3540;
     proxy_send_timeout 3540;
     proxy_read_timeout 3540;
    
     proxy_busy_buffers_size   64k;
     proxy_buffers             8 64k;
     proxy_buffer_size         64k;
    }

    新的:

    location /Microsoft-Server-ActiveSync {
             include /etc/nginx/fastcgi_params;
             fastcgi_param SCRIPT_FILENAME /usr/local/lib/z-push/index.php;
             fastcgi_read_timeout 630;
             include /etc/nginx/templates/fastcgi_php.tmpl;
             client_max_body_size 128M;
     }
     location ~* ^/autodiscover/autodiscover.xml$ {
             include /etc/nginx/fastcgi_params;
             fastcgi_param SCRIPT_FILENAME /usr/local/lib/z-push/autodiscover/autodiscover.php;
             include /etc/nginx/templates/fastcgi_php.tmpl;
    }
  8. systemctl restart nginx # 重启 nginx 服务
  9. vi /etc/php/8.3/fpm/php.ini # 调整 php.ini 的内容,启用 parse_ini_file 函数
  10. systemctl restart php8.3-fpm.service # 重启 php-fpm 服务
  11. vi /usr/local/lib/z-push/config.php # 编辑配置文件,其中两个需要注意的, TIMEZONE 和 BACKEND_PROVIDER 。本例,是分别设置为 上海时区 Asia/Shanghai 和 BackendCombined 即,后端数据存储是 混搭模式
  12. vi /usr/local/lib/z-push/backend/combined/config.php # 编辑混搭模式里的配置文件内容,将其中罗列的类型精简。如本例,只使用 BackendIMAP , BackendCardDAV 和 BackendCalDAV 。同时,要将目录的处理类型指定,避免出现指定不存在的 z 类型

     public static function GetBackendCombinedConfig() {
         //use a function for it because php does not allow
         //assigning variables to the class members (expecting T_STRING)
         return array(
             //the order in which the backends are loaded.
             //login only succeeds if all backend return true on login
             //sending mail: the mail is sent with first backend that is able to send the mail
             'backends' => array(
                 'i' => array(
                     'name' => 'BackendIMAP',
                 ),
                 'd' => array(
                     'name' => 'BackendCardDAV',
                 ),
                 'c' => array(
                     'name' => 'BackendCalDAV',
                 ),
             ),
             'delimiter' => '/',
             //force one type of folder to one backend
             //it must match one of the above defined backends
             'folderbackend' => array(
                 SYNC_FOLDER_TYPE_INBOX => 'i',
                 SYNC_FOLDER_TYPE_DRAFTS => 'i',
                 SYNC_FOLDER_TYPE_WASTEBASKET => 'i',
                 SYNC_FOLDER_TYPE_SENTMAIL => 'i',
                 SYNC_FOLDER_TYPE_OUTBOX => 'i',
                 SYNC_FOLDER_TYPE_TASK => 'c',
                 SYNC_FOLDER_TYPE_APPOINTMENT => 'c',
                 SYNC_FOLDER_TYPE_CONTACT => 'd',
                 SYNC_FOLDER_TYPE_NOTE => 'c',
                 SYNC_FOLDER_TYPE_JOURNAL => 'c',
                 SYNC_FOLDER_TYPE_OTHER => 'i',
                 SYNC_FOLDER_TYPE_UNKNOWN => 'i',
             ),
             //creating a new folder in the root folder should create a folder in one backend
             'rootcreatefolderbackend' => 'i',
         );
     }
  13. vi /usr/local/lib/z-push/backend/imap/config.php # 配置 imap 的连接配置文件内容。本例是将 IMAP_PORT 设置为 993 端口;IMAP_OPTIONS 设置为 /ssl/novalidate-cert ,即使用 SSL 加密连接,不验证证书;IMAP_FOLDER_CONFIGURED 设置为 true
  14. vi /usr/local/lib/z-push/backend/caldav/config.php # 配置 caldav 的连接配置文件内容。CALDAV_SERVER 填写完整的主机名,如 mail.example.com ;CALDAV_PATH 填写 /SOGo/dav/%u/Calendar/ ; CALDAV_PERSONAL 填写 /SOGo/dav/%u/Calendar/personal/ ;CALDAV_SUPPORTS_SYNC 可设置为 true
  15. vi /usr/local/lib/z-push/backend/carddav/config.php # 配置 carddav 的连接配置文件内容。CARDDAV_PATH 设置为 /SOGo/dav/%u/Contacts/ ; CARDDAV_DEFAULT_PATH 设置为 /SOGo/dav/%u/Contacts/personal/ ;注释掉 CARDDAV_GAL_PATH 和 CARDDAV_GAL_MIN_LENGTH 两行
  16. 在浏览器里访问 https://mail.example.com/Microsoft-Server-ActiveSync ,应该会弹框,需入邮箱地址和密码,能成功登录
  17. 在 Nine Mail app 里,使用兼容 Exchange ActiveSync 的账户类型添加,能发邮件、创建日历事件 和 联系人,并且能在 SOGo Webmail 里看到新建的内容
  18. 如有报错,请查看 /var/log/z-push/z-push-error.log 日志内容

参考: