另一個遠端連線解決方案

**** Myrtille 藍莓 已經不再維護了

這幾天台灣爆發covid-19大規模感染, 可能又要實施居加辦公.

先前使用apache guacamole(酪梨醬)表現很不錯, 但是有很多設定, 員工無法自行完成, 需要IT人員一個個協助, 非常費時.

因此我網上找了找 html5 Remote Access Gateway github , 找到了 Myrtille 藍莓 也能達到遠端連線的功能 , 安裝方式很簡單, 可裝在windows 10(只能10個連線) 或是 windows 2012, 2016 , 安裝完畢, 再用 apache httpd reverse 方式加上letsencrypt憑證 , 就可以上線讓使用者使用, 使用者登入web後, 只需要知道自己公司電腦local ip ,帳號密碼, 就能連線, 非常方便, 缺點是中文輸入法失效(問題已回報), 要使用藍莓提供的”TEXT”功能, 進行傳送.

對照於大公司早已經實施行動辦公, 只要有vpn連線就不需要連到公司的主機做事, 我這方式算是半封閉的作法.
因為我不是資安專家, 超怕server被加密的, 但公司上班不允許使用行動設備(筆電,平板), 上班一律使用桌機, 在家若要辦公, 無vpn連線情況下, 只能用我們這種網頁RDP轉HTML5的方式,連線 這做法也算有資安防護力, 給大家參考.

linux hostname lookup

主機名稱很重要, hostname , 我們公司有台老鼎新tiptop erp主機 安裝的是 redhat enterprise 4 .


tiptop的架構我簡單的敘述, client端連線到這台 server , 這台server會辨識client 端ip , 再將資料以xml方式, 反向傳回去client端的接收程式, 該接收程式(genero desktop client , gdc )會把xml資料轉成UI介面 , 方便讓使用者使用.

可是呢, 每次使用者執行程式, 都必須進行license檢驗, 以及進行 host name lookup 查詢資料庫的ip在哪, 我說的是每次執行程式哦, 都要進行資料庫主機在哪的查訪動作, 實在是有夠怪的設計 , 這10多年來我困擾很久, 終於有點了解了
為何要了解這個, 因為使用者執行程式, 常常導致跑一隻程式, 光是等待程式冒出來就要等2分鐘… 我們早就知道是lookup的問題, 但找不出真正的解法, 以下是lookup的解決切入點

nsswitch 可以指定優先查 /etc/hosts 或是 dns 或是 winbind 

但這款老舊版本有個怪怪的bug, 設定了相關的lookup , 總是沒用, 就是會查詢失敗導致時間過久使用者憤怒, 我無意間看到有人寫了可以這樣檢查

getent hosts 資料庫主機名稱
或是
strace  getent hosts 資料庫主機名稱

我發現ap主機查詢很快, 但是查詢db主機超慢, 於是加上strace檢查問題 , 我加上去之後看不懂, 於是就多看了幾次,

這指令居然神奇的自己解決查詢過久的問題, 多執行幾次就變快了…. @@ 傻眼

QNap不正常關機, 造成vm開機失敗的修復小心得

一直以來QNap 純粹用來當作儲存設備, 花俏功能我都直接關掉, 只開放iSCSI , NFS 與CIFS , 而且限定內部ip才能連線(Qlocker遠離我).
但是最近公司停電,開機後, 我發現有一個插槽壞了, 換硬碟也顯示無硬碟狀態, 有夠麻煩的, 手忙腳亂了一番, 不小心造成QNap不正常關機(不要笑我啊).

悲劇來了, windows 的主要網域主控站, 與Sharepoint Server直接GG 慘, 而Linux也有狀況例如這個網站也GG, 好險Linux自帶工具, 告訴我可以執行xfs修復, 至少可以開機成功, windows就不多說了, 直接拿備份重建, 但是一波好幾折, 辛酸阿.

先說 linux 的docker server中 mariadb server container也再起不能了, 哭,
於是我另開一個可啟動的 mariadb container , 把有問題的volume中的額外table放到乾淨的mysql目錄中, 想像這樣或許可以救起來其他資料庫, 一開始啟動成功, show database, show tables也看到, 真是高興, 但是要select tables時候, 出現錯誤訊息

