2019年10月16日 星期三

處理openssh相容性問題


最近把用了很多年的伺服器換掉,結果遇到一堆問題。先簡述一下:我有很多設備要管理,我們會定期用程式請這些設備吐設定檔回來。但在這一次更換server後,有部份機器吐不回來。

1、    先確認問題點。有這個問題的都是跑舊的OS的機器。
2、    我們用的是sftp,因此可以推測大概是加密方式(強度)之類的問題
3、    Log有分兩種,讓人意外的是新款的設備也無法正常連線
Oct 16 09:15:30 28.test.net.tw %SSH-3-ERROR: failed to authenticate admin enable
Oct 16 09:17:10 28.test.net.tw %SSH-3-ERROR: failed to authenticate admin !
192.168.230.56:Oct 16 09:16:23 56.test.net.tw %SSH-3-ERROR: key_verify failed for server_host_key
192.168.230.81:Oct 16 09:16:20 81.test.net.tw %SSH-3-ERROR: key_verify failed for server_host_key
192.168.230.82:Oct 16 09:16:19 81.test.net.tw %SSH-3-ERROR: key_verify failed for server_host_key
4、從log上看起來,我本來懷疑是設備的問題,還進了shell mode查了很久。看是不是能更新server_host_ke這個檔案來處理。但後來發現沒有這個檔案一樣可以正常運作,因此又回頭找伺服器的問題。
5、既然懷疑是伺服器的相容性問題。因此我作了很多調整。調cipher,調kex,調key (本來是懷疑伺服器用的加密方式太新,舊設備不支援,打算讓伺服器向下相容)
6、試了很多參數都沒有效。因此只好調整伺服器的版本,最後找了一個相對沒有那麼舊的版本將tarball解壓編譯安裝後解決了。

以下是有問題的連線,server給了New Keys之後就被斷線了。




正常應該是這樣才對,server給了新key後,clinetserver間用新key加密傳資料

作一些筆記以後用:
以下是查詢目前ssh server支援(可使用)的加密方式、驗證方式。
ssh -Q cipher
ssh -Q mac
ssh -Q kex
ssh -Q key
man 5 sshd_config這個指令也可以查看。

新版設備使用的加密方式:
cipher=aes128-ctr ksize=128 mac=hmac-sha1 pfs=diffie-hellman-group-exchange-sha256

舊版設備使用的加密方式:
cipher=3des-cbc ksize=192 mac=hmac-sha1 pfs=diffie-hellman-group1-sha1

不過我比對之後,openssh-server其實都有支援,因此在wireshark看起來也都能正常運作,只是不曉得為何給了新key後就斷了。

LogLevelINFO等級調整成VERBOSE  比較好查修   
LogLevel VERBOSE            

 cat /var/log/audit/audit.log | grep 192.168.18.12

你可以在sshd_config,告訴它說你只想使用哪些加密方式,可以指定CiphersMACs這些。至於HostKeyAlgorithmsKexAlgorithms我測試在新版(OpenSSH 8.x是不支援的)


另外,你在測試的時候可以用ssh -vv來查看在交握過程中出了什麼問題 (我的設備太舊不支援這個參數)

在domain中的電腦如何開啟Linux的Samba的網路芳鄰檔案共享服務

這個問題是老問題了,之前遇過一次。但沒有解決,這一次因為是換機器,避不開這個問題。只好想辦法解決。

我們先假設smb.conf的內容都是對的。這樣變數比較小,不過實際上,我們都是改改調調,也不能100%的相信它沒有問題,即使testparm跟你說他是好的我們總是會懷疑。但我們還是先相信它是對的吧。

我用的Samba是4.9.1-6.el7的版本。

第一個問題是,在domain中的電腦在登入linux的samba server時,會很貼心的幫你貼上 \domain\username的帳號。這樣當然是過不了的。
我之前有錄過封包,它真的會自動幫你補上domain名稱。

解決方法很簡單,帳號改成 .\username就好了。這樣的話。它就會用\pcname\username的方法登入。但我實測的結果還是不能登入。

第二個問題是,你的密碼是用什麼指令建立的,你建立的密碼真的有被讀進來嗎?之前都是用smbpasswd,有人說現在應該要用pdbedit了,但我實測的結果,如果你沒有去動smb.conf的話,它都是產生在passdb.tdb中(當然,所存在的目錄會依你使用的linux不同而有所差異)。

第三個問題是,你的電腦乾淨嗎?以我的例子而言,因為換了機器,但是IP沒有變,還是192.168.1.2。之前儲存的\\192.168.1.2自然是不能用了。

要清除連線記錄(快取)的話,方法有很多。
klist purge
control keymgr.dll
rundll32.exe keymgr.dll, KRShowKeyMgr
基本上我都會試一下,不過我覺得比較有用的是第三個。

第四個問題,還是沒有效。怎麼辦?

這個就真的很直得討論了,我找了很久,發現以下的方法是有效的。如果你還是不能解決,就試試吧。然後可以調整一下內容裡的東西試試。

以下是操作方式:
在執行輸入secpol.msc
接著左邊選單選『本機原則』,再選『安全性選項。』
然後在右邊找到『網路安全性:LAN Manager 驗證等級』
對他點兩行,開啟內容。然後改成『只傳送NTLM v2 回應』

以下是可能的選項:
  • 傳送 LM & NTLM 回應
  • 傳送 LM & NTLM-如果交涉使用 NTLMv2 工作階段安全性 (這個是我的預設值)
  • 將 NTLM 回應只傳送
  • 傳送只 NTLMv2 回應
  • 只傳送 NTLMv2 回應。 拒絕 LM
  • 只傳送 NTLMv2 回應。 拒絕 LM & NTLM
  • 未定義
(這個是微軟機翻的版本),英文的部份是

Possible values

  • Send LM & NTLM responses
  • Send LM & NTLM - use NTLMv2 session security if negotiated
  • Send NTLM responses only
  • Send NTLMv2 responses only
  • Send NTLMv2 responses only. Refuse LM
  • Send NTLMv2 responses only. Refuse LM & NTLM
  • Not Defined


以上報告完畢。希望之後不會再花這麼多的時間作測試。

後記,由於同事需要上內部公文系統,如果修改成為NTLM V2 only會不能執行,因此我查詢了smb.conf的說明後,新增以下設定:

ntlm auth = true
讓它支援NTLM V1,降低了一點安全性。

所以結論就是,Samba 4.x為了安全性,強制用戶一定要用NTLM V2。我們可以透過修改設定檔的方法增加其相容性。