被黑了,SSH服務須要大整頓

    被黑經歷:有一天下午,後臺全部網址所有被跳轉,第一反應就是服務器被黑了。首先到監測站點被篡改的腳本日誌查看,檢查主節點服務器上代碼的完整性,發現index.php文件有被竄改的痕跡,因此致使跳轉。xshell遠程鏈接服務器,普通用戶連不了,用root發現連不上密碼顯示錯誤,很明顯,被黑後密碼被篡改,xxx者想徹底控制這臺服務器,還好其它節點作了ssh鏈接免密機制,連進去沒多久就被踢出終端鏈接了,普通用戶的/etc/shadow和/etc/passwd都被刪掉了,防火牆限制22端口的IP段被刪掉了。php

    

 問題解決方法:linux

  • 1.經過內網其它節點ssh遠程鏈接主節點服務器,改掉默認端口22,改爲xxxx。nginx

  • 2.改掉root用戶密碼,添加好普通用戶,
    算法

  • 3.加上防火牆限制IP的固定端口訪問。重啓防火牆shell

  • 4.爲了防止有異常程序或xxx在運行,重啓服務器(主節點沒跑什麼服務,就nginx,讀者本身斟酌)windows





  •   爲了防止下次再出現相似的問題,須要增強ssh服務防禦和優化,下面是針對ssh服務的說明以及參數詳解和配置實踐。
    安全

基本大綱:
bash

  1.SSH服務協議說明服務器

  2.SSH配置文件相關參數詳細說明網絡

  3.經常使用的SSH服務端遠程登陸配置與實踐

  4.更高級的SSH安全策略

  5.ssh服務安全增強的建議




一: SSH服務協議說明


    SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網絡工做小組(Network Working Group )制定;在進行數據傳輸以前,SSH先對聯機數據包經過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全。

    SSH是專爲遠程登陸會話和其餘網絡服務提供的安全性協議。利用 SSH 協議能夠有效的防止遠程管理過程當中的信息泄露問題,在當前的生產環境運維工做中,絕大多數企業廣泛採用SSH協議服務來代替傳統的不安全的遠程聯機服務軟件,如telnet(23端口,非加密的)等。

    在默認狀態下,SSH服務主要提供兩個服務功能:

  • 一是提供相似telnet遠程聯機服務器的服務,即上面提到的SSH服務。

  • 另外一個是相似FTP服務的sftp-server,藉助SSH協議來傳輸數據的.提供更安全的SFTP服務(vsftp,proftp)。

    windows服務器的默認遠程管理端口是3389,管理員用戶是administrator。linux的管理用戶默認是root。普通用戶默認有不少,遠程鏈接默認端口爲22。有IT經驗的人都知道,更況且是×××了,因此爲了減小沒必要要的風險,爲了系統安全,必須隱藏或更改上述默認配置。




二:SSH配置文件相關參數詳細說明

1)SSH客戶端配置文件

/etc/ssh/ssh——config

#配置文件概要

Host *                                         #選項「Host」只對可以匹配後面字串的計算機有效。「*」表示全部的計算機。

ForwardAgent no                      #設置鏈接是否通過驗證代理(若是存在)轉發給遠程計算機。

ForwardX11 no                          #設置X11鏈接是否被自動重定向到安全的通道和顯示集(DISPLAY set)

RhostsAuthentication n            #設置是否使用基於rhosts的安全驗證。

RhostsRSAAuthentication no   #設置是否使用用RSA算法的基於rhosts的安全驗證。

RSAAuthentication yes             #設置是否使用RSA算法進行安全驗證。

PasswordAuthentication yes    #設置是否使用口令驗證。

FallBackToRsh no                     #設置若是用ssh鏈接出現錯誤是否自動使用rsh。

UseRsh no                               #設置是否在這臺計算機上使用「rlogin/rsh」。

BatchMode no                        #若是設爲「yes」,passphrase/password(交互式輸入口令)的提示將被禁止。當不能交互式輸入口令的時候,這個選項對腳本文件和批處理任務十分有用。

CheckHostIP yes                      #設置ssh是否查看鏈接到服務器的主機的IP地址以防止DNS欺騙。建議設置爲「yes」。

StrictHostKeyChecking no      #若是設置成「yes」,ssh就不會自動把計算機的密匙加入「$HOME/.ssh/known_hosts」文件,而且一旦計算機的密匙發生了變化,就拒絕鏈接。

IdentityFile ~/.ssh/identity     #設置從哪一個文件讀取用戶的RSA安全驗證標識。

Port 22                                    #設置鏈接到遠程主機的端口。

Cipher blowfish                      #設置加密用的密碼。

EscapeChar ~                         #設置escape字符。


2)SSH服務端配置文件詳解

/etc/ssh/sshd_config

#配置文件概要