mysql error unknown table engine

又哭… 找了好久終於找到可以在my.cnf中加上以下參數, 但是我的container沒有mapping到/etc中的my.cnf , 於是又搞了一次, 才可以進行修復.

innodb_force_recovery = 1 
or 
innodb_force_recovery = 4

終於完成了, 我的網站修復完成.

— added 2021/5/10 —-

後來發現以上innodb_force_recovery參數只能暫時使用, 需要趕緊使用mysqldump把資料備份下來,

mysqldump --user=root -h 127.0.0.1 --password --lock-tables --databases 資料庫名稱 > xxx.sqlmysqldump --user=root -h 127.0.0.1 --password  --databases 資料庫名稱 > xxx.sql

然後再重新跑一個全新 server 把相關資料倒回去, 才能真正高枕無憂

擴容xfs,ext4(不使用lvm)

我很個很老派的人,喜歡用純粹的ext4 、 xfs 檔案系統, 但是時常遇到磁碟空間不足的問題。
若要擴容,可以服用以下指令:

1. 先安裝擴充軟體
yum install cloud-utils-growpart -y

2. 到虛擬伺服器上讓虛擬硬碟增大

3. 到虛擬主機裡面,讓虛擬硬碟容量變大(支援ext4、xfs,xfs只能增大, 不能減少),
growpart /dev/sdb 1
代表讓/dev/sdb這個硬碟擴充到最大

4. 到虛擬主機裡面,讓磁碟分區生效
xfs
--
以下指令可以立即生效指令後面接掛載目錄
xfs_growfs -d /mnt/docker

ext4
--
resize2fs /dev/sdb1

docker安裝multiOTP, 讓windows登入更安全(MFA)

我們不屎用微軟的MFA(Multi Factor Authentication), 原因如下:

Azure AD MFA 免費使用, 但是很貴, 哈哈, 於是就pass

