加密和安全

常见的加密算法和安全协议

一、对称加密:加密和解密使用同一个密钥,依赖于算法和密钥,其安全性依赖于密钥而非算法

常见的算法:DES

​ 特性:

​ 加密、解密使用同一个密钥

​ 将明文分隔成固定的大小块逐个进行加密

​ 缺点:

​ 密钥过多、密钥分发

二、非对称加密:采用的是公钥加密方法,密钥是成对出现的,公钥是从私钥中提取出来的

​ 公钥:公开给所有人;public key

​ 私钥:自己留存,必须保证其私密性;secret key

​ 用处:

​ (1)身份认证:私钥拥有者用自己的私钥加密的数据,只有用其公钥才能解密

​ (2)密钥交换:通信之前首先获取对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方

​ (3)数据加密:算法有RSA、DSA、ELGamala

三、单向散列算法(hash算法):

​ 用hash算法对数据处理完,得到的结果称摘要。

hash (data)=digest摘要

摘要的特性: data不同,digest必不同

​ digest不可反推算出数据本身

​ hash算法确定,digest长度固定大小

常见算式:

​ md5:128bits、sha1:160bits、sha224

​ sha256、sha384、sha512s

常用工具:

​ md5sum | sha1sum |[—check ] file

​ openssl、gpg

​ rpm -V

四、密钥交换,IKE:双方通过交换密钥来实数据加密解密,密钥交换有两种:

​ 公钥加密:将公钥加密后通过网络传输到对方进行解密,这种方式还有很大可能被截取破解。

​ DH(迪菲—赫尔曼):双方共有一些参数,共同协商加密算法,除此之外双方还有属于自己的私有参数,同过共有参数、私有参数和算法信息来进行加密,然后双方将计算后的结果进程交换,交换完成后在和属于自己的私有参数进行特殊算法,经双方计算后的结果是相同的,而这个结果就是密钥。

​ 第一步:A和B协商分别生成的公开的整数a,大素数p

​ 第二部:A生成隐私数据:(x<p),计算得出a^x%p,发送给B

​ B生成隐私数据:(y<p),计算得出a^y%p,发送给A

​ 第三部:A计算得出[(a^y%p)^x]%p=a^xy%p,生成为密钥

​ B计算得出[(a^x%p)^y]%p=a^xy%p,生成为密钥

A:
a=5
p=23
x=6
5^6%23=8
19^6%23=2
B:
a=5
p=23
y=15
5^15%23=19
8^15%23=2

使用gpg实现对称加密

​ 对称加密file文件

​ gpg -c file

​ ls file.gpg

​ 在另一台主机上解密file

​ gpg -o file -d file.gpg

使用gpg工具实现公钥加密

​ 在hostB主机上用公钥加密,在hostA主机上解密

​ 在hostA主机上生成公钥/私钥对

​ gpg —gen—key

​ 在hostA主机上查看公钥

​ gpg —list—keys

​ 在hostA主机上导出公钥到Alfred.pubkey

​ gpg -a —export -o Alfred.pubkey

​ 从hostA主机上复制公钥文件到需要加密的B主机上

​ scp Alfred.pubkey hostB

​ 在需要机密数据的hostB主机上生成公钥/私钥对

​ gpg —list-keys

​ gpg —gen-key

​ 在hostB主机上导入公钥

​ gpg —import Alfred.pubkey

​ gpg —list-keys

​ 用从hostA主机导入的公钥,加密hostB主机的文件

​ gpg -e -r Alfred file

​ file file.gpg

​ 复制加密文件到hostA主机

​ scp fstab.gpg hostA

​ 在hostA主机解密文件

​ gpg -d file.gpg

​ gpg -o file -d file.gpg

​ 删除公钥和私钥

​ gpg —delete-keys Alfred

​ gpg —delete-secret-keys Alfred

SSL是为网络通信提供安全及数据完整性的一种安全协议。

​ TSL与SSL在传输层对网络连接进行加密

两阶段协议,分为握手阶段和应用阶段

​ 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。

​ 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。

OpenSSL

对称加密: 工具:openssl enc, gpg

​ 算法:3des,aes,blowfish,twofishs

​ enc命令:

​ 加密:

​ openssl enc -e -des3 -a -salt -in testfile -out.cipher

​ 解密:

​ openssl enc -d -des3 -a salt -in testfile.cipher -out testfile

​ openssl ?

单向加密:

