1三、openssl、ssh、腳本信息捕獲 學習筆記

PKI:Public Key Infrastucturegit


openssl: 套件,開源程序算法

libcrypto通用功能的加密庫shell

libssl用於實現TLS/SSL的功能數據庫

openssl多功能命令行工具編程

openssl可用於:生成密鑰、建立數字證書、手動加密解密數據安全


加密解密技術經常使用的功能及算法:bash

對稱加密:(用於加密數據)服務器

算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5網絡

工具:gpg, openssl encdom


# openssl enc -des3 -a -salt -in /path/to/input_file -out /path/to/cipher_file

# openssl enc -d -des3 -a -salt -in /path/to/cipher_file -out /path/to/clear_file


單向加密:(抽取數據特徵碼,用於驗證數據的完整性)

特性:

One-Way

Collision-free

算法:

md5128bits

sha1160bits

sha512512bits

工具:sha1sum, md5sum, cksum, openssl dgst


# openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] /path/to/somefile


MAC: 消息摘要碼,單向加密的延伸應用(在單向加密的基礎上再對抽取的數據特徵碼進行加密)

應用:用於實如今網絡通訊中保證所傳輸的數據完整性;

機制:

CBC-MAC

HMAC:使用md5和sha1算法;


用戶認證:

工具:passwd, openssl passwd

# openssl passwd -1 


公鑰加密:公鑰加密、私鑰解密

密鑰對兒:

公鑰:pkey

私鑰:skey


算法:RSA, EIGamal

工具:gpg, openssl rsautl


數字簽名:私鑰加密、公鑰解密

算法:RSA, EIGamal, DSA


DSA: Digital Signature Algorithm

DSS: Digital Signature Standard


密鑰交換:IKE

算法:DH, 公鑰加密

Diffie-Hellman 


數字證書:

證書格式:x50九、pkcs

x509格式:

公鑰和有效期限;

持有者的我的合法身份信息;(主機名)

證書的使用方式;

CA的信息;

CA的數字簽名;


誰給CA發證:自簽署證書


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


