sshd服務---暴力破解應對策略


sshd服務暴力破解步驟

sshd暴力破解方法

防止暴力破解調優

1. 變更默認端口

2. 變更root用戶

3. 日志監控-->防止暴力破解(fail2ban應用)

fail2ban詳解

在初始化的服務器中,20種ssh服務調優方法!

技術來源於生活!!!

===============================================

第三步:運行暴力破解程序,破解密碼

為了防止我們的密碼被暴力破解,服務器的密碼一定不要使用弱口令!!!而且在企業中,一般會要求半個月或多長時間變更一次密碼(公司中運維工程師會要求的)

弱口令:簡單的密碼,如下:

123456

awp@host

12HLad^

強口令:  ---> 密碼長度大於8位(最好不少於14位),且有字母 數字 和特殊符號混合構成的高復雜度的字符串

防止暴力破解調優

安裝sshd-server

查詢服務是否安裝:

rpm -qa | grep openssh-server

wps2DBD.tmp

若沒有安裝,可使用如下命令進行安裝:

yum -y install openssh* #安裝所有openssh軟件包

通過如下命令,查看openssh生成的文件列表:

rpm -ql openssh

1. 變更默認端口

sshd服務配置文件位於/etc/ssh目錄下!

ls /etc/ssh

wps2DBE.tmp

ssh_config ---> 客戶端配置文件

sshd_config  ---> 服務器端配置文件

我們修改服務器端文件(別人訪問我們時,我們是sshd服務器!!!)

vim /etc/ssh/sshd_config

修改默認端口配置:

#Port 22

改為:

Port 123

wps2DBF.tmp

保存退出,並重啟sshd服務:

service sshd restart

/etc/init.d/sshd restart

wps2DCF.tmp

查看監聽端口是否生效:

netstat -anlpt | grep ssh

wps2DD0.tmp

通過本機遠程連接測試!(本機遠程連接本機!)本機即使客戶端,也是服務端

ssh 192.168.31.222 -p 123 #指定端口遠程連接

wps2DD1.tmp

------------------------------

 

2. 掃描某IP地址開放端口

nmap 192.168.171.120

wps2DD3.tmp

這里我發現,當設置ssh開放端口在1000以內是掃描不出來的!!!而且若是指定到其他服務的端口上時,掃描到的服務名稱就是該服務的名稱!!!

wps2DD4.tmp

這就是為什么我們要修改端口的意思!!!讓別人不知道我們的哪個端口是sshd服務的端口!

------------------------------

編輯/etc/passwd文件,修改如下:

修改:root:x:0:0:root:/root:/bin/bash

為:root:x:0:0:root:/root:/bin/nologin #禁止root用戶登錄

修改:xg:x:500:500::/home/xg:/bin/bash

為:xg:x:0:0::/home/xg:/bin/bash #普通用戶提權

遠程連接測試:

root用戶連接測試

wps2DE5.tmp

xg用戶連接測試:

wps2DE6.tmp

另外,改下面內容后,xg用戶也是登錄不上的。只判斷UID是否為0,不查看用戶名的:

vim /etc/ssh/sshd_config

改:

#PermitRootLogin yes

為:

PermitRootLogin no

service sshd restart

測試:

ssh xg@192.168.31.222

xg@192.168.31.222's password:

Permission denied, please try again.

一般情況這個就可以解決了暴力破解的問題了。

到目前為止小的暴力破解已經解決了!!!

但是,雖然我們有效的降低了別人破解我們系統的可能性,但是,別人在攻擊時,會造成sshd服務器系統資源占用(可能導致癱瘓!)

為有效防止系統資源無辜被占用導致系統緩慢或癱瘓,我們可以使用防火牆!!!---->一般公司不使用防火牆.

我們還可以使用fail2ban軟件,實現一些規則的制定!!避免別人惡意攻擊服務器造成不必要的損失!

fail2ban  ---> 系統日志監控

