伺服器安全篇【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,抵制弱密碼,從我做起~