Port 22          # SSH 預設使用 22 這個 port,最好是用別的 port !

Protocol 2,1  # 選擇的 SSH 協議版本,能夠是 1 也能夠是 2 ,若是要同時支持二者,就必需要使用 2,1 這個分隔了!


ListenAddress 0.0.0.0        

#監聽的主機適配卡!舉個例子來講,若是您有兩個 IP,分別是 192.168.0.100 及 192.168.2.20 ,那麼只想要開放 192.168.0.100 時,

#就能夠寫如同下面的樣式:ListenAddress 192.168.0.100 只監聽來自 192.168.0.100 這個 IP 的SSH聯機。若是不使用設定的話,則預設全部接口均接受 SSH

PidFile /var/run/sshd.pid  # 能夠放置 SSHD 這個 PID 的檔案!左列爲默認值

LoginGraceTime 600           # 當使用者連上 SSH server 以後,會出現輸入密碼的畫面,在該畫面中,在多久時間內沒有成功連上 SSH server ,就斷線!時間爲秒!

Compression yes              # 是否可使用壓縮指令?

HostKey /etc/ssh/ssh_host_key          # SSH version 1 使用的私鑰

HostKey /etc/ssh/ssh_host_rsa_key   # SSH version 2 使用的 RSA 私鑰

HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私鑰

KeyRegenerationInterval 3600       # 由前面聯機的說明能夠知道, version 1 會使用 server 的 Public Key ,每隔一段時間來從新創建一次!時間爲秒!

ServerKeyBits 768                         # Server key 的長度!

SyslogFacility AUTH                        # 當有人使用 SSH 登入系統的時候,SSH會記錄信息

LogLevel INFO                            # 登陸記錄的等級---》所有

PermitRootLogin no                     # 是否容許 root 登入!預設是容許的,可是建議設定成 no!

UserLogin no                         # 在 SSH 底下原本就不接受 login 這個程序的登入!

StrictModes yes                   # 當使用者的 host key 改變以後,Server 就不接受聯機

RSAAuthentication yes                 # 是否使用純的 RSA 認證!?僅針對 version 1 !

PubkeyAuthentication yes              # 是否容許 Public Key ?只有 version 2

AuthorizedKeysFile .ssh/authorized_keys         #設定若要使用不須要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名!

RhostsAuthentication no          # 本機系統不使用 .rhosts , .rhosts 不安全!

IgnoreRhosts yes              # 是否取消使用 ~/.ssh/.rhosts 來作爲認證!

RhostsRSAAuthentication no         # 針對 version 1 ,使用 rhosts 檔案在/etc/hosts.equiv配合 RSA 演算方式來進行認證!

HostbasedAuthentication no         # 這個項目與上面的項目相似,不過是給 version 2 使用的!

IgnoreUserKnownHosts no      # 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容

PasswordAuthentication yes         # 密碼驗證固然是須要的!

PermitEmptyPasswords no      # 上面那一項若是設定爲 yes 的話,這一項就最好設定爲 no ,這個項目在是否容許以空的密碼登入!

ChallengeResponseAuthentication yes         # 挑戰任何的密碼認證!因此,任何 login.conf規定的認證方式,都可適用!

PAMAuthenticationViaKbdInt yes         # 是否啓用其它的 PAM 模塊!啓用這個模塊將會致使 PasswordAuthentication 設定失效!


#與Kerberos 有關的參數設定!底下不用設定

  KerberosAuthentication no

  KerberosOrLocalPasswd yes

  KerberosTicketCleanup yes

  KerberosTgtPassing no


#有關在 X-Window 底下使用的相關設定

  X11Forwarding yes

  X11DisplayOffset 10

  X11UseLocalhost yes


PrintMotd no                        # 登入後是否顯示出一些信息呢?例如上次登入的時間、地點等,預設是 yes ,可是,若是爲了安全,能夠考慮改成 no !

PrintLastLog yes       # 顯示上次登入的信息!能夠啊!預設也是 yes !

KeepAlive yes         # 通常而言,若是設定這項目的話,那麼 SSH Server 會傳送KeepAlive 的訊息給 Client 端,以確保二者的聯機正常!在這個狀況下,任何一端死掉後, SSH 能夠馬上知道!而不會有殭屍程序的發生!

UsePrivilegeSeparation yes        # 使用者的權限設定項目!

MaxStartups 10            # 同時容許幾個還沒有登入的聯機畫面?

DenyUsers *               # 設定受抵擋的使用者名稱




