首頁  >  文章  >  運維  >  教你如何設定fail2ban對Apache伺服器進行安全防護的方法

教你如何設定fail2ban對Apache伺服器進行安全防護的方法

怪我咯
怪我咯原創
2017-06-27 09:51:072344瀏覽

這篇文章主要介紹了配置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: 所偵測的日誌檔案## c  次數
    banaction: 所進行的禁止操作

定義在監獄配置中的任意參數都會覆寫fail2ban-wide 中對應的預設設定參數。相反,任何缺少的參數都會使用定義在[DEFAULT] 欄位的預設值。

預先定義的日誌過濾器都放在/etc/fail2ban/filter.d,而可以採取的禁止操作放在 /etc/fail2ban/action.d。


201561195702833.jpg (769×644)

如果你想要覆寫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 [监狱名]

201561195749494.jpg (800×298)

    你也可以手动禁止或者解禁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對Apache伺服器進行安全防護的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn