天天看點

SSH遠端管理和通路控制

SSH遠端管理和通路控制

📒部落格首頁: ​​微笑的段嘉許部落格首頁​​

🎉歡迎關注🔎點贊👍收藏⭐留言📝

📌本文由微笑的段嘉許原創!

📆51CTO首發時間:🌴2022年10月日25🌴

✉️堅持和努力一定能換來詩與遠方!

🙏作者水準很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!

⭐本文介紹⭐

在此前的文章中曾陸續介紹了網站、FTP等各種網絡服務,實際上給大多數企業伺服器是通過遠端登入的方式來進行管理的。當需要從一個工作站管理數以百計的伺服器主機時,遠端維護的方式将更占優勢。本文将介紹如何針對Linux環境使用安全的方式遠端管理,以及通過TCP Wreappers機制為應用提供通路控制。

📌導航小助手📌

📝理論講解:

SSH遠端管理

SSH(Secure Shell)是一種安全通道協定,主要用來實作字元界面的遠端登入、遠端複制等功能。SSH協定對通信雙方資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者密碼。與早期的Telent(遠端登入)、RSH(Remote Shell,遠端執行指令)、RCP(Remote Copy,遠端檔案複制)等應用相比、SSH協定提供了更好大的安全性。

OpenSSH伺服器

在CentOS 7.3系統中,OpenSSH伺服器openssh、openssh-server等軟體包提供(預設已安裝),并已将sshd添加為标準的系統服務。執行"systemctl start sshd"指令即可啟動sshd服務,包括root在内的大部分使用者(隻需要擁有合法的登入Shell)都可以遠端登入系統。

sshd服務的配置檔案預設位于/etc/ssh/ssd_config目錄下,正确調整相關配置項,可以進一步提高SShd遠端的安全性。

伺服器監聽選項

sshd服務使用的預設端口号為22,必要時建議修改此端口号,并指定監聽服務的具體IP位址,以提高在網絡中的隐蔽性。除此之外,SSH協定的版本選用V2比V1的安全性要更好,禁用DNS反向解析可以提高伺服器的響應速度。

[root@localhost ~]# vim /etc/ssh/sshd_config
port 22                   //監聽端口為22
ListenAddress 192.168.10.22         //監聽位址為192.168.10.22
Protocol 2                  使用SSH V2版本
……
UseDNS no                 //禁用DNS反向解析
……
[root@localhost ~]# systemctl start sshd      

使用者登入控制

sshd服務預設允許root使用者登入,但在Internet中使用時是非常不安全的。普遍的做法如下:

先以普通使用者遠端登入,進入安全Shell環境後,根據實際需要使用su指令切換為root使用者。

關于sshd服務的使用者登入控制,通常應禁止root使用者或密碼為空的使用者登入。另外,可以限制登入驗證的時間(預設為2分鐘)及最大重試次數,若超過限制後仍未能登入則斷開連接配接。

登入驗證方式

對于伺服器的遠端管理,除了使用者賬号的安全控制以外,登入驗證的方式也非常重要。sshd服務支援兩種驗證方式——密碼驗證、密鑰對驗證,可以設定隻使用其中一種方式,也可以兩種方式都啟用。

  • 密碼驗證:對伺服器中本地系統使用者的登入名稱、密碼進行驗證。這種方式使用最為簡便,但從用戶端角度來看,正在連接配接的伺服器有可能被假冒;從伺服器角度來看,當遭遇密碼窮舉(暴力破-解)攻-擊時防禦能力比較弱。
  • 密鑰對驗證:要求提供相比對的密鑰才能通過驗證。通常先在用戶端中建立一對密鑰檔案(公鑰、私鑰),然後将公鑰檔案放到伺服器中的指定位置。遠端登入時,系統将使用時公鑰、私鑰進行加密/解密關聯驗證,大大增強了遠端管理的安全性。該方式不易被假冒,且可以免互動式登入,在Shell中被廣泛使用。

當密碼驗證、密鑰對驗證都啟用時,伺服器優先使用密鑰對驗證。對于安全性要求較高伺服器,建議将密碼驗證方式禁用,隻允許啟用密鑰對驗證方式;若沒有特殊要求,則兩種方式都可以啟用。

