ssh服务和证书的配置

少年辛苦终身事,莫向光阴惰寸功。这篇文章主要讲述ssh服务和证书的配置相关的知识,希望能为你提供帮助。
ssh服务和证书的配置

  • 在当前互联网的架构下,为了建立安全的通信,创建了PKI(公钥基础设施)体系:PKI是一套创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的角色、政策、硬件、软件和程序的架构
证书
  • 证书就是证明某些东西是合法而存在的一种凭证,他的内部包含了很多信息,比如:证书拥有者的公钥,给证书拥有者颁发此证书的公钥,颁发者,颁发时间等等信息。
证书的颁发
  • 首先,至少应该有一个公认的机构或组织,让他作为一个权威。由他来给下级可以信任的机构或个人来颁发证书。大家都信任这个最上级的机构(root CA),那么由root CA颁发的证书,其他信任root CA的节点也会彼此信任。由于root CA是最上面的机构或组织,所以他必须有实力证明自己是很权威的,就像各国的 Z F,他们都是自立为王。所以他们的证书都是自己颁发给自己的。
  • 一般情况下,root CA会向下委派,比如各个省、直辖市的Z F,让他们各自的处理自治范围内的证书申请,等等。
  • 一般情况下,到了可以给各个公司或个人颁发可以用于安全通信的证书了(如果是测试用,不用搞这么多的层级,不过如果架构很大,最好还是细分一下,便于后期的管理)
CA的搭建
  • cd /etc/pki/CA # 生成私钥文件 # -out 输出的私钥的路径2048 表示私钥长度 openssl genrsa -out cakey.pem 2048# 生成自签名证书,即CA证书 openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650 < < EOF Country Name 国家名 State or Province Name 省份名 City Name 城市名 Company or Organization Name 公司或组织名 Organizational Unit Name 小组名 Common Name你的名字 Email Address 你的邮箱 EOF# 已经可以为别人签发证书了 # 别人,首先别人也要有自己的key,假设为apache http服务做证书 openssl genrsa -out apache.key 2048 # 使用私钥制作证书申请文件 得到 apache.csr证书申请文件 openssl req -new -key cakey.pem -out apache.csr -days 365 < < EOF Country Name 国家名 State or Province Name 省份名 City Name 城市名 Company or Organization Name公司或组织名 Organizational Unit Name 小组名 Common Name 你的名字 Email Address 你的邮箱 EOF# 把证书申请文件交给证书颁发机构,让他帮忙通过申请,得到 apache.crt证书文件 echo -e "y\\ny\\n" openssl ca -in apache.csr -out apache.crt -days 365# 注意,以上只是演示了大概过程,我们真正在创建创建证书时对目录有一定的要求,具体细节查看 # /etc/pki/tls/openssl.cnf

    ssh的常见用法
  • ssh [user@]host [COMMAND] 习惯用法
  • ssh [-l user] host [COMMAND]
  • 常用选项
    • -p port:指定要连接的ssh server的端口
    • -bbind_address:指定通过本地哪个ip进行连接
    • -v:debug模式
    • -C:压缩传输数据
    • -X:支持x11转发
    • -t:强制分配伪tty
    • 当需要一线穿式连接远程主机时,A > B > C > D
      • A 不能跨过B直接连C或者D
      • 可以以B做跳板,进行逐个连接
      • ssh -t B_IP ssh -t C_IP ssh D_IP
  • 当客户端第一次使用ssh连接至ssh server时,会将 ssh server /etc/ssh/ssh_host*key.pub中的内容拷贝到 ssh client ~/.ssh/know_hosts 中,下次连接时,会自动匹配相应的私钥,不能匹配的话,会拒绝连接