​ 工具:md5sum,sha1sum,sha224sum,sha256sum…

​ openssl dgst

​ dgst命令:

​ 生成用户密码:

​ openssl passwd -1 -salt SALT(最多8位)

​ openssl passwd -1 -salt centos

​ 生成随机数:

​ openssl rand -base64|-hex NUM

​ NUM表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

openssl rand -base64 20 |tr -dc '[:alnum:]' |head -c8   #生成8位长度的随机口令

公钥加密:

生成密钥对儿:man genrsa

生成私钥

​ openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

​ (umask 077;openssl genrsa -out test.key -des 2048)

​ openssl rsa -in test.key -out test2.key 将加密key解密

从私钥中提取出公钥

​ openssl rsa – in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE

​ openssl rsa -in test.key -pubout -out test.key.pub

**实验**向CA申请证书:

1、建立私有CA
    openssl的配置文件: /etc/pki/tls/openssl.cnf
    1)生成私钥对儿
    cd /etc/pki/CA/
    (umask 077;openssl genrsa -out private/cakey.pem 4096)
    2)自签名证书
    openssl req -new -x509 -key private/cakey.pem  -out     cacert.pem -days 3650
    CN
    beijing
    beijing
    magedu
    M30
    www.magedu.com
    touch  /etc/pki/CA/index.txt
    Echo  0F >  /etc/pki/CA/serial
    查看证书里面的内容:
    Openssl x509 -in cacert.pem -noout -text        (-ssuer,-subject,-dates)
2、用户或服务器
    1)生成私钥
    (umask 077;openssl genrsa -out app.key 1024)
    2)生成证书申请
    客户端:openssl req -new  -key   app.key -out app.csr
    CN
    beijing
    shanghai
    magedu
    M30
    app.www.magedu.com
    3)将申请文件发给CA
    scp app.csr 172.20.104.88:/etc/pki/CA
3、CA颁发证书
openssl ca -in app.csr -out certs/app.crt -days 100
4、证书发送给客户端
scp app.csr 192.168.30.7:/etc/pik
openssl ca -in /
5、在应用软件中使用证书

吊销证书:

openssl ca -revoke newcerts/10.pem

指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行

echo > 01 /etc/pki/CA/crnumber

更细证书吊销列表:

openssl ca -out /etc/pki/CA/crl.pem

查看crl文件:

openssl url -in /etc/pki/CA/crl.pem -noot -text

cat Index.txt

cat serial

SSH

​ ssh,配置文件:/etc/ssh/ssh_config

​ 格式: ssh [user@]host[COMMAND]

​ ssh [-l user]host[COMMAND]

​ -p port:远程服务器监听的端口

​ -b:指定连接的源IP

​ -v:调试模式

​ -X:支持x11转发

​ -Y:支持信任x11转发

​ forwardX11Trusted yes

​ -t:强制伪tty分配

​ ssh -t remoteserver1 ssh remoteserver2

基于key认证

三台机器基于key的认证

(1)在客户端生成密钥对
    A
    ssh-keygen -t rsa   #默认rsa算法
(2)把公钥文件传输至远程服务器对应用户的家目录
    ssh-copy-id  172.20.104.88  #自己传给自己
    scp -pr /root/.ssh B:/root/
    scp -pr /root/.ssh C:/root/
    
(3)测试
    ssh qjz@172.20.104.88
    scp /etc/fstab  qjz@172.20.104.88:/home/qjz
    for ip in `cat ip.txt`;do scp f1.sh $ip:/data/ ;done
    for ip in `cat ip.txt`;do ssh $ip "/data/f1.sh" ;done 
(4)在secuercrt和xshelll实现基于key验证
    在secureCRT工具-->创建公钥-->生成Identity.pub文件
    转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需要登录的ssh主机上执行:
    ssh-keygen -i -f identity.pub >> .ssh/authorized_keys
(5)重设私钥口令:
    ssh-keygen -p
(6)验证代理
    ssh-agent bash
(7)钥匙通过命令添加给代理
    ssh-add

思考:100台机器,把脚本推送过去,执行命令(扫描IP脚本)

scp

scp[option]SRC…DEST/

两种方式:

scp[option][user@host:/sourcefile /destpath]
scp[option]/sourcefile [user@host:/destpath]

常用选项:

​ -c:压缩数据流

​ -r:递归复制

​ -p:保持原文件的属性信息

​ -q:静默模式

