Ubuntu 18.10 安裝DenyHosts 防止暴露在外網服務器被惡意ssh爆破

一、DenyHost簡介:

DenyHosts是基於Python2寫的一個程序軟件,運行於Linux上預防SSH暴力破解的,它會分析sshd的日誌文件(/var/log/auth.log),當發現重複的攻擊時就會記錄IP到/etc/hosts.deny文件,並且會列入系統防火牆黑名單

  • DenyHosts官網:點擊訪問 http://denyhosts.sourceforge.net/

重要提示!!!

使用這個軟件之前,最好清空一下已經存在的系統日誌,因爲軟件會掃描已經存在的日誌文件,如果他檢測到你的允許次數 小於 日誌中已經存在的ip的錯誤次數。那麼即使是之前的登錄日誌中的ip也會被封的。

所以建議先清理一下舊日誌,清理之後一定要重啓系統日誌服務!!

$ sudo cat /dev/null > /var/log/auth.log  
$ sudo service rsyslog restart    # 重啓系統日誌服務 不重啓的話,auth.log就不會再有記錄了,denyhost也就不會掃描相當於廢了

二、DenyHost安裝

這裏以ubuntu爲例

  $ sudo apt-get update      # 更新ubuntu 軟件源:
  $ sudo apt-get install denyhosts   # 安裝 DenyHost  提示按 “Y”
  $ tail -f /var/log/auth.log  # 查看登錄系統的日誌  denyhosts就是掃描的這個日誌文件

安裝完成後程序會自動啓動 查看是否啓動命令:

$ sudo ps -ef | grep denyhosts

輸出: # 至少有兩條記錄。下面的一條爲ps的進程
root      8680     1  0 13:38 ?         00:00:00 python /usr/sbin/denyhosts --daemon --purge --config=/etc/denyhosts.conf
yourname  15322 14556  0 22:19 pts/0    00:00:00 grep --color=auto denyhosts

我今天一安裝,程序掃描我的日誌文件,居然發現了300多個想嘗試登陸我服務器得ip.天吶,
我服務器上是有什麼寶嗎? ?

目錄:

/var/lib/denyhosts/ # 程序工作目錄 所有的日誌都在這裏面
/etc/hosts.deny # 已加入黑名單的ip


配置文件詳細解讀

SECURE_LOG = /var/log/auth.log   # ssh日誌文件  
HOSTS_DENY = /etc/hosts.deny    # 將阻止IP寫入到hosts.deny
PURGE_DENY =     # 過多久後清除已經禁止的,空代表永不解禁 其中w代表周,d代表天,h代表小時,s代表秒,m代表分鐘
BLOCK_SERVICE = sshd   # 阻止服務名
DENY_THRESHOLD_INVALID = 5  # 允許無效用戶(在/etc/passwd未列出)登錄失敗次數,允許無效用戶登錄失敗的次數.
DENY_THRESHOLD_VALID = 5  #  允許普通用戶登錄失敗的次數
DENY_THRESHOLD_ROOT = 5  #  允許root登錄失敗的次數
DENY_THRESHOLD_RESTRICTED = 1  #  設定 deny host 寫入到該資料夾
WORK_DIR = /var/lib/denyhosts/   # 將deny的host或ip紀錄到Work_dir中
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS = YES
HOSTNAME_LOOKUP=no  # 是否做域名反解
LOCK_FILE = /run/denyhosts.pid  # 將DenyHOts啓動的pid紀錄到LOCK_FILE中,已確保服務正確啓動,防止同時啓動多個服務。
IPTABLES = /sbin/iptables  # 防火牆腳本文件
ADMIN_EMAIL = [email protected]  # 設置接收通知郵件的地址 多個 ,分隔
SMTP_HOST = localhost  # SMTP服務器地址
SMTP_PORT = 25  # 端口
SMTP_USERNAME = [email protected]  # 接收的郵箱看到的發送者郵箱地址
SMTP_PASSWORD= password   # 使用第三方郵箱的服務一般都有授權碼 不是郵箱的密碼哦
SMTP_FROM = DenyHosts [email protected]  # 顯示發件人是誰 
SMTP_SUBJECT = DenyHosts Report  # 郵件主題
AGE_RESET_VALID=1d  # 有效用戶登錄失敗計數歸零的時間
AGE_RESET_ROOT=1d  # root用戶登錄失敗計數歸零的時間
AGE_RESET_RESTRICTED=5d  # 用戶的失敗登錄計數重置爲0的時間
AGE_RESET_INVALID=10d  # 無效用戶登錄失敗計數歸零的時間
DAEMON_LOG = /var/log/denyhosts  自己的日誌文件
DAEMON_SLEEP = 30s
DAEMON_PURGE = 5m  # 該項與PURGE_DENY 設置成一樣,也是清除hosts.deniedssh 用戶的時間

相關命令

$ sudo service denyhosts start  
$ sudo service denyhosts stop
$ sudo service denyhosts restart
$ sudo service denyhosts status   # 如果啓動失敗可以查看錯誤信息
$ sudo dpkg -l|grep denyhost   # 查看是否安裝了 denyhost
$ sudo apt-get purge denyhost  # 卸載denyhost

誤封了自己的ip怎麼辦?我剛開始安裝,爲了測試,把自己ip封了,整了好久才搞好。

我之前誤封之後,把ip從 hosts.deny裏面移除了也不行。後來發現官網早有解釋。

官方解釋

但是問題來了,我按照他的方法操作了,還是不行,後來我直接把這個軟件卸載了,並且重啓了服務器,發現我的ip依然被封禁,那這就不用想了,肯定是系統級別的禁止。果不其然。執行

$ sudo iptables -L  # 查看本機所有防火牆的防火牆規則

發現了我自己的ip。

在這裏插入圖片描述

由於官方並沒有提供命令移除被封禁的ip,所以我在這裏幫大家寫好了一鍵移除的腳本。

IP=$1
if [ -n "$IP" ];then
    if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];then
        service denyhosts stop
        sed -i "/$IP/d" /etc/hosts.deny
        sed -i "/$IP/d" /var/lib/denyhosts/hosts-valid
        sed -i "/$IP/d" /var/lib/denyhosts/users-hosts
        sed -i "/$IP/d" /var/lib/denyhosts/hosts
        sed -i "/$IP/d" /var/lib/denyhosts/hosts-root
        sed -i "/$IP/d" /var/lib/denyhosts/hosts-restricted
        iptables -D INPUT -s $IP -j DROP
        echo $IP remove from Denyhosts
        service denyhosts start
    else
        echo "This is not IP"
    fi
else
    echo "IP is empty"
fi

用法 新建一個後綴.sh的文件,將下面代碼複製進去,然後執行
$ sudo chmod +x name.sh # 添加可執行權限

解除封禁ip命令
$ sudo ./name.sh 127.0.0.1

添加白名單ip ⬇️ 官網介紹

在這裏插入圖片描述

命令

$ sudo vim /var/lib/denyhosts/allowed-hosts  
# 然後將你的白名單ip寫進去  一行一個,最後一個字符支持通配符 *

現在看我的收件箱:

大概看了下ip,有國外也有國內的。。。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章