ssh服务和证书的配置
Posted 蜗牛冲上天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的端口
- -b bind_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服务优化
- UseDNS no 禁用DNS反向解析
- GSSAPIAuthentication no 禁用GSS认证
ssh服务配置 /etc/sshd_config
- ListenAddress ADDRESS ssh服务监听在哪个IP上
- HostKey KEY 支持的非对称加密算法的秘钥
- SyslogFacility AUTHPRIV ssh服务的日志 在 /var/log/secure 中
- LoginGraceTime TIME 输口令最长时间,超过TIME,则断开
- PermitRootLogin yes 是否允许root用户登录
- MaxAuthTries NUM 密码验证次数的一半,超过NUM/2 则断开
- MaxSessions NUM 使用同一个ssh 隧道的个数
- PubkeyAuthentication yes是否支持公钥验证
- AuthorizedKeysFile KEY_PATH 公钥存放路径
- PasswordAuthentication yes 是否支持密码验证登陆
- PermitEmptyPasswords no是否支持空密码验证登录
- ClientAliveInterval SECOND 每隔SECOND秒检测ssh client是否处于活动状态
- ClientAliveCountMax COUNT尝试检测client是否处于活动状态的次数,超出则主动断开与client的连接
- MaxStartups N1:N2:N3 值为用冒号隔开的三个数字,其中ssh连接小于N1时,ssh server不做限制,当连接超过N1时,将有N2%个连接被拒绝,当超过N3个连接时,将全部拒绝,最多只有少于N3个ssh连接
dhcp服务的搭建
- 动态主机配置协议
- 局域网 UDP 协议
-
服务器端口号为67,客户端端口号68
DHCP服务
- DHCP共有8种报文
- DHCP DISCOVER:客户端到服务器端
- DHCP OFFER:服务器端到客户端
- DHCP REQUEST:客户端到服务器端
- DHCP ACK:服务器端到客户端
- DHCP NAK:服务器到客户端,通知用户无法分配合适的IP
- DHCP DECLINE:客户端到服务器,指示此地址已被占用
- DHCP RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
- DHCP INFORM:客户端到服务器,几乎不用,为了得到更详细配置信息
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
以上是关于ssh服务和证书的配置的主要内容,如果未能解决你的问题,请参考以下文章