[root@localhost ~]# vim/etc/ssh/sshd_config
PasswordAuthentication yes          //啟用密碼驗證
PubkeyAuthentication yes          //啟用密鑰對驗證
AuthorizedKeysFile  .ssh/authorized_keys  //指定公鑰庫檔案
……
[root@localhost ~]# systemctl restart sshd      

其中,公鑰庫檔案用來儲存多個用戶端上傳的公鑰文本,以便與用戶端本地的私鑰檔案進行比對。關于密鑰驗證方式的使用,還涉及密鑰對檔案的建立、部署等操作

TCP Wrappers通路控制

在Linux系統中,許多網絡服務針對用戶端提供了通路控股之機制,如Samba、BIND、HTTPD、OpnSSH等。本文将介紹另一種防護機制——TCP Wrappers(TCP 封套),以作為應用服務與網絡之間的一道特殊防線,提供額外的安全保障。

TCP Wrappers概述

TCP Wrappers将TCP服務程式" 包裹 "起來,代為監聽TCP服務程式的端口,增加了uige安全檢測過程,外來的連接配接請求必須先通過這層安全檢測,獲得許可後才能通路真正的服務程式,如下圖所示。TCP Wrappers還可以記錄所有企圖通路被保護服務的行為,為管理者提供豐富的安全分析資料。

SSH遠端管理和通路控制

對于大對數Linux發行版,TCP Wrappers是預設提供的功能。CentOS 7.2中是使用的軟體包是tcp_wrappers-7.6-77.e17 .x86_64.rpm,​​該軟體包提供了執行程式tcpd和共享連結庫檔案libwrap.so​​​.*,對應TCP Wrapper保護機制的兩種實作方式——直接使用tcpd程式對其他伺服器進行保護,需要運作tcpd;​​由其他網絡服務程式調用libwrap.so​​.\*連結庫,不需要運作tcpd程式。

通常,連結庫方式的應用要更加廣泛,也更有效率。例如,vsftpd、sshd及超級伺服器xinetd等,都調用了libwrap共享庫(使用ldd指令可以檢視程式的共享庫)。

[root@localhost ~]#ldd /usr/sbin/sshd | grep "libwrap"
 libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb178fce000)      

📢友情提示:

xinetd是一個特殊的服務管理程式,通常被稱為超級伺服器。xinetd通過在/etc/xinetd.d目錄下為每個被保護的程式建立一個配置檔案,調用TCP Wrappers機制來提供額外的通路控制保護。

TCP Wrappers的通路政策

TCP Wrappers機制的保護對象為各種網絡服務程式,針對通路服務的用戶端位址進行通路控制。對應的兩個政策檔案為/etc/hosts.allow和/etc/hosts.deny,分别用來設定允許和拒絕的政策。

政策的配置格式

兩個政策檔案的作用相反,但配置記錄的格式相同,如下所示。

<服務程式清單>: <用戶端位址清單>      

服務程式清單、用戶端位址清單之間以冒号分隔,在每個清單内的多個項之間以逗号分隔。

  1. 服務程式清單

    服務程式清單可分為以下幾類。

  • ALL:代表所有的服務
  • 單個服務程式:如"vsftpd"
  • 多個服務程式組成的清單:如"vsftpd,sshd"。
  1. 用戶端位址清單

    用戶端位址清單可分為以下幾類

  • ALL:代表任何用戶端位址
  • LOCAL:代表本機位址
  • 單個IP位址:如"192.168.4.4"
  • 網絡段位址:如"192.168.4.0/255/255/255/0"
  • 以" . "開始的域名:如" .bdqn.com "比對bdqn.com域中的所有主機。
  • 以" . "結束的網絡位址:如" 192.168.4. "比對整個192.168.4.0/24網段、
  • 嵌入通配符" * " " ? ":前者代表任意長度字元,後者僅代表一個字元,如" 10.0.8.2* "比對以10.0.8.2開頭的所有IP位址。不可與以" . "開始或結束的模式混用。
  • 多個用戶端弟子組成的清單:如" 192.168.1. ,172.16.16. ,.bdqn.com"。

通路控制的基本原則