通過匹配日志的錯誤信息(正則式匹配)執行相應的屏蔽動作(一般情況下是防火牆),而且可以發送e-mail通知系統管理員,很好 很實用 很強大!

#ban (bæn)禁令

簡單來說其功能就是防止暴力破解。工作的原理是通過分析一定時間內的相關服務日志,將滿足動作的相關IP利用iptables加入到dorp列表一定時間。

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH  --update --seconds 1800 --hitcount 5 -j DROP

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --set -j ACCEPT

兩種安裝方式

Way 1. yum安裝

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum -y install fail2ban

Way 2. 源碼安裝

下載地址:

http://www.fail2ban.org

盡量使用穩定版本(推薦0.8.14或0.9.4)

下載下來后,怎么安裝呢?!

第一步:上傳壓縮包到虛擬機,並解壓

tar -zxf fail2ban-0.8.14.tar.gz -C /usr/src

第二步:查看解壓目錄下的配置文檔

vim /usr/src/fail2ban-0.8.14/README.md

17 Installation:

18 -------------

19

20 **It is possible that Fail2ban is already packaged for your distribution.      In

21 this case, you should use it instead.**

22

23 Required:

24 - [Python >= 2.4](http://www.python.org)

25

26 Optional:

27 - [pyinotify >= 0.8.3](https://github.com/seb-m/pyinotify)

28   - Linux >= 2.6.13

29 - [gamin >= 0.0.21](http://www.gnome.org/~veillard/gamin)

30

31 To install, just do:

32

33     tar xvfj fail2ban-0.8.12.tar.bz2

34     cd fail2ban-0.8.12

35     python setup.py install

由配置文檔得知,安裝本源碼程序需要

1. Python版本為2.4或以上

2. pyinotify版本為0.8.3或以上

3. gamin版本為0.0.21或以上

4. Linux內核版本在2.6.13或以上

wps2DE7.tmp

查看依賴關系已滿足條件!

切換到源碼文檔目錄,進行安裝,執行如下命令:

python setup.py install

wps2DE8.tmp

安裝完成后,為了便於后期的管理操作,以及添加開機啟動等,我們需要將fail2ban啟動腳本復制到/etc/init.d目錄下. 根據/etc/init.d目錄下的文件特點,他們都存在chkconfig配置項,在源碼目錄中通過grep查找

grep chkconfig ./* -R --color #在當前目錄下,查找所有文件中,存在chkconfig字段的文件

cp files/redhat-initd /etc/init.d/fail2ban #拷貝啟動腳本到目標位置

chkconfig --add fail2ban #添加開機啟動項fail2ban

chkconfig --list fail2ban #查看

wps2DE9.tmp

------------------------------

2)

echo -e  “this is a world \n nest line” |grep word

3)打印除包含 math_pattern 行之外的所有的行

grep -v match_pattern file

4)統計文件或文本中包含匹配字符串的行數:

grep -c “test” filename

5)忽略大小寫

echo ”hello world” |grep -I ”HELLO”

------------------------------

/etc/fail2ban/fail2ban.conf #定義了fai2ban日志級別、日志位置及sock文件位置

/etc/fail2ban/filter.d      #條件文件夾,內含默認文件。過濾日志關鍵內容設置

/etc/fail2ban/jail.conf     #主要配置文件,模塊化。主要設置啟用ban動作的服務及動作閥值

# jail   [dʒeɪl]  監獄

/etc/rc.d/init.d/fail2ban   #啟動腳本文件

ignoreip = ipaddress/prefix #忽略監控ip

ignoreip = 127.0.0.1/8 10.10.10.0/24   #忽略的IP列表,不受設置限制  如果有二組以上用空白做為間隔

ignorecommand = #忽略命令

bantime = 600 #屏蔽時間,單位:秒(設置IP被封鎖的時間)

findtime = 600 #這個時間段內超過規定次數會被ban掉(設定多長時間內達到最大次數就解鎖。)

maxretry = 3 #在被ban之前,發生錯誤的最大次數

backend = auto #日志修改檢測機制(pyinotify、gamin、polling和auto這三種)

usedns = warn #yes/warn/no 處理方式

===================================================

[] #剩下的配置信息是模塊設置,發送信息等

格式如下:

[ssh-iptables] #ssh配置設置 #單個服務檢查設置,如設置bantime、findtime、maxretry和全局沖突,服務優先級大於全局設置。

enabled = false #是否啟用該模塊

filter = sshd #監控字符串 過濾規則filter的名字,對應filter.d目錄下的sshd.conf

action = iptables[name=SSH, port=ssh, protocol=tcp] #事件

#動作的相關參數,對應action.d/iptables.conf文件  SSH服務名稱 ssh端口好 protocol協議

logpath = /var/log/sshd.log  #日志文件路徑,檢測的系統的登陸日志文件。

# 這里要寫sshd服務日志文件。

# 默認為logpath  = /var/log/sshd.log ,可在/etc/rsyslog.conf文件中查看

# ----- /etc/ssh/sshd_config -----

# 36 #SyslogFacility AUTH

# 37 SyslogFacility AUTHPRIV

# ----- /etc/rsyslog.conf -----

# 44 # The authpriv file has restricted access.

# 45 authpriv.*                                              /var/log/secure

maxretry = 5  #最大錯誤次數

#5分鍾內3次密碼驗證失敗,禁止用戶IP訪問主機1小時。 配置如下

bantime  = 3600   #禁止用戶IP訪問主機1小時

findtime  = 300    #在5分鍾內內出現規定次數就開始工作

maxretry = 3    #3次密碼驗證失敗

wps2E09.tmp

保存退出后,重啟fail2ban服務

/etc/init.d/fail2ban restart #重啟服務

ssh遠程連接,測試是否生效

ssh 192.168.31.222 -p 123 #故意三次輸錯密碼后,重新連接!

[root@xiaogan120 ~]# ssh 192.168.31.222 -p 123

ssh: connect to host 192.168.31.222 port 123: Connection refused

wps2E1A.tmp

1. 查看防火牆規則:

iptables -L |tail -4

2. 查看fail2ban狀態:

fail2ban-client status

3. 查看fail2ban詳情:

fail2ban-client status sshd

4. 查看fail2ban日志文件:

tail /var/log/fail2ban.log

 

[root@xiaogan120 ~]# iptables -L |tail -4

Chain fail2ban-SSHD (1 references)

target     prot opt source               destination        

REJECT     all  --  192.168.31.222       anywhere            reject-with icmp-port-unreachable

RETURN     all  --  anywhere             anywhere           

[root@xiaogan120 ~]# fail2ban-client status

Status

|- Number of jail: 1

`- Jail list: sshd

[root@xiaogan120 ~]# fail2ban-client status sshd

Status for the jail: sshd

|- filter

|  |- File list: /var/log/secure

|  |- Currently failed: 0

|  `- Total failed: 3

`- action

   |- Currently banned: 1

   |  `- IP list: 192.168.31.222

   `- Total banned: 1

[root@xiaogan120 ~]# tail /var/log/fail2ban.log

2016-09-19 18:12:51,624 fail2ban.server [1629]: INFO    Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.14

2016-09-19 18:12:51,624 fail2ban.jail   [1629]: INFO    Creating new jail 'sshd'

2016-09-19 18:12:51,624 fail2ban.jail   [1629]: INFO    Jail 'sshd' uses poller

2016-09-19 18:12:51,636 fail2ban.jail   [1629]: INFO    Initiated 'polling' backend

2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO    Added logfile = /var/log/secure

2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO    Set maxRetry = 3

2016-09-19 18:12:51,638 fail2ban.filter [1629]: INFO    Set findtime = 300

2016-09-19 18:12:51,639 fail2ban.actions[1629]: INFO    Set banTime = 600

2016-09-19 18:12:51,724 fail2ban.jail   [1629]: INFO    Jail 'sshd' started

2016-09-19 18:12:52,756 fail2ban.actions[1629]: WARNING [sshd] Ban 192.168.31.222

[root@xiaogan120 ~]#

 

2. 等待超過時間限制

拓展配置文件:

0.9.4配置文件

ls /etc/fail2ban/

[root@xiaogan121 fail2ban-0.9.4]# ls /etc/fail2ban/

action.d       filter.d   paths-common.conf  paths-freebsd.conf

fail2ban.conf  jail.conf  paths-debian.conf  paths-opensuse.conf

fail2ban.d     jail.d     paths-fedora.conf  paths-osx.conf

[DEFAULT]

bantime  = 3600       禁止此用戶IP訪問主機1小時

findtime  = 300在5分鍾內內出現規定次數就實施動作,默認時間單位:秒

maxretry = 3密碼驗證失敗次數最大值為3

filter = sshd

protocol = tcp協議為TCP

action = iptables[name=SSH, port=ssh, protocol=tcp]  所采用的工作,按照名字可在action.d目錄下找到

[sshd]

port    = ssh

logpath = /var/log/secure  檢測的系統的登陸日志文件,這里要寫sshd服務日志文件的路徑

最后保存設置

 

第二步:上傳公有密鑰到服務器

ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.171.121

wps2E1D.tmp

第三步:嘗試遠程連接服務器

ssh 192.168.171.121

wps2E1E.tmp

看到了么?沒有輸入密碼,就直接登錄了!!!

-2  強制scp命令使用協議ssh2 

-4  強制scp命令只使用IPv4尋址 

-6  強制scp命令只使用IPv6尋址 

-B  使用批處理模式(傳輸過程中不詢問傳輸口令或短語) 

-C  允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能) 

-p 保留原文件的修改時間,訪問時間和訪問權限。 

-q  不顯示傳輸進度條。 

-r  遞歸復制整個目錄。 

-v 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。  

-c cipher  以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。  

-F ssh_config  指定一個替代的ssh配置文件,此參數直接傳遞給ssh。 

-i identity_file  從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。   

-l limit  限定用戶所能使用的帶寬,以Kbit/s為單位。    

-o ssh_option  如果習慣於使用ssh_config(5)中的參數傳遞方式,  

-P port  注意是大寫的P, port是指定數據傳輸用到的端口號  

-S program  指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。

4.使用實例:

scp命令的實際應用概述: 

從本地服務器復制到遠程服務器:

(1) 復制文件:

命令格式:

1). scp local_file remote_username@remote_ip:remote_folder 

或者

2). scp local_file remote_username@remote_ip:remote_file 

或者

3). scp local_file remote_ip:remote_folder 

或者

4). scp local_file remote_ip:remote_file 

第1,2個指定了用戶名,命令執行后需要輸入用戶密碼,第1個僅指定了遠程的目錄,文件名字不變,第2個指定了文件名 

第3,4個沒有指定用戶名,命令執行后需要輸入用戶名和密碼,第3個僅指定了遠程的目錄,文件名字不變,第4個指定了文件名  

(2) 復制目錄:

命令格式:

1). scp -r local_folder remote_username@remote_ip:remote_folder

或者

2). scp -r local_folder remote_ip:remote_folder

第1個指定了用戶名,命令執行后需要輸入用戶密碼; 

第2個沒有指定用戶名,命令執行后需要輸入用戶名和密碼;硬盤I/O非常高,而scp基本不影響系統正常使用。

從遠程服務器復制到本地服務器:

從遠程復制到本地的scp命令與上面的命令雷同,只要將從本地復制到遠程的命令后面2個參數互換順序就行了。

實例:

scp root@192.168.171.121:/root/fail2ban-0.9.4.tar.gz  /root

#已root用戶身份,從192.168.171.121拷貝/root/fail2ban-0.9.4.tar.gz文件到/root目錄下!

wps2E1F.tmp

scp /root/sshd_config 192.168.171.121:/root

#拷貝/root/sshd_config文件到192.168.171.121地址/root目錄下

#############################################

20種調優方式--->剛建好的服務器?!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM