天天看點

檔案和列印機共享的背後,與時俱進的SMB協定

作者:從不一樣開始
檔案和列印機共享的背後,與時俱進的SMB協定

共享

最早接觸檔案共享概念還是在學校機房中使用NetWare區域網路的時候,後來随着Windows NT作業系統的興起,網絡通信協定NWLink從此淡出市場,加上Unix伺服器作業系統的地位,TCP/IP 通信協定簇大獲成功,成就了今天遍布全球的Internet網絡。

今天當使用者使用Windows桌面作業系統時,檔案和列印機共享需求相當普遍,在區域網路範圍内的資源共享一般不會涉及到安全問題,然而,一旦接入網際網路,那麼由資源共享所引發的安全問題應得到足夠重視,否則,共享資源、共享資料和計算機本身都可能受到來自網際網路的入侵、滲透和破壞。

檔案和列印機等資源共享的背後,是基于TCP/IP協定之上的檔案共享協定,即SMB/CIFS協定,早期SMB v1.0協定最初被設計為在NetBIOS over TCP/IP(NBT)上運作,使用端口TCP 139進行會話服務,端口TCP/UDP 137進行名稱服務,端口UDP 138進行資料報服務。

安全

預設情況下為了相容性,NBT在Windows系統中預設安裝并啟用,檔案共享和相關資訊會暴露在整個網絡上,在本地網絡中不是一個大問題,但如果暴露在網際網路上,就産生相當安全風險。中間人(MITM)和NetBIOS名稱服務(NBNS)欺騙攻擊在支援NTB的網絡中很常見。

SMB協定可能依賴NetBIOS與不支援通過TCP/IP直接托管SMB的舊裝置通信,但如果沒有老舊裝置,則應當徹底關閉NetBIOS支援。雖然現在主流Windows作業系統上的NetBIOS(NBT)是一種完全獨立于SMB的服務,它不依賴SMB的任何東西,是over TCP/IP之上的,SMB協定在通過NBT運作時依賴于139端口,不建議這樣做。對于通過TCP/IP直接托管SMB時,端口号為TCP 445。Windows作業系統預設為同時開啟139和445端口,哪個先響應就用哪個通信。

SMB協定的早期版本在WannaCry勒索軟體攻擊中通過一個名為EternalBlue的零日漏洞被利用。WannaCry利用了使用過時的SMB協定版本的傳統版本的Windows電腦。WannaCry是一種網絡蠕蟲,它的傳輸機制旨在自動傳播。傳輸代碼掃描易受EternalBlue攻擊的系統,然後安裝DoublePulsar(一種後門工具),并執行病毒副本。

一台受感染的計算機将搜尋其Windows網絡中接受TCP端口135-139或445流量的裝置,表明該系統被配置為運作SMB,然後它将啟動一個與裝置的SMB v1連接配接,并使用緩沖區溢出來控制系統,并安裝攻擊的勒索軟體元件。這意味着WannaCry可以在沒有受害者參與的情況下自動傳播。微軟公司此後釋出了對Windows XP、Windows Server 2003、Windows 8、Windows Vista、Windows 7、Windows 8.1、Windows 10、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012和Windows Server 2016的安全更新,以防止這一漏洞。

曆史

SMB最初是由IBM的Barry Feigenbaum在1983年設計的,目的是将DOS INT 21h本地檔案通路變成一個網絡檔案系統,最初被設計為使用IP端口139和UDP端口137和138在TCP/IP(NBT)上的NetBIOS之上運作。

在NetBIOS會話服務上運作的軟體應用程式通過TCP端口139的NetBIOS名稱來定位和識别對方。微軟将SMB協定與他們1990年開始開發的LAN Manager産品合并,并繼續在Windows for Workgroups中為該協定增加功能。1996年,微軟發起了一項倡議,将SMB重新命名為通用網際網路檔案系統(CIFS),并增加了更多的功能,包括支援符号連結、硬連結、更大的檔案大小,并初步嘗試支援通過TCP 445端口的直接連接配接,而不需要NetBIOS作為傳輸方式。

到了微軟Windows 2000,微軟已經将SMB改為通過445端口操作。SMB仍然使用445端口。

SMB 1.0性能很差,微軟官方解釋說1.0隻是一個塊級而不是流式協定,是為小型區域網路設計的。SMB 2.0,通過将其數百條指令和子指令減少到19條,提高了協定的效率。微軟繼續投資于改善SMB的性能和安全性。與Windows 8和Windows Server 2012一起推出的SMB 3.0帶來了幾個重大變化,增加了功能,提高了SMB2的性能,特别是在虛拟化資料中心。此外它還引入了一些安全方面的改進,如端到端加密和新的基于AES的簽名算法。

服務

SAMBA最初是SMB伺服器,但由于SMB伺服器是一個實際的産品,是以不得不改名。SMB是CIFS的前身。SMB(伺服器資訊塊)和CIFS(通用網際網路檔案系統)是協定。Samba實作了CIFS網絡協定。Samba服務可以提供檔案和列印共享服務,也可以作為Windows域伺服器,并與Windows系統無縫對接。Samba通常被稱為網絡檔案系統,可以安裝在各種作業系統平台上,包括Linux、大多數常見的UNIX平台、OpenVMS和OS/2。

差別

SMB協定對應着檔案系統SMBFS,起源于Samba項目,這個檔案系統已經被廢棄,但為了向後相容,還沒有被删除,但沒有人維護,而Linux作業系統對檔案系統CIFS提供了原生支援,不依賴Samba服務。

優化

如果有類似的硬體,Samba服務在速度上肯定會比其他系統有競争力,隻要配置得當,優于NFS和FTP。以下都是重要的性能配置選項,開啟後可以成倍提高網絡檔案共享讀寫速度。

#修改samba服務配置檔案smb.conf,在global節添加以下配置
read raw = yes  #允許samba以64KB塊大小進行讀寫
write raw =yes
socket options = TCP_NODELAY #不等确認收到就繼續發送資料
socket options = IPTOS_LOWDELAY #用吞吐量換取低延遲,影響路由器           

實際測評表明,TCP_NODELAY 配置選項可以翻倍提升性能,其實真正的原因是微軟作業系統所實作的TCP/IP協定棧在發送TCP ACK時很慢,開啟這個配置後繞過了這個BUG。

一般使用如下指令測試Samba服務的配置檔案是否正确。

# testparm /etc/samba/smb.conf
# smbcontrol all reload-config  #強制配置立即生效
# smbcontrol all reload-printers #強制重新整理列印機           

繼續閱讀