Brute-Force-Attacks
如何保護 ejabberd 免受暴力攻擊?
它在日誌中寫入:
=INFO REPORT==== 2012-03-14 17:48:54 === I(<0.467.0>:ejabberd_listener:281) : (#Port<0.4384>) Accepted connection {{10,254,239,2},51986} -> {{10,254,239,1},5222} =INFO REPORT==== 2012-03-14 17:48:54 === I(<0.1308.0>:ejabberd_c2s:784) : ({socket_state,tls,{tlssock,#Port<0.4384>,#Port<0.4386>},<0.1307.0>}) Failed authentication for USERNAME =INFO REPORT==== 2012-03-14 17:48:54 === I(<0.1308.0>:ejabberd_c2s:649) : ({socket_state,tls,{tlssock,#Port<0.4384>,#Port<0.4386>},<0.1307.0>}) Failed authentication for USERNAME
它不會寫入失敗的 IP。
並且字元串“接受的連接”和“失敗的身份驗證..”甚至可能不在附近(正如我認為在重負載的伺服器上)能夠使用fail2ban。
該怎麼辦?以及如何保護 jabber 伺服器(使用 ejabberd)?
您可以使用 iptables 來限制 IP 地址每分鐘可以嘗試的連接嘗試次數。由於這些都是自動攻擊,因此腳本一旦被阻止就會繼續尋找另一個目標。
此範例適用於 tcp 埠 22 (ssh),在丟棄來自該 IP 地址的數據包之前,將允許每分鐘 3 次連接嘗試。
iptables -A INPUT -p tcp --dport 22 --syn -m limit --limit 1/m --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --dport 22 --syn -j DROP
fail2ban 將在 iptables 之上提供一個有用的附加邏輯層。ejabberd 網站上的一個請求提出了一種可能的方法,可以使用log_modsession來使用 fail2ban 。它包含在ejabberd-modules中。
要記錄失敗的身份驗證嘗試,需要修補 ejabberd 的核心。幸運的是,雖然 log_modsession 附帶了該更新檔,所以您只需要應用它並重新編譯 ejabberd。