1. 程式人生 > >linux服務篇-sshd服務管理與防止暴力破解

linux服務篇-sshd服務管理與防止暴力破解

sshd服務管理與防止暴力破解

  • sshd服務安裝-ssh命令使用方法
  • sshd服務配置和管理
  • 防止sshd服務暴力破解的幾種方法

(一)sshd服務安裝-ssh命令使用方法

1.介紹

SSH 協議【安全外殼協議】為 Secure Shell 的縮寫。SSH 為建立在應用層和傳輸層基礎上的安全協議。sshd服務使用SSH協議可以用來進行遠端控制, 或在計算機之間傳送檔案,相比較之前用telnet方式來傳輸檔案要安全很多,因為telnet使用明文傳輸,是加密傳輸。

題外話:如果要遠端操作linux伺服器則sshd是一個不錯的選擇,因為在傳輸過程中對資料進行了加密處理,一句話:安全。

2.軟體的安裝

由於SSH服務c/s服務模式,所以需要安裝以下幾個軟體包:

openssh-5.3p1-114.el6_7.x86_64:包含OpenSSH伺服器及客戶端需要的核心檔案
openssh-clients-5.3p1-114.el6_7.x86_64:OpenSSH客戶端軟體包
openssh-server-5.3p1-114.el6_7.x86_64:OpenSSH伺服器軟體包
openssh-askpass-5.3p1-114.el6_7.x86_64:支援對話方塊視窗的顯示,是一個基於X 系統的密碼診斷工具

這四個軟體包在我們的RHEL映象軟體安裝包裡有。

2.1檢視我的光碟機掛載的位置

[root@localhost ~]# df -Th
Filesystem     Type     Size  Used Avail Use% Mounted on
/dev/sda3      ext4     4.9G  2.0G  2.7G  43% /
tmpfs          tmpfs    491M     0  491M   0% /dev/shm
/dev/sda1      ext4     194M   29M  155M  16% /boot
/dev/sr0       iso9660  3.6G  3.6G     0 100% /mnt

2.2 可以檢視到這個四個軟體包都在光碟機中,如下操作顯示:

[[email protected] ~]# cd /mnt/Packages/
[[email protected] Packages]# ls openssh*
openssh-5.3p1-94.el6.x86_64.rpm          
openssh-clients-5.3p1-94.el6.x86_64.rpm
openssh-askpass-5.3p1-94.el6.x86_64.rpm  
openssh-server-5.3p1-94.el6.x86_64.rpm

找到軟體包存放的位置之後,接下來我們來安裝軟體包,安裝方式有兩種,分別是:

  • 通過yum源的方式安裝
  • 通過rpm方式安裝

2.3下面我將通過yum的方式安裝

[[email protected] Packages]# yum install openssh openssh-clients openssh-server openssh-askpass
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
………………中間部分省略………………
Installed:
  openssh-askpass.x86_64 0:5.3p1-122.el6                                                                                              

Updated:
  openssh.x86_64 0:5.3p1-122.el6         openssh-clients.x86_64 0:5.3p1-122.el6         openssh-server.x86_64 0:5.3p1-122.el6        

Complete!

OK,軟體安裝成功,接下來檢視一下安裝的軟體的生成的檔案:

[root@localhost Packages]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ssh-keysign
………………後面部分省略………………

2.4 openssh配置檔案的介紹

常用的配置檔案主要有兩個,存放位置位於/etc/ssh/ssh_config和/etc/sshd_config:

  • ssh_config為客戶端配置檔案
  • sshd_config為伺服器端配置檔案

2.5 服務的啟動與關閉操作

格式:[[email protected] /]# service sshd restart/stop/start/status
sshd服務的啟動、關閉、重啟、檢視服務狀態命令如下:

接下來開啟sshd服務:

[[email protected] /]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

設定開機自啟動

[root@localhost /]# chkconfig sshd on
[root@localhost /]# chkconfig --list sshd
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

以上可以很清楚的看到第三啟動級別和第五啟動級別是開機自啟動狀態,一般情況下我們在遠端登入伺服器時是第三啟動級別。

切記:設定sshd開機自啟動非常重要,一定設定開機自啟動,原因就在於如果哪天一天機房的伺服器斷電了,然後重啟,你要遠端登入伺服器如果沒有設定開機自啟動的話你就必須得跑到機房進行操作伺服器了,嘿嘿,重要吧?

3. 如何遠端連線伺服器

遠端連線伺服器兩種方式:

  • ssh [遠端主機使用者名稱] @[遠端伺服器主機名或IP地址]
  • ssh -l [遠端主機使用者名稱] [遠端伺服器主機名或IP 地址]

ssh命令的引數詳解:
-1:強制使用ssh協議版本1;
-2:強制使用ssh協議版本2;
-4:強制使用IPv4地址;
-6:強制使用IPv6地址;
-A:開啟認證代理連線轉發功能;
-a:關閉認證代理連線轉發功能;
-b:使用本機指定地址作為對應連線的源ip地址;
-F:指定ssh指令的配置檔案;
-f:後臺執行ssh指令;
-i:指定身份檔案;
-l:指定連線遠端伺服器登入使用者名稱;
-N:不執行遠端指令;
-p:指定遠端伺服器上的埠;
-X:開啟X11轉發功能;
-y:開啟信任X11轉發功能。

來自: http://man.linuxde.net/ssh

3.1 ssh [遠端主機使用者名稱] @[遠端伺服器主機名或IP地址]

3.1.1 如果用root程序登入遠端主機可以這樣:
[[email protected] ~]# ssh 192.168.0.75
The authenticity of host '192.168.0.75 (192.168.0.75)' can't be established.
RSA key fingerprint is d7:2c:9a:b4:d5:6f:a8:6f:62:54:5f:0a:5f:cb:73:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.75' (RSA) to the list of known hosts.
[email protected]192.168.0.75's password: 
Last login: Sat Jul 15 23:23:21 2017 from 192.168.0.2

第一次登入伺服器時系統沒有儲存遠端主機的資訊,為了確認該主機身份會提示使用者是否繼續連線,輸入yes 後登入,這時系統會將遠端伺服器資訊寫入使用者主目錄下的$HOME/.ssh/known_hosts檔案中,下次再進行登入時因為儲存有該主機資訊就不會再提示了,可以檢視一下這個檔案內容如下:

[root@localhost ~]# cat ~/.ssh/known_hosts 
192.168.0.75 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAo4AZ3HlPwI8GU9GtggxuwN4eKkheTUV0wT7oPsVyJmKXsv65u083RJ9694QFAiu9jRkj4mVUoFGfeMwf/BDw36E2Nl1vGoYbiRC5z5gpuyb/GZIEnFhBg0omMJnAnGFmPsRf5SG+B53EkBQNVaj8ajCexri9hFlHVgjSzDopgNOM0HFNuTVGYprfkqthH6xq0iDKo8gnbocLxf+PteAXPfx72jACBK8uchHPEaDfLKBOtZU5w3z4nljMya7i3o9FoyGt9pudPhBFqgh5tSVlVWphEKUlwXDM+DUz+rbBufaFDx5dQY0GQx9NPfeq4sJAAcOcHLxVIoHfxXkvFveSHw==

說明:RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。

3.1.2 普通用於登入

首先先在伺服器端建立一個doris使用者並設定登入密碼,命令如下:

[root@localhost /]# useradd doris
[root@localhost /]# echo "123456" | passwd --stdin doris
Changing password for user doris.
passwd: all authentication tokens updated successfully.

接下來我就在客戶端伺服器192.168.0.76上用doris賬號登入伺服器192.168.0.75,命令如下:

[root@localhost ~]# ssh [email protected]
doris@192.168.0.75's password: 
[[email protected] ~]$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:68:FE:A3  
          inet addr:192.168.0.75  Bcast:192.168.0.255  
          ……後面省略…………

上面看到沒有,我已經成功用doris賬號登入到我的主伺服器上了。第一種登入方式圓夢成功,接下來介紹第二種登入方式。

注:我的主伺服器地址是:192.168.0.75,客戶端伺服器地址是:192.168.0.76

3.2 ssh -l [遠端主機使用者名稱] [遠端伺服器主機名或IP 地址]

指令如下,我先退出當前登入環境:

