閱讀132 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用 badIPs.com 保護你的服務器,並通過 Fail2ban 報告惡意 IP

這篇指南向你介紹使用 badips 濫用追蹤器abuse tracker和 Fail2ban 保護你的服務器或計算機的步驟。我已經在 Debian 8 Jessie 和 Debian 7 Wheezy 係統上進行了測試。

什麼是 badIPs?

BadIps 是通過 fail2ban 報告為不良 IP 的列表。

這個指南包括兩個部分,第一部分介紹列表的使用,第二部分介紹數據提交。

使用 badIPs 列表

定義安全等級和類別

你可以通過使用 REST API 獲取 IP 地址列表。

  • 當你使用 GET 請求獲取 URL:https://www.badips.com/get/categories 後,你就可以看到服務中現有的所有不同類別。
  • 第二步,決定適合你的等級。 參考 badips 應該有所幫助(我個人使用 scope = 3):
  • 如果你想要編譯一個統計信息模塊或者將數據用於實驗目的,那麼你應該用等級 0 開始。
  • 如果你想用防火牆保護你的服務器或者網站,使用等級 2。可能也要和你的結果相結合,盡管它們可能沒有超過 0 或 1 的情況。
  • 如果你想保護一個網絡商店、或高流量、賺錢的電子商務服務器,我推薦你使用值 3 或 4。當然還是要和你的結果相結合。
  • 如果你是偏執狂,那就使用 5。

現在你已經有了兩個變量,通過把它們兩者連接起來獲取你的鏈接。


  1. http://www.badips.com/get/list/{{SERVICE}}/{{LEVEL}}

注意:像我一樣,你可以獲取所有服務。在這種情況下把服務的名稱改為 any

最終的 URL 就是:


  1. https://www.badips.com/get/list/any/3

創建腳本

所有都完成了之後,我們就會創建一個簡單的腳本。

1、 把你的列表放到一個臨時文件。

2、 在 iptables 中創建一個鏈chain(隻需要創建一次)。(LCTT 譯注:iptables 可能包括多個表tables,表可能包括多個鏈chains,鏈可能包括多個規則rules)

3、 把所有鏈接到該鏈的數據(舊條目)刷掉。

4、 把每個 IP 鏈接到這個新的鏈。

5、 完成後,阻塞所有鏈接到該鏈的 INPUT / OUTPUT /FORWARD 請求。

6、 刪除我們的臨時文件。

為此,我們創建腳本:


  1. cd /home/<user>/
  2. vi myBlacklist.sh

把以下內容輸入到文件。


  1. #!/bin/sh
  2. ### based on this version https://www.timokorthals.de/?p=334
  3. ### adapted by Stéphane T.
  4. _ipt=/sbin/iptables    ### iptables 路徑(應該是這個)
  5. _input=badips.db       ### 數據庫的名稱(會用這個名稱下載)
  6. _pub_if=eth0           ### 連接到互聯網的設備(執行 $ifconfig 獲取)
  7. _droplist=droplist     ### iptables 中鏈的名稱(如果你已經有這麼一個名稱的鏈,你就換另外一個)
  8. _level=3               ### Blog(LCTT 譯注:Bad log)等級:不怎麼壞(0)、確認壞(3)、相當壞(5)(從 www.badips.com 獲取詳情)
  9. _service=any           ### 記錄日誌的服務(從 www.badips.com 獲取詳情)
  10. ### 獲取不良 IPs
  11. wget -qO- http://www.badips.com/get/list/${_service}/$_level > $_input || { echo "$0: Unable to download ip list."; exit 1; }
  12. ### 設置我們的黑名單 ###
  13. ### 首先清除該鏈
  14. $_ipt --flush $_droplist
  15. ### 創建新的鏈
  16. ### 首次運行時取消下麵一行的注釋
  17. # $_ipt -N $_droplist
  18. ### 過濾掉注釋和空行
  19. ### 保存每個 ip 到 $ip
  20. for ip in `cat $_input`
  21. do
  22. ### 添加到 $_droplist
  23. $_ipt -A $_droplist -i ${_pub_if} -s $ip -j LOG --log-prefix "Drop Bad IP List "
  24. $_ipt -A $_droplist -i ${_pub_if} -s $ip -j DROP
  25. done
  26. ### 最後,插入或者追加到我們的黑名單列表
  27. $_ipt -I INPUT -j $_droplist
  28. $_ipt -I OUTPUT -j $_droplist
  29. $_ipt -I FORWARD -j $_droplist
  30. ### 刪除你的臨時文件
  31. rm $_input
  32. exit 0

完成這些後,你應該創建一個定時任務定期更新我們的黑名單。

為此,我使用 crontab 在每天晚上 11:30(在我的延遲備份之前) 運行腳本。


  1. crontab -e

  1. 23 30 * * * /home/<user>/myBlacklist.sh #Block BAD IPS

別忘了更改腳本的權限:


  1. chmod + x myBlacklist.sh

現在終於完成了,你的服務器/計算機應該更安全了。

你也可以像下麵這樣手動運行腳本:


  1. cd /home/<user>/
  2. ./myBlacklist.sh

它可能要花費一些時間,因此期間別中斷腳本。事實上,耗時取決於該腳本的最後一行。

使用 Fail2ban 向 badIPs 報告 IP 地址

在本篇指南的第二部分,我會向你展示如何通過使用 Fail2ban 向 badips.com 網站報告不良 IP 地址。

Fail2ban >= 0.8.12

通過 Fail2ban 完成報告。取決於你 Fail2ban 的版本,你要使用本章的第一或第二節。

如果你 fail2ban 的版本是 0.8.12 或更新版本。


  1. fail2ban-server --version

在每個你要報告的類別中,添加一個 action。


  1. [ssh]
  2. enabled = true
  3. action = iptables-multiport
  4. badips[category=ssh]
  5. port = ssh
  6. filter = sshd
  7. logpath = /var/log/auth.log
  8. maxretry= 6

正如你看到的,類別是 SSH,從 https://www.badips.com/get/categories 查找正確類別。

Fail2ban < 0.8.12

如果版本是 0.8.12 之前,你需要新建一個 action。你可以從https://www.badips.com/asset/fail2ban/badips.conf 下載。


  1. wget https://www.badips.com/asset/fail2ban/badips.conf -O /etc/fail2ban/action.d/badips.conf

在上麵的 badips.conf 中,你可以像前麵那樣激活每個類別,也可以全局啟用它:


  1. cd /etc/fail2ban/
  2. vi jail.conf

  1. [DEFAULT]
  2. ...
  3. banaction = iptables-multiport
  4. badips

現在重啟 fail2ban - 從現在開始它就應該開始報告了。


  1. service fail2ban restart

你的 IP 報告統計信息

最後一步 - 沒那麼有用。你可以創建一個密鑰。 但如果你想看你的數據,這一步就很有幫助。

複製/粘貼下麵的命令,你的控製台中就會出現一個 JSON 響應。


  1. wget https://www.badips.com/get/key -qO -

  1. {
  2. "err":"",
  3. "suc":"new key 5f72253b673eb49fc64dd34439531b5cca05327f has been set.",
  4. "key":"5f72253b673eb49fc64dd34439531b5cca05327f"
  5. }

到 badips 網站,輸入你的 “key” 並點擊 “statistics”。

現在你就可以看到不同類別的統計信息。

原文發布時間為:2017-04-26

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-22 14:02:49

  上一篇:go  GoTTY:把你的 Linux 終端放到瀏覽器裏麵
  下一篇:go  Jquery中AJAX參數詳細列表