安全運維之遠程訪問

来源:https://www.cnblogs.com/lynk/archive/2019/12/21/12076043.html
-Advertisement-
Play Games

為了方便使用,一般伺服器都會通過配置遠程訪問來保證隨時配置伺服器,但是不正確的遠程訪問配置會對系統產生安全隱患,產生被入侵的風險。 使用安全的登錄認證方式 現代伺服器環境往往需要用戶遠程登錄,而遠程登錄本身就具有一定的安全風險————中間人攻擊。 在早期,telnet是一種常用的登錄方式,但它過於古 ...


為了方便使用,一般伺服器都會通過配置遠程訪問來保證隨時配置伺服器,但是不正確的遠程訪問配置會對系統產生安全隱患,產生被入侵的風險。

使用安全的登錄認證方式

現代伺服器環境往往需要用戶遠程登錄,而遠程登錄本身就具有一定的安全風險————中間人攻擊。
在早期,telnet是一種常用的登錄方式,但它過於古老,而且使用明文傳輸,這使得對其的攻擊代價十分之小,極易遭到攔截與偽造。現代遠程登錄已經基本拋棄了telnet,而是通過SSH服務遠程登錄伺服器。
SSH會加密所有的傳輸數據,並且可以防禦DNS和IP欺騙,經過SSH壓縮的數據也可以提高遠程訪問的傳輸效率。
SSH在服務端運行的是sshd服務,sshd服務對應的主配置文件是/etc/ssh/sshd_config

使用強密碼

很多時候,為了方便記憶,用戶往往會使用一些簡單的密碼。例如自己的生日、某個時間點或者一些其他內容,但這些密碼其實安全性很低,在撞庫攻擊下很容易就受到攻破。所以建議使用隨機生成的高位強密碼,並周期性更換。
Linux系統自帶的openssl就可以生成一串強密碼供用戶使用,建議使用32位以上的強密碼,這樣可以有效的防止撞庫攻擊。
如生成一串十六位的密碼:

$ openssl rand -base64 16
WjzyDqedkWf3e5A3tJw/c=

使用密鑰認證

使用強密碼認證仍存在一定的風險,如管理員忘記或遺失密碼,甚至泄露密碼。而密鑰認證則是一種更加安全的認證方式,因為其將密鑰文件存儲在客戶端與伺服器中,不必輸入密碼就可以進行登錄,避免了密碼泄露的風險。
這裡以Xshell6為例,講解通過密鑰認證方式遠程登錄Linux伺服器的實現方法。

  1. 首先打開Xshell,選擇“工具-新建用戶密鑰生成嚮導”,進入密鑰生成視窗。選擇密鑰類型為RSA,長度建議至少為1024位。點擊下一步
  2. 等待密鑰生成,生成完畢後直接點擊下一步。
  3. 輸入密鑰信息,以及密鑰密碼,點擊下一步。
  4. 點擊“保存為文件”,將pub尾碼的公鑰保存到本地,完成。
  5. 此時私鑰已經被Xshell保存在本地了,通過“工具-用戶密鑰管理者”可以查看生成的密鑰。
  6. 到目前為止,已經成功的生成密鑰,並將公鑰與私鑰都保存在了本地,接下來我們需要設置用戶使用SSH2協議,如,將user01設置為使用SSH2登錄
$ mkdir /home/user01/.ssh
$ chmod 700 /home/user01/.ssh

然後將公鑰上傳到伺服器,並且導入密鑰,在將公鑰上傳後,使用以下命令將公鑰導入到伺服器,並修改公鑰文件的許可權:

$ ssh-keygen && cat /上傳公鑰的路徑/id_rsa_2048.pub >> /home/user01/.ssh/authorized_keys
$ chmod 600 /home/user01/.ssh/authorized_keys
  1. 為了伺服器的安全,我們還需要將SSH2修改為只能接受PublicKey認證的方式來驗證用戶:
$ vim /etc/ssh/sshd_config
##修改以下配置:
Protocol 2                             #僅允許使用SSH2
PubkeyAuthentication yes               #啟用PublicKey認證
AuthorizedKeyFile .ssh/authorized_keys #PublicKey文件路徑
PasswordAuthentication no              #不使用口令認證

最後重啟sshd服務:

$ systemctl restart sshd
  1. 接下來就可以使用密鑰方式來登錄伺服器了,在Xshell的會話屬性中,將用戶身份認證方式改為PublicKey方式,並且選擇用戶密鑰就可以使用密鑰方式登陸伺服器。

shell命令日誌

