超簡單安裝collabora online Part II (v 2.4.17 )

以前文章"超簡單安裝collabora online" 是我第一次使用online document server , 後來發現Onlyoffice 更好用, 版面格式比較不會跑掉, 就變心惹.

但隨著多人使用, onlyoffice 已經達到10人開啟檔案的上限, 但傳統公司就是說不輪轉...唉.

於是回過頭來看collabora online , 雖是免費, 但官方編譯, 居然加上20人數限制, 照這樣子應該真的要去拍桌,跟老闆說要加錢購買, 可是偶然間發現有個神人, 協助編譯解除20人限制, 甚至編譯成 docker 版本, 真是佛心來的

https://github.com/tiredofit/docker-collabora-online

官方文件很少, 不囉嗦, 我測試後直接寫如何安裝,

  • compose 文件
wget https://github.com/tiredofit/docker-collabora-online/raw/master/examples/docker-compose.yml
mv docker-compose.yml.traefik docker-compose.yml
vi docker-compose.yml
#改成醬
#紅色字需要修改
version: '3.7'
services:

  collabora-online-app:
    image: tiredofit/collabora-online:2.4.17
    container_name: collabora-online-app
    hostname: collabora-online.test.com
    expose:
      - 9980
    ports:
      - "9980:9980"
    cap_add:
      - MKNOD
      - NET_ADMIN
    privileged: true
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:collabora-online.test.com
      - traefik.port=9980
      - traefik.protocol=http
      - traefik.docker.network=proxy
      - traefik.backend=collabora-online-app
    volumes:
      - ./logs:/logs
    environment:
      - CONTAINER_NAME=collabora-online-app

      - ADMIN_USER=admin
      - ADMIN_PASS=collabora-online

# 允許哪些網站存取
      - ALLOWED_HOSTS=cloud.test.com,xxx.test.com

      - ENABLE_TLS=FALSE
      - ENABLE_TLS_REVERSE_PROXY=TRUE
    restart: always

  • 修改反向代理
    以下主機名稱需與compose文件相同
<VirtualHost *:443>
  ServerName collabora-online.test.com:443

  # SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
  SSLCertificateFile /etc/letsencrypt/live/collabora-online.test.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/collabora-online.test.com/privkey.pem
  SSLCACertificateFile /etc/letsencrypt/live/collabora-online.test.com/fullchain.pem
  SSLProtocol             all -SSLv2 -SSLv3
  SSLEngine on
  SSLHonorCipherOrder     on
  AllowEncodedSlashes NoDecode
  ProxyPreserveHost On


 # static html, js, images, etc. served from coolwsd
 # browser is the client part of Collabora Online
 ProxyPass           /browser http://127.0.0.1:9980/browser retry=0
 ProxyPassReverse    /browser http://127.0.0.1:9980/browser


 # WOPI discovery URL
 ProxyPass           /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0
 ProxyPassReverse    /hosting/discovery http://127.0.0.1:9980/hosting/discovery


 # Capabilities
 ProxyPass           /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0
 ProxyPassReverse    /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities


 # Main websocket
 ProxyPassMatch      "/cool/(.*)/ws$"      ws://127.0.0.1:9980/cool/$1/ws nocanon


 # Admin Console websocket
 ProxyPass           /cool/adminws ws://127.0.0.1:9980/cool/adminws


 # Download as, Fullscreen presentation and Image upload operations
 ProxyPass           /cool http://127.0.0.1:9980/cool
 ProxyPassReverse    /cool http://127.0.0.1:9980/cool
 # Compatibility with integrations that use the /lool/convert-to endpoint
 ProxyPass           /lool http://127.0.0.1:9980/cool
 ProxyPassReverse    /lool http://127.0.0.1:9980/cool
</VirtualHost>
  • nextcloud 設定
    要安裝Collabora Online

設定URL,開檔需導入到 Collabora Online-server

完成了

  • 檢查運行狀況
    需輸入compose上面的管理者帳號與密碼
https://collabora-online.test.com/browser/dist/admin/admin.html

很困擾的httpd反向代理與容器(container)之間的問題

httpd 反向代理很好用, 一個ip就能搞定無數個網站, 某種角度來看, 也兼具資安效果, 可以阻擋使用ip進行網站攻擊的效果.

可是很困擾的是, 當我每三個月需要 renew 免費的 let's encrypt 證書, 證書是renew成功了, 但是該檔案對應到容器的服務,有些並不會跟著改用新的證書, 就出問題了.

以mail server為例子, postfix與dovecot服務, 都會咬住舊版的證書, 而不使用新的, 重開mail server又要公告, 只能半夜偷偷重開, 真是困擾阿

Proxmox VE安裝Turnkey Domain Controller

微軟的網域主控站超級好用, 很適合用來管理, 甚至交給非IT人員,如管理部同仁協助作業

我認為若需要的功能不多, 只用來進行群組權限控管, 帳號密碼控管, 建議安裝免費的網域管理伺服器就好了.

另外, 像我使用自製的容器郵件伺服器(docker-postfix-ad) ,須綁定網域伺服器認證 , 就很適合安裝Turnkey Domain Controller.

TurnkeyLinux 有一大堆免費的軟體, 且支援Proxmox VE , 有vm版本, lxc版本,及vmware版, 琳瑯滿目.

安裝Turnkey Domain Controller 相當簡單, https://www.youtube.com/watch?v=PMUUuXmtFc8
安裝完畢, 用我筆電的RSAT工具, 就能管理網域主控站了

