2009年2月27日 星期五

[筆記]ssh蕩劍十式(2)

07. 第五式:Port Fowarding A. port forwarding:
ssh -L 4321:REMOTEHOST:1234 maxsolar@REMOTEHOST
-L表示本地端的意思。本地的port 4321到對方的port 1234建立一個加密連線。 B. reverse port forwarding:
ssh -R 4321:LOCALHOST:1234 maxsolar@REMOTEHOST
-R表示遠端的意思。遠端的port 4321到本地的port 1234建立一個加密連線。 C.tunneling and port forwarding:
ssh -L 4321:REMOTEHOST:1234 maxsolar@THIRDHOST
這個比較有趣,結合了tunnelling跟forwarding,本地端port 1234建立一個加密連線到第三方主機,第三方主機會把封包轉送到遠端的port 4321。請注意紅色跟綠色連線標示,從第三方主機開始,連線就沒有加密,但是可以作到封包轉送。中國的資訊封閉,很多軟體就是透過這樣的原理接觸到其他國家的新聞。 08. 第六式:公鑰認證 A. 製作一個公鑰認證:可以允許使用者登入時不用輸入密碼(或是僅輸入密語,passphrase),也可以減少密碼曝光的機率。首先我們「只使用」ssh2, 因為他用的技術可以避免劊客封包攔截(middle of the man)。假設我們產生一個rsa的key pair(注意:以普通使用者身份執行,因為是要產生自己的key pair):
ssh-keygen -t rsa
此時會產生一對公鑰跟私鑰,放置的位置不必更動,預設是~/.ssh/id_rsa(私鑰)以及~/.ssh/id_rsa.pub(公鑰)。之後會要求你輸入密語(passphrase),你可以選擇按enter保持密語空白,也可以輸入密語。 任何人於任何時刻都不應該把私鑰傳送出去,特別是透過samba,需確定除了自己以外的使用者毫無存取自己家目錄的可能。 B. 把作好的公鑰傳送到信任的遠端。「信任」是一個很主觀的問題,遠端主機效率不好、很愚蠢的系統管理員或是有很厲害又愛搞破壞的使用者都可以算是不能信任。但無論如何,你不需要把自己的公鑰傳送到你不知道該不該信任的主機,雖然他只是公鑰。
scp ~/.ssh/id_rsa.pub REMOTEHOST:~/.ssh/LOCALHOST_pubkey ssh REMOTEHOST 'cat ~/.ssh/LOCALHOST_pubkey >> ~/.ssh/authorized_keys'
~/.ssh/authorized_keys是遠端主機儲存你個人公鑰的地方,字不要打錯了! 這時候你再利用ssh 連線到遠端主機,你會發現不用打密碼了;如果你在產生rsa的key pair時選擇輸入密語,這時出現的提示就是輸入密語,而非密碼。 C.我不想要輸入密語,可以嗎? 假設產生key pair時你沒有輸入密語,這個小段你可以不用理會。假設你輸入了密語,你可以「暫時」不用輸入密語:在本地端機器以普通使用者執行
ssh-agent bash ssh-add ~/.ssh/id_rsa
此時會要求輸入密語。輸入你先前產生的那個密語並交給ssh-agent來幫你自動回答密語,此時你再使用ssh連線到遠端主機,就會連密語也不會問了!不過關閉這個shell,整個ssh-agent也會結束,要相同目的只能重作一次。 D.附記:遠端連線不用輸入密碼是很愉快的事情;事實上,在步驟B時,使用者也可以愚蠢的把本地端自己的私鑰傳到遠端主機;別懷疑,也是可以達成不用輸入密碼的效果!不過如果你的authorized_keys權限不是600的話,那可真的是令自己陷於水火之中呢! 09. 第七式:取得公鑰 當你連線到遠端主機,你會被提示是否要加入遠端主機的公鑰,因此取得公鑰是容易的事情。不過有時候系統管理員會因為安全性設定(ssh_config裡的StrictHostKeyChecking設定為yes),導致使用者無法增加新的公鑰,得到如下的錯誤訊息:
No RSA host key is known for planck and you have requested strict checking.
Host key verification failed.
使用者必須手動加入遠端主機的公鑰到~/.ssh/known_hosts裡:
ssh-keyscan -t rsa REMOTEHOST > REMOTE.pub cat REMOTE.pub >> ~/.ssh/known_hosts
假設管理員設定ssh_config將該遠端機器排除連線,那麼手動加入也沒有效果。 10. 第八式:基本的安全性設定 server端:/etc/ssh/sshd_config
AllowUsers                 #限定可以登入的使用者。
DenyUsers                  #同時存在時,以Deny為主;多個使用者以空白鍵分開
Protocol 2                 #ssh version 2
ListenAddress              #用address:port表示
Port 22                    #改變port number
PasswordAuthentication no  #設定成no。我們使用的不是密碼認證。
UsePAM yes                 #使用PAM認證
PermitRootLogin no         #不允許root登入
X11Forwarding yes          #允許遠端傳圖形至本機
client端:/etc/ssh/ssh_config
Host *                     #可限制遠連線主機
ForwardX11 yes             #允許遠端傳圖形至本機
Protocol 2                 #僅允許使用者使用ssh version 2
PasswordAuthentication no  #設定成no。我們使用的不是密碼認證。
StrictHostKeyChecking yes  #預設是ask。設定成yes可以限制使用者只連線已在
                           known_hosts裡的主機。
