Linux安全之SSL基礎

SSL

Secure Sockets Layer

安全套接字協議),及其繼任者傳輸層安全(

Transport Layer Security

TLS

)是為網路通訊提供安全及資料完整性的一種安全協議。

TLS

SSL

在傳輸層與應用層之間對網路連線進行加密。

Linux安全之SSL基礎

Linux安全之SSL基礎

1。 SSH 協議

**ssh**是secure shell的首字母縮寫,預設工作在TCP的22埠之上,安全的遠端登入的一種協議。

**OpenSSH**就是ssh協議的開源實現,用於取代傳統的不加密工作在TCP的23號埠上的telnet工具的,同時取代了其他遠端複製等工具的實現。dropbear是ssh協議的另一個開源實現,適用於較小的網路中。

SSH 協議版本

v1

版本:基於

CRC-32

MAC

很不安全,很容易受中間人攻擊(

man-in-middle

v2

版本:雙方主機協議選擇安全的

MAC

方式基於

DH

演算法做金鑰交換,基於

RSA

DSA

演算法實現身份認證

兩種認證機制

基於使用者名稱和密碼連線之後客戶端傳送使用者名稱和密碼進行登入

基於公私鑰的

免密碼登入

客戶端生成一對公私鑰,將公鑰放到遠端伺服器家目錄的

。ssh

目錄檔案下。當客戶端連線伺服器的時候,伺服器傳送一串用公鑰加密的資料讓客戶端解密,如果成功則身份透過認證。此處的公鑰不能夠公開,否則不安全。

dropbear

ssh

協議的另一個實現的開源方式

用在嵌入式系統上

資源佔用率更少

# 建立Key,使用2048或者預設長度[root@localhost ~]# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048[root@localhost ~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key# 啟動dropbear的ssh服務[root@localhost ~]# dropbear -p [ip:]port -F -E[root@localhost ~]# dropbear -p :2222 # 後臺執行[root@localhost ~]# dropbear -p :2222 -F -E # 前臺執行# 客戶端訪問,可以用系統的ssh,也可以用dropbear的客戶端dbclient[root@localhost ~]# ssh -p 2222 root@127。0。0。1[root@localhost ~]# dbclient -p 2222 root@127。0。0。1

2。 OpenSSH

2。1 OpenSSH 基礎

**OpenSSH**也是一個基於C/S架構的用具,同時還能夠實現很多如ssh、scp、sftp等的功能。客戶端工具眾多,如商業的xshell以及securecrt,開源的putty,伺服器端的多為Linux下的sshd。

客戶端元件

ssh

配置檔案:

/etc/ssh/ssh_config

伺服器端元件

sshd

配置檔案:

/etc/ssh/sshd_config

連線過程

Linux安全之SSL基礎

Linux安全之SSL基礎

2。2 SSH 命令的基本使用

格式

ssh [user@]host [COMMAND]

ssh [-l user] host [COMMAND]

選項

-p port

遠端伺服器監聽的埠因為很多伺服器因為安全的關係導致不會使用預設的

22

號埠號

-X

支援

x11

轉發支援之後就是可以開啟遠端主機的圖形化介面程式,如

xclock

程式同時本地系統也需要啟動

x11

才可以開啟圖形化介面程式

-Y

支援信任的

x11

轉發支援之後就是可以開啟遠端主機的圖形化介面程式,如

xclock

程式同時本地系統也需要啟動

x11

才可以開啟圖形化介面程式

例項展示

# 使用@登入遠端主機[root@localhost ~]# ssh root@172。16。242。181# 使用-l登入遠端主機[root@localhost ~]# ssh -l root 172。16。242。181# 不登入遠端主機,只是執行一條命令[root@localhost ~]# ssh root@172。16。242。181 ‘hostname’

# 一次完整的SSH的使用者名稱、密碼登入# 會在家目錄下生成一個。ssh的隱藏資料夾,其中有一個known_hosts用來儲存我們連線過的主機以及認證秘鑰[root@localhost ~]# ssh root@172。16。242。181The authenticity of host ‘172。16。242。181 (172。16。242。181)’ can‘t be established。RSA key fingerprint is 2a:83:14:68:16:84:e0:0c:4a:2a:81:cd:9f:ae:ce:0a。Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added ’172。16。242。181‘ (RSA) to the list of known hosts。root@172。16。242。181’s password:Last login: Fri Jun 24 15:10:14 2016 from 172。16。242。1[root@localhost ~]# cat 。ssh/known_hosts172。16。242。181 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArpD/NWo1g0xtUfEQH1vkG2aHYenkTJpiNGj1e/1rY3kQQpocL75EVIROVNSlqtbUiUkoy7fsxs0lfm+maDoGbMeuUQQBV/HSeBGuq3Jjfh+7ymR8iiSNNZLmqQmBpfG7/QG0WU1gXWeO1V3CJNjlbWQr/Px6zilypSeYaM+rS8SkekOzZpWgFDSUg3dFBmN5HhY3+fyWWvJlk1aJRxJW5T4dnecz+LLNnwWu6s880HBUY+f0ahdknGq8yKz0eeaTTUqf5qhSALiU0L3+ApocSINaZcuB+1X1IE+NRqpaJRBrXuwFjTQ99pBoPkRbdSGTkW0j5eC7U8bfzSydrmlCDQ==

2。3 基於金鑰的認證方式

格式

(1) 在客戶端生成金鑰對

ssh-keygen -t rsa [-P ‘’] [-f “~/。ssh/id_rsa”]-P

:指明使用公私鑰的密碼

-f

:指明秘鑰檔案路徑,這裡需要寫明為

絕對路徑

(2) 把公鑰傳輸至遠端伺服器對應使用者的家目錄

ssh-copy-id [-i [identity_file]] [user@]machine-i

:指明需要傳給伺服器的本地公鑰檔案位置預設會在服務端的

。ssh

目錄下生成一個

authorized_keys

的檔案用來放置客戶端的公鑰資訊的如果沒有就建立並將客戶端的公鑰資訊放在這裡,也可以達到同樣的效果,需要注意

authorized_keys

的許可權為

600

,切記

(3) 測試

ssh root@172。16。242。181

例項展示

# id_rsa為私鑰,id_rsa。pub為公鑰[root@localhost ~]# ssh-keygen -t rsaGenerating public/private rsa key pair。Enter file in which to save the key (/root/。ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/。ssh/id_rsa。Your public key has been saved in /root/。ssh/id_rsa。pub。The key fingerprint is:f3:4c:0d:41:78:e5:50:a6:00:c6:bf:1d:ad:3f:0f:bd root@localhost。localdomainThe key‘s randomart image is:+——[ RSA 2048]——+| 。o。。o+o+ || 。。 。。。* || 。 。o。。 || 。 。o。 || So。o。 || 。=o 。 || o。。 。 || o。 。 || oE |+————————-+[root@localhost ~]# cd 。ssh/[root@localhost 。ssh]# lsid_rsa id_rsa。pub known_hosts

# 同時,也可以使用選項生成公私鑰對[root@localhost 。ssh]# ssh-keygen -t rsa -P ’‘ -f ’/root/。ssh/‘Generating public/private rsa key pair。/root/。ssh/ already exists。Overwrite (y/n)? yopen /root/。ssh/ failed: Is a directory。Saving the key failed: /root/。ssh/。

# 把公鑰傳輸至遠端伺服器對應使用者的家目錄# 輸入使用者名稱以及密碼即可完成[root@localhost 。ssh]# ssh-copy-id -i 。ssh/id_rsa。pub root@172。16。242。100

2。4 scp 命令的基本使用

格式

scp [options] SRC... DEST/

兩種情形

PULL(伺服器==>客戶端,下載

scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE/PATH/FROM/SOMEFILE

表示伺服器端需要下載的檔案

/PATH/TO/SOMEWHERE

表示下載到本地的那個目錄下

PUSH(伺服器<==客戶端,上傳

scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE/PATH/FROM/SOMEFILE

表示本地上傳檔案

/PATH/TO/SOMEWHERE

表示伺服器端的檔案目錄

常用選項

-r

遞迴複製複製目錄的時候必須使用

-p

保持原檔案的屬性資訊

-q

靜默模式

-P PORT

指明遠端伺服器的監聽的埠

sftp命令

sftp

命令依賴於

ssh

工作的,所以是加密的,並且能夠簡化我們的上傳和下載操作

[root@localhost ~]# sftp root@172。16。242。181Connected to 172。16。242。181。sftp> helpAvailable commands:bye Quit sftp。。。

例項展示

# 下載[root@localhost ~]# scp root@172。16。242。100:/etc/fstab /tmp/fstab。txtfstab 100% 779 0。8KB/s 00:00# 上傳[root@localhost ~]# scp /etc/fstab root@172。16。242。181:/tmp/fstab

2。5 rsync 命令的基本使用

基於 ssh 實現高效率的遠端系統之間複製檔案,使用安全的 shell 連線做為傳輸方式,比 scp 更快。

選項

-n

:模擬複製過程

-v

:顯示詳細過程

-r

:遞迴複製目錄樹

-p

:保留許可權

-t

:保留時間戳

-g

:保留組資訊

-o

:保留所有者資訊

-l

:將軟連結檔案本身進行復制(預設)

-L

:將軟連結檔案指向的檔案複製

-a

:存檔,相當於–rlptgoD,但不保留 ACL 和 SELinux 屬性

例項演示

# 複製目錄和目錄下檔案rsync –av /etc server1:/tmp# 只複製目錄下檔案rsync –av /etc/ server1:/tmp

3。 SSH 服務的最佳實踐

(1)不要使用預設埠

(2)禁止使用

protocol version 1

(3)限制可登入使用者

(4)設定空閒會話超時時長

(5)利用防火牆設定

ssh

訪問策略

(6)僅監聽特定的

IP

地址

(7)基於口令認證時,使用強密碼策略

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

(8)使用基於金鑰的認證

(9)禁止使用空密碼

(10)禁止

root

使用者直接登入

(11)限制

ssh

的訪問頻度和併發線上數

(12)做好日誌,經常分析

(13)如果在測試的時候不成功,注意關閉

selinux

iptables

4。 SSH 服務的配置檔案

4。1 客戶器端配置檔案

註釋的都為啟用預設配置

Host

表示指定的主機,

*

表示全部主機

MACs

表示訊息摘要碼

Port

表示如果伺服器埠改變之後不用每次都指定埠號

Protocol

表示啟動的 ssh 協議版本

StrictHostKeyChecking

表示當連線新主機會提示資訊

[root@localhost ~]# cat /etc/ssh/ssh_config。。。Host * - GSSAPIAuthentication yes - ForwardX11Trusted yes - SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES - SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT - SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE - SendEnv XMODIFIERS

4。2 伺服器端配置檔案

#

開頭的表示註釋

配置的時候不能攜帶多餘的字元

Port

表示監聽埠,通常需要改動

ListenAddress

表示監聽的地址,因為一個機器可能有多個地址,通常監聽內網地址而不監聽外網地址

AddressFamily

表示使用

IPv4

還是

IPv6

any

表示全部都監聽

AllowGroups

表示可以訪問的使用者組

AllowUsers username

表示可以訪問的使用者名稱,

username

表示具體的使用者名稱

HostKey

表示主機秘鑰支援的演算法

KeyRegenerationInterval

表示主機秘鑰過期時間

ServerKeyBits

表示主機秘鑰長度

SyslogFacility

表示日誌儲存方式,儲存在

/var/log/secure

LoginGraceTime

表示連線登入等待時間

PermitRootLogin

表示是否允許

root

使用者直接登入

PasswordAuthentication

表示是否允許基於口令認證,即使用者名稱和密碼登入

X11Forwarding

表示是否允許

X11

轉發,支援之後就是可以開啟遠端主機的圖形化介面程式

Subsystem sftp

表示啟動子系統

sftp

,所以才能使用

sftp

命令

UseDNS

表示解析

DNS

,建議關閉否則可以出現客戶端登入用時長的問題

5。 telnet 命令的基本使用

telnet 是基於 S/C 架構的工具,伺服器端 telnet-server,客戶端為 telnet,用到的時候需要自己獨立安裝。

# 服務端安裝telnet程式[root@localhost ~]# yum install -y telnet-server已安裝: telnet-server。x86_64 1:0。17-48。el6作為依賴被安裝: xinetd。x86_64 2:2。3。14-40。el6完畢!

# 服務端啟動telnet,因為telnet是工作的超級守護程序中的瞬時守護程序,所以啟動方式不同[root@localhost ~]# chkconfig telnet on[root@localhost ~]# service xinetd restartStopping xinetd: [FAILED]Starting xinetd: [ OK ][root@localhost ~]# ss -tunl | grep :23tcp LISTEN 0 64 :::23 :::*

# 在CentOS6中,xinetd為超級守護程序,telnet是執行在xinetd之內的# 超級守護程序xinetd就是為了那些可能長時間不需要使用的服務監聽,一旦有需求才啟動對應的服務進行通訊。# 瞬時守護程序就是為了那些可能長時間不需要使用,如果單獨分一個程序跑太浪費效能了,所以使用超級守護程序xinetd進行統一管理# 獨立守護程序就是那些自己管理自己的程式,sshd就是一個獨立守護程序[root@localhost ~]# chkconfig ——list。。。xinetd - 0:關閉 - 1:關閉 - 2:關閉 - 3:啟用 - 4:啟用 - 5:啟用 - 6:關閉基於 xinetd 的服務: - rsync: - 關閉 - telnet: - 啟用 - time-dgram: - 關閉 - time-stream: - 關閉。。。

# 確保在客戶端安裝了telnet的客戶端程式,並且確保服務端iptables中沒有過濾23號埠的請求# telnet不允許root使用者直接登入,需要使用普通使用者登入[root@localhost ~]# yum install -y telnet[root@localhost ~]# telnet 172。16。242。181Trying 172。16。242。181。。。Connected to 172。16。242。181。Escape character is ’^]‘。CentOS release 6。7 (Final)Kernel 2。6。32-573。26。1。el6。x86_64 on an x86_64login:

文章作者:

Escape

文章連結:

https://www。escapelife。site/posts/c5aea51c。html