ssh登陸與端口轉發

ssh: secure shell, protocol, 22/tcp,  安全的遠程登錄
     具體的軟件實現:
OpenSSH  : ssh 協議的開源實現,CentOS 默認安裝
dropbear :另一個開源實現SSH 
     協議版本
          v1:  基于CRC-32 做MAC ,不安全;man-in-middle
          v2 :雙方主機協議選擇安全的MAC 方式
          基于DH 算法做密鑰交換,基于RSA 或DSA 實現身份認證
    兩種方式的用戶登錄認證:
          基于password
          基于key

OpenSSH 介紹
  相關包:
        openssh
        openssh-clients
        openssh-server
  工具:
        基于C/S 結構
            Client: ssh, scp, sftp
            Windows 客戶端:
            xshell, putty, securecrt, sshsecureshellclient
        Server: sshd

客戶端組件:
    ssh,  配置文件:/etc/ssh/ssh_config
          Host PATTERN
                StrictHostKeyChecking no  首次登錄不顯示檢查提示
                首次登陸公鑰存放位置:/root/.ssh/known_hosts
                  格式:ssh [user@]host [COMMAND]
    ssh root@172.18.12.14 ‘uname -r’   #默認同當前用戶

    ssh [-l user] host [COMMAND]       
          -p port :遠程服務器監聽的端口     #默認22端口
                更改端口文件:/etc/ssh/sshd_config  里面的port,
                              更改后需要重啟服務,需要關閉selinux
          -b: 指定連接的源IP
                ip addr add 192.168.33.15./24 dev etho  #給網卡加別名
                ssh -b 
          -v: 調試模式
          -C :壓縮方式
          -X:  支持x11 轉發                #使用遠程主機圖形工具
          -Y :支持信任x11 轉發            #默認都支持的
                ForwardX11Trusted yes
          -t: 強制偽tty 分配
                ssh -t remoteserver1 ssh remoteserver2

允許實現對遠程系統經驗證地加密安全訪問
   當用戶遠程連接ssh 服務器時,會復制ssh 服務器
/etc/ssh/ssh_host*key.pub (centos7 默認是 ssh_host_ecdsa_key.pub )
    文件中的公鑰到客戶機的~./ssh/know_hosts 中。
    下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接

基于密鑰的認證:
 (1)  在客戶端生成密鑰對
          ssh-keygen -t rsa [-P ”] [-f “~/.ssh/id_rsa”]
          #[]都可以省略,直接ssh-keygen,該命令可以補全
 (2)  把公鑰文件傳輸至遠程服務器對應用戶的家目錄
          ssh-copy-id [-i [identity_file]] [user@]host
          #ssh-copy-id  -i ~/.ssh/id_rsa  shewei@172.18.12.11
                                默認自動拷貝公鑰,路徑要選擇文件所在目錄
 (3)  測試
 (4)  在SecureCRT ,Xshell 或實現基于key 驗證
      在SecureCRT 工具—> 創建公鑰—> 生成Identity.pub 文件
      轉化為openssh 兼容格式(適合SecureCRT ,Xshell 不需要轉化
      格式),并復制到需登錄主機上相應文件authorized_keys 中,
      注意權限必須為600 ,在需登錄的ssh 主機上執行:
      ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
 (5)  重設私鑰口令:#ssh-keygen –p
 (6) 驗證 代理(authentication agent )保密解密后的密鑰
    ? 這樣口令就只需要輸入一次
    ? 在 在GNOME 中,代理被自動提供給root 用戶
    ? 否則運行ssh-agent bash
 (7) 鑰匙通過命令添加給代理
     ssh-add                #先用6驗證代理,然后7添加到代理,每次重啟失效

scp 命令:
       scp [options] SRC… DEST/
    兩種方式:
        scp [options] [user@]172.18.12.12 : /sourcefile  /destpath
                            遠程到本地
        scp [options] /sourcefile [user@]172.18.12.12:/destpath
                            本地到遠程
  常用選項:
        -C:  壓縮數據流
        -r:  遞歸復制              #復制目錄需要遞歸
        -p:  保持原文件的屬性信息
        -q:  靜默模式
        -P PORT:  指明remote host 的監聽的端口

