這篇文章主要介紹了配置fail2ban對apache服務器進行安全防護的方法,主要是起到過濾ip地址的效果,示例基于linux系統,需要的朋友可以參考下
生產環境中的 apache 服務器可能會受到不同的攻擊。攻擊者或許試圖通過暴力攻擊或者執行惡意腳本來獲取未經授權或者禁止訪問的目錄。一些惡意爬蟲或許會掃描你網站下的各種安全漏洞,或者通過收集email地址和web表單來發送垃圾郵件。
Apache服務器具有全面的日志功能,可以捕捉到各種攻擊所反映的異常事件。然而,它還不能系統地解析具體的apache 日志并迅速地對潛在的攻擊進行反應(比如,禁止/解禁IP地址)。這時候fail2ban可以解救這一切,解放了系統管理員的工作。
fail2ban是一款入侵防御工具,可以基于系統日志檢測不同的工具并且可以自動采取保護措施比如:通過iptables禁止ip、通過 /etc/hosts.deny 阻止連接、或者通過郵件發送通知。fail2ban具有一系列預定義的“監獄”,它使用特定程序日志過濾器來檢測通常的攻擊。你也可以編寫自定義的規則來檢測來自任意程序的攻擊。
在本教程中,我會演示如何配置fail2ban來保護你的apache服務器。我假設你已經安裝了apache和fail2ban。
什么是 Fail2ban 監獄
讓我們更深入地了解 fail2ban 監獄。監獄定義了具體的應用策略,它會為指定的程序觸發一個保護措施。fail2ban在 /etc/fail2ban/jail.conf 下為一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、SSH 等預定義了一些監獄。每個監獄都通過特定的程序日志過濾器(在/etc/fail2ban/fileter.d 下面)來檢測通常的攻擊。讓我看一個例子監獄:SSH監獄。
代碼如下:
[ssh] ????enabled???=?true ????port??????=?ssh ????filter????=?sshd ????logpath???=?/var/log/auth.log ????maxretry??=?6 ????banaction?=?iptables-multiport
SSH監獄的配置定義了這些參數:
??? [ssh]: 方括號內是監獄的名字。
??? enabled:是否啟用監獄
??? port: 端口號(或者對應的服務名稱)
??? filter: 檢測攻擊的日志解析規則
??? logpath: 所檢測的日志文件
??? maxretry: 最大失敗次數
??? banaction: 所進行的禁止操作
定義在監獄配置中的任意參數都會覆蓋fail2ban-wide 中相應的默認配置參數。相反,任何缺少的參數都會使用定義在[DEFAULT] 字段的默認值。
預定義的日志過濾器都放在/etc/fail2ban/filter.d,而可以采取的禁止操作放在 /etc/fail2ban/action.d。
如果你想要覆蓋fail2ban的默認操作或者定義任何自定義監獄,你可以創建/etc/fail2ban/jail.local*文件。本篇教程中,我會使用/etc/fail2ban/jail.local。
啟用預定義的apache監獄
fail2ban的默認安裝為Apache服務提供了一些預定義監獄和過濾器。我要啟用這些內建的Apache監獄。由于Debian和RedHat配置的稍微不同,我會分別提供它們的配置文件。
在Debian 或者 Ubuntu啟用Apache監獄
要在基于Debian的系統上啟用預定義的apache監獄,如下創建/etc/fail2ban/jail.local。
??$?sudo?vi?/etc/fail2ban/jail.local
?代碼如下:
#?檢測密碼認證失敗 ????[apache] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-auth ????logpath??=?/var/log/apache*/*error.log ????maxretry?=?6 ????#?檢測漏洞和?PHP?脆弱性掃描? ????[apache-noscript] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-noscript ????logpath??=?/var/log/apache*/*error.log ????maxretry?=?6 ????#?檢測?Apache?溢出攻擊? ????[apache-overflows] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-overflows ????logpath??=?/var/log/apache*/*error.log ????maxretry?=?2 ????#?檢測在服務器尋找主目錄的嘗試 ????[apache-nohome] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-nohome ????logpath??=?/var/log/apache*/*error.log ????maxretry?=?2
由于上面的監獄沒有指定措施,這些監獄都將會觸發默認的措施。要查看默認的措施,在/etc/fail2ban/jail.conf中的[DEFAULT]下找到“banaction”。
?代碼如下:
banaction?=?iptables-multiport
本例中,默認的操作是iptables-multiport(定義在/etc/fail2ban/action.d/iptables-multiport.conf)。這個措施使用iptable的多端口模塊禁止一個IP地址。
在啟用監獄后,你必須重啟fail2ban來加載監獄。
??$?sudo?service?fail2ban?restart
在CentOS/RHEL 或者 Fedora中啟用Apache監獄
要在基于紅帽的系統中啟用預定義的監獄,如下創建/etc/fail2ban/jail.local。
??$?sudo?vi?/etc/fail2ban/jail.local
?代碼如下:
#?檢測密碼認證失敗 ????[apache] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-auth ????logpath??=?/var/log/httpd/*error_log ????maxretry?=?6 ????#?檢測抓取郵件地址的爬蟲 ????[apache-badbots] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-badbots ????logpath??=?/var/log/httpd/*access_log ????bantime??=?172800 ????maxretry?=?1 ????#?檢測漏洞和?PHP?脆弱性掃描? ????[apache-noscript] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-noscript ????logpath??=?/var/log/httpd/*error_log ????maxretry?=?6 ????#?檢測?Apache?溢出攻擊? ????[apache-overflows] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-overflows ????logpath??=?/var/log/httpd/*error_log ????maxretry?=?2 ????#?檢測在服務器尋找主目錄的嘗試 ????[apache-nohome] ????enabled??=?true ????port?????=?http,https ????filter???=?apache-nohome ????logpath??=?/var/log/httpd/*error_log ????maxretry?=?2 ????#?檢測執行不存在的腳本的企圖 ????#?這些都是流行的網站服務程序 ????#?如:webmail,?phpMyAdmin,WordPress ????port?????=?http,https ????filter???=?apache-botsearch ????logpath??=?/var/log/httpd/*error_log ????maxretry?=?2
注意這些監獄文件默認的操作是iptables-multiport(定義在/etc/fail2ban/jail.conf中[DEFAULT]字段下的“banaction”中)。這個措施使用iptable的多端口模塊禁止一個IP地址。
啟用監獄后,你必須重啟fail2ban來加載監獄。
在 Fedora 或者 CentOS/RHEL 7中:
??$?sudo?systemctl?restart?fail2ban
在 CentOS/RHEL 6中:
??$?sudo?service?fail2ban?restart
檢查和管理fail2ban禁止狀態
監獄一旦激活后,你可以用fail2ban的客戶端命令行工具來監測當前的禁止狀態。
查看激活的監獄列表:
??$?sudo?fail2ban-client?status
查看特定監獄的狀態(包含禁止的IP列表):
??$?sudo?fail2ban-client?status?[監獄名]
??? 你也可以手動禁止或者解禁IP地址:
要用制定監獄禁止IP:
??$?sudo?fail2ban-client?set?[name-of-jail]?banip?[ip-address]
要解禁指定監獄屏蔽的IP:
??$?sudo?fail2ban-client?set?[name-of-jail]?unbanip?[ip-address]
總結
本篇教程解釋了fail2ban監獄如何工作以及如何使用內置的監獄來保護Apache服務器。依賴于你的環境以及要保護的web服務器類型,你或許要調整已有的監獄或者編寫自定義監獄和日志過濾器。查看outfail2ban的官方Github頁面來獲取最新的監獄和過濾器示例。