openssh

    SSH是一种可以保证用户远程登录到系统的协议。其实就是使用加密的远程登录实现,可以有效保护登录及数据的安全。

    SSH对Telnet的一个重要优势就是所有传输都是经过加密的,这样就增大了中间人攻击的难度。SSH中使用了MD5、RSA、DES等密码算法,保证数据的机密性、完整性、不可重放攻击。整个过程中包括密钥协商和交换,以及数据加密传送和解密等等。但也不是说就不能攻击,只是攻击的成本加大很多。

 

openssh服务器

    linux下安装openssh

    #yum install openssh  -->请事先自行配置好yum源,我这里是挂载光盘镜像装的

    openssh-5.3p1-94.el6.x86_64
    openssh-clients-5.3p1-94.el6.x86_64
    openssh-server-5.3p1-94.el6.x86_64

 

    安装好以后,来看一下它的目录下都有什么

    /etc/ssh/目录下:

        sshd_config:服务器端配置文件

        ssh_config :客户端配置文件

 

        ssh v1   :由于有漏洞,用的不多

        ssh_host_key, ssh_host_key.pub(主机私钥、主机公钥)

 

        ssh v2   :流行的

        ssh_host_dsa_key     dsa私钥(为保证兼容性而提供的)

        ssh_host_dsa_key.pub   dsa公钥

        ssh_host_rsa_key     rsa私钥(rsa安全性和功能强于dsa)

        ssh_host_rsa_key.pub   rsa公钥

 

    openssh可以做很多的限制,这些限制都是在sshd_config下配置的,下面来看一下这个文件中都有什么内容

    #vim /etc/ssh/sshd_config

    “#”后面有空格代表是注释信息,没有空格代表是命令,把#删了就是启动此命令,然后根据自己的意愿设定

    # 1. 关于SSH Server 的整体设定,包含使用的 port ,以及使用的密码演算方式
    Port 22                                     #SSH 预设使用 22 这个 port,您也可以使用多的 port !
              #亦即重复使用 port 这个设定项目即可! 

  

    Protocol 2,1        #选择的 SSH 协议版本,可以是 1 也可以是 2 ,
              #如果要同时支持两者,就必须要使用 2,1 这个分隔了

 

    #ListenAddress 0.0.0.0   #监听的主机适配卡!举个例子来说,如果您有两个 IP,
              #分别是 192.168.0.100 及 192.168.2.20 ,那么只想要
              #开放 192.168.0.100 时,就可以写如同下面的样式:

    ListenAddress 192.168.0.100          #只监听来自 192.168.0.100 这个 IP 的SSH联机。
                     #如果不使用设定的话,则预设所有接口均接受 SSH

 

    PidFile /var/run/sshd.pid   #可以放置 SSHD 这个 PID 的档案!左列为默认值

    LoginGraceTime 600     #当使用者连上 SSH server 之后,会出现输入密码的画面
                   #在该画面中,在多久时间内没有成功连上 SSH server ,

                                                          #就断线!时间为600秒!

 

    Compression yes        #是否可以使用压缩指令,当然可以。
 

    # 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可

    HostKey /etc/ssh/ssh_host_key              #SSH version 1 使用的私钥

    HostKey /etc/ssh/ssh_host_rsa_key   #SSH version 2 使用的 RSA 私钥

    HostKey /etc/ssh/ssh_host_dsa_key     #SSH version 2 使用的 DSA 私钥

 

    # 2.1 关于 version 1 的一些设定!

    KeyRegenerationInterval 3600    #由前面联机的说明可以知道, version 1 会使用 
                  #server 的 Public Key ,那么如果这个Public 
                  #Key 被偷的话,岂不完蛋?所以需要每隔一段时间
                  #来重新建立一次!这里的时间为3600秒!

 

    ServerKeyBits 768          #这个就是 Server key 的长度!

 

    # 3. 关于登录文件的讯息数据放置与 daemon 的名称!

    SyslogFacility AUTH                                   #当有人使用 SSH 登入系统的时候,SSH会记录资
                    #讯,这个信息要记录在什么 daemon name 底下?
                   #预设是以 AUTH 来设定的,即是 /var/log/secure
                   #其它可用的 daemon name 为:DAEMON,USER,AUTH,
                   #LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

 

    LogLevel INFO              #登录记录的等级!

 

    # 4. 安全设定项目!极重要!

    # 4.1 登入设定部分

    PermitRootLogin no    #是否允许 root 登入!预设是允许的,但是建议设定成 no,

                                                       #可以登录普通用户,再切换到root下

 

    UserLogin no       #在 SSH 底下本来就不接受 login 这个程序的登入!

 

    StrictModes yes        #当使用者的 host key 改变之后,Server 就不接受联机,
                #可以抵挡部分的木马程序!


    #RSAAuthentication yes         #是否使用纯的 RSA 认证!?仅针对 version 1 !
    PubkeyAuthentication yes   #是否允许 Public Key ?当然允许啦!只有 version 2


    AuthorizedKeysFile      .ssh/authorized_keys
               #上面这个在设定若要使用不需要密码登入的账号时,那么那个
              #账号的存放档案所在档名!
    # 4.2 认证部分
    RhostsAuthentication no     #本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太
                  #不安全了,所以这里一定要设定为 no !


    IgnoreRhosts yes        #是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!


    RhostsRSAAuthentication no   #这个选项是专门给 version 1 用的,使用 rhosts 档案在
                  #/etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用


    HostbasedAuthentication no    #这个项目与上面的项目类似,不过是给 version 2 使用的!


    IgnoreUserKnownHosts no    #是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录
                  #的主机内容?当然不要忽略,所以这里就是 no 啦!


    PasswordAuthentication yes    #密码验证当然是需要的!所以这里写 yes 啰!


    PermitEmptyPasswords no      #若上面那一项如果设定为 yes 的话,这一项就最好设定
                  #为 no ,这个项目在是否允许以空的密码登入!当然不许!


    ChallengeResponseAuthentication yes  #挑战任何的密码认证!所以,任何 login.conf 
                         #规定的认证方式,均可适用!

 

    #PAMAuthenticationViaKbdInt yes         #是否启用其它的 PAM 模块!启用这个模块将会
                      #导致 PasswordAuthentication 设定失效!
 
    # 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
    #KerberosAuthentication no
    #KerberosOrLocalPasswd yes
    #KerberosTicketCleanup yes
    #KerberosTgtPassing no
 
    # 4.4 底下是有关在 X-Window 底下使用的相关设定!
    X11Forwarding yes
    #X11DisplayOffset 10
    #X11UseLocalhost yes

 

    # 4.5 登入后的项目:
    PrintMotd no                          #登入后是否显示出一些信息呢?例如上次登入的时间、地点等
             #等,预设是 yes ,但是,如果为了安全,可以考虑改为 no


    PrintLastLog yes       #显示上次登入的信息!预设也是 yes !


    KeepAlive yes        #一般而言,如果设定这项目的话,那么 SSH Server 会传送
             #KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
             #在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会
             #有僵尸程序的发生!


    UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!


    MaxStartups 10         #同时允许几个尚未登入的联机画面?当我们连上 SSH ,
             #但是尚未输入密码时,这个时候就是我们所谓的联机画面啦!
             #在这个联机画面中,为了保护主机,所以需要设定最大值,
             #预设最多十个联机画面,而已经建立联机的不计算在这十个当中

 

    # 4.6 关于使用者抵挡的设定项目:
    DenyUsers *       #设定受抵挡的使用者名称,如果是全部的使用者,那就是全部
             #挡吧!若是部分使用者,可以将该账号填入!例如下列!


    DenyUsers test
    DenyGroups test       #与 DenyUsers 相同!仅抵挡几个群组而已!

 

    # 5. 关于 SFTP 服务的设定项目!
    Subsystem       sftp    /usr/lib/ssh/sftp-server

 

    scp: 利用ssh协议在主机之间实现安全文件传输的工具

        格式:scp SRC1... DEST

            -r: 复制目录时使用

            -p: 保持源文件的元数据信息,包括mode和timestamp

            -q: 静默模式

            -p PORT: 指定ssh协议监听的端口

 

            在使用时分两种情形:

                1、源文件在本机,目标为远程

                # scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere

                例:scp  /tmp/ky.sh  192.168.0.20:/tmp/

 

                2、源文件在远程,本地为目标

                # scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere

                例scp  192.168.0.20:/tmp/ky.sh /tmp/

 