用戶在shell中的操作記錄會被保存在用戶目錄下的.bash_history文件中,通過這個文件可以查詢shell命令的執行歷史,有助於進行系統審計與問題排查。
並且,在遭受到黑客攻擊後,也可以通過這個文件查詢黑客登錄伺服器所執行的歷史命令操作,但是黑客在攻擊會為了毀滅痕跡而刪除.bash_history文件,所以我們要對該文件進行保護。
預設的.bash_history並不會區分不同用戶操作命令與執行時間,我們可以通過以下方式來讓history命令記錄所有的shell命令的執行時間,編輯/etc/bashrc文件:

HISTFILESIZE=4000        #定義保存命令的總數
HISTSIZE=4000            #定義輸出的命令總數
HISTTIMEFORMAT='%F %T'   #定義時間格式
export HISTTIMEFORMAT    #傳遞變數

然後可以利用以下方法來實現詳細記錄登陸過系統的用戶、IP地址、shell命令以及詳細操作時間,並將這些信息以文件方式保存在一個安全的目錄,
將以下代碼添加到/etc/profile文件中:

#history
USER_IP='who -u am i 2>/dev/null| awk '{print SNF}'|sed -e 's/[()]//g''
HISTDIR=/usr/share/.history
if [ -z $USER_IP ]
then
USER_IP='hostname'
fi
if[ ! -d $HISTDIR ]
then
mkdir -p $HISTDIR

chmod 777 $HISTDIR
 fi
 if [ ! -d $HISTDIR/${LOGNAME} ]
 then
 mkdir -p $HISTDIR/${LOGNAME}
 chmod 300 $HISTDIR/${LOGNAME}
 fi
 export HISTSIZE=4000
 DT='date +%Y$m$d_%H%M%S'
 export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.SDT"
 export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
 chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

tcp_wrappers防火牆

tcp_wrappers是Linux中用於分析TCP/IP數據包的軟體,類似的如iptables,與iptables不同的是,iptables通過監視系統運行狀態阻擋惡意攻擊。而tcp_wrappers可以實現對系統中提供某些服務的控制。
tcp_wrappers有一個TCP的守護進程叫作tcpd。以ssh為例,每當有ssh的連接請求時,tcpd即會截獲請求,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把這次連接原封不動的轉給真正的ssh進程,由ssh完成後續工作;如果這次連接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供ssh服務。

但tcp_wrappers仍存在有一定的局限性,Linux中的一個服務是否可以使用tcp_wrappers,取決於服務是否應用了libwrapped庫文件,系統中預設的一些服務,如sshd、portmap、sendmail、xinetd、vsftpd、tcpd等都可以使用tcp_wrappers。

我們可以通過以下命令來檢查系統中是否安裝有tcp_wrappers

$ rpm -q tcp_wrappers

如果輸出有關tcp_warppers的信息,則說明系統中已經安裝了tcp_warppers。

tcp_wrappers有兩個配置文件:/etc/hosts.allow/etc/hosts.deny
Linux對配置文件的執行是順序的,先讀取/etc/hosts.allow,一旦滿足就應用,而拋棄後面的配置,所以可以只設定/etc/hosts.allow文件,然後在/etc/hosts.deny中設置為所有電腦都不能登陸。
配置文件準從如下語法:

service:host(s) [:action]

其中,

  • service:服務名,如sshd、vsftpd、sednmail等
  • host(s):主機名或IP地址,可以有多個。
  • action:動作,符合條件後採取的動作。
    常見關鍵字有:
  • ALL:所有服務或所有IP。
  • ALL EXCEPT:除指定的以外所有的服務或IP。

例如:

ALL:ALL EXCEPT 192.168.123.8

表示除192.168.123.8以外的請求都會被允許或拒絕,取決於以上內容寫在哪個配置文件里。

附錄

/etc/ssh/sshd_config文件內容