rsync 命令:
基于ssh 和rsh 服務實現高效率的遠程系統之間復制文件
  使用安全的shell 連接做為傳輸方式
        ? rsync –av /etc 172.18.12.11:/tmp   復制目錄和目錄下文件
        ? rsync –av /etc/ 172.18.12.11:/tmp  只復制目錄下文件
                        目標地址,注意 / 有區別
        比scp 更快,只復制不同的文件,
  選項:
    -n  模擬復制過程
    -v  顯示詳細過程
    -r  遞歸復制目錄樹
    -p  保留權限
    -t  保留時間戳
    -g  保留組信息
    -o  保留所有者信息
    -l 把 把 符號鏈接文件做為符號文件 進行復制(默認)
    -L  將軟鏈接文件指向文件復制
    -a  存檔,相當于–rlptgoD ,但不保留ACL (-A )和SELinux 屬性(-X) )

交互式文件傳輸工具sftp 命令:
    用法和 傳統的ftp 工具相似
    利用ssh 服務實現安全的文件上傳和下載
    使用ls cd mkdir rmdir pwd get put 等指令, 可用?或help獲取幫助信息
        sftp [user@]host     #sftp 172.18.12.11
        sftp> help

什么是SSH 端口轉發?
      SSH 會自動加密和解密所有 SSH  客戶端與服務端之間的網絡數據。
      但是,SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發\ 
      并且自動提供了相應的加密及解密服務。這一過程也 被叫做“隧道”
     (tunneling ),這是因為 SSH 為其他 TCP  鏈接提供了一個安全的通
      道來進行傳輸而得名。例如,Telnet ,SMTP ,LDAP 些 這些 TCP 應用均
      能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,
      如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許
      SSH的連接 ,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊
  SSH  端口轉發能夠提供兩大功能:
        ? 加密 SSH Client 端至 SSH Server 端之間的通訊數據
        ? 突破防火墻的限制完成一些之前無法建立的 TCP 連接
本地轉發:
      -L localport:remotehost:remotehostport sshserver
         選項:
      -f  后臺啟用
      -N  不打開 遠程shell ,處于等待狀態
      -g  啟用網關功能
         示例 :                 #需要再客戶端運行
      ssh -L  9527:172.18.12.11:23 172.18.12.12
          開啟本地9527端口到目標主機23端口,同時開啟本地隨機端口到
          跳板機ssh端口22,經過跳板機172.17.12.12
          然后訪問本機的9527 的端口時,被加密后轉發到跳板機的ssh 服務,
          在本機打開另外客戶端 :訪問  #telnet 127.0.0.1 9527 可到達目標
可這樣理解:    Data ——sshsrv:9527 ——–sshsrv:22——-
            localhost:XXXXX ——localhost:YYYYY——-telnetsrv:23 

      遠程轉發:
          -R sshserverport:remotehost:remotehostport sshserver
     示例:
          ssh –R 9527:telnetsrv:23 –N sshsrv

          ssh -R 9527:目標主機地址:23 -N 客戶端地址

              # ssh -R 9527:172.182.12.11:23  -N  客戶端地址 

          然后客戶端運行: #telnet 127.0.0.1 9527 可到達目標
          讓sshsrv 偵聽9527 端口的訪問,如有訪問,就加密后通過ssh
          服務轉發請求到本機ssh 客戶端,再由本機解密后轉發
          到telnetsrv:23
          Data —–sshsrv:9527 ——–sshsrv:22——-
          localhost:XXXXX —–localhost:YYYYY——– telnetsrv:23

動態端口轉發:
      當用firefox 訪問internet 時,本機的1080 端口做為代理服務器,
      firefox 的訪問請求被轉發到sshserver 上,由sshserver替之訪問internet
      在本機firefox 設置代理socket proxy:127.0.0.1:1080
          #ssh -D 1080 root@sshserver
          ssh -D 9527 172.18.12.12  #打開本地端口9527,指定代理地址
          然后在linux瀏覽器中高級設置網絡中填寫127.0.0.1 9527,保存訪問

服務器端:sshd, 配置文件: /etc/ssh/sshd_config
          服務器軟件包:openssh-server
   常用參數:
        Port
        ListenAddress ip
        PermitRootLogin yes
        ClientAliveInterval 和ClientAliveCountMax   
        UseDNS         #反向解析域名   no  不允許
        MaxStartups  最大允許保持多少個未認證連接 。默認值10
        MaxSessions  同一個連接最大會話最大默認100
        限制可登錄用戶的辦法:
        AllowUsers user1 user2 user3             #白名單
        DenyUsers                                #黑名單
        AllowGroups                              #組的白名單
        DenyGroups                               #組的黑名單

