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

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

Jun 27, 2017 am 09:51 AM
apache

這篇文章主要介紹了配置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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1243
24
apache中cgi目錄怎麼設置 apache中cgi目錄怎麼設置 Apr 13, 2025 pm 01:18 PM

要在 Apache 中設置 CGI 目錄,需要執行以下步驟:創建 CGI 目錄,如 "cgi-bin",並授予 Apache 寫入權限。在 Apache 配置文件中添加 "ScriptAlias" 指令塊,將 CGI 目錄映射到 "/cgi-bin" URL。重啟 Apache。

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

apache80端口被佔用怎麼辦 apache80端口被佔用怎麼辦 Apr 13, 2025 pm 01:24 PM

當 Apache 80 端口被佔用時,解決方法如下:找出佔用該端口的進程並關閉它。檢查防火牆設置以確保 Apache 未被阻止。如果以上方法無效,請重新配置 Apache 使用不同的端口。重啟 Apache 服務。

怎麼查看自己的apache版本 怎麼查看自己的apache版本 Apr 13, 2025 pm 01:15 PM

有 3 種方法可在 Apache 服務器上查看版本:通過命令行(apachectl -v 或 apache2ctl -v)、檢查服務器狀態頁(http://<服務器IP或域名>/server-status)或查看 Apache 配置文件(ServerVersion: Apache/<版本號>)。

怎麼查看apache版本 怎麼查看apache版本 Apr 13, 2025 pm 01:00 PM

如何查看 Apache 版本?啟動 Apache 服務器:使用 sudo service apache2 start 啟動服務器。查看版本號:使用以下方法之一查看版本:命令行:運行 apache2 -v 命令。服務器狀態頁面:在 Web 瀏覽器中訪問 Apache 服務器的默認端口(通常為 80),版本信息顯示在頁面底部。

apache怎麼配置zend apache怎麼配置zend Apr 13, 2025 pm 12:57 PM

如何在 Apache 中配置 Zend?在 Apache Web 服務器中配置 Zend Framework 的步驟如下:安裝 Zend Framework 並解壓到 Web 服務器目錄中。創建 .htaccess 文件。創建 Zend 應用程序目錄並添加 index.php 文件。配置 Zend 應用程序(application.ini)。重新啟動 Apache Web 服務器。

apache不能啟動怎麼解決 apache不能啟動怎麼解決 Apr 13, 2025 pm 01:21 PM

Apache 無法啟動,原因可能有以下幾點:配置文件語法錯誤。與其他應用程序端口衝突。權限問題。內存不足。進程死鎖。守護進程故障。 SELinux 權限問題。防火牆問題。軟件衝突。

apache怎麼刪除多於的服務器名 apache怎麼刪除多於的服務器名 Apr 13, 2025 pm 01:09 PM

要從 Apache 中刪除多餘的 ServerName 指令,可以採取以下步驟:識別並刪除多餘的 ServerName 指令。重新啟動 Apache 使更改生效。檢查配置文件驗證更改。測試服務器確保問題已解決。

See all articles