文本 作用
Port 22 用來設置sshd監聽的介面,建議修改為5位數字以上的陌生數字埠
Protocol 2 設置使用的SSH協議版本為SSH1或SSH2,SSH1存在漏洞,建議不變
ListenAddress 0.0.0.0 用於設置sshd伺服器綁定的IP地址
HostKey /etc/ssh/ssh_host_dsa_key 用於設置伺服器密鑰文件的位置
KeyRegenerationInterval 1h 用於設置生成密鑰的周期。可以防止入侵者利用盜取的密鑰
ServerKeyBits 1024 用於定義密鑰長度
SyslogFacility AUTHPRIV 用於設置在記錄來自sshd的消息時,是否給出facility code
LogLevel INFO 用於設置log文件的消息級別
LoginGraceTime 2m 如果用戶登錄失敗,在切斷鏈接前。伺服器需要等待的時間。
PermitRootLogin no 是否允許root用戶登錄,建議設置為no
StrictModes yes 用於設置SSH在接受登陸請求之前是否檢查用戶根目錄和rhosts文件的許可權和屬主。建議設置為yes
RSAAuthentication no 設置是否開啟RSA密鑰認證,只針對SSH1,使用RSA密鑰登錄時,需要開啟
PubkeyAuthentication yes 設置是否使用公鑰驗證,使用公鑰驗證時,需要開啟
authorizedKeyFile .ssh/authorized_key 用於設置公鑰文件路徑,與PubkeyAuthenticatio配合使用
IgnoreUserKnownHosts no 用於設置SSH在進行RSAAuthentication安全認證時忽略用戶的$HOME/.ssh/known_hosts文件
IgnoreRhosts yes 用於設置驗證時是否使用~/.rhosts~/.shosts文件。
PassWordAuthentication yes 用於設置是否開啟密碼驗證
PermitEmptyPasswds no 用於設置是否允許用空密碼登錄系統,必須為no
ChallengeResponseAuthenthtication no 禁用s/key密碼
UsePAM no 是否使用PAM認證
X11Forwarding yes 用於設置是否允許X11轉發
PrintMotd yes 用於設置是否顯示歡迎登錄信息,建議加入警告信息以震懾攻擊者
PrintLastLog no 是否顯示上次登錄信息
Compression yes 是否壓縮命令
TCPKeepAlive yes 是否防止死鏈接,通過心跳包的方式來進行連接
UseDNS no 是否使用DNS反向解析
MaxStartups 允許幾個尚未登陸的連接,已建立的連接不算入其中。設置為5個可以防止對伺服器進行惡意連接
MaxAuthTries 3 設置最大失敗嘗試登陸次數,合理設置可以防禦撞庫攻擊
AllowUser <用戶名> 指定用戶允許通過遠程登錄訪問,多個用戶以空格分隔
AllowGroups <組名> 指定用戶組允許通過遠程登錄訪問,多個用戶組以空格分隔
DenyUsers <用戶名> 指定用戶禁止通過遠程登錄訪問,多個用戶以空格分隔
DenyGroups <組名> 指定用戶組禁止通過遠程登錄訪問,多個用戶組以空格分隔

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 接下來我們在 Centos7 系統下使用 yum 命令安裝 MySQL,需要註意的是 CentOS 7 版本中 MySQL資料庫已從預設的程式列表中移除,所以在安裝前我們需要先去官網下載 Yum 資源包: 使用yum安裝mysql: 啟動mysql,並查看mysql運行狀態: 安裝成功,找出mysq ...
  • 引言 具體不記得是在群里還是什麼地方有人問過,.NETCore有沒有漢化包,答案是有,目前微軟已經為我們提供了.NETCore多種語言的語言包。下麵看看如何安裝與使用吧。 本文介紹: 如何安裝這些下載的本地化版本。 如何修改Visual Studio安裝以使用其他語言。 先決條件 .NET Core ...
  • 簡介 LiteByte是一種輕量級的二進位數據交換格式。體積小巧、簡單易用是設計目標。主要用於解決前後臺數據傳輸量的問題。 作者:冰封百度(ZhangYu)設計的靈感來源於C# struct記憶體對齊後的緊湊格式。暫時只實現了C#版本。 特點 1.緊湊的二進位數據格式,支持變長整型,數據量小。2.用近 ...
  • 在上一篇文章abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之四(三十) 中我們實現了新增組織部門信息功能,不過還存在一些BUG,如下圖。“自動展開和子級”沒有顯示,“上級組織”下拉框中沒有數據顯示。今天我們來繼續完善組織部門信... ...
  • 16.1.1 進程與程式 ·程式 (program):通常為 binary program ,放置在儲存媒體中 (如硬碟、光碟、軟盤、磁帶等), 為實體文 件的型態存在; ·進程 (process):程式被觸發後,執行者的許可權與屬性、程式的程式代碼與所需數據等都會被載入記憶體中, 操作系統並給予這個內 ...
  • 電子產品要正常工作,就離不開電源。像手機、智能手環這種消費類電子,其充電介面都是標準的接插件,不存在接線的情況,更不會存在電源接反的情況。但是,在工業、自動化應用中,有很多產品是需要手動接線的,即使操作人員做事情再認真,也難免會出錯。如果把電源線接反了,可能會導致產品被燒掉。 圖1 - 手工接線 那 ...
  • 最近發現一個問題,ps命令輸出裡面進程狀態為S+的含義,網上好多文章都說是表明進程“位於在後臺進程組”。 例如下麵這個ps命令輸出說明: 但其實這是不對的,後面有加號說明進程是“位於在前臺進程組”。也就是進程可以使用鍵盤輸出。下麵做一個試驗證明這點: 首先,在終端一個會話執行一個sleep命令,讓其 ...
  • 有些時候,一些很好的開源產品有很好的功能特征,並且能夠提供很好的服務,下麵我進行簡要記錄,以後建立新的環境的時候,可以參考: 私有雲: Seafile: https://www.seafile.com/home/ Owncloud: https://owncloud.org/ 保持更新: 保持更新, ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...