1. 程式人生 > >伺服器安全篇【ssh安全】

伺服器安全篇【ssh安全】

                     

前言

中午吃飯時才注意到騰訊雲給我發了很多安全提示(慘無人性啊,一元一個月學生機都有人入侵,根據提示ssh埠再被爆破),上伺服器看了下history,記錄被清除了,根據騰訊的安全提示找到了相應可疑病毒檔案,本地虛擬機器做了分析這應該是一個十字元病毒,沒看到可疑正在執行程序。虧我還是搞安全的,啪啪打臉,qwq
本來也就是一個測試機,索性直接重置系統了(如果是有各種服務的站點就要頭疼了),這裡對新重置的ubuntu16.04主機進行一個ssh的安全配置,供個人雲主機使用者參考~

更換ssh埠

或許你會說,這毫無意義,黑客依然能夠發現我的埠,但是,你得注意到,除非你是被盯上了,否則批量自動化指令碼在網際網路上的爆破攻擊,他們不會有耐心去掃描1-65535這麼多埠,只會掃描一些常用的埠,將ssh埠更換成30000-40000之間是一個非常棒的做法~

開啟配置檔案

sudo vi /etc/ssh/sshd_config
  • 1

找到下面配置

Port 22
  • 1

將22更改為自己新的埠後彆著急,這個時候前往自己雲伺服器的控制檯,找到安全組,新增允許出入得埠,如下圖:

這裡寫圖片描述
這裡寫圖片描述
添加了埠之後對ssh進行重啟操作

sudo service ssh restart
  • 1

效果:
這裡寫圖片描述
這裡寫圖片描述

管理ssh使用者

很多ssh爆破問題都出在root使用者身上,也許你認為你的密碼強度差不多足夠了,但不排除依舊被黑客給爆破出來,所以我們需要一個新的使用者,去管理系統,比如這樣:(ps:指令的具體引數操作自行百度)

    #建立使用者    useradd userA  //建立使用者userA    useradd –e 12
/30/2017 userB  //建立userB,指定有效期2017-12-30到期    useradd –u 600 userC  //建立userC指定使用者id為600    #給與密碼    passwd user1   //無密碼使用者不能使用此命令。    #給與可以切換到root的許可權    usermod –g users sudo  //將使用者 user1 加入到 sudo組中    usermod –d /users/us1 user1  //將使用者 user1 目錄改為/users/us1    #騰訊雲的初始ubuntu使用者就是這樣許可權良好的使用者,但是使用者名稱由於使用廣泛依舊容易被爆破,我們可以對其更改使用者名稱為非常用使用者名稱比如233wahaha
    usermod –l 233wahaha ubuntu
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

這樣我們就可以在登陸上,如233wahaha使用者之後使用

sudo -i
  • 1

切換到root進行其他操作

下面對root進行拒絕登陸設定

sudo vi /etc/ssh/sshd_config#找到關鍵程式碼# Authentication:  LoginGraceTime 120   PermitRootLogin yes  StrictModes yes#更改為# Authentication:  LoginGraceTime 120  PermitRootLogin prohibit-password    StrictModes yes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

拒絕空密碼登陸

PermitEmptyPasswords no
  • 1

連線數及配置許可權管理

sudo vi /etc/ssh/sshd_config
  • 1

找到:

#MaxStartups 10:30:60
  • 1

更改為:

MaxStartups 10   #10根據自己的需要更改,代表最多同時登陸ssh數量
  • 1

可以注意到我們的很多操作都是在/etc/ssh/sshd_config進行的,所以對其修改許可權我們必須要做限制

chmod 744 /etc/ssh/sshd_config  //對所有非root使用者設定只讀許可權,防止非授權使用者修改sshd 服務的安全設定
  • 1

黑名單白名單操作

hosts.allow和 hosts.deny

伺服器預設接受所有的請求連線,這是非常危險的,阻止或允許應用服務僅對某些主機開放,給系統在增加一道安全屏障。這部分設定共涉計到/etc/目錄下的兩個檔案:hosts.allow和 hosts.deny。

將那些明確允許的請求新增到/etc/hosts.allow中。如系統僅允許IP地址為192.168.0.15和10.0.0.11的主機使用 sshd服務,則新增如下內容:

