SSH遠端通路控制
重點:SSH服務的安全控制
TCPWrappers通路政策
5.1SSH遠端管理
Ssh(Secure shell) 是一種安全通道協定,主要用來實作字元界面的遠端登入,遠端複制等功能.SSH協定對通信雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的密碼.于早期的telnet(遠端登入)rsh(遠端執行指令)rcp(遠端檔案複制)等應用相比,SSH協定提供更好安全性。
5.1.1配置 OpenSSH服務端
在RHEL 5系統中,openssh伺服器由openssh openssh-server等軟體包提供(預設已安裝),并已将sshd添加标準的系統服務,執行“service sshd start”即可按預設配置啟動sshd服務,包括root在内的大部分使用者(隻要擁有合法的登入shell)都可以遠端登入系統。
Sshd的配置檔案的預設位于/etc/ssh/sshd_config
1.服務監聽選項
Sshd使用的預設端口22,,必要時建議修改此端口,并制定監聽服務的具體IP位址,以提高在網絡中的隐蔽性。
列:vim /etc/ssh/sshd_config
Port 22 //監聽端口為22
Protocol 2 //使用 ssh v2協定
listenAddress 192.168.4.254 //監聽位址為192.168.4.254
UseDNS no //禁用dns反向解析
Service sshd reload
2.使用者登入控制
Sshd服務預設允許root使用者登入,在目前internet環境非常不安全,更普遍的做法:以普通使用者遠端登入,進入安全shell環境後,根據實際需要使用su指令切換為root使用者。
Ssh服務使用者登入控制,通常應禁止root使用者或密碼為空的使用者登入,另外可以限制登入驗證時間(預設兩分鐘)及最大重試次數,若超過限制後仍未登入則斷開連接配接。
列:vim /etc/sshd/ssh_config
PermitRootLogin no //禁止root使用者登入
PermitEmptyPasswords no //禁止空密碼使用者登入
LoginGraceTime 2m //登入驗證時間為2分鐘
MaxAuthTries 6 //最大重試次數為6
Service sshdreload
當隻允許或禁止某些使用者登入時,可以使用AllowUsers或DenyUsers配置,兩者類似(注意不要同時使用)列:隻允許jerry和admin使用者登入,且其中admin使用者僅能夠從IP位址為61.23.24.25的主機遠端登入
Vim /etc/ssh/sshd_config
AllowUsers jerry [email protected] //多個使用者以空格分隔
Service sshd reload
3.登入驗證方式
Sshd服務支援兩種驗證方式:密碼驗證、密鑰對驗證,可以設定其中一種方式,也可以兩種方式都啟用
l密碼驗證:以伺服器中本地系統使用者的登入名稱、密碼進行驗證。從伺服器來說,當遭遇到密碼窮舉(暴力破解)攻擊時防禦能力較弱。
l密鑰對驗證:要求提供相比對的密鑰資訊才能通過驗證。通常先在客戶機中建立一對密鑰檔案(公鑰、私鑰),然定後将公鑰檔案放到伺服器中的指定位置。遠端登入時,系統将使用公鑰、私鑰進行加密、解密關聯驗證,大大增強了遠端管理的安全性。
注:當密碼驗證、密鑰對驗證都使用時,伺服器将優先将使用密鑰對驗證。
對于安全性較高的伺服器,建議将密碼驗證方式禁用,隻允許密鑰對驗證方式;若沒有特殊要求,則兩種方式都可以啟用。
PasswordAuthentication yes //啟用密碼驗證
PubkeyAuthentication yes //啟用密鑰對驗證
AuthoorizedKeyFile ./ssh/authorized_keys //指定公鑰庫資料檔案
Service sshd reload
注:公鑰庫檔案用來儲存各客戶機上傳的公鑰文本,以便與客戶機本地的私鑰檔案進行比對
5.1.2 使用SSH用戶端程式
在rhel系統中,OpenSSH用戶端由openssh-clients軟體包提供(預設已安裝),其中包括ssh遠端程式指令,以及scp、sftp遠端複制和檔案傳輸指令。實際上,任何支援ssh協定的用戶端程式都可以與oopenssh伺服器進行通信,列入,windows平台中的putty、winscp、secureCRT等圖形工具。
1.指令程式ssh、scp、sftp
1)ssh遠端登入
用戶端登入方式:ssh user@host -p 22 或 ssh -l user host
ssh指令可以遠端登入到sshd服務,為使用者提供一個安全的shell環境,以便對伺服器進行管理和維護。使用時應指定登入使用者、目标主機位址作為參數。
列: ssh [email protected]
Are yousure you want to continue connecting (yes /no)?yes //接受密鑰
[email protected]’s password : //輸入密碼
注:當使用者第一次登入ssh伺服器時,必須接受伺服器發來的RSA密鑰(根據提示輸入yes)
後才能繼續驗證,接收的密鑰資訊儲存到~/.ssh/known_hosts檔案中。
列:whoami //确認目前使用者
/sbin/ifconfigeth0 | grep “inet addr” //确認目前主機的IP位址
-p 選項:指定端口号(非預設端口号)
列: ssh -p 2345 [email protected]
2)scp遠端複制
scp遠端安全複制 : scp user@host:file1 file2 -p 22 或 scp file1 user@host:file2
注:下載下傳:讀取權限上傳:寫入權限
通過scp指令可以利用SSH 安全連接配接與遠端主機互相複制檔案。使用scp指令時必須指定複制源、目标外,還應指定目标主機位址、登入使用者、執行後提示驗證密碼即可。
列: scp [email protected]:/etc/passwd /root/pwd254.txt
Scp -r /etc/vsftpd [email protected]:/opt/
3)sftp安全ftp
格式:sftp user@host -oport=22 (非預設時加端口)
通過sftp指令可以利用ssh安全連接配接與遠端主機上傳、下載下傳檔案,采用了與ftp類似的登陸過程和互動式環境,便于目錄資源管理。
列: sftp [email protected]
Ls
Put /boot/config-2.6.18-194.el5 //上傳檔案
Bye //登出
2.圖型工具puttyCN、winSCP
1)puttyCN 遠端登入
puttyCN是一款跨平台的telnet/ SSH圖形用戶端軟體,能夠在windows 32平台模拟xterm終端環境。
使用puttyCN時,隻需運作putty.exe,然後再視窗中指定遠端主機的IP位址/端口号等資訊,在打開,根據提示接受密鑰,驗證密碼即可成功登陸到目标主機。
2)winscp遠端複制
winscp是一款用于windows平台的ssh圖形用戶端軟體,用來通過SCP/sftp方式在本地與遠端計算機之間安全的複制檔案。
使用winscp時,隻需運作主程式winscpexe,然後再視窗中制定遠端主機的ip位址/端口号等相關資訊,在單擊“登入”,根據提示
5.1.3建構密鑰對驗證的ssh體系
密鑰對驗證方式可以為遠端登陸提供更好的安全性,客戶機中建構密鑰對驗證ssh體系的基本過程,如圖