11. 第九式:以denyhosts保護你的ssh伺服器 請確保denyhosts會在開機時啟動:
insserv denyhosts
檢查看看有沒有在正確的runlevel啟動:
chkconfig -l | grep denyhosts
以下是列出/etc/denyhosts.conf比較重要的部份:
SECURE_LOG = /var/log/auth.log (Debian only)
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY =                 #PURGE_DENY定義多久以後清除被封鎖的主機。
                             空值表示永不清除。
BLOCK_SERVICE  = ALL         #BLOCK_SERVICE定義被限制的daemon名稱。
DENY_THRESHOLD_INVALID = 1   #定義了無效的使用者名稱的登入次數。
DENY_THRESHOLD_VALID = 4     #除root外,有效的使用者名稱最高容忍登入錯誤次數。
DENY_THRESHOLD_ROOT = 1      #root所能允許錯誤登入次數。
                             其實這已無所謂,因為我的sshd並不允許root登入。
DENY_THRESHOLD_RESTRICTED = 1
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
    #如果設定為YES:如果從allowed-host中可疑的試圖登入結果,被認為是可疑的
    #如果設定為NO :如果從allowed-host中可疑的試圖登入結果,不會被報告記錄
    #(所有可疑登入的IP位址不在allowed-hosts中,皆會被報告紀錄)
HOSTNAME_LOOKUP=YES         #如果設定為YES:每個IP位址會被記錄在Denyhosts,
                          符合的主機名稱同樣的也會被查詢且紀錄
DAEMON_LOG = /var/log/denyhosts #log位置。
需要特別自訂的參數大致上是這些,你也可以參考
Bad IPs來寫進/etc/hosts.deny。 12. 第十式:掛載ssh filesystem 假設您已經安裝了sshfs,你可以這樣掛載sshfs:
sshfs maxsolar@REMOTEHOST: mountpoint
也許會出現:
failed to open /dev/fuse: Permission denied
解決的方法很簡單,把使用者加入fuse群組裡即可。卸載sshfs則是
fusermount -u mountpoint
您也可以參考:[筆記]ssh蕩劍十式(1) 參考來源: http://zh.wikipedia.org/wiki/OpenSSH http://www.openssh.org/manual.html http://linux.vbird.org/linux_server/0310telnetssh.php Netman老師寫的:ssh的一些技巧心得

沒有留言: