wireguard 初體驗

我打算用OPNsense取代目前老舊的硬體防火牆(Fortigate 80C) , 後來透過OPNsense 外掛, 試了suricata, AdGuard Home, tailcale , wireguard , 總共花了我2周的時間, 對於VPN, site to site , point to site 也都玩了一輪.

其中對於VPN心得:

  1. Wireguard 網路品質比OpenVPN好一些
  2. site to site vpn , 以及 point to site vpn
    請用OPNsense , 作法請參考 https://www.thomas-krenn.com/en/wiki/OPNsense_WireGuard_VPN_Site-to-Site_configuration
  3. wireguard 基本上綁定一個udp port , 與openvpn一樣都只能靠這個udp port做事, 很容易中國被擋下來
  4. 要規避中國防火牆, 請用tailscale + headscale + udp2raw
  5. tailscale安裝完畢,預設使用者管控機制滿好用的,但是要付費才能商用, 若不花錢, 請將使用者管控改成 headscale , headscale可用docker安裝, 然後讓tailscale login server改成headscale即可.
  6. tailscale 做site to site 只能以NAT方式完成, 這會有問題, 以鼎新tiptop GP 5.1來說就無法回撥source ip 的6400 port ,算是假的site to site vpn , 就算官方宣稱加上 --snat-subnet-routes=false 可以辦到, 但我怎麼試都失敗, 網路上大部分也都不在意,看來tailscale使用群更專注在翻牆功能.

wireguard 設定檔簡單解釋如下, 檔案為/etc/wireguard/wg0.conf, 該設定檔可形成 site to site , 但我在Linux設定一直失敗, 只能用NAT方式,最後發現OPNsense才能做到真正的site to site 功能, 太怪了!

[Interface]

# Site A
# private key 
PrivateKey = CG0svjlK7NdZ3U0MdYQzBHx7adDi1p2UlhPFXdH4HHw=
# Site A Tunnel IP
Address = 10.1.0.1/32
ListenPort = 51820

[Peer]
# Site B public key ,  tunnel ip 10.1.0.2/32
PublicKey = Jkdn621+amuCV8Wj7YQLMydtE9GO5kpq+oZdK/17XAY=
# 允許Site B內網, 以及Site B的tunnel ip
AllowedIPs = 10.1.0.2/32,10.176.5.0/24
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25

[Peer]
# Site C public key , tunnel ip 10.1.0.3/32
PublicKey = VaVaSY6SkizEhexj9vSTkzKgaIo5MwMnulu6I/D+iAI=
# 允許Site C內網, 以及Site C的tunnel ip
AllowedIPs = 10.1.0.3/32,192.1.0.0/22
Endpoint = <Site B 對外ip>:51820
PersistentKeepalive = 25

超簡單安裝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人員,如管理部同仁協助作業

網域主控好用,若只用來群組權限控管, 帳號密碼控管, 建議安裝免費的網域管理伺服器Turnkey Domain Controller就好了.

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

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

安裝Turnkey Domain Controller 相當簡單,只要下載iso檔案,安裝成一個vm就好了, 當然也有lxc版本,但我並沒有測試過.
詳細請參閱 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改的路徑

自製郵件伺服器啟動腳本

我用自製的docker版郵件伺服器已經一陣子了, 每次要組合出腳本很麻煩, 我又不喜歡用yaml文件, 因此利用github的免費pages, 自己寫了一個簡易自動產生腳本的網頁, 還滿方便的, 頁面難看就請多包涵.

https://williamfromtw.github.io/docker-Postfix-AD/genLaunchCommand.html

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

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;

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

1 2 3 ... 10