multiOTP(https://github.com/multiOTP/multiotp/wiki) 是個開源免費的 MFA server & client 專案,
其實我們也只是要讓登入更安全, 目標就是手上多個驗證器, 可以輸入動態密碼, 多個保障.
不囉嗦, 直接寫下我的安裝方法

安裝開源的 MFA Server

  1. 準備docker環境
  2. 下載最新檔案
    https://download.multiotp.net/multiotp_5.8.1.0.zip
    解開檔案
  3. 修改Dockerfile
    加上 RUN echo “deb http://ftp.de.debian.org/debian buster-backports main” | tee /etc/apt/sources.list.d/docker.list
    **這是5.8.1.0的bug

修改Dockerfile這步驟以後不需要做, 下個版本會解決


4. 編譯images
docker build . -t mymultiotp:latest

5. 啟動server

docker run --mount source=multiotp-data,target=/etc/multiotp -p 8080:80 -p 8443:443 -p 1812:1812/udp -p 1813:1813/udp -d mymultiotp:latest

8080 與 8443 請依實際情況修改

6. 網頁輸入 http://<docker serverr ip>:8080

登入後, 新增測試帳號 administrator (請注意, 這個帳號是windows 10本機可登入帳號 , 不限定administrator)

手機安裝google authenticator


安裝google驗證器, 刷入帳號的QR code , 請選擇帳號後點選 Print


在windows安裝Credential Provider

https://download.multiotp.net/credential-provider/
https://download.multiotp.net/credential-provider/multiOTPCredentialProvider-5.8.1.0.exe

輸入windows的帳號與密碼, 還有google驗證器的密碼

遠端登入

此時遠端登入第一次登入不用otp密碼, 但是會出現第二是要求輸入otp密碼,

這是原本遠端桌面連線並無法一開始就支援otp的緣故,目前無法解結

MFA server 與 網域主控連線

docker 登入已安裝好的 mfa server 然後輸入以下指令

 multiotp -config default-request-prefix-pin=0
 multiotp -config default-request-ldap-pwd=1
 multiotp -config ldap-server-type=1
 multiotp -config ldap-cn-identifier="sAMAccountName"
 multiotp -config ldap-cn-identifier="sAMAccountName"
 multiotp -config ldap-group-attribute="memberOf"
 multiotp -config ldap-ssl=1
 multiotp -config ldap-port=636
 multiotp -config ldap-domain-controllers=ldaps://網域主控伺服器:636
 multiotp -config ldap-base-dn="OU=xxxx,DC=test,DC=com"
 multiotp -config ldap-bind-dn="cn=ldap,cn=Users,dc=test,dc=com"
 multiotp -config ldap-server-password="password"
 multiotp -config ldap-network-timeout=10
 multiotp -config ldap-time-limit=30
 multiotp -config ldap-activated=1
 multiotp -config ldap_default_algorithm=totp
 multiotp -debug -display-log -ldap-users-sync
  1. 若成功, 網頁登入MFA server就能看到網域使用者, 也可以派送QR code給該使用者使用
  2. 定期執行同步指令
multiotp -debug -display-log -ldap-users-sync

nextcloud 安裝流程圖套件drawio注意事項

drawio 相容m$ visio , 而且免費, 支援nextcloud, 達到線上繪製流程圖的功能.

雖說drawio還不是很穩定,但是一直在更新, 已經能上線讓公司同仁使用,

透過官方安裝drawio套件並且啟用後, 以下為注意事項:

  1. drawio預設副檔名為xml(這超奇怪的), 請將副檔名改成drawio, 並且設定mimetype
複製設定檔cp resources/config/mimetypemapping.dist.json config/mimetypemapping.json
修改 config/mimetypemapping.json 加上以下設定
"drawio": ["application/x-drawio"]
然後執行更新指令
sudo -u www-data php occ maintenance:mimetype:update-js
sudo -u www-data php occ maintenance:mimetype:update-db
若是docker請執行
docker exec --user www-data nextcloud php occ maintenance:mimetype:update-js
docker exec --user www-data nextcloud php occ maintenance:mimetype:update-db
然後再到nextcloud的設定, 重新勾選drawio的相關設定

2. 若drawio檔案分享連結, 若想要讓大家直接開啟編輯畫面, 需要修改連結

https://xxx/s/YoJWBkg7EgiyXpPdd
改成
https://xxx/apps/drawio/s/YoJWBkg7EgiyXpPdd

讓jitsi meet需要密碼登入

以 主機名稱 meet.test.com 為例子, 以下只要是meet.test.com皆須改成真實的主機名字
1. 修改 /etc/prosody/conf.avail/meet.test.com.cfg.lua

VirtualHost "meet.test.com"
         authentication = "internal_plain"
         ...

VirtualHost "guest.meet.test.com"
         authentication = "anonymous"
         c2s_require_encryption = false
         modules_enabled = {
             "bosh";
             "pubsub";
             "ping";
             "speakerstats";
             "turncredentials";
             "conference_duration";
         }

2. 安裝module storage_memory模組(optional)

apt install -y mercurial
mkdir ~/temp && cd ~/temp
hg clone 'https://hg.prosody.im/prosody-modules/' prosody-modules
cp prosody-modules/mod_storage_memory/*.lua /usr/lib/prosody/modules/.

3. 修改 /etc/jitsi/meet/meet.test.com-config.js

var config = {
     …
     hosts: {
             …
             domain: 'meet.test.com',
             anonymousdomain: 'guest.meet.test.com',
             …
         },
         …
 }

4. 修改 /etc/jitsi/jicofo/sip-communicator.properties

org.jitsi.jicofo.auth.URL=XMPP:meet.test.com

5. 新增可登入的帳號密碼

prosodyctl register william meet.test.com mypassword

6. 重開服務

systemctl restart {prosody,jicofo,jitsi-videobridge2,nginx}

這樣一來, 只有第一個登入的人需要輸入帳號密碼, 其他使用相同網址不需要密碼就可以登入(來賓帳戶guest)

1 ... 22 23 24 25 26 ... 58