Ssh密鑰的實作流程
1.在用戶端建立密鑰對
在linux客戶機中,通過ssh-keygen工具為目前使用者建立密鑰對檔案.可用的密鑰算法為RSA或DSA(ssh-keygen指令的-t選項用于指定算法類型).
列:ssh-keygen -t rsa
Enter file in which to save the key(/home/zhangsan/.ssh/id_rsa): //指定私鑰位置(回車)
Enter passphrase (empty for no passphrase): //設定私鑰短語(至少5位)
Enter same passphraseagain: //确認所設定的短語
公共檔案夾預設存放在宿主目錄中的隐藏檔案夾.ssh/下,私鑰短語用來對私鑰檔案進行保護,當使用該密鑰驗證登陸時必須正确提供此處所設定的短語.
列: ls -lh ~/.ssh/id_rsa* //确認生成的密鑰檔案
新生成的密鑰檔案中,id_rsa是私鑰檔案,權限預設為600,對于私鑰檔案必須妥善保管,不能洩露給他人;id_rsa.pub是公鑰檔案,用來提供給SSH伺服器.
2.将公鑰檔案上傳給伺服器
将上一步生成的密鑰檔案發送給伺服器,并部署到伺服器段使用者的公鑰資料庫中,上傳公鑰檔案可以選擇ftp/http/samba甚至發送郵件等方式.
列: scp ~/.ssh/id_rsa.pub [email protected]:/tmp/ //通過scp的方式将檔案上傳至伺服器的/tmp/目錄中.
3.在伺服器中導入公鑰文本
在伺服器中,目标使用者(指用來遠端登陸的帳号)的弓公鑰資料庫位于”.ssh/”目錄,預設的檔案名是authorrized_keys,當獲得客戶機發送過來的公鑰檔案以後,可以通過重定向将公鑰文本内容追加到目标使用者的公鑰資料庫
列:mkdir -p /home/lisi/.ssh/
Cat/tmp/id_rsa.pub >> /home/lisi/.ssh/authorized_keys
Tail -1 /home/lisi/.ssh/authorized_keys
Chown -R lisi.lisi .ssh/
Chmod 700 .ssh/
Ls -l /home/lisi/.ssh/authorized_keys
4.在用戶端使用密鑰對驗證
列: ssh [email protected]
5.2 TCP wrappers 通路控制
TCP wrappers概述
TCP wrappers将其他的tcp服務程式包裹起來,增加了安全檢測的過程,外來的來接請求必須先通過這層安全檢測,獲得許可後才能通路真正的服務程式.如圖, TCP wrappers還可以記錄所有企圖通路被保護服務的行為,為管理者提供豐富的安全分析資料.
TCP Warppers 的工作原理
對于大多數linux 發行版來說, TCP wrappers是預設提供的功能
RHEL5使用的軟體包為tcp_wrappers_7.6-40.7.el5,該軟體包提供了tcpd和共享連接配接庫檔案libwrap.so*,對應TCPwrappers保護機制的兩種實作方式—直接使用tcpd對其他服務程式進行保護,需要運作tcpd;由其他網絡服務程式調用libwrap.so*連結庫,不需要運作tcpd
列: rpm -ql tcp_wrappers
Ldd /usr/sbin/vaftpd | grep “libwrap” //調用ldd指令可以檢視程式共享庫
Ldd /usr/sbin/sshd | grep “libwrap”
Ldd /usr/sbin/xinetd | grep “libwrap”
注意 :xinetd是一個特殊的服務管理程式,通常稱為超級服務,xinetd通過/etc/xinet.
d/目錄下為每一個被保護的程式建立一個配置檔案,調用TCPwrappers機制來提供額外的通路控制保護
5.2.2TCP wrappers的通路政策
1.政策的配置格式:<服務程式清單>:<客戶機位址清單>
1)服務程式清單
可分為幾類為:ALL:代表所有服務
單個服務程式:如“vsftpd”
多個服務程式組成的清單:如“vsftpd,sshd”
2)客戶機位址清單:ALL:代表人和客戶機位址
LOCAL:代表本機位址
單個IP位址:如192.168.4.1
網絡段位址:如192.168.4.0/255.255.255.0
以“.”開始的域名:如“.benet.com”比對.benet.com域中的所有主機
以“.”結束的網絡位址,如192.168.4.比對整個192.168.4.0/24網段
嵌入通配符* ?:前者代表任意長度字元,後者僅代表一個字元,如:”10.0.8.2*”比對以10.0.8.2開頭的所有IP位址,不可與以.開始或結束的模式混用 ?代表0-9
多個客戶機位址組成的清單,如”192.168.1.,172.17.17.,.benet.com”
2.通路控制的基本規則
應用時遵循以下規則:
首先檢查/額頭從/hosts.allow檔案,如找到相比對的政策,則允許通路
否則繼續檢查/額頭從/hosts.deny檔案,如找到相比對的政策,則拒絕通路
如檢查上述兩個檔案都找不到想比對的政策,則允許通路
3.TCP wrappers 配置實列:
若允許61.63.65.67的主機或位于192.168.2.0/24網段的主機通路sshd服務,其他所有位址被拒絕
列:vi /etc/hosts.allow
sshdd:61.63.65.67,192.168.2.*
Vi /etc/hosts.deny