ssh 服務的最佳實踐     
    要使用默認端口
    禁止使用protocol version 1
    限制可登錄用戶
    設定空閑會話超時時長
    利用防火墻設置ssh 訪問策略
    僅監聽特定的IP地址
    基于口令認證時,使用強密碼策略
         tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
    使用 基于密鑰的認證
    禁止 使用空密碼
    禁止root 用戶直接登錄
    限制ssh 的訪問頻度和并發在線數
    做好日志,經常分析

ssh 協議的另一個實現:dropbear              #拋棄的狗熊..
     安裝準備:
          ? 1 、安裝開發包組:
          ? 2 、ftp://172.16.0.1/pub/Sources/sources/dropbear
          ? /dropbear-2013.58.tar.bz2
     安裝:
          ? 3 、tar xf dropbear-2013.58.tar.bz2,
          ? 4 、less INSTALL               #建議查看安裝文件
          ? 5 、./configure
          ? 6 、make PROGRAMS=”dropbear dbclient dropbearkey   
                dropbearconvert scp”          #安裝的功能,直接make都安裝
          ? 7 、make PROGRAMS=”dropbear dbclient dropbearkey
                dropbearconvert scp” install
啟動ssh 服務:
          ? 8 、ls /usr/local/sbin/ /usr/local/bin/
          ? 9 、/usr/local/sbin/dropbear -h             #查看幫助
          ? 10 、mkdir /etc/dropbear                   #此文件需要手動生成
          ? 11 、dropbearkey -t rsa -f       #生成秘鑰對,文件名幫助里有
          /etc/dropbear/dropbear_rsa_host_key -s 2048
          ? 12 、dropbearkey -t dss -f       #這是另外一種加密
          /etc/dropbear/dropbear_dsa_host_key
          ? 13 、dropbear -p 2222 -FE       # 前臺運行  
                 dropbear -p 2222           # 后臺運行
            客戶端訪問:
          ? 14 、ssh -p 2222 root@127.0.0.1   
          ? 15 、dbclient -p 2222 root@127.0.0.1   

AIDE:    #高級的入侵檢測環境
        當一個入侵者進入了你的系統并且種植了木馬,通常會想
        辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外,
        他會盡量給你檢查系統的過程設置障礙),通常入侵者會
        修改一些文件,比如管理員通常用ps -aux 來查看系統進
        程,那么入侵者很可能用自己經過修改的ps 程序來替換掉
        你系統上的ps 程序,以使用ps 命令查不到正在運行的木馬
        程序。如果入侵者發現管理員正在運行crontab 作業,也
        有可能替換掉crontab 程序等等。所以由此可以看出對于
        系統文件或是關鍵文件的檢查是很必要的。目前就系統完
        整性檢查的工具用的比較多的有兩款:Tripwire 和AIDE
        ,前者是一款商業軟件,后者是一款免費的但功能也很強
        大的工具
AIDE(Adevanced Intrusion Detection Environment)
   ? 高級入侵檢測環境) 是一個入侵檢測工具,主要用途是檢查文件的
         完整性,審計計算機上的那些文件被更改過了。
   ? AIDE 能夠構造一個指定文件的數據庫,它使用aide.conf 作為其配
        置文件。AIDE 數據庫能夠保存文件的各種屬性,包括:權限
        (permission) 、索引節點序號(inode number) 、所屬用戶(user)、
        所屬用戶組(group) 、文件大小、最后修改時間(mtime) 、創建時間
        (ctime) 、最后訪問時間(atime) 、增加的大小以及連接數。AIDE
        還能夠使用下列算法:sha1 、md5 、rmd160 、tiger ,以密文形式
        建立每個文件的校驗碼或散列號.
   ? 這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件
       、郵件、/proc 文件系統、用戶起始目錄以及臨時目錄.

安裝
    yum install aide
   修改配置文件
        vim /etc/aide.conf   ( 指定對哪些文件進行檢測)
    例如:
      #  matches. e.g. Put file matches before directories.
         /app DATAONLY           #監控此目錄 后面是監控的內容
         !/app/f1                      #這表示不監控此文件
     注意:默認 matches下面有很多監控目錄,建議刪除,自己選擇目錄監控
      更改完成后生成數據庫:aide –init  
      然后找到對應的數據庫目錄/var/lib/aide/ 把文件改名,刪除其中的new
      使用aide –check 檢測,
      中途做了修改可以更新數據庫或者重新生成,使用時需要重命名,刪除new

      技巧:export EDITOR=vim     #設置模式編輯器vim,
