常见的加密算法和安全协议
一、对称加密:加密和解密使用同一个密钥,依赖于算法和密钥,其安全性依赖于密钥而非算法
常见的算法: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