Linux中國

如何配置 fail2ban 來保護 Apache 伺服器

讓我們更深入地了解 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頁面來獲取最新的監獄和過濾器示例。

你有在生產環境中使用fail2ban么?分享一下你的經驗吧。

via: http://xmodulo.com/configure-fail2ban-apache-http-server.html

作者:Dan Nanni 譯者:geekpi 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國