sudo: 
      sudo 能夠授權指定用戶在指定主機上運行某些命令, 
           如果未授權用戶用嘗試使用sudo
      sudo 可以提供日志,記錄每個用戶使用sudo
      sudo 為系統管理員提供配置文件,允許系統管理員集中地
           管理用戶的使用權限和使用的主機
      sudo 使用時間戳文件來完成類似“檢票”的 系統,默認存
           活期為5 分鐘的 “入場券”
     通過visudo 命令編輯配置文件,具有語法檢查功能
  配置文件:/etc/sudoers, /etc/sudoers.d/
  時間戳文件:/var/db/sudo
  日志文件:/var/log/secure
  配置文件支持使用通配符glob: :
          ?: 任意單一字符
          * :匹配任意長度字符
       [wxc]: 匹配其中一個字符
      [!wxc]: 除了這三個字符的其它字符
           \x :  轉義
  [[alpha]] : 字母 : 示例: /bin/ls [[alpha]]*
  配置文件規則有兩類 ;
      1 、別名定義: 不是必須的
      2 、授權規則: 必須的

授權規則格式:   #使用 :visudo命令,更改規則
       用戶  登入主機=( 代表用戶)  命令
       示例:
           root ALL=(ALL) ALL           #其中命令需要絕對匹配,少個/都不行
    exam:   shewei  ALL=/bin/cat   /etc/shadow,/bin/mount /dev/sr0/ /mnt/
      注意:這里的root是個安全漏洞,如果root是普通用戶,可以代替管理員操作
            su -u 管理員 passwd 管理員    #可以直接運行管理員命令
  格式說明:
          user:  運行命令者的身份 
          host:  通過哪些主機
     (runas) : 以哪個用戶的身份
       command:  運行哪些命令             #這里可以直接選擇目錄/bin
       用戶和命令都支持別名定義:
                User_Alias NETADMIN= netuser1,netuser2
                Cmnd_Alias NETCMD = /usr/sbin/ip
                NETADMIN ALL= (root) ) NETCMD
                !/usr/bin/passwd root        #排除此命令
      注意:  %wheel  ALL=(ALL)       ALL   #這個組里的用戶權限也大
 
sudo 命令:             

ls -l /usr/bin/sudo

    sudo –i –u wang  切換身份
    sudo [-u user] COMMAND
        -V  顯示 版本 信息等配置信息
        -u  user 默認為root
        -l  列出用戶在主機上可用的和被禁止的命令
        -K  與-k 類似,還要刪除 時間戳文件
        -b  在后臺執行指令

原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/73257

(0)
sheweishewei
上一篇 2017-04-13
下一篇 2017-04-13

相關推薦

  • Nginx基礎

    Nginx基礎 目錄 Nginx概述 Nginx的優點 Nginx相比Apache 編譯安裝Nginx Nginx配置文件講解 ngx_http_access_module模塊 ngx_http_auth_basic_module模塊 ngx_http_log_module模塊 ngx_http_stub_status_module模塊 Nginx概述 En…

    Linux干貨 2016-11-01
  • 2016/08/21:shell遺留select,包管理器rpm,yum

    select:搭配case更好的顯示選項     這個命令用來創建菜單,按數字排列,并等待用戶輸入,輸入對應數字,執行相應操作,更清楚明了     普通版:select var in list        &…

    Linux干貨 2016-08-24
  • 千里眼–用NFS和Samba實現共享網頁文件

     目的:使用網絡文件系實現LAMP的分步式資源共享 配置過程– 搭建nfs服務器:(centos 6.8) 安裝yum install mysql-server nfs-utils httpd #這里安裝httpd是為了方便后面共享文件的屬主屬組定義 啟動nfs服務 #service nfs start  mkdir /dat…

    2017-04-30
  • Shell運算符

    Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。 原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。 expr 是一款表達式計算工具,使用它能完成表達式的求值操作。 例如,兩個數相加: #!/bin/bash val=`expr 2 + 2` echo …

    Linux干貨 2017-04-18
  • 第二周作業

    新建 Microsoft Word 文檔.docx

    Linux干貨 2016-12-13
  • RPM與YUM安裝工具介紹與初步使用、編譯apache2

      RPM可以對程序 進行安裝、卸載、查詢、校驗和維護     rpm(raedhat package mananger),一以種數據庫記錄的方式將需要的軟件安裝到linux系統的一種機制。     RPM最大的特點是將要安裝的軟件先編譯過,并且打包成為RPM機制的安裝包,通過包…

    Linux干貨 2016-06-01
欧美性久久久久