SSH加密通讯过程
  • 进行第一次SSH连接时,会进行公钥的交换,过程如下
    • 首先进行TCP三次握手,成功后进入后续会话
    • ssh client 会向 ssh server 报告 版本信息
    • ssh server 收到 ssh client 的版本信息后,也会向 ssh client 发送 自己的版本信息
    • ssh client 向ssh server 发送交换 key (message code = 20)的请求,并给出自己cookie
    • 还有很多支持的算法等其他信息
    • ssh server 接受 ssh client的 交换key 请求,也发送一个 message code = 20的包,且给出自己的cookie
    • 还有很多支持的算法等其他信息
    • 接下来开始进行秘钥交换的商榷
    • ssh client 发起秘钥采用 DH算法进行交换的请求(message code = 30)
    • ssh server 接受 ssh client 的请求,并将自己公钥 和 一个 随机的 会话ID 发送给 ssh client
    • ssh client 通知 ssh server ,已经得到 new key,接下来开始进行加密通讯
    • ssh client 拿到ssh server的 公钥 和 会话ID 后,使用 会话ID 与 ssh client的公钥进行异或运算 得到 res,然后 ssh client用 ssh server 的 公钥 将 res 加密,得到 encrypted data 发送给 ssh server
    • ssh server 接收到 encrypted data 后首先使用 ssh server 的私钥进行解密,得到 res,然后将 res 与 会话ID 做 异或运算 得到 ssh client的公钥
    • 此时 ssh client 和 ssh server都有了彼此的公钥,接下来,ssh client想与 ssh server 进行通信,就可以使用 ssh server的公钥进行加密,把密文发送给 ssh server,然后 ssh server使用自己的私钥进行解密,即可得到 ssh client发送的内容。ssh server 主动发送数据给 ssh client也是相同的道理
ssh服务优化
  • UseDNSno 禁用DNS反向解析
  • GSSAPIAuthenticationno 禁用GSS认证 ssh服务配置/etc/sshd_config
  • ListenAddressADDRESS ssh服务监听在哪个IP上
  • HostKeyKEY 支持的非对称加密算法的秘钥
  • SyslogFacilityAUTHPRIVssh服务的日志 在 /var/log/secure 中
  • LoginGraceTimeTIME 输口令最长时间,超过TIME,则断开
  • PermitRootLogin yes是否允许root用户登录
  • MaxAuthTriesNUM密码验证次数的一半,超过NUM/2 则断开
  • MaxSessionsNUM 使用同一个ssh 隧道的个数
  • PubkeyAuthenticationyes是否支持公钥验证
  • AuthorizedKeysFileKEY_PATH 公钥存放路径
  • PasswordAuthenticationyes 是否支持密码验证登陆
  • PermitEmptyPasswords no是否支持空密码验证登录
  • ClientAliveIntervalSECOND 每隔SECOND秒检测ssh client是否处于活动状态
  • ClientAliveCountMaxCOUNT尝试检测client是否处于活动状态的次数,超出则主动断开与client的连接
  • MaxStartupsN1:N2:N3 值为用冒号隔开的三个数字,其中ssh连接小于N1时,ssh server不做限制,当连接超过N1时,将有N2%个连接被拒绝,当超过N3个连接时,将全部拒绝,最多只有少于N3个ssh连接
dhcp服务的搭建
  • 动态主机配置协议
  • 局域网 UDP 协议
  • 【ssh服务和证书的配置】服务器端口号为67,客户端端口号68
    DHCP服务
  • DHCP共有8种报文
    • DHCPDISCOVER:客户端到服务器端
    • DHCPOFFER:服务器端到客户端
    • DHCPREQUEST:客户端到服务器端
    • DHCPACK:服务器端到客户端
    • DHCPNAK:服务器到客户端,通知用户无法分配合适的IP
    • DHCPDECLINE:客户端到服务器,指示此地址已被占用
    • DHCPRELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
    • DHCPINFORM:客户端到服务器,几乎不用,为了得到更详细配置信息 DHCP相关工具
  • 安装dhcp服务
    yum -y install dhcpd

  • client
    • dhclient
    • 租约文件
    • /var/lib/dhclient/*.leases
      • renew重新续约的时间
      • rebind 原DHCP server不能续约,dhcp client需要尝试从别的 dhcp server续约的时间
      • expire定义了dhcp client必须停止租约的时间,从dhcp得到的所有网络配置都将失效
  • server
    • dhcp 或 dnsmasq(同时支持DHCP和DNS)
    • 针对 dhcp 软件包的配置文件
    • /etc/dhcp/dhcpd.conf 可以针对 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example 示例来进行自定义的配置
  • 配置段
  • # 写在最上边是全局配置 # 写在subnet是子网的配置# 可以配置域名 option domain-name "example.org"; # 配置分配的DNS server option domain-name-servers ns1.example.org, ns2.example.org; # 租给客户端的时间,单位秒 default-lease-time 600; # 特殊情况下租给客户的最长时间,一般不会生效 max-lease-time 7200; # 指定分配给客户端的地址端 subnet 10.254.239.0 netmask 255.255.255.224 # 从哪个ip到哪个ip range 10.254.239.10 10.254.239.20; # 指定网关 option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;

  • 租期文件
    • /var/lib/dhcpd/dhcpd.leases

    推荐阅读