Linux服务-SSHD

SSH 简介

SSH是Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,虽然许多人把SecureShell仅当作Telnet的替代物,但你可以使用它来保护你的网络连接的安全。你可以通过本地或远程系统上的SecureShell转发其他网络通信,如POP、X、PPP和FTP。你还可以转发其他类型的网络通信,包括CVS和任意其他的TCP通信。另外,你可以使用带TCP包装的Secure Shell,以加强连接的安全性。除此之外,SecureShell还有一些其他的方便的功能,可用于诸如Oracle之类的应用,也可以将它用于远程备份和像SecurID卡一样的附加认证。

SSH 协议框架

SSH 是建立在应用层和传输层基础伤害的安全协议,SSH协议框架中最主要的部分是三个协议:

  • 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
  • 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
  • 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:
Linux服务-SSHD_第1张图片

SSH的工作机制

SSH分为两部分:客户端部分和服务端部分。
服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认 证、密钥交换、对称密钥加密和非安全连接。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务 端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。
SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启 动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一 个子进程,该子进程进行这次的连接处理。
但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。OpenSSH 2.x同时支持SSH 1.x和2.x。
Linux服务-SSHD_第2张图片

OpenSSH 安装

软件包

  • openssh-server :服务器软包
  • openssh-clients: 客户端软件包
  • openssh : 服务器客户端需要的核心文件
  • openssh-askpass :支持对话框窗口的显示,是一个秘密诊断工具
yum list all|grep openssh

安装

yum install openssh*

查看安装生成的文件

rpm -ql openssh

启动

/etc/init.d/sshd start
chkconfig sshd 开机自启动

察看端口号来看是否启动,默认22号端口

netstat -tlunp | grep sshd

这里写图片描述

配置文件

/etc/ssh/ssh_config (客户端) 和/etc/ssh/sshd_config(服务端)

sshd_config

SSH Server 的整体设定

  • Port 22 # SSH 预设使用 22 这个 port,您也可以使用多的 port !
  • Protocol 2 # 选择的 SSH 协议版本,可以是 1 也可以是 2
  • #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 的档案!左列为默认值
  • oginGraceTime 600 # 当使用者连上 SSH server 之后,会出现输入密码的画面, 在该画面中,在多久时间内没有成功连上 SSH server, 就断线!时间为秒!

主机的 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 私钥

关于 version 1 的一些设定

  • KeyRegenerationInterval 3600     # 由前面联机的说明可以知
    道, version 1 会使用 server 的 Public Key ,设置每隔一段时间来重新建立一次!这里的时间为秒!
  • ServerKeyBits 768        # Server key 的长度!

登录文件的信息数据放置与 daemon 的名称

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

  • LogLevel INFO            # 登录记录的等级


安全设定项目

登入设定

  • PermitRootLogin no     # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
  • UserLogin no     # 在 SSH 底下本来就不接受 login 这个程序的登入!
  • StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机, 可以抵挡部分的木马程序!
  • PubkeyAuthentication yes  # 是否允许 Public Key ?当然允许啦!只有 version 2
  • AuthorizedKeysFile .ssh/authorized_keys
                  # 上面这个在设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!

认证部分

  • 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 设定失效!

与 Kerberos 有关的参数设定

  • #KerberosAuthentication no
  • #KerberosOrLocalPasswd yes
  • #KerberosTicketCleanup yes
  • #KerberosTgtPassing no

  • 关在 X-Window 底下使用的相关设定

  • X11Forwarding yes
  • #X11DisplayOffset 10
  • #X11UseLocalhost yes

登入后的设定
- PrintMotd no # 登入后是否显示出一些信息,例如上次登入的时间、地点等,可以在/etc/motd 文件中自定义信息
- PrintLastLog yes     # 显示上次登入的信息
- KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给
Client 端,以确保两者的联机正常! 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会 有僵尸程序的发生!
- UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!
- MaxStartups 10      # 同时允许几个尚未登入的联机画面?当我们连上 SSH , 但是尚未输入密码时,这个时候就是我们所谓的联机画面啦! 在这个联机画面中,为了保护主机,所以需要设定最大值, 预设最多十个联机画面,而已经建立联机的不计算在这十个当中


使用者抵挡的设定

  • DenyUsers *        # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部
  • DenyUsers test
  • DenyGroups test      # 与 DenyUsers 相同!仅抵挡几个群组而已!

SFTP 服务的设定

  • Subsystem sftp /usr/lib/ssh/sftp-server

密钥验证

客户端生成密钥对,然后把公钥传输到服务端

  • 生成key
ssh-keygen

会提示生生key的目录,直接回车
这里写图片描述
接着会提示是否给key 加密,生产环境要设置秘密,这里直接回车不设置秘密
Linux服务-SSHD_第3张图片

  • 上传公钥到服务端
ssh-copy-id -i 192.168.0.170

Linux服务-SSHD_第4张图片

  • 登录验证
    这里写图片描述

SSHD防暴力破解

配置安全的sshd服务

  1. 秘密足够复杂
  2. 修改默认的端口号
  3. 不允许root帐号直接登录,添加普通帐号,授予root权限
  4. 不允许秘密登录,只能通过认证的密钥来登录系统

你可能感兴趣的:(#,系统架构)