三:經常使用的SSH服務端遠程登陸配置與實踐

    配置文件 /ect/ssh/sshd_config

    #經常使用參數:

    Port                                  # 可修改ssh訪問端口,默認爲22。默認在本機的全部網絡接口上監聽。端口範圍:0~65535,不能與已有的服務器端口衝突

    PermitEmptyPasswords   #是否容許密碼爲空的用戶遠程登陸。默認爲"no"

    PermitRootLogin             #是否容許ssh遠程登陸root賬號,建議爲no

    ClientAliveInterval 0        #客戶端鏈接數作限制,根據需求設置

    UseDNS                          #指定sshd是否應該對遠程主機名進行方向解析,以檢查此主機名是否與其IP地址真實對應。默認值爲"yes"。我的建議改爲no,不然可能會致使ssh鏈接很慢

    GSSAPIAuthentication no             #解決Linux之間使用SSH遠程鏈接慢的問題

    #限制可登陸用戶的辦法以下:

    AllowUsers user1 user2 user3        #容許ssh登陸用戶

    DenyUsers             #禁止ssh登錄用戶

    AllowGroups         #容許ssh登陸用戶組

    DenyGroups         #禁止ssh登錄用戶組


#舒適提示:這裏用虛擬機作測試,以避免參數設置有誤,鏈接不上。能夠上真實虛擬機修改

[root@localhost ssh]# cp sshd_config sshd_config$(date +%F)
[root@localhost ssh]# cat sshd_config
Port 52168                          #鏈接端口改成52168
PermitRootLogin no                  #不容許ssh遠程登陸root賬號
PermitEmptyPasswords no             #不容許密碼爲空的用戶遠程登陸
UseDNS no                           #不進行解析
GSSAPIAuthentication no             #解決Linux之間使用SSH遠程鏈接慢的問題
allowusers ywxi@192.168.1.11        #容許ywxi用戶使用本機內網地址連接
denyusers  ywxitest@192.168.1.11    #禁止ywxitest用戶使用本機內網地址鏈接
[root@localhost ssh]# useradd ywxi    #建立用戶,用來測試
[root@localhost ssh]# useradd ywxitest
[root@localhost ssh]# passwd ywxi    #給ywxi用戶設置密碼,暫時不給ywxitest用戶設置
[root@localhost ssh]# ifconfig |grep 'inet addr'    #虛擬機IP地址
          inet addr:192.168.1.8  Bcast:192.168.1.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0
[root@localhost ssh]# /etc/init.d/sshd restart        #重啓服務,使SSH服務端配置生效
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@localhost ssh]# grep 52168 /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 52168 -j ACCEPT    #添加防火牆規則容許52168端口開放
[root@localhost ssh]# /etc/init.d/iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]


如下是客戶端用CRT工具經過sshd服務遠程鏈接虛擬主機過程:

image.png

image.png

image.png


用root用戶鏈接,一直會提示密碼驗證失敗

image.png

修改配置PermitRootLogin yes 改成yes,注意有allowusers限制用戶時須要把root用戶也容許

修改後,重啓sshd服務設置好端口後,root用戶便可鏈接

image.png




四:更高級的SSH安全策略


限制用戶登陸IP的方法有兩種;

1)修改/etc/hosts.allow和/etc/hosts.deny 這兩個文件,把須要經過的IP寫在/etc/hosts.allow 文件裏
[root@localhost ~]# cat /etc/hosts.allow 
sshd:192.168.1.11:allow
[root@localhost ~]# cat /etc/hosts.deny 
sshd:ALL
[root@localhost ~]# /etc/init.d/sshd restart     #重啓服務使配置生效
2)修改/etc/ssh/sshd_config文件
[root@localhost ~]# cat /etc/ssh/sshd_config 
allowusers ywxi@192.168.1.11
allowusers root@192.168.1.11
denyusers  ywxitest@192.168.1.11
[root@localhost ~]# /etc/init.d/sshd restart     #重啓服務使配置生效


更改SSH監聽的IP,使其監聽內網IP段或指定ip;

1)更改SSH監聽的IP,使其監聽內網IP段
[root@localhost ssh]# cat sshd_config|grep Listen
ListenAddress 192.168.1.8:52168
2)經過防火牆限制僅能使用內網IP鏈接此服務器。限制命令以下
iptables -I INPUT -p -tcp --dport 52168 -s 192.168.1.0/24 -j ACCEPT
3)經過撥號到×××服務器,而後從局域網訪問這些服務器,提高安全性。


五:ssh服務安全增強的建議(僅供參考,工做中根據需求來就好行)

     一、不要使用默認端口

     二、禁止使用protocol version 1

     三、限制可登陸用戶

     四、設定空閒會話超時時長

     五、利用防火牆設置ssh訪問策略

     六、僅監聽特定的IP地址

     七、基於口令認證時,使用強密碼策略

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

     八、使用基於密鑰的認證

     九、禁止使用空密碼

     十、禁止root用戶直接登陸

     十一、限制ssh的訪問頻度和併發在線數

     十二、作好日誌,常常分析

     1三、鎖死sshd服務的配置文件,防止篡改,修改鎖文件命令

相關文章
相關標籤/搜索