[[email protected] ~]$ exit
logout
Connection to 192.168.0.75 closed.
[[email protected] ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:50:56:25:C9:84  
          inet addr:192.168.0.76  Bcast:192.168.0.255  
……後面省略…………

然後再登入系統

[root@localhost ~]# ssh -l doris 192.168.0.75
doris@192.168.0.75's password: 
Last login: Sun Jul 16 00:28:48 2017 from 192.168.0.76

以上的方式同樣可以登入我的伺服器,是吧?接下來講一下sshd的服務配置和管理。

(二)sshd服務配置和管理

1. 介紹一下sshd配置和安全調優的地方

配置檔案位於/etc/ssh/sshd_config,注:引數前面有#,表示是預設值。 當然#號也表示注示,如果#後面有空在加具體內容時是註釋否則是預設值。當配置完配置檔案後重啟一下sshd服務就會生效了,OK,編輯配置檔案設定相關引數。

  • 設定sshd監聽埠號 :Port 22
  • 設定sshd伺服器繫結的IP:
  • 選擇的 SSH 協議版本:Protocol 2
  • 設定包含計算機私人密匙的檔案:#HostKey /etc/ssh/ssh_host_key
  • -

1.1 設定監聽埠:Port

將22埠改為222埠,重啟服務,接著用客戶端登入,命令如下:

[[email protected] /]# vim /etc/ssh/sshd_config 
  8 # The strategy used for options in the default sshd_config shipped with
  9 # OpenSSH is to specify options with their default value where
 10 # possible, but leave them commented.  Uncommented options change a
 11 # default value.
 12 
 13 #Port 22
 14 PORT 222

檢視埠監聽情況,命令如下:

[root@localhost /]# netstat -antup | grep sshd
tcp        0      0 0.0.0.0:222                 0.0.0.0:*                   LISTEN      1966/sshd                      
tcp        0      0 :::222                      :::*                        LISTEN      1966/sshd 

埠修改成功,在客戶端登入服務試試看:

[doris@localhost ~]$ ssh doris@192.168.0.75
ssh: connect to host 192.168.0.75 port 22: Connection refused

無法登入,然後我們加上埠的引數登入一下試試:

[doris@localhost ~]$ ssh -p 222  doris@192.168.0.75
doris@192.168.0.75's password: 
Last login: Sun Jul 16 00:40:13 2017 from 192.168.0.76
[[email protected] ~]$ 

OK,登入成功,那麼我們為什麼要修改埠呢?主要還是防止黑客攻擊時讓黑客猜不到我們的登入埠,當然這個也就只是一般防護而已,具體如何去防護下面一節將介紹。

1.2 設定sshd伺服器繫結的IP 地址

設定sshd伺服器繫結的IP 地址,0.0.0.0 表示偵聽所有地址,這個值可以寫成本地IP地址也可以寫成所有地址

1.3 安全考慮,設定為最新的協議版本

選擇的 SSH 協議版本,可以是 1 也可以是 2 ,CentOS 5.x 預設是僅支援 V2。安全考慮,設定為最新的協議版本

Protocol 2

1.4 設定包含計算機私人密匙的檔案

#HostKey /etc/ssh/ssh_host_key

1.5 當有人使用 SSH 登入系統的時候,SSH 會記錄資訊,這個資訊要記錄的型別為AUTHPRIV

SyslogFacility AUTHPRIV

互動:登入系統的預設日誌存放在哪?
例: 為什麼sshd配置檔案中沒有指定日誌,日誌卻存放在了 /var/log/secure ?

[root@localhost ssh]# vim /etc/rsyslog.conf  # 檢視 
# The authpriv file has restricted access.
authpriv.*                                   /var/log/secure

原來是在開機自啟動的時候就已經指定好了,OK,接下來,繼續往下看

1.6 登入記錄的等級,INFO級別以上

#LogLevel INFO

1.7登入延遲時間【安全調優重點】

當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中, 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則預設時間為秒!

可以根據實際情況來修改實際,預設是2秒

LoginGraceTime 2m       #grace 優雅

1.8 是否允許ROOT登入

是否允許 root 登入!預設是允許的,但是建議設定成 no ,真實的生產環境伺服器,是不允許root賬號登陸的!!!

# PermitRootLogin yes

1.9 是否需要密碼驗證

密碼驗證當然是需要的!所以這裡寫 yes,也可以設定為no,在真實的生產伺服器上,根據不同安全級別要求,有的是設定不需要密碼登陸的,通過認證的祕鑰來登陸。

PasswordAuthentication yes

1.10 是否允許空密碼登入

若PasswordAuthentication這一項如果設定為 yes 的話,這一項就最好設定為 no ,這個專案在是否允許以空的密碼登入!當然不許啦!

# PermitEmptyPasswords no

1.11登入成功後顯示的歡迎資訊

登入後是否顯示出一些資訊呢?例如上次登入的時間、地點等等,預設是 yes, 亦即是打印出/etc/motd這個文件的內容。

# PrintMotd yes

例如:修改/etc/motd檔案列印資訊

[[email protected] ssh]# echo 'Warning! From now on, all of your operaton yes has been record!' > /etc/motd
[[email protected] ssh]# cat /etc/motd
Warning! From now on, all of your operaton yes has been record!

客戶端登入試一下:

[[email protected] ~]$ ssh -p 222  [email protected]192.168.0.75
[email protected]192.168.0.75's password: 
Last login: Sun Jul 16 01:28:10 2017 from 192.168.0.75
Warning! From now on, all of your operaton yes has been record!
[[email protected] ~]$ 

看到了嗎?有警告訊息喲

1.12 顯示上次登入資訊

顯示上次登入的資訊!預設也是 yes

# PrintLastLog yes
[doris@localhost ~]$ ssh -p 222  doris@192.168.0.75
doris@192.168.0.75's password: 
Last login: Sun Jul 16 01:28:10 2017 from 192.168.0.75 #就是這個咯

1.13 判斷客戶端來源合法

一般來說,為了要判斷客戶端來源是正常合法的,因此會使用 DNS 去反查客戶端的主機名,不過如果是在內網互連,這專案設定為 no 會讓聯機速度比較快。

# UseDNS yes

總結:以上的配置選項已經講解完畢,接下來討論一下防止暴力破解的相關問題。

(三) 防止sshd服務暴力破解的幾種方法

為了防止黑客惡意用寫程式碼去不斷的請求伺服器,這樣輕者則造成伺服器負債大重者則伺服器會被攻破。可想而知,我們得做一些防止被暴力破解可能性的方案,方案主要以下三種,當然你也可以使用其他防護措施。

  • 配置安全的sshd服務
  • 通過開源的防護軟體來防護安全
  • 通過自定義的指令碼來防護

1. 配置安全的sshd服務

1.1 可以從以下入手來防護:

  1. 密碼足夠的複雜,密碼的長度要大於8位最好大於20位。密碼的複雜度是密碼要儘可能有數字、大小寫字母和特殊符號混合組成,
  2. 修改預設埠號
  3. 不允許root賬號直接登陸,新增普通賬號,授予root的許可權
  4. 不允許密碼登陸,只能通過認證的祕鑰來登陸系統,通過金鑰認證實現sshd認證

1.2使用金鑰認證登入實驗操作

實驗環境
服務端:192.168.0.75
客戶端:192.168.0.76

客戶端生成金鑰對

[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
# 提示輸入密匙檔案的儲存路徑,選擇預設繼續哈~
Enter passphrase (empty for no passphrase): 
# 下面要求輸入密碼,這裡的passphrase 密碼是對生成的私匙檔案(/root/.ssh/id_dsa)的保護口令,如果不設定可以回車。
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
da:2c:d8:53:92:6e:ff:4a:54:14:cd:23:28:b3:bb:3b [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|         .o+     |
|      o ... +    |
|       +  .. .   |
|      .. .       |
|      o.S        |
|     +.B         |
|    . B.+        |
|     .E=         |
|      .ooo.      |
+-----------------+
[[email protected] ~]# cd /root/.ssh/
[[email protected] .ssh]# ls
id_rsa  id_rsa.pub  known_hosts

釋出公鑰到服務端,此步驟需要輸入doris的密碼進行驗證

[[email protected] .ssh]# ssh-copy-id -i id_rsa.pub "-p 222 [email protected]"
[email protected]192.168.0.75's password: 
Now try logging into the machine, with "ssh '-p 222 [email protected]'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

登入操作

[[email protected] .ssh]# ssh -p 222 [email protected]192.168.0.75
Last login: Sun Jul 16 02:05:39 2017 from 192.168.0.75
Warning! From now on, all of your operaton yes has been record!

以上可以看到,我沒有輸入密碼,然後就直接登入了,但是隻是解決了免密碼登入,還沒有解決如果被暴力破解該怎麼辦,以下將介紹使用者第三方開源軟體進行防護。

2. 通過開源的防護軟體來防護安全

2.1 引言

最近公網網站一直被別人暴力破解sshd服務密碼。雖然沒有成功,但會導致系統負載很高,原因是在暴力破解的時候,系統會不斷地認證使用者,從而增加了系統資源額外開銷,導致訪問公司網站速度很慢。

2.2 解決辦法

fail2ban可以監視你的系統日誌,然後匹配日誌的錯誤資訊(正則式匹配)執行相應的遮蔽動作(一般情況下是防火牆),而且可以傳送e-mail通知系統管理員,很好、很實用、很強大!

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

注:重啟iptables服務的話,所有DORP將重置。

2.3下載軟體安裝包

地址:http://www.fail2ban.org/wiki/index.php/Downloads

2.4上傳軟體並安裝

我已經上傳了,在root家目錄

[[email protected] ~]# ls
anaconda-ks.cfg  fail2ban-0.8.14.tar.gz  install.log  install.log.syslog

解壓

[[email protected] ~]# tar xf fail2ban-0.8.14.tar.gz 
[[email protected] ~]# ls
anaconda-ks.cfg  fail2ban-0.8.14  fail2ban-0.8.14.tar.gz  install.log  install.log.syslog

這個陌生的軟體如何安裝呢?當然有方法啦,我們可以進去裡面找到readme檔案檢視幫助

[[email protected] ~]# cd fail2ban-0.8.14
[[email protected] fail2ban-0.8.14]# ls
ChangeLog  config   doc              fail2ban-server         files        man        README.Solaris  setup.py   TODO
client     COPYING  fail2ban-client  fail2ban-testcases      FILTERS      MANIFEST   server          testcases
common     DEVELOP  fail2ban-regex   fail2ban-testcases-all  kill-server  README.md  setup.cfg       THANKS
[[email protected] fail2ban-0.8.14]# vim README.md
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
 36 

找到以上這幾行可以看到,我們應該如何安裝,這裡面說,先解壓fail2ban-0.8.12.tar.bz2,我們已經解壓成功了,接下來是進到解壓後的目錄中執行python setup.py install

在看一下下面這句話,喲喲,這個要求python版本必須大於等於2.4

 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)

所以我們得檢視一下我們現有系統的python版本,如果沒有安裝,可以使用yum方式安裝以下,接下來檢視一下:

[root@localhost fail2ban-0.8.14]# python -V
Python 2.6.6

非常好,可以發現我主機上的版本是2.6.6的,符合它的要求。接下來就安裝吧!

[root@localhost fail2ban-0.8.14]# python setup.py install

安裝成功!有必要說一下主要的檔案:

/etc/fail2ban/action.d#動作資料夾,內含預設檔案。iptables以及mail等動作配置
/etc/fail2ban/fail2ban.conf #定義了fai2ban日誌級別、日誌位置及sock檔案位置
/etc/fail2ban/filter.d #條件資料夾,內含預設檔案。過濾日誌關鍵內容設定
/etc/fail2ban/jail.conf #主要配置檔案,模組化。主要設定啟用ban動作的服務及動作閥值

生成服務啟動指令碼,命令如下:

[root@localhost fail2ban-0.8.14]# pwd
/root/fail2ban-0.8.14
[root@localhost fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban

互動: 你怎麼知道要複製這個檔案? 一個新的軟體包,後期怎麼可以知道哪個檔案是啟動指令碼檔案?這就要找伺服器啟動指令碼檔案中有什麼特點,然後過濾出來對應的檔名。啟動腳本里都包含chkconfig 欄位,看到了嗎?這個檔案定位到了,它就是啟動指令碼
[[email protected] fail2ban-0.8.14]# grep chkconfig ./* -R --color
./files/redhat-initd:# chkconfig: - 92 08

新增到開機自啟動,命令如下:

[root@localhost /]# chkconfig --add fail2ban
[root@localhost /]# chkconfig --list fail2ban #可以看到3,4,5啟動級別可以開機自啟動了
fail2ban        0:off   1:off   2:off   3:on    4:on    5:on    6:off

接下來實際操作一把!

應用例項
設定條件:ssh遠端登入5分鐘內3次密碼驗證失敗,禁止使用者IP訪問主機1小時,1小時該限制自動解除,使用者可重新登入。

因為動作檔案(action.d/iptables.conf)以及日誌匹配條件檔案(filter.d/sshd.conf
)安裝後是預設存在的。基本不用做任何修改。所有主要需要設定的就只有jail.conf檔案。啟用sshd服務的日誌分析,指定動作閥值即可。

編輯/etc/fail2ban/jail.conf檔案,以下是配置項的說明

 #全域性設定
[DEFAULT]              
ignoreip = 127.0.0.1/8       #忽略的IP列表,不受設定限制
bantime  = 600             #遮蔽時間,單位:秒
findtime  = 600             #這個時間段內超過規定次數會被ban掉
maxretry = 3                #最大嘗試次數
backend = auto            #日誌修改檢測機制(gamin、polling和auto這三種)

#單個服務檢查設定,如設定bantime、findtime、maxretry和全域性衝突,服務優先順序大於全域性設定。
[ssh-iptables]               
enabled  = true             #是否啟用此項(true/false)修改成 true
filter   = sshd              #過濾規則filter的名字,對應filter.d目錄下的sshd.conf
action   = iptables[name=SSH, port=ssh, protocol=tcp]             #動作的相關引數,對應action.d/iptables.conf檔案
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.c
om, sendername="Fail2Ban"]#觸發報警的收件人
logpath  = /var/log/secure   #檢測的系統的登陸日誌檔案。這裡要寫sshd服務日誌檔案。 預設為logpath  = /var/log/sshd.log
#5分鐘內3次密碼驗證失敗,禁止使用者IP訪問主機1小時。 配置如下
bantime  = 3600   #禁止使用者IP訪問主機1小時
findtime  = 300    #在5分鐘內內出現規定次數就開始工作
maxretry = 3    #3次密碼驗證失敗

啟動服務

[[email protected] /]# > /var/log/secure # 清日誌。 從現在開始
[[email protected] /]# service fail2ban restart
Stopping fail2ban:                                         [  OK  ]
Starting fail2ban:                                         [  OK  ]
[[email protected] /]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-SSH  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
# 看到了嗎?會多生成一個規則鏈。
Chain fail2ban-SSH (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0      

測試:故意輸入錯誤密碼3次,再進行登入時,會拒絕登入

[[email protected] .ssh]# ssh 192.168.0.75
[email protected]192.168.0.75's password:       #1次
Permission denied, please try again.    #2次
[email protected]192.168.0.75's password: 
Permission denied, please try again.    #3次
[email protected]192.168.0.75's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[[email protected] .ssh]# ssh 192.168.0.75 #再次訪問
ssh: connect to host 192.168.0.75 port 22: Connection refused   #已經拒絕訪問了

具體看某一項的狀態也可以看,如果顯示被ban的ip和數目就表示成功了,如果都是0,說明沒有成功。

[[email protected] /]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
|  |- File list:    /var/log/secure 
|  |- Currently failed: 0
|  `- Total failed: 3
`- action
   |- Currently banned: 1
   |  `- IP list:   192.168.0.76 #我的客戶端IP被拒絕了
   `- Total banned: 1

檢視fail2ban的日誌能夠看到相關的資訊,以下顯示這個IP被禁了,對不對,合情合理呀。

[root@localhost /]# tail /var/log/fail2ban.log 
2017-07-16 04:20:49,431 fail2ban.actions[3194]: WARNING [ssh-iptables] Ban 192.168.0.76

溫馨提示:
1、如果做錯了,想清空一下記錄,還原:只需要把 > /var/log/secure 清空就可以了。service fail2ban restart
2、另外如果後期需要把iptables清空後或iptables重啟後,也需要把fail2ban重啟一下。
3、如果要修改ssh預設埠 。 同時也需要配置fail2ban來監控sshd服務,則可以這樣處理,編輯配置檔案/etc/fail2ban/jail.conf,port=指定的埠號:例如:

98 action = iptables[name=SSH, port=222, protocol=tcp]

配置位置

然後修改動作檔案/etc/fail2ban/action.d/iptables.conf中的預設埠。即port=ssh改 為port=222

配置位置
重啟服務即可
4、如果想要使用fail2ban傳送告警郵件,請確保系統的郵件服務能夠正常傳送郵件!

3. 通過自定義指令碼來防護

#!/bin/bash

cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2"="$1;}' > /root/satools/black.txt

DEFINE="10"

for i in `cat /root/satools/black.txt`
do
        IP=`echo $i | awk -F='{print $1}'`
        NUM=`echo $i | awk -F='{print $2}'`

        if [ $NUM -gt $DEFINE ];then
                grep $IP /etc/hosts.deny > /dev/null
                if [ $? -gt 0 ];then
                        echo "sshd:$IP" >> /etc/hosts.deny
                fi
        fi
done