常見的加密算法和安全協議
一、對稱加密:加密和解密使用同一個密鑰,依賴于算法和密鑰,其安全性依賴于密鑰而非算法
常見的算法: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.www58058.com/98030