關于TCP Wrappers機制的通路政策,應用時遵循以下順序和原則:首先檢查/etc/hosts.allow檔案,如果找到相比對的政策,則允許通路;否則繼續檢查/etc/hosts.deny檔案如果找到相比對的政策,則拒絕通路;如果檢查上述兩個檔案都找不到相比對的政策,則允許通路。

TCP Wrappers配置執行個體

實際使用TCP Wrappers機制時,較寬松的政策可以是"允許所有,拒絕個别",較嚴格的政策是"允許個别,拒絕所有"。前者隻需在hosts.deny檔案中添加相應的拒絕政策就可以了;後者則除了在hosts.allow中添加允許政策之外,還需要在hosts.deny檔案中設定"ALL:ALL"的拒絕政策。

例如,若隻希望從IP位址為61.63.67的主機或者位于192.168.2.0/24網段的主機通路sshd服務,其他位址被拒絕,可以執行以下操作。

[root@localhost ~]# vi /etc/hosts.allow
sshd:61.63.65.67,192.168.2.*
[root@localhost ~]# vi /etc/hosts.deny
sshd:ALL      

📖實驗配置與實作:

拓撲圖:

SSH遠端管理和通路控制

推薦步驟:

  • 安裝 ssh 伺服器端和用戶端設定服務開機自動啟動,配置身份驗證的 ssh,保證 ssh 伺服器的安全性禁止為空密碼通路,将 ssh 伺服器端口修改為 2222,在 ssh 伺服器端建立 bob 和 tom 兩個使用者允許用戶端 192.168.100.20 登入 bob 和 root 賬戶,禁止 tom使用者通過 192.168.100.20 登入
  • 配置免互動式身份驗證 ssh,允許 Centos03 使用 root 使用者和 alice 使用者免互動式通路ssh 伺服器端,配置通路控制阻止主機 192.168.100.30 通路 ssh 伺服器

實驗步驟:

一、安裝 ssh 伺服器端配置身份驗證 ssh 限制使用者通路

1、挂載系統盤安裝服務

1) 挂載系統盤

SSH遠端管理和通路控制

2)安裝伺服器端和用戶端

SSH遠端管理和通路控制

3)設定服務開機自動啟動

SSH遠端管理和通路控制

2、建立驗證賬戶配置密碼

1)建立驗證賬戶 bob、tom

SSH遠端管理和通路控制

2)設定密碼

SSH遠端管理和通路控制

3、配置 SSH 伺服器控制使用者通路

1)修改 ssh 主配置檔案

SSH遠端管理和通路控制
SSH遠端管理和通路控制
SSH遠端管理和通路控制

2)重新開機啟動服務監聽端口

SSH遠端管理和通路控制

4、驗證配置賬戶密碼 ssh 伺服器端

1)允許 bob 通過 192.168.100.20 登入

SSH遠端管理和通路控制

2)禁止 tom 通過 192.168.100.20 登入

SSH遠端管理和通路控制

3)允許 root 通過 192.168.100.20 登入

SSH遠端管理和通路控制

二、配置免互動式身份驗證 ssh,允許 Centos03 使用 root 使用者和 alice 使用者免互動式通路 ssh 伺服器端,配置通路控制拒絕 192.168.100.30 通路 ssh 服務

1、修改 ssh 伺服器支援免互動式驗證

1)修改主配置檔案

SSH遠端管理和通路控制

2)重新啟動服務

SSH遠端管理和通路控制

2、配置用戶端 root 使用者免互動式驗證

1)生成密鑰對

SSH遠端管理和通路控制

2)上傳公鑰到遠端通路伺服器

SSH遠端管理和通路控制

3)驗證使用 root 登入

SSH遠端管理和通路控制

3、配置使用 alice 使用者身份驗證免互動式驗證

1)建立 alice 使用者設定密碼

SSH遠端管理和通路控制

2)切換到 alice 使用者生成密鑰對

SSH遠端管理和通路控制

3)上傳公鑰

SSH遠端管理和通路控制

4)alice 登入遠端伺服器

SSH遠端管理和通路控制

4、配置通路控制限制 192.168.100.30 主機通路 ssh 服務

1)配置通路控制

SSH遠端管理和通路控制

2) 驗證遠端管理無法通路

繼續閱讀