​ -P PORT:指明remote host的监听的端口

缺点:数据同步的时候,不检查数据的内容,重复复制,消耗数据流量

rsync命令

基于ssh和rsh服务实现高效率的远程系统之间复制文件和数据之间的同步

​ rsync -av /etc/server1:/tmp #复制目录和目录下的文件

​ rsync -av /etc/ server1:tmp #只复制目录下的文件

优点:比scp速度更快,只复制不同的文件

使用安全的shell连接作为传输方式

常用选项:

​ -c:压缩数据流

​ -r:递归复制

​ -p:保持原文件的属性信息

​ -q:静默模式

​ -P PORT:指明remote host的监听的端口

sftp命令

交互式文件传输工具

用法和传统的ftp工具相似

​ sftp [user@]host

​ sftp> help

pssh工具

pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制,自动化运维的初级阶段,需要启动epel源,实现并行运行

选项如下:

​ —version:查看版本

​ -h:主机文件列表,内容格式“

​ -H:主机字符串,内容格式“[user@host]

​ -A:手动输入密码模式

​ -l:登录使用的用户名

​ -p:并发的线程数【可选】

​ -o:输出的文件目录【可选】

​ -i:每个服务器内部处理信息输出

​ -e:错误输入文件【可选】

​ -t:TIMEOUT超时时间设置,0无限制【可选】

​ -O:SSH选项

​ -v:详细模式

​ -x:额外的命令行参数使用空白符号,引号,反斜线处理

​ -X:额外的命令行参数,单个参数模式,同-x

​ -i:每个服务器内部处理信息输出

​ -P:打印出服务器返回信息

pssh示例:通过pssh批量关闭SELinux

pssh -H root@172.20.104.66 -i “sed -i “s/SELINUX=enforcing/SELINUX=disbaled/” /etc/selinux/config” #批量发送指令

pscp.pssh命令

pscp.pssh功能是将本地文件批量复制到远程主机

pscp.pssh -h ip.txt /root/f1.sh /data/

pslurp.pssh命令

pslurp.pssh功能是将远程主机的文件批量复制到本地

选项:

-L:指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称

-r:递归复制目录

批量下载目标服务器的passwd文件至/app下,并更名为user

pslurp -H 192.168.1.10 -L /app /etc/passwd user

Pslurp -h ip .txt -L /data/ /var/log/message m

ssh端口转发

ssh会自动加密和解密所有ssh客户端和服务端之间的网络数据。但是ssh还能够将其它TCP端口的网络数据通过ssh 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”,这是因为ssh为其他TCP链接提供了一个安全的通道来进行传输而得名。例如:Telnet,SMTP,LDAP,这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。

本地转发:

-L localport:remotehost:remotehostport sshserver

选项:

​ -f 后台启用

​ -N 不打开远程shell,处于等待状态

​ -g 启用网关功能

企业实例:

ssh -L 9527:172.10.104.88:23 -N 172.20.104.99

telnet 172.20.104.66 9527

远程转发:

-R sshserverport:remotehost:remotehostport sshserver

企业应用案例:(使用于临时出差需连接企业内部)

ssh -R 9527:telnetsrv:23 -N sshsrv

动态端口转发:

ssh -D 1080 root@sshserver

服务器端:sshd,配置文件:/etc/ssh/sshd_config

常用参数:

port

Listenaddress ip

Logingracetime 2m

permitRootlogin yes #允许普通用户登录

Strictmodes yes 检查.ssh /文件的所有者,权限等

常用参数:

​ GatewayPorts no

​ ClientAliveInterval:单位:秒

​ ClientAliveCountMax:默认3

​ UseDNS yes

​ GSSAPIAups 未认证连接最大值,默认值10

​ Banner /path/file

限制可登录用户的方法:

​ AllowUsers user1 user2 user3

​ DenyUsers

​ AllowGroups

​ DenyGroups

ssh服务的最佳实践

​ 建议使用非默认端口

​ 禁止使用protocol version1

​ 限制可登录用户

​ 设定空闲会话超时时长

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

​ 仅监听特定的IP地址

​ 基于口令认证时,使用强木马策略

​ tr -dc A-Za-z0-9_ < /dev/urandom |head -c 30 |xargs

​ 使用基于密钥的认证

​ 禁止使用空密码

​ 禁止root用户直接登录

​ 限制ssh的访问频度和并发在线数

​ 经常分析日志

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98030

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班