[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept        CA工做目錄

certs           = $dir/certs            # Where the issued certs are kept 簽署證書存放目錄

crl_dir         = $dir/crl              # Where the issued crl are kept   吊銷列表存放目錄

database        = $dir/index.txt        # database index file.            索引數據庫

#unique_subject = no                    # Set to 'no' to allow creation of

                                        # several ctificates with same subject.

new_certs_dir   = $dir/newcerts         # default place for new certs.    新證書存放目錄

certificate     = $dir/cacert.pem       # The CA certificate              CA自簽署證書

serial          = $dir/serial           # The current serial number       證書的序列號

crlnumber       = $dir/crlnumber        # the current crl number          吊銷列表的序列號

                                        # must be commented out to leave a V1 CRL

crl             = $dir/crl.pem          # The current CRL                 正用吊銷列表

private_key     = $dir/private/cakey.pem# The private key                 CA本身的私鑰

RANDFILE        = $dir/private/.rand    # private random number file      隨機數文件


x509_extensions = usr_cert              # The extentions to add to the cert


用openssl實現私有CA:


生成密鑰對兒:

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

若是想查看公鑰:

# openssl rsa -in private/cakey.pem -pubout -text


生成自簽證書:

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655


建立須要的文件:

# touch index.txt serial crlnumber


用openssl實現證書申請:


在主機上生成密鑰,保存至應用此證書的服務的配置文件目錄下, 例如:

# mkdir /etc/httpd/ssl

# cd /etc/httpd/ssl

# (umask 077; openssl genrsa -out httpd.key 1024)


生成證書籤署請求:

# openssl req -new -key httpd.key -out httpd.csr 


將請求文件發往CA;


CA簽署證書:

簽署:

# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS


將證書傳回請求者


吊銷證書:

# openssl ca -revoke /path/to/somefile.crt


openssl: 多用途的命令行工具

標準命令:enc, dgst, genrsa, rsautl, req, ca, rsa, passwd


speed: 基準性能測試工具 

version:版本查看

s_client:SSL/TLS client program

rand: 生成僞隨機數

# openssl rand -hex #


ssl: 

NetScape 網景

Secure Socket Layer

SSLv2, SSLv3


TLS: Transport Layer Security

TLSv1


http --> https

ldap --> ldaps

ftp --> ftps

smtp --> smtps

pop3 --> pop3s

imap --> imaps


openssl補充材料:


openssl中有以下後綴名的文件

.key格式:私有的密鑰

.crt格式:證書文件,certificate的縮寫

.csr格式:證書籤名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫

.crl格式:證書吊銷列表,Certificate Revocation List的縮寫

.pem格式:用於導出,導入證書時候的證書的格式,有證書開頭,結尾的格式

 

經常使用證書協議

x509v3: IETF的證書標準

x.500:目錄的標準

SCEP:  簡單證書申請協議,用http來進行申請,數據有PKCS#7封裝,數據其實格式也是PKCS#10的

PKCS#7:  是封裝數據的標準,能夠放置證書和一些請求信息

PKCS#10:  用於離線證書申請的證書申請的數據格式,注意數據包是使用PKCS#7封裝這個數據

PKCS#12:  用於一個單一文件中交換公共和私有對象,就是公鑰,私鑰和證書,這些信息進行打包,加密放在存儲目錄中,CISCO放在NVRAM中,用戶能夠導出,以防證書服務器掛掉能夠進行相應恢復。思科是.p12,微軟是.pfx


ssh: Secure SHell

監聽tcp協議的22號端口


ssh文本協議:字符通訊


sshv1, sshv2

因爲sshv1是基於CRC-32作MAC,所以,不安全,建議勿用;

sshv2基於雙方主機協商選擇最安全的MAC實現機制;

加密機制及MAC機制是雙方協商選定;

基於DH實現密鑰交換,基於RSA或DSA實現身份認證;

客戶經過檢查服務端的主機密鑰來斷定是否與其進一步通訊;


OpenSSH (C/S)

Server: 程序(服務)監聽tcp:22

Client: 程序


Windows客戶端:xmanager(xshell)、SecureCRT、putty、sshshellclient


openssh客戶端組件:

ssh: 

ssh Username@HOST [COMMAND]

ssh -l Username HOST [COMMAND]

-p PORT: 指定要連入端口;


ssh認證機制:

基於口令

基於密鑰

客戶端在本地生成一對密鑰;

客戶端將公鑰複製到服務端,要登陸的用戶的家目錄下的隱藏目錄.ssh中的一個名爲authorized_keys或authorized_keys2文件中


配置過程:

一、生成密鑰對兒

# ssh-keygen -t rsa

生成的密鑰默認保存至當前用戶家目錄下的.ssh目錄的id_rsa文件中,公鑰在id_rsa.pub文件中


二、複製密鑰至遠程主機

# ssh-copy-id [-i /path/to/pubkey_file] Username@HOST


scp: 類cp命令,基於ssh協議跨主機複製

scp SRC1 SRC2 ... DEST


分兩種狀況:

一、源文件在本機,目標爲遠程

# scp /path/to/somefile ... Username@HOST:/path/to/somewhere

二、源文件在遠程,目標爲本機

# scp Username@HOST:/path/to/somefile  /path/to/somewhere


-r: 源文件爲目錄時使用,以實現遞歸複製

-p: 保留源文件的複製及修改時間戳,以及權限;

-q: 靜默模式

-P PORT:指定服務端端口;


sftp: 是基於ssh的ftp協議

只要OpenSSH的服務器端配置文件中啓用了以下項:

Subsystemsftp/usr/libexec/openssh/sftp-server


用法:# sftp [username@]HOST


服務器端:sshd

配置文件:/etc/ssh/sshd_config

服務腳本:/etc/rc.d/init.d/sshd

腳本配置文件:/etc/sysconfig/sshd


各配置參數:# man sshd_config

Port

ListenAddress: IP

Protocol

PermitRootLogin

AllowUsers user1,user2,...: 用戶白名單

AllowGroups

DenyUsers : 用戶黑名單


使用SSH的最佳實踐:

一、Only Use SSH Protocol 2

二、Limit Users' SSH Access

AllowUsers root vivek jerry

白名單

DenyUsers saroj anjali foo

黑名單

三、Configure Idle Log Out Timeout Interval

ClientAliveInterval 300

ClientAliveCountMax 0

設定空閒會話超時時長;


四、Firewall SSH Port # 22

使用iptables設置ssh服務安全訪問策略;


五、Change SSH Port and Limit IP Binding

Port 300

ListenAddress 192.168.1.5

ListenAddress 202.54.1.5


勿使用默認22端口;


六、Use Strong SSH Passwords and Passphrase

genpasswd() {

local l=$1

      [ "$l" == "" ] && l=20

     tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs

}


使用足夠長、足夠複雜的密碼,且按期更換;


七、Use Public Key Based Authentication

使用公鑰認證


八、Disable Empty Passwords

九、Thwart SSH Crackers (Brute Force Attack)

google: ssh best practice

十、 Rate-limit Incoming Port # 22 Connections

限制ssh訪問頻度;

十一、Use Log Analyzer

記錄好日誌,常常作日誌分析;


用戶登陸信息獲取:

/var/log/wtmp:用戶成功登陸的日誌信息

last

/var/log/btmp: 用戶登陸嘗試失敗的日誌信息

lastb


lastlog: 每一個用戶最近一次成功登陸的信息;


bash編程的信號捕獲:

kill -l

KILL沒法捕捉;


trap 'COMMAND' SIGNAL, 


信號捕捉用於:在中途停止時作一些清理操做;


使用示例:

#!/bin/bash

#

trap 'echo "quit"; exit 5' INT


for i in {1..254}; do

       if ping -w 1 -c 1 172.16.254.$i &> /dev/null; then

        echo "172.16.254.$i is up."

       else

        echo "172.16.254.$i is down."

       fi

done

相關文章
相關標籤/搜索