以下為安裝之後, 要注意的部分

  • 設定ip
    安裝完畢, 因為沒有設定ip, 所以無法使用瀏覽器登入, 請輸入指令 confconsole, 並且設定ip
  • 設定完IP, 使用瀏覽器登入
    http://ip
    登入後點選"Samba conf via Webmin(login first)
  • 入Webmin, 需先開放網路介面接聽功能, 否則電腦無法加入網域
    Servers -> Samba Windows File Sharing -> Unix Networking
  • 將Network interfaces 改為 Automatic
    *Automatic
  • 修改後要重啟samba server
    Restart Samba Servers
  • 修改要加入網域之電腦dns ,
    第一dns請改成 Turnkey Domain Controller 的IP
    第二dns必須設定, 輸入1.1.1.1 這類可查詢的dns server , 因Turnkey Domain Controller預設沒有dns server, 所以無法正常解析.

電腦dns設定正確, 就能成功找到網域主控站, 並且加入囉

目前安裝版本為 16.2 , 樹系2008R2, 經測試win11 22h2無法加網域, 將在17.0 樹系2012R2獲得解決.

Rocky Linux podman 更改storage注意事項

之前使用docker, 我會把selinux關掉, 這次改用podman, 我順帶挑戰不關selinux , 果然就遇到問題了

  • storage存放位置變更

正確的是, 我原本安裝時候, 就將路徑改了 , 請參照這篇文章 , 但是後來又新增一個新的partition , 用mount的方式覆蓋原本podman storage 路徑, 這看起來很棒, 都不用改,但還是遇到問題了, 我啟用原本的container, 出現

我用podman logs <container name> 查看有這bug , 後來想想應該是selinux權限問題, 就重新跑一次這個指令

restorecon -R -v /podman/storage/
# /podman/storage 是我安裝podman改的路徑

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.1
  • 建立volume
podman volume create postfixldap_postfix    
podman volume create postfixldap_dovecot    
podman volume create postfixldap_log    
podman volume create postfixldap_rspamd    
podman volume create postfixldap_vmail    
  • 啟用mail server容器

假設我們的AD主機 : 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"

podman run --name postfixldap \
 -v /etc/letsencrypt:/etc/letsencrypt  \
 -v postfixldap_vmail:/home/vmail \
 -v postfixldap_postfix:/etc/postfix \
 -v postfixldap_dovecot:/etc/dovecot \
 -v postfixldap_rspamd:/etc/rspamd \
 -v postfixldap_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="OU=group,DC=test,DC=com" \
 -e BIND_DN="cn=ldap,cn=Users,dc=test,dc=com" \
 -e BIND_PW="password" \
 -e TZ="America/New_York" \
 -d \
 --restart always \
 --net=host  \
 inmethod/docker-postfix-ad:3.1

國際擋廣告組織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 安裝podman

 dnf install podman container-tools

讓系統自動啟用podman

修改預設儲存路徑(預設是"/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 跑起來

systemctl start podman

查看修改的路徑是否生效

podman info

roundcubemail 加上Active Directory 通訊錄範例

修改config/config.inc.php
網域伺服器 192.168.1.1
網域: test.com

$config['address_book_type'] = 'ldap';

$config['ldap_public']['Global'] = array(
'name' => '台灣總公司',
'hosts' => array('192.168.1.1'),
'port' => 3268,
'user_specific' => false,
'base_dn' => 'dc=test,dc=com',
'bind_dn' => 'cn=administrator,cn=users,dc=test,dc=com',
'bind_pass' => 'password',
'ldap_version' => 3,
'search_fields' => array (
'mail','cn',),
'name_field' => 'cn',
'email_field' => 'mail',
'writable' => 'false',
'scope' => 'sub',
'sizelimit' => 6000,
'sort' => 'cn',
'filter' => '(&(mail=)(|(&(objectClass=user)(!(objectClass=computer)))))',
'fuzzy_search' => true,
'global_search' => true
);

2022/11/05

我後來使用docker doundcubemail 重新安裝, 因為用latest , 當時版本 1.6.x 版本 , 發現上面的設定已經不能用了, 改用以下設定(紅色部分需調整)

$config['address_book_type'] = 'ldap';
$config['ldap_debug'] = true;
$config['ldap_public'] = array(
    'MyAdLdap' => array (
        'name' => 'TW',
        'hosts' => array('網域主機IP'),
        'sizelimit' => 6000,
        'port' => 3268,
        'use_tls' => false,
        'user_specific' => false,
        'base_dn' => 'OU=group,DC=test,DC=com',
        'bind_dn' => 'user@test.com',
        'bind_pass' => 'password',
        'writable' => false,
        'ldap_version' => 3,
        'search_fields' => array(
           'mail',
           'cn',
        ),
        'fieldmap' => array(
            'name' => 'cn',
            'email' => 'mail',
            'surname' => 'sn',
            'firstname' => 'givenName',
        ),
        'sort' => 'sn',
        'scope' => 'sub', # or 'list'
        'filter' => '(&(mail=*)(|(&(objectClass=user)(!(objectClass=computer)))(objectClass=group)))',
        'global_search' => true,
        'fuzzy_search' => true,
        'vlv' => false,
    ),
);

詳請參考 https://github.com/roundcube/roundcubemail/wiki/Configuration:-LDAP-Address-Books#prerequisites