配置文件修改改动的重要地方:

    1、监听端口一定改为非22端口;同时可以honeypot的蜜罐程序监听在22号端口进行跟踪。

    2、启用基于密钥认证的功能;

    3、禁止使用version 1;

    4、禁止主机认证机制;默认即为禁止;

    5、禁止DNS反解;

    6、禁止显示LastLogin;

    7、显示banner以提示用户;但在banner中勿显示敏感信息;

 

基于口令的认证:

    在客户端第一次向服务器发起请求时:

        1、客户端向服务器端发起请求。

        2、服务器端会发送一个主机公钥(还有服务器的特征信息)到客户端。客户端接受主机公钥后,就表明认可此服务器。

        3、客户端生成一个一次性密钥到服务器端。

        4、服务器端下面就通过对称密钥的方式索要密码。

    注:客户端与服务器端连接后,在客户端的家目录下面会生成".ssh"的隐藏文件夹,其中包含know_hosts文本文件,记录了所有连接过的主机的IP和RSA公钥信息。

 

基于密钥的认证:

    客户端登陆之前的私钥需要自己保留,而公钥也不能公开,而是发送到服务器端要登陆用户的家目录下的".ssh"目录下,客户端用自己的私钥解解密,这时所有的认证都是基于密钥进行的,不需要密码。

 

使用ssh-keygen命令生成秘钥

    #ssh-keygen

    在生成秘钥期间,将提供用于指定密码的选项,若设置了该项,在使用时必须提供所设密码才能访问私钥,否则私钥无法使用,通过此方法,可以拖延在秘钥被盗时,攻击者使用秘钥的时间,在攻击者破解并使用私钥前,可以生成新的秘钥并删除所有涉及旧秘钥的内容

 

    # ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST

    或者以手动模式复制公钥到目标主机:将id_rsa.pub拷贝到目的主机/root/.ssh/目录下,并改名为authorized_keys,若该文件已存在,则追加进该文件里面即可,这样就可以在服务器中ssh到目标主机,不用进行身份验证了,直接登录,节省时间