配置fail2ban對Apache服務(wù)器進(jìn)行安全防護(hù)的方法
生產(chǎn)環(huán)境中的 Apache 服務(wù)器可能會受到不同的攻擊。攻擊者或許試圖通過暴力攻擊或者執(zhí)行惡意腳本來獲取未經(jīng)授權(quán)或者禁止訪問的目錄。一些惡意爬蟲或許會掃描你網(wǎng)站下的各種安全漏洞,或者通過收集email地址和web表單來發(fā)送垃圾郵件。
Apache服務(wù)器具有全面的日志功能,可以捕捉到各種攻擊所反映的異常事件。然而,它還不能系統(tǒng)地解析具體的apache 日志并迅速地對潛在的攻擊進(jìn)行反應(yīng)(比如,禁止/解禁IP地址)。這時候fail2ban可以解救這一切,解放了系統(tǒng)管理員的工作。
fail2ban是一款入侵防御工具,可以基于系統(tǒng)日志檢測不同的工具并且可以自動采取保護(hù)措施比如:通過iptables禁止ip、通過 /etc/hosts.deny 阻止連接、或者通過郵件發(fā)送通知。fail2ban具有一系列預(yù)定義的“監(jiān)獄”,它使用特定程序日志過濾器來檢測通常的攻擊。你也可以編寫自定義的規(guī)則來檢測來自任意程序的攻擊。
在本教程中,我會演示如何配置fail2ban來保護(hù)你的apache服務(wù)器。我假設(shè)你已經(jīng)安裝了apache和fail2ban。
什么是 Fail2ban 監(jiān)獄
讓我們更深入地了解 fail2ban 監(jiān)獄。監(jiān)獄定義了具體的應(yīng)用策略,它會為指定的程序觸發(fā)一個保護(hù)措施。fail2ban在 /etc/fail2ban/jail.conf 下為一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、SSH 等預(yù)定義了一些監(jiān)獄。每個監(jiān)獄都通過特定的程序日志過濾器(在/etc/fail2ban/fileter.d 下面)來檢測通常的攻擊。讓我看一個例子監(jiān)獄:SSH監(jiān)獄。
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
banaction = iptables-multiport
SSH監(jiān)獄的配置定義了這些參數(shù):
[ssh]: 方括號內(nèi)是監(jiān)獄的名字。
enabled:是否啟用監(jiān)獄
port: 端口號(或者對應(yīng)的服務(wù)名稱)
filter: 檢測攻擊的日志解析規(guī)則
logpath: 所檢測的日志文件
maxretry: 最大失敗次數(shù)
banaction: 所進(jìn)行的禁止操作
定義在監(jiān)獄配置中的任意參數(shù)都會覆蓋fail2ban-wide 中相應(yīng)的默認(rèn)配置參數(shù)。相反,任何缺少的參數(shù)都會使用定義在[DEFAULT] 字段的默認(rèn)值。
預(yù)定義的日志過濾器都放在/etc/fail2ban/filter.d,而可以采取的禁止操作放在 /etc/fail2ban/action.d。
如果你想要覆蓋fail2ban的默認(rèn)操作或者定義任何自定義監(jiān)獄,你可以創(chuàng)建/etc/fail2ban/jail.local*文件。本篇教程中,我會使用/etc/fail2ban/jail.local。
啟用預(yù)定義的apache監(jiān)獄
fail2ban的默認(rèn)安裝為Apache服務(wù)提供了一些預(yù)定義監(jiān)獄和過濾器。我要啟用這些內(nèi)建的Apache監(jiān)獄。由于Debian和RedHat配置的稍微不同,我會分別提供它們的配置文件。
在Debian 或者 Ubuntu啟用Apache監(jiān)獄
要在基于Debian的系統(tǒng)上啟用預(yù)定義的apache監(jiān)獄,如下創(chuàng)建/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
# 檢測在服務(wù)器尋找主目錄的嘗試
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2
由于上面的監(jiān)獄沒有指定措施,這些監(jiān)獄都將會觸發(fā)默認(rèn)的措施。要查看默認(rèn)的措施,在/etc/fail2ban/jail.conf中的[DEFAULT]下找到“banaction”。
本例中,默認(rèn)的操作是iptables-multiport(定義在/etc/fail2ban/action.d/iptables-multiport.conf)。這個措施使用iptable的多端口模塊禁止一個IP地址。
在啟用監(jiān)獄后,你必須重啟fail2ban來加載監(jiān)獄。
$ sudo service fail2ban restart
在CentOS/RHEL 或者 Fedora中啟用Apache監(jiān)獄
要在基于紅帽的系統(tǒng)中啟用預(yù)定義的監(jiān)獄,如下創(chuàng)建/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
# 檢測在服務(wù)器尋找主目錄的嘗試
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/httpd/*error_log
maxretry = 2
# 檢測執(zhí)行不存在的腳本的企圖
# 這些都是流行的網(wǎng)站服務(wù)程序
# 如:webmail, phpMyAdmin,WordPress
port = http,https
filter = apache-botsearch
logpath = /var/log/httpd/*error_log
maxretry = 2
注意這些監(jiān)獄文件默認(rèn)的操作是iptables-multiport(定義在/etc/fail2ban/jail.conf中[DEFAULT]字段下的“banaction”中)。這個措施使用iptable的多端口模塊禁止一個IP地址。
啟用監(jiān)獄后,你必須重啟fail2ban來加載監(jiān)獄。
在 Fedora 或者 CentOS/RHEL 7中:
$ sudo systemctl restart fail2ban
在 CentOS/RHEL 6中:
$ sudo service fail2ban restart
檢查和管理fail2ban禁止?fàn)顟B(tài)
監(jiān)獄一旦激活后,你可以用fail2ban的客戶端命令行工具來監(jiān)測當(dāng)前的禁止?fàn)顟B(tài)。
查看激活的監(jiān)獄列表:
$ sudo fail2ban-client status
查看特定監(jiān)獄的狀態(tài)(包含禁止的IP列表):
$ sudo fail2ban-client status [監(jiān)獄名]
你也可以手動禁止或者解禁IP地址:
要用制定監(jiān)獄禁止IP:
$ sudo fail2ban-client set [name-of-jail] banip [ip-address]
要解禁指定監(jiān)獄屏蔽的IP:
$ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]
總結(jié)
本篇教程解釋了fail2ban監(jiān)獄如何工作以及如何使用內(nèi)置的監(jiān)獄來保護(hù)Apache服務(wù)器。依賴于你的環(huán)境以及要保護(hù)的web服務(wù)器類型,你或許要調(diào)整已有的監(jiān)獄或者編寫自定義監(jiān)獄和日志過濾器。查看outfail2ban的官方Github頁面來獲取最新的監(jiān)獄和過濾器示例。
相關(guān)文章
詳解Linux下安裝php環(huán)境并且配置Nginx支持php-fpm模塊
本篇文章主要介紹了詳解Linux下安裝php環(huán)境并且配置Nginx支持php-fpm模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Linux加入windows ad域步驟詳解(winbindsamba方案)
本文主要實驗centos加入windows AD的方法,大家參考使用2013-12-12CentOS 6.5編譯安裝Nginx 1.10.2+MySQL 5.5.52+PHP5.5.38
這篇文章主要介紹了CentOS 6.5編譯安裝Nginx 1.10.2+MySQL 5.5.52+PHP5.5.38,需要的朋友可以參考下2017-02-02虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法
這篇文章主要介紹了虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法,在文章需要大家注意本文基于centos7環(huán)境進(jìn)行操作,由于centos的版本是有差異的,所以需要大家確認(rèn)版本,感興趣的朋友跟隨小編一起看看吧2018-08-08Linux解決RocketMQ中NameServer啟動問題的方法詳解
這篇文章主要為大家詳細(xì)介紹了Linux解決RocketMQ中NameServer啟動問題的方法,文中通過圖片和示例代碼進(jìn)行了詳細(xì)講解,需要的小伙伴可以參考下2023-08-08Ubuntu系統(tǒng)網(wǎng)絡(luò)故障排查的方法
最近在使用Ubuntu系統(tǒng)的時候碰到一個問題,連接無線網(wǎng)絡(luò)的時候,發(fā)現(xiàn)右上角網(wǎng)絡(luò)設(shè)置中沒有 Enable Wi-Fi 這個選項了,所以通過一步步排查,終于找了解決辦法,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒。2016-10-10使用FileZilla從Linux系統(tǒng)下載文件的方法
最近做項目,遇到這樣的需求,要求將Linux系統(tǒng)的的某個文件夾下載到我Windows系統(tǒng)某個文件夾里,怎么實現(xiàn)這個功能呢?下面腳本之家小編給大家?guī)砹耸褂肍ileZilla從Linux系統(tǒng)下載文件的方法,感興趣的朋友一起看看吧2018-07-07