保護 linux 伺服器:iptables 與 fail2ban
我想挑選社區關於 linux 伺服器安全的大腦,特別是關於暴力攻擊和使用fail2ban與自定義iptables的問題。
那裡有一些類似的問題,但沒有一個問題能令我滿意。簡而言之,我正在嘗試確定保護暴露在網際網路上的 linux 伺服器(執行正常服務、ssh、web、郵件)免受暴力攻擊的最佳解決方案。
我在伺服器安全方面有一個不錯的處理,即通過不允許 root 或密碼登錄來鎖定 ssh、更改預設埠、確保軟體是最新的、檢查日誌文件、只允許某些主機訪問伺服器並利用安全性審計工具,如Lynis ( https://cisofy.com/lynis/ ),用於一般安全合規性,所以這個問題不一定與此有關,儘管總是歡迎輸入和建議。
我的問題是我應該使用哪種解決方案(fail2ban 或 iptables),我應該如何配置它,或者我應該使用兩者的組合來防止暴力攻擊?
關於這個話題有一個有趣的回應(Denyhosts vs fail2ban vs iptables-best way to prevent brute force logons?)。對我個人而言,最有趣的答案是(https://serverfault.com/a/128964),iptables路由發生在核心中,而fail2ban 使用使用者模式工具來解析日誌文件。Fail2ban 當然使用 iptables,但它仍然必須解析日誌文件並匹配一個模式,直到它執行一個操作。
那麼使用 iptables 並使用速率限制(https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/)在一段時間內丟棄來自 IP 的請求是否有意義無論它嘗試連接什麼協議,在特定時間段內進行過多連接嘗試的時間是多少?如果是這樣,那麼這裡有一些關於對這些數據包使用丟棄與拒絕的有趣想法(http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject),對此有什麼想法嗎?
Fail2ban 允許以能夠為預設配置中可能無法解決的服務編寫自定義“規則”的形式進行自定義配置。它易於安裝和設置並且功能強大,但如果我試圖實現的只是“阻止”來自伺服器的 IP,如果他們對任何服務/協議進行 2 次失敗的訪問嘗試超過x**數量,這可能是一種矯枉過正時間?
這裡的目標是打開每日 logwatch 報告,而不必滾動嘗試連接到伺服器的失敗頁面。
感謝您抽出寶貴的時間。
我應該使用fail2ban 還是iptables?
除了防火牆解決方案之外,您還可以使用 fail2ban ,通過規則按需擴展現有的防火牆規則,以阻止對其他公共服務執行不良操作的系統的特定 IP 地址。他們相互配合工作。
簡化:防火牆只看到網路連接和數據包,並且可以理解其中的模式,但它沒有應用程序級別的洞察力來區分所需和有效的請求與惡意、格式錯誤和不受歡迎的請求。例如,您的防火牆無法區分一堆 HTTP API 請求和由您的 Wordpress 管理頁面上的暴力密碼猜測引起的多次錯誤登錄嘗試,對於防火牆來說,它們都只是到埠 80 或 443 的 TCP 連接。
Fail2ban 是一種通用且可擴展的方法,可以為您的防火牆提供應用程序級別的洞察力,儘管有些間接。
應用程序經常會註冊並記錄惡意的、格式錯誤的和不受歡迎的請求,但它們很少具有防止進一步濫用的本機能力。雖然它稍微解耦,但 Fail2ban 可以對那些記錄的惡意事件採取行動,限制損害並防止進一步的濫用,通常是通過動態重新配置防火牆來拒絕進一步的訪問。換句話說,Fail2ban 為您現有的應用程序提供了防止濫用的方法,而無需修改它們。
為防火牆提供應用程序級別洞察力的另一種方法是通過入侵檢測/預防系統。
例如,網路伺服器是一種常見的公共服務,在您的防火牆中,TCP 埠 80 和 443 對整個網際網路開放。
通常,您對 HTTP/HTTPS 埠沒有任何速率限制,因為當多個有效使用者位於 NAT 網關或 Web 代理之後時,他們可以有一個來源。
當您檢測到針對您的網路伺服器的不良和/或惡意行為時,您使用 fail2ban 自動阻止此類違規者(完全阻止他們或僅鎖定他們對埠 80 和 443 的訪問)。
另一方面,SSH 訪問不是一項公共服務,但如果您無法將防火牆中的 SSH 訪問限制為僅列入白名單的 IP 地址範圍,則限制傳入連接的速率是減慢暴力的一種方法-強制攻擊。但是您的防火牆仍然無法區分使用者 bob 成功登錄 5 次,因為他正在執行 ansible playbook 和 5 次嘗試以 root 身份由機器人登錄失敗。