ssh服务是最佳实践:

1、不要使用默认端口

2、禁止使用rotocol version 1

3、限制可登录用户   man sshd_config    AllowUsers user1 user2

4、设定空闲会话超时时长

5、利用防火墙设置ssh访问策略

6、仅监听特定的IP地址

7、基于口令认证时,使用强密码策略

#tr -dc 'A-Za-z0-9' </dev/urandom | head -c 30 | xargs  生成30位的随机数、

8、使用基于密钥的认证

9、禁止使用空密码

10、禁止root用户直接登录

11、限制ssh的访问频度和并发在线数。

12、做好日志,/var/log/secure放在另一台主机上,经常分析




dropbear是一款基于SSH协议的sshd服务器,与OpenSSH相比,他简洁,更小巧,运行起来占用的内存出更少,每一个普通用户登录,OpenSSH会开两个sshd过程,而dropbear只开一个进程,所以其对硬件要求更低,也更利于系统的运行。Dropbear特别用于“嵌入”式的Linux系统

dropbear主要有以下程序:

服务程序:dropbear (类似于Openssh的 sshd)

客户程序:sdclient (类似地Openssh的 ssh)

密钥生成程序:dropbearkey


安装及简单使用过程:

tar xf dropbear-2016.74.tar.bz2

cd dropbear-2016.74

less INSTALL   //看一下安装说明 


./configure

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install   //如果中间warning看一下说scp没有,就yum whatprovides "scp" ,之后安装下openssh-client,在次重新运行下。就装好了。


接下来就是配置dropbear了,dropbear是没有配置文件的。

dropbear -h

mkdir /etc/dropbear    //首先你得创建一个dropbear密钥存放位置


dropbear -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048

dropbear -t dss -f /etc/dropbear/dropbear_dss_host_key 


dropbear -p 2222 -E -F     //不指-p地址就是默认所有端口要写,-E是前台运行,只是测试用的,-F是将错误存放到错误日志中,而不是/var/log/secure中


数据传输过程:

主机A:发送数据方


1、要发送的数据,为了数据没有被人篡改、使用单向加密SHA1或MD5计算他的特征码

单向加密:

又称为不可逆加密算法,在加密过程中不使用密钥,明文由系统加密处理成密方,密方无法解密。一般适合于验证,在验证过程中,重新输入明文,并经过相同的加密算法处理,得到相同的密方并被系统重新认证,广泛使用于口令加密。


2、单向加密计算得到的特征码、再用自己的私钥加密。这个是保证数据的完整性和身份认证的。

公钥私钥的原则:

1、一个公钥对应一个私钥

2、密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

3、如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

4、如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。


3、用对称加密对里面的数据进行加密,对称加密的加密速度比较快的、尤其是加密大数据时

对称加密:

加密解密都使用相同的密钥

优点速度快,效率高

缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。


4、使用对方的公钥加密这段数据补充在段数据的头部,对方用自己的私钥可以解密这段数据。


主机B:接收数据方

1、先用自己的私钥解密解密主机A上对称加密的密钥,以便能够使用对称解密数据。

2、再用解密得到的对称密码解密加密的数据

3、再加发送的主机A的公钥解密这段数据特征码,看看数据是否完整

4、再用单向加密解密真正需要的数据,并计算他的特征码,再比较第三眇中解密出来的特征码,再比较两个特征码是不是完全一致。


主机C:黑客,用来盗窃数据

a:主机A要加密数据时需要主机B的公钥。如果说主机C冒充主机B说我就是主机B。这是我的公钥,给你吧

b:于是主机C就把自己的公钥发给了主机A

c:主机A拿到假的公钥后进行了数据的加密。而后发主机B

d:在发送给主机B的时候被主机C给截取了数据。主机C再用自己私钥进行数据篡改

e:而后主机C又冒充主机A跟主机B说我就是主机A,把你的公钥给我

f:主机B信以为真,以为这就是A了,就把自己的公钥发给了C

g:主机C把篡改过的数据再用B的公钥加密后再发送给B,然后B就收到了被篡改过的数据了。


为了不让这种情况的发生。我们找一个大家都信任的第三方的认证机构,公证机构,他负责给我们主机发证、我们要通信的主机都去CA那里注册证书。注册时要提交自己的信息给CA审核,审核通过再给你发证,为了防止CA也被我伪造。他自己也要有一个证书,那CA公证机构自签一个公证证书,把自己的相关信息加到证书里去,再加自己的私钥加密,别人只要用CA的公钥解密就可以知道这个CA是不是人伪造的了。


证书使用有个有效期:(crl列表)

如果说去申请的单位证书过期了或者是证书掉了又或者是主机被攻破了。证书私钥被人拷贝拿走了。那证书就可以去CA申请吊销证书,CA就会把你吊销的证书加入吊销列表中,只有人认证查看到证书吊销列表,就说明这个证书已经失效了。



建立私有CA:

openssl的配置文件: /etc/pki/tls/openssl.cnf


(1)创建所需要的文件/CA 目录下

touch index.txt

echo 01 > serial


(2)CA自签证书:

1、为自己创建密钥:

(umask 077; openssl genrsa -out private/cakey.pem 2048)

2、openssl req -new -x509 -key /etc/pki/CA/priviate/cakey.pem -days 3600 -out /etc/pki/CA/cacert.pem

-new : 生成新证书签署请求

-x509 : 专用于CA生成自签证书

-key : 生成请求时用到的私钥文件 

-days :证书的有效期限

-out /PATH/TO/SOMECERTFILE: 证书的保存路径

-text :将CSR文件里的内容以可读方式打印出来

-noout : 不打印参数编码的版本信息


(3)发证

用到证书的主机生成证书请求:

(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

openssl req -new -in /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365


把请求文件传输给CA

CA签署证书,并将证书发还给请求者:

openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365


查看证书中的信息:

openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -text|-subject|-serial


(4)吊销证书:

客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject


CA

先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致“

吊销证书:

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem


生成吊销证书的编号(第一次吊销一个证书)

echo 01 > /etc/pki/CA/crlnumber


更新证书吊销列表

openssl ca -gencrl -out thisca.crl -config /etc/pki/tls/openssl.cnf


查看crl文件

openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text