=========================================================================================================================================
通信
1、数据的安全通信
保密性:其他任何人不能获取,即不应获得者不能获取到信息 Configenatiality
完整性:在传输、存储信息的过程中数据不能在未经授权的情况下篡改信息或者在篡改后能被迅速发现
可用性:数据的可用性可以从数据的一致性、准确性、完整性、时效性及实体同一性五个方面进行考察
可控制性:Controlability
不可否认性:Non-repudiation
2、网络攻击 安全攻击(STRIDE)
主动攻击
篡改信息
伪造
拒绝服务
被动攻击
流量分析(通过分析数据包的模式获取通信位置、次数、消息长度等敏感信息)
窃听
提升权限
3、安全技术
加密
对称加密
非对称加密
数字签名(公钥数字签名)
访问控制
数据完整性
认证交换
流量填充
路由控制
4、数字签名
又称公钥数字签名,(Digital Signature)。数字签名应用了公钥密码领域使用的单向函数原理。数字签名是数字证书的应用之一。
通信过程:
假如 A 向 B 发送一个信息 m,A 首先对信息 m 进行 hash 计算,产生一个散列值,然后 A 用自己的私钥对散列值进行加密
并附加到信息 m 后。因为 A 的公钥是公开的,任何人都可以公开的获取到 A 的公钥,B 接收到信息 m 后,用 A 公开的公钥
对信息进行验证,如果能够验证成功,则说明信息 m 确实是 A 产生发送给自己的,因为只有 A 产生信息,才能使用 A 的公钥
验证。
在上述过程中,首先 A 使用称为报文摘要的算法对信息 m 进行提取数字指纹,然后使用私钥对数字指纹进行 RSA 算法操作。
B 收到信息 m 后,使用的 A 的公钥对信息 m 进行解密,然后使用相同的数字指纹提取算法对信息 m 进行指纹计算。
这个过程中,报文摘要算法保证了数据的完整性,
事实上上述过程还不够安全,A 在发送信息 m 之前,还要用 B 的公钥对信息 m 进行加密。
报文摘要算法:MD5 128位
4、OpenSSL
OpenSSL 是一个开源的软件包,使用 C 语言开发,其主要功能是进行安全的通信,实现加密功能。OpenSSL 实现了 SSL 和 TLS 协议。
5、GPG
GNU Privacy Guard,是一个加密软件。GPG 是 PGP 的开源实现。
6、对称加密
1、实现功能
保证数据保密性
2、对称加密特性
加密和加密使用相同的密钥。算法 + 口令 对数据进行加密;解密方使用同用一个 口令 + 算法 进行解密。效率高
将原始数据切割成固定大小的 block ,依次进行加密,且前后的块有关联关系。
3、算法
DES:Date Encryption Standard
3DES
AES (支持128|192|256|384|512 bits长度的密钥)
Blowfish
Twofish
IDEA
RC6
CAST5
Serpent
4、工具
gpg
openssl
enc
5、存在问题
1、口令传输不安全
2、口令管理复杂(通信过多时,密钥过多,管理复杂)
3、需要密钥交换
4、数据来源无法确认
6、解决问题:密钥交换
尽管使用公钥加密能够完整秘钥交换,但对称加密的密码依然是在网上传输,因此有新的算法能够实现密钥交换:
介绍:(internet Key Exchange)IKE,Diffie-Hellman 协议 DH 算法 --> 不需要传输密码
实现原理:
A方 --> B方:都生成p、g (大素数、生成数) A、B都分别生成一个大素数 p 和生成数 g
A:本机生成私密随机数 x
B:本机生成私密随机数 y
A:将 g^x%p 的结果 --> B
B:将 g^y%p 的结果 --> A
A:(g^y%p)^x = g^yx%p --> 作为密钥
B:(g^x%p)^y = g^yx%p --> 作为密钥
7、rpm校验
# 导入公钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 导入光盘的公钥,厂商对每一个rpm包进行了私钥签名
# 检查数据包
rpm [-k|--checksig] PackageName.rpm
7、非对称加密(公钥加密)
1、介绍
Public-key cryptography,非对称加密,也称为公钥加密。密钥成对出现,公钥对外公开,私钥由自己管理,私钥加密数据后,
发送给对方,对方使用公开的公钥进行解密操作。
2、算法
RSA 加密、数字签名
DSA 数字签名
EIGamal (商业算法)
3、缺点
通常公钥加密传输速度会比对称加密慢3个数量级,所以用于密钥交换和身份认证,使用于加密较小的数据
4、实现功能
1、密钥交换
2、身份认证(数字签名)
3、数据加密 --> (加密性能低,所以通常不会使用公钥进行数据加密)
5、实现身份认证和密钥交换的过程
(示例:A 发送数据给 B)
首先 A 得到 B 的公钥 (这个过程是不安全的,公钥有可能被中间人攻击)
A 计算数据的特征码,然后使用自己的 [私钥加密] 特征码 并附加在数据的后面 ---> 单项加密、非对称加密 ---实现---> (身份认证、数据的完整性)
然后 A 使用对称加密算法把 [数据] 和单向加密算法计算来的[特征码] 一起加密 ---> 对称加密 ---实现---> (数据的保密性)
最后 A 用 B 的公钥把对称加密的密钥加密并附加到后面 ,最后发送给 B ---> 非对称加密 ---实现---> (实现密钥交换)
B 接收到数据后,用自己的私钥解密得到对称加密密码 ---> 非对称加密
B 用对称加密密码将数据解密,得到 明文数据 和 加密的特征码 ,然后 B 用 A 的公钥解密得到是特征码
如果 B 能够使用对方的公钥解密特征码,则说明数据确实是由 A 发送(身份认证),然后 B 使用相同的单项加密算法计
算数据的特征码和接收到的特征码进行比对,如果相符,则说明数据没有被篡改,数据的完整性得到的保证(数据完整性)。
8、单向加密
1、算法
MD5 128bits
SHA1 160biys
SHA512
CRC-32
2、工具
sha1sum
sha512sum
选项:
--check
示例:
sha512sum /etc/fstab /etc/issue > file.sha512sum
sha512sum --check file.sha512sum
# 检测一个目录下的所有文件的哈希值
find /etc/ -type f -exec sha512sum {} \;
md5sum
cksum
openssl dgst
3、实现功能
保证数据完整性
4、单项加密算法
提取数据特征码,连同数据一起发送。接收方利用同样的算法计算数据特征码,然后进行比对。无法避免中间人攻击。
5、特征:
定长输出:输入相同,输出必然相同
雪崩效应:数据的微小改变,将引起结果的巨大变化
不可逆:无法根据特征码,还原数据
9、CA
1、CA:Certificate Authority --- CA认证,验证公钥的来源合法性
实现过程
发证机构将申请证书的用户 A 的[信息]计算出特征码,然后用自己的私钥将特征码加密,附在证书上。当 B 和 A 通信时,A 将证书发送给
B,B 用发证机构的公钥解密证书,以核实通信方的身份。
2、PKI:Pubilc Key Infrastucture (公钥基础设施)
签证机构 CA
注册机构 RA
证书吊销列表 CRL
证书存取库
3、X.509
X.509是由ITU-T为了公开密钥基础建设(PKI)与授权管理基础建设(PMI)提出的产业标准。X.509标准,规范了公开密钥认证、证书吊销列表、授权
证书、证书路径验证算法等。
x.509结构:
基本结构:
版本
序列号
签名算法
签名哈希值
颁发者
有效日期
使用者
公钥
公钥参数
发行者唯一标识
主题的唯一标识
扩展信息:
发行者签名
4、证书类型
1、证书授权机构的证书
2、服务器证书
3、用户证书
5、获取证书方法
1、向授权机构申请
生成签名请求 csr
将请求文件发送给 CA 机构
CA 机构签署,用户接收
2、搭建私有CA
=========================================================================================================================================
OpenSSL
1、OpenSSL:Secure Socket Layer(安全套接层协议)。是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,
避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上是 SSL 和 TLS 协议的实现。SSL协议处
于应用层与传输之间。SSL 在应用层与传输层之间添加一层协议。
SSL 的版本,SSLv1、SSLv2、SSLv3。
2、TLS
传输层安全协议,Transport Layer Security。其前身是安全套接层(Secure Sockets Layer,SSL)。应用层能够透明的使用
TLS 协议。在应用层和传输层之间加入 TLS 协议,TLS 协议向上提供安全传输的功能。能够实现认证、完整性、重放保护。
在通信过程中,除了进行 TCP 三次握手之外,双方还要进行 SSL 握手连接,主要作用是秘钥交换和身份认证,这个过程称为
SSL 会话的建立。 (TLS 1.2 和TLS 1.3 版本)
TLS 也使用分层的结构实现:算法原语的实现;算法的实现;
3、OpenSSL
1、组件
libcrypto:通用加密库
libssl:用于实现 TLS/SSL 的功能的库
openssl:多功能命令行工具。可以实现私有证书颁发机构。功能:生成密钥、创建数字证书、手动加密解密数据
2、SSL 的会话建立
1、首先进行 TCP/IP 三次握手连接
2、基于 TCP/IP 连接,服务器端发送证书给客户端
3、客户端开始验证证书。检查证书发行者的名称,找到发行者的证书,从而提取到解密所需要的公钥然后去解密证书,能够解密,则
说明证书的发行者是合法的
4、使用相同的单项加密算法计算证书的信息,如果匹配则证书没有被篡改,内容可靠
5、检查证书是否在吊销列表中,如果在,则不予接受此证书
6、协商共同支持的加密算法
7、客户端使用服务器端的公钥将对称加密的密码加密后发送给服务器端(秘钥交换)
8、服务器端使用对称加密的秘密将请求的资源加密后发送给客户端。(对称加密的秘钥的临时生成的,下一次连接时,密码会再次生成)
3、openssl命令行工具应用
1、查看 openssl 版本
openssl version
2、使用 openssl 工具
openssl --help
1、openssl 有三类自命令:
Standard commands # 标准子命令,OpenSSL 为了实现某种功能的子命令
enc # 加密
ca # CA证书
crl # 证书吊销列表
dgst # 消息摘要算法(单项加密)
req # 证书签名请求
passwd # 生成密码
Message Digest # 单项加密算法
Cipher commands # 加密算法
2、加密
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-S salt] [-salt] [-nosalt] [-z]
选项:
-ciphername # 指明加密算法的名称 3des|aes|blowfish|twofish
-in filename # 指定要加密的文件,默认是从标准输入读取
-out filename # 指明加密后输出的文件,默认是标准输出
-e # 加密
-d # 解密
-a/-base64 # 加密后做 base64 编码,否则是二进制格式保存
-salt # 加入杂质
-S salt # 指定杂质,必须是十六进制
-nosalt # 不加入杂质
示例:
# 加密一个文件
openssl enc -des3 -e -salt -a -in passwd -out passwd.des3
# 解密文件
openssl enc -des3 -d -salt -a -in passwd.des3 -out passwd
3、单项加密
实现单项加密的工具:md5sum | sha1sum | sha224sum | sha256sum | openssl dgst
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-hex] [-binary] [-out filename]
选项:
-hex # 十六进制编码格式输出,默认编码
-out filename # 结果保存的文件
4、生成随机数
1、生成用户密码
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-quiet] {password}
选项:
-1 # 使用 md5 加密算法
-salt string # 指定杂质字符串
-stdin # 从标准输出读取数据
示例:
# 生成密码
openssl passwd -1 -salt xjw
2、生成随机数
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
选项:
-base64 # base64 编码
-hex # 十六进制编码。每个字符占4位
num # 表示字节数
3、tr -dc A-Xa-z0-9_ < /dev/urandom | head -c 10 | xargs
5、公钥加密
工具:openssl rsa | dsa | gpg 算法:RSA
6、生成密钥对
工具:openssl genrsa
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
选项:
-out filename # 生成密钥保存位置
numbits # 生成多少位的密钥
-rand # 指定随机数生成器
/dev/random # 仅从熵池中返回随机数,如果随机数用尽,阻塞
/dev/unrandom # 从熵池中返回随机数,如果随机数用尽,则利用软件的方式返回随机数
示例:
# 生成私钥
openssl genrsa -out rsakey.private 2048
(umask 077;penssl genrsa -out rsakey.private 2048) # 生成且修改权限
# 提取公钥(公钥是基于私钥提取的)
openssl rsa -in rsakey.private -pubout
7、密钥文件命名
ProgName_AlgorithmicName_key.pub # 公钥
ProgName_AlgorithmicName_key # 私钥
4、私有CA的实现
基于 OpenSSL 实现CA。
1、证书申请签署步骤
生成申请请求
RA检验
CA签署
获取证书
2、配置文件
OpenSSL 作为 CA 的配置文件 /etc/pki/tls/openssl.cnf
default_ca = CA_default # 配置文件中哪一个配置段作为CA的配置段
[ CA_default ]
dir = /etc/pki/CA # CA工作目录
certs = $dir/certs # 签署的证书存放目录
crl_dir = $dir/crl # 被吊销的证书列表
database = $dir/index.txt # 索引文件数据库
unique_subject = no # 证书的主体信息是否需要唯一
new_certs_dir = $dir/newcerts # 刚签署的证书放置目录,新签署的证书默认会防止在此目录
certificate = $dir/cacert.pem # CA自签署证书放置目录
serial = $dir/serial # 证书序列号,下一个证书的序列号。(一个十六进制数)
crlnumber = $dir/crlnumber # 吊销证书的序列号
crl = $dir/crl.pem # 当前正在使用的吊销列表文件
private_key = $dir/private/cakey.pem# 作为CA的私钥
RANDFILE = $dir/private/.rand # 随机数临时文件放置目录
default_days = 365 # 证书的有效期限
default_crl_days= 30 # 吊销列表的有效期限
default_md = sha256 # 默认哈希加密算法
preserve = no
3、创建必要的文件 在 /etc/pki/CA 目录下
touch index.txt serial crlnumber
echo 01 > serial
echo 01 > crlnumber
4、CA自签署证书
1、生成私钥
cd /etc/pki/CA
方法一:
# 生成私钥
openssl genrsa -out private/cakey.pem 2048
# 修改私钥权限为600或400
chmod 600 private/cakey.pem
方法二:
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem [-des3] 2048) # [-des3]给私钥加密码口令
2、提取公钥(在私钥的基础上提取公钥) (非必要步骤)
openssl rsa -in private/cakey.pem -pubout
3、生成签署证书
openssl req -new -x509 -key private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
req # 证书签名请求
-new # 生成一个新请求
-x509 # 表示自签署
-key # CA私钥位置
-out # 指明私钥存放路径
-days # 指明CA自签署证书期限
注:Common Name(eg, your name or server's hostname) []:此处指定所要绑定的域名例如 www.xuejinwei.com
生成的CA自签署证书:/etc/pki/CA/cacert.pem
查看生成的证书:openssl x509 -text -in cacert.pem
4、给CA颁发证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
5、给客户颁发CA证书
使用CA证书的主机发起请求,并将请求传输给CA机构 --> CA机构签署证书,并将证书传输给请求方
1、客户应用程序申请证书
生成私钥:(umask 077;openssl genrsa -out httpd.key 2048) # 将私钥保存至使用此证书的应用服务的配置文件目录下
申请:openssl req -new -key httpd.key -days 365 -out httpd.csr # httpd.csr是证书签署请求文件
Note:可以使用 *.xuejinwei.com 进行泛域名解析使用CA证书
客户将申请发给认证中心:scp httpd.csr 192.168.1.101:/tmp/
认证中心签署证书:openssl ca -in httpd.csr -out httpd.crt -days 365 # httpd.crt为签署的证书,可以指定为new_certs_dir目录
查看证书:openssl x509 -text|issuer|subject|serial|dates -in cacert.pem
将证书发给客户:scp httpd.crt 192.168.1.105:/etc/httpd/ssl
6、认证中心吊销证书
# 客户端获取要吊销的证书的 serial 序列号
openssl x509 -in certs/httpd.crt -noout -serial -subject
# CA机构根据 serial 序列号与 subject 信息比对检验是否与index.txt文件的信息一致
openssl ca -revoke /tmp/httpd.crt
# 重新生成序列号
echo N > /etc/pki/CA/crlnumber
# 更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
7、httpd 部署证书
1、yum install mod_ssl
2、配置
SSLEngine on|off # SSL引擎操作开关
SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt" # 指定CA证书位置
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key" # 服务器私钥文件
3、配置文件
DocumentRoot "/var/www/html"
ServerName www.xuejinwei.cc
SSLEngine on
SSLCertificateFile "/etc/httpd/ssl/httpd.crt"
SSLCertificateKeyFile "/etc/httpd/ssl/httpd.key"
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt # 根CA证书路径
4、跳转https HSTS方式
HSTS:HTTP Strict Transport Security 服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。
浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS,而无需任何网络过程
DocumentRoot "/var/www/html"
ServerName www.xuejinwei.cc
RewriteEngine on
Header always set Strict-Transport-Security "max-age=15768000" (可选)
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]
RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [L,R] (可选)
如果只针对某个目录
RewriteEngine on
RewriteBase /yourfolder
RewriteCond %{SERVER_PORT} !^443$
# RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
5、重定向的方式
Redirect [status] URL-path URL
status:
(永久跳转)Permanent: Returns a permanent redirect status (301) indicating that the resource has moved permanently
(临时跳转)Temp: Returns a temporary redirect status (302). This is the default
示例:Redirect temp / https://www.magedu.com/
5、gpg
1、格式
gpg2/gpg [--homedir dir] [--options file] [options] command [args]
选项:
-c FileName # 使用对称的加密算法进行加密
-o FileName # 将解密的文件输出到目标文件
-d FileName # 解密文件
2、模拟非对称加密通信过程 (A <---> B 通信)
# B 生成密钥 ~/.gunpg 目录下生成
gpg --list-key # 查看本机已存在的密钥
gpg --gen-key # 生成秘钥对
# 将公钥导出为文本编码格式
gpg -a -export -o Bpk.key
# B 将公钥传输给 A
scp sec.key A_IP:~/
# A 生成秘钥对
gpg --gen-key
# 将 B 的公钥导入 A 主机
gpg --import /path/to/Bpk.key
# A 使用 B 的公钥加密文件
gpg -e -r Bpk.key FileName # 生成加密后的文件 FileName.gpg
# A 将加密后的文件传输给 B
scp FileName.gpg A_IP:~/
# B 解密 A 发过来的加密文件
gpg -o FileName -d FileName.gpg
# 删除公钥
gpg --delete-keys key_name
gpg --delete-secret-keys key_name # 删除本机私钥
gpg --delete-keys key_name # 删除公钥
=========================================================================================================================================
OpenSSH
1、OpenSSH 是 SSH 协议的一种实现,dropbear 也是 SSH 协议的一种实现。
v1版 基于CRC-32
v2版
2、telnet
telnet-server # 服务器端
telnet # 客户端
telnet 是瞬时守护进程,有 xinetd 超级守护进程管理。
CentOS 7 安装 xinetd 和 telnet-server 安装包,分别将 xinetd 和 telnet.scoket 加入开机自启。
3、安装包
openssh.x86_64 # ssh-keygen
openssh-clients.x86_64 # scp sftp ssh
openssh-server.x86_64 # sshd 服务器端
4、ssh 命令
格式:ssh [user]@host_IP [COMD]
选项:
-p port # 指定端口登录
-b IP # 指定连接的源IP
-v # 调试模式
-C # 压缩模式
-X # 支持x11转发,能过打开图形工具。CentOS
-y # 支持信任x11转发
-t # 强制伪终端分配
-l # 指定用户
# 172.18.16.2 作为跳板,连接 172.18.26.3
ssh -t 172.18.26.2 ssh 172.18.26.3
# 验证代理(authentication agent)保密解密后的密钥口令就只需要输入一次
ssh-agent bash
ssh-add
5、配置文件
1、客户端 ssh_config
StrictHostKeyChecking ask|no # 首次登陆警告提示
2、服务器端 sshd_config
man sshd_config # 查看帮助文档
日志文件位置:/var/log/secure
Port 22960 # 选择sshd的连接端口
注意:修改端口前添加 SElinux 策略semanage port -a -t ssh_port_t -p tcp
LoginGraceTime 30 # 允许一次登录花费 30 秒
MaxAuthTries 3 # 错误尝试次数
Protocol 2 # 使用 SSH v2版协议
PermitRootLogin no # 不允许以 root 用户身份登录
StrictModes yes # 登录检测用户家目录的文件权限
AllowUsers UserName1 UserName1 # 允许登录用户
DenyUsers UserName1 UserName1 # 拒绝登录用户
AllowGroups grousName # 允许用户登录用户组
DenyGroups grousName # 禁止登录用户组
ListenAddress X.X.X.X # 指定监听地址,any表示监听所有端口
AddressFamily any # 监听Ipv4还是Ipv6地址
HostKey /etc/ssh/ssh_host_rsa_key # 主机密钥文件路径
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
KeyRegenerationInterval 1h # 密钥使用时长
ServerKeyBits 1024 # 密钥长度
MaxSessions 10 # 同一个网络连接允许多个登录会话
PasswordAuthentication yes # 是否允许基于口令认证
UseDNS yes # 启用或者禁止DNS的反向解析。当登录时会尝试将IP地址解析成主机名
SyslogFacility AUTHPRIV # 日志
LogLevel INFO
GSSAPIAuthentication yes # 检测功能,建议关闭
PubkeyAuthentication yes # 是否启动公钥认证方式
AuthorizedKeysFile .ssh/authorized_keys# 公钥认证的公钥存放文件
PasswordAuthentication yes # 是否启用用户密码认证
GatewayPorts no # 启用 SSH 网关功能,本地端口或远程端口转发时访问的IP地址
ClientAliveInterval 0 # 以秒为单位,没有网络传输超过此值时断开连接
ClientAliveCountMax 3 # 探测 ClientAliveInterval 的次数,超过这个次数才断开
MaxStartups 10:30:60 # 当连接数超过10后,开始对连接数量进行限制,然后在限制百分之三十的连接数量,当
连接数量达到60个时,进行完全限制
Banner none # 登录提示信息,可以指定一个文件路径 /path/file
6、SSH 服务最佳实践
1、不使用默认端口
2、禁止使用 protocaol version 1
3、限制可登录用户
4、利用防火墙设置 ssh 访问策略
6、仅监听特定的 IP 地址
7、使用强密码策略
8、尽可能使用基于密钥的认证
9、禁止使用空密码
10、机制root用户直接登录
11、限制ssh的访问频度和并发在线数
12、日志分析,保证日志文件的安全
9、Dropbear SSH 协议的另外有一种实现
1、下载源码包
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2017.75.tar.bz2
2、检验编译指定参数
./configure --prefix=/usr/local/dropbear
3、指定要编译的二进制程序
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
4、dropbear 使用
选项:
-b bannerfile # 指定登录时显示的欢迎信息文件
-r keyfile # 指定主机密钥
密钥默认位置:
dss /etc/dropbear/dropbear_dss_host_key
rsa /etc/dropbear/dropbear_rsa_host_key
ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-P [address:]port # 指明监听的地址和端口
-p PidFile # 指明PID文件存放路径 默认是/var/run/dropbear.pid
-g # 禁止root密码登录
-s # 禁止密码登录
-w # 禁止root登录
-m # 不显示motd文件信息
-F # 工作在前台
-E # 打印登录日志信息
5、生成密钥文件
./dropbearkey -t -f [-s bits]
./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
选项:
-t rsa|dss|ecdsa # 加密类型
-f filename # 密钥存放路径
./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048 (创建好密钥存放的目录)
./dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
6、启动服务
./dropbear -p :2202 -F -E
7、登录测试
ssh -p 2202 root@172.18.26.1
8、dbclient 使用
-p # 指定端口
-l # 指定用户名
9、编译安装好的scp命令需要创建一个能够查找到的路径。方法是创建一个软链接
10、scp 命令
选项:
-C # 压缩数据流
-r # 递归复制
-p # 保持原文件的属性信息
-q # 静默模式
-P PORT # 指明remote host的监听的端口
11、rsync
1、介绍
rsync 是 unix 系统上使用的文件传输和文件同步的工具,rsync 的关键特性的只发送文件差异,将传输量降到最低。并且
使用安全的shell连接做为传输方式。它只传输源文件和目标文件之间不一致的部分,rsync 可以执行完整备份和增量备份。
2、rsync命令
1、格式
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
2、选项
-v # 显示信息
-a # -rlptgoD,递归复制,保留符号链接,保留权限,保留组所有者,保留设备和特殊文件
-n # 测试运行,不真正执行
-r # 递归复制目录树
-p # 保留权限
-t # 保留时间戳
-g # 保留组信息
-o # 保留所有者信息
-l # 将软链接文件本身进行复制(默认)
-L # 将软链接文件指向的文件复制
-A # 保留 acl 权限
3、示例
# 复制 /works 目录到指定目录下
rsync -va /works /tmp/
# 将目录复制到远程主机
rsync -va /works root@115.159.221.170:/backup/
3、远程 shell 模式和服务器模式的差异在于,后者在源和目标名中使用两个冒号 (:)
4、用于共享文件(服务器端启动rsync为守护进程)
配置文件:/usr/lib/systemd/system/rsyncd.service
/etc/rsyncd.conf
motd file = /home/strike/rsyncd/rsync.motd_file # 提示信息
pid file = /home/strike/rsyncd/rsyncd.pid # PID 文件存放路径
port = 7777 # 指定rsync端口
use chroot = no # 是否使用chroot
[demo]
path = /home/strike # 路径
comment = Martin home directory # 介绍提示信息
list = no # 隐藏模块
[dropbox]
path = /home/strike/public/dropbox
comment = A place to leave things for Martin
read only = no # 允许写操作,默认不能写操作
[pickup]
path = /home/strike/public/pickup
comment = Get your files here!
客户机访问远程服务器的目录:
rsync --port 7777 root@172.18.26.1::[SRC] # SRC 表示目录,如果不指定,则表示列出目录
将远程服务器的文件同步到本地:
rsync -va --port 7777 root@172.18.26.1::demo /tmp/
5、其他使用技巧
在默认情况下,rsync 会把源中的所有文件复制到目标。这就是复制。如果希望建立镜像(即目标是源的精确拷贝)
,那么应该指定 --delete。例如,如果源包含文件 A、B 和 C,标准的 rsync 会把 A、B 和 C 复制到目标。但是,
如果在源中删除了 B,再次复制,目标就不再是源的镜像了:B 不再是有效的。--delete 选项建立镜像,从目标中
删除源中不再存在的文件。 --delete 选项
示例:rsync -va --delete /works root@115.159.221.170:/backup/
12、lftp/sftp
登录
UserName@host_IP
帮助信息
help COMD # 获取命令帮助信息
将目录镜像到本地指定目录
mirror S_DIR /path/to/dir
mirror --delete -only-newer --verbose S_DIR /path/to/dir
13、SSH 端口转发
1、概念
SSH 协议能够将客户端和服务器端的通信数据加密进行传输,接收信息可以解密。于此同时,SSH 还提供了一个很有用的
功能就是端口转发。将其他 TCP 端口的网络数据通过 SSH 链接来转发,并提供加密和解密的功能。这个过程也称为隧道
tunneling。
2、功能
实现加密解密传输
端口转发(突破防火墙的限制完成一些之前无法建立的 TCP 连接)
3、实践
1、本地端口转发
ssh -L ::
ssh -L 1024:B_IP:B_POER C_IP
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
有 A B C 三台主机,现在 A 要和 B 进行通信,由于网络环境所限或者其他原因,现在 A 无法连接 B。由于 A 和 C
可以正常的进行 SSH 连接,B 和 C 也能正常通信。所以可以借助于 C 将 A 和 B 连接起来。
过程:当有人访问 A_IP + A_PORT 时,A 主机扮演 ssh 客户端在本地开启一个随机端口,并将数据使用 SSH 协议加密
之后发送 C 主机,此时 C 主机扮演 ssh 的服务器端。C 主机再将收到的请求发往 B 主机。B 主机处理请求后
将数据返回给 C 主机,然后原路将数据返回给 A。
{连接内网的服务没有安全的协议通信,防火墙不放行不安全协议的数据报文,所以可以在外网使用本地端口转发
用 SSH 协议将不安全的协议报文加密封装后发送到内部支持安全协议的主机,然后在内部将不安全的协议转发
到目的主机}
A 主机配置测试(模拟连接telnet):
ssh -L 9527:192.168.84.132:23 -Nf 192.168.84.131
telnet 127.0.0.1 9527
A 主机配置测试(模拟连接http):
ssh -L 1024:192.168.84.132:80 -Nf 192.168.84.131
telnet 127.0.0.1 1024
GET /index.html HTTP/1.1
Host:192.168.84.132
可以使用抓包工具对数据包进行抓取,发现数据包都是经过加密的数据。
2、远程端口转发
有 A B C 三台主机,B C 在内网,A 是远程服务器,B 主机可以访问 A。使用 B 主机连接 A 主机,在 A 主机打开一
个指定端口,访问 A 主机打开的那个端口的数据将被 SSH 协议转发给 B,在由 B 主机转发给 C。此时,A 是 SSH 服务
端,B 是 SSH 客户端。当连接 A 主机的指定端口时,会被转发给 C 主机。
{可以事先做好端口转发, 就可以在外网连接内网的服务器了。}
ssh -R 1024:192.168.84.132:23 192.168.84.130
打开的端口 转发目标主机 远程端口SSH
3、动态端口转发(代理)
ssh -D
ssh -D 1080 192.168.84.131
192.168.84.130 通过 192.168.84.131 访问 192.168.84.132
文档:
ssh端口转发:https://gist.github.com/suziewong/4413491
14、ssh 登陆验证方式
1、基于用户和口令登录验证
1.客户端发起ssh请求,服务器会把自己的公钥发送给用户
2.用户会根据服务器发来的公钥对密码进行加密
3.加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
2、基于密钥登陆验证
1.首先在客户端生成一对密钥(ssh-keygen),客户端将公钥拷贝一份给服务器端并重命名为authirized_keys
3.当客户端再次发送一个连接请求,包括ip、用户名
4.服务端得到客户端的请求后,会到 authorized_keys 中查找,如果有响应的 IP 和用户,就会随机生成一个字符串,例如:acdf
5.服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6.得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7.服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
15、pssh 工具
pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制
格式:
pssh [-vAiIP] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] command ...
pssh -I [-vAiIP] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [command ...]
指定主机格式:
-H [user@]host[:port]
--host [user@]host[:port]
-H "[user@]host[:port] [ [user@]host[:port ] ... ]"
--host "[user@]host[:port] [ [user@]host[:port ] ... ]"
选项:
--version # 查看版本
-h # 主机文件列表,内容格式 "[user@]host[:port]" -h 后面跟一个文件名
-H # 主机字符串,内容格式 "[user@]host[:port]"
-l # 指定登录使用的用户名
-p # 并发的线程数[可选]
-o # 输出的信息输出到指定目录的文件内
-e # 指定错误信息的输入文件[可选]
-t # TIMEOUT 超时时间设置,0无限制[可选]
-O # SSH的选项
-v # 详细模式
-A # 手动输入密码模式 (如果多台主机密码一致,则只需要验证一次)
-x # 额外的命令行参数使用空白符号,引号,反斜线处理
-X # 额外的命令行参数,单个参数模式,同-x
-i # 将每个服务器的处理信息都输出
-P # 打印出服务器返回信息
# 将本地的脚本批量推送到远程服务器
pscp.pssh -h ip.txt /works/scripts/new-2017-08-26/ssh-01.sh /tmp
# 将远程主机的文件拉取到本地
pslurp -h ip.txt -L /app /etc/passwd pass
# -x 选项使用示例
pssh -i -H host1 -H host2 -x "-O StrictHostKeyChecking=no -O UserKnownHostsFile=/dev/null -O GlobalKnownHostsFile=/dev/null" echo hi
=========================================================================================================================================
AIDE
功能:系统完整性检查
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设
置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上
的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可
以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后
者是一款免费的但功能也很强大的工具。
AIDE(Adevanced Intrusion Detection Environment) 入侵检测工具
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配 置文件。AIDE数据库能够保存文件的各种属性。包括:权限 (permission)、
索引节点序号(inode number)、所属用户(user)、 所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间 (ctime)、最后访问时
间(atime)、增加的大小以及连接数。
AIDE 还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号,这个数据库不应该保存那些经常变动
的文件信息,例如:日志文件 、邮件、/proc文件系统、用户起始目录以及临时目录。
1、安装
yum install aide
rpm -ql aide
/etc/aide.conf # 配置文件
/usr/sbin/aide # 二进制程序
/var/log/aide # 日志文件
/var/lib/aide # aide生成的数据库文件
2、初始化默认的AIDE数据库
aide --init
数据库生成后保存位置
/var/lib/aide
mv aide.db.new.gz aide.db.gz (及时备份数据文件)
3、检测
aide --check
aide -C
4、如果文件有变动之后,更新数据库
aide --update
aide -u
5、AIDE 配置文件
@@define DBDIR /var/lib/aide # 读取aide数据库文件路径
@@define LOGDIR /var/log/aide # 日志文件
database_out=file:@@{DBDIR}/aide.db.new.gz # 生成aide数据库文件路径
CONTENT_EX = sha256+ftype+p+u+g+n+acl+selinux+xattrs # 权限组合定义
/root/\..* PERMS # 监控 /root/ 目录下以 '.' 开头的文件的变化
!/usr/tmp/ # 不监控 /usr/tmp 目录下的文件变化
=========================================================================================================================================