sshd:192.168.0.15 10.0.0.11
  • 1

將需要禁止使用的資訊新增到/etc/hosts.deny中。如對除了在hosts.allow列表中明確允許使用sshd的使用者外,所有其他使用者都禁止使用sshd服務,則新增如下內容到hosts.deny檔案中:

sshd:All
  • 1

注意:系統對上述兩個檔案的判斷順序是先檢查hosts.allow檔案再檢視hosts.deny檔案,因此一個使用者在hosts.allow允許使用網路資源,而同時在hosts.deny中禁止使用該網路資源,在這種情況下系統優先選擇使用hosts.allow配置,允許使用者使用該網路資源。

使用DenyHosts

對這裡可以有更多的利用點,這裡介紹一個freebuf上看到的工具,原文點這裡

使用DenyHosts軟體來設定,其下載地址:

(1)安裝cdDenyHosts

# tar-zxvf DenyHosts-2.6.tar.gz # cdDenyHosts-2.6 # pythonsetup.py install
  • 1

預設是安裝到/usr/share/denyhosts目錄的。

(2)配置cdDenyHosts

# cd/usr/share/denyhosts/ # cpdenyhosts.cfg-dist denyhosts.cfg # videnyhosts.cfg
  • 1
 

PURGE_DENY= 50m #過多久後清除已阻止IP
  HOSTS_DENY= /etc/hosts.deny #將阻止IP寫入到hosts.deny
  BLOCK_SERVICE= sshd #阻止服務名
  DENY_THRESHOLD_INVALID= 1 #允許無效使用者登入失敗的次數
  DENY_THRESHOLD_VALID= 10 #允許普通使用者登入失敗的次數
  DENY_THRESHOLD_ROOT= 5 #允許root登入失敗的次數
  WORK_DIR= /usr/local/share/denyhosts/data #將deny的host或ip紀錄到Work_dir中
  DENY_THRESHOLD_RESTRICTED= 1 #設定 deny host 寫入到該資料夾
  LOCK_FILE= /var/lock/subsys/denyhosts #將DenyHOts啟動的pid紀錄到LOCK_FILE中,已確保服務正確啟動,防止同時啟動多個服務。
  HOSTNAME_LOOKUP=NO#是否做域名反解
  ADMIN_EMAIL= #設定管理員郵件地址
  DAEMON_LOG= /var/log/denyhosts #自己的日誌檔案
  DAEMON_PURGE= 10m #該項與PURGE_DENY 設定成一樣,也是清除hosts.deniedssh 使用者的時間。

(3)設定啟動指令碼

# cpdaemon-control-dist daemon-control # chownroot daemon-control # chmod700 daemon-control
  • 1

完了之後執行daemon-contronstart就可以了。

#./daemon-control start
  • 1

如果要使DenyHosts每次重起後自動啟動還需做如下設定:

# ln -s/usr/share/denyhosts/daemon-control /etc/init.d/denyhosts#chkconfig --add denyhosts #chkconfig denyhosts on#service denyhosts start
  • 1
  • 2

可以看看/etc/hosts.deny內是否有禁止的IP,有的話說明已經成功了。

雙因子登陸

(1)什麼是雙因子認證
在這種多重認證的系統中,使用者需要通過兩種不同的認證程式:提供他們知道的資訊(如使用者名稱/密碼),再借助其他工具提供使用者所不知道的資訊(如用手機生成的一次性密碼)。這種組合方式常叫做雙因子認證或者兩階段驗證。
(2)怎麼去簡單實現雙因子認證登陸ssh
提到雙因子登陸,或許大家知道的更多的是Google身份金鑰管理器,但由於不能備份的原因,我是拒絕使用的,一但手機遺失,你的伺服器就永遠也上不去了
這裡推薦Linux中國17年開發的一個微信小程式,運維密碼
釋出的具體介紹,點這裡
詳細的一些操作小程式上有介紹,不多介紹了~

總結

上述操作已經可以遮蔽掉普通站點的絕對多數針對ssh的攻擊,對於大規模dos,我只能說能有價值讓黑產去dos的,應該不差錢,做個cdn去吧

最後一句話,安全做的再好,也抵不住密碼123456,抵制弱密碼,從我做起~