注:最近部門領導要求梳理一份常用工具的安全加固參考手冊,基於此需求,針對工作中經常遇到的被漏掃發現的問題,進行了梳理,參考了官網內容,不足之處,還望指正,版本環境爲Apache2.4.34 若有參數不能正常使用,請參考Apache官網。
Apache安全加固及規範參考
Apache操作規範
部署規範
統一的編譯參數:
參考配置:
1)、提前安裝依賴環境apr、apr-util、pcre、zlib
2)、編譯參數
./configure --prefix=/asop/apache2.4.34 --enable-so --enable-mods-shared=all --with-apr=/usr/local/apr1.5/
--with-apr-util=/usr/local/apr-util1.5.3/ --with-pcre=/usr/local/pcre8.43/ --with-z=/usr/local/zlib1.2.11/ --with-mpm=prefork
配置規範
1)、站點統一配置
參考配置:
取消虛擬主機註釋
#Include conf/extra/httpd-vhosts.conf
註釋掉默認虛擬主機
<VirtualHost *:80>
ServerAdmin ****@mail.com
DocumentRoot "/asop/apache2.4.34/docs"
ServerName www.***.com
ErrorLog ErrorLog "| /asop/apache2.4.34/bin/rotatelogs /asop/apache2.4.34/log/www.***.com-%Y-%m-%d-error-log 86400 480"
CustomLog "| /asop/apache2.4.34/bin/rotatelogs /asop/apache2.4.34/logs/www.***.com-%Y-%m-%d-access_log 86400 480" combined
</VirtualHost>
2)、配置統一的日誌格式
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
3)、日誌切割
CustomLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/www.***.com-%Y-%m-%d-access_log 86400 480"
ErrorLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/www.***.com-%Y-%m-%d-error-log 86400 480"
Apache安全加固
服務信息泄露加固
隱藏版本信息
#參考配置完成後,http的請求頭中將不在顯示Apache版本信息,但是會依然顯示web服務器名稱
參考配置:
ServerSignature Off
ServerTokens Prod
隱藏請求頭中的server信息
#隱藏web服務器的名稱或者設置混淆server信息,需要在編譯安裝之前調整源碼,或者安裝完成後使用源碼修改重新編譯
參考配置:
vi httpd-2.4.34/include/ap_release.h
#define AP_SERVER_BASEVENDOR "Assoft"
#define AP_SERVER_BASEPROJECT "Assoft"
#define AP_SERVER_BASEPRODUCT "GW"
防Dos攻擊加固
1)、超時類限制
RequestReadTimeout
#主要用來設置TLS握手的超時時間和從客戶端接收請求頭和body的超時,若未配置https證書,可以不用配置
#需要版本大於2.3.14和2.2.15以上版本,handshake需要版本高於2.4.39
#需要依賴mod_reqtimeout
配置參考:
LoadModule reqtimeout_module modules/mod_reqtimeout.so 確認是否打開註釋
RequestReadTimeout handshake=3 header=5 body=10
TimeOut
#設置超時等待I/O的時間, 默認爲60秒,建議調低
#開啓長連接
配置參考:
TimeOut 10
KeepAlive 長連接相關設置
#開啓長連接(KeepAlive on),允許通過一個Tcp連接發送多個請求
#應配置長連接超時時間(KeepAliveTimeout),降低服務器負載
#設置每個長連接能處理的最大請求數(MaxKeepAliveRequests),默認爲100,設置爲0則不限制
配置參考:
KeepAlive on
KeepAliveTimeout 5 (默認值)
MaxKeepAliveRequests 1000
2)、資源限制
Serverlimit
#可配置使用的最大進程數
MaxConnectionsPerChild
#設置單個子進程能處理的最大連接數,到達最大處理量後,該子進程結束,默認爲0,不限制,建議設置爲非0的值,以避免內存泄露
配置參考:
MaxConnectionsPerChild 5000
MaxRequestWorkers
#設置服務器子進程(線程)的最大併發請求數,超過此值的請求將進行排隊
#對於 prefork 模塊,此值表示的爲子進程的處理數量,默認爲256,增加的同時,需要同時增加ServerLimit 配置參考:
#對於event 或 worker ,此值表示可以用來處理的線程的總數,默認爲16(Serverlimit)*25(ThreadsPerChild),所以,增加此值的時候,需要同時設置Serverlimit和ThreadsPerChild的值
#prefork模式的處理請求的方式爲:通過不同的子進程來處理用戶請求,每個子進程處理一個請求,優點是每個子進程異常,不會影響其他子進程的請求處理,缺點是每個進程的創建需要佔用系統資源
#work模式的處理請求的方式爲:通過子進程創建線程來響應用戶請求
配置參考:
prefork模式下:
<IfModule mpm_prefork_module>
StartServers 50
MinSpareServers 50
MaxSpareServers 80
MaxRequestWorkers 1000
MaxRequestsPerChild 10000
</IfModule>
Serverlimit 1500
work模式下:
<IfModule mpm_worker_module>
StartServers 5
MaxRequestWorkers 1000
MinSpareThreads 20
MaxSpareThreads 50
ThreadsPerChild 100
MaxRequestsPerChild 15000
</IfModule>
Serverlimit 1500
windows下的win_mpm:
<IfModule mpm_winnt_module>
ThreadsPerChild 1500
MaxRequestsPerChild 15000
</IfModule>
目錄權限加固
修改 bin conf logs 權限爲755
chmod 755 bin conf logs
修改 httpd 文件權限爲 511
chmod 511 bin/httpd
服務端接口(CGI)加固
禁用CGI程序
註釋掉mod_cgid.so
#ScriptAlias /cgi-bin/ "/asop/apache2.4.34/cgi-bin/"
刪除Apache目錄下的CGI目錄
rm -rf cgi-bin
默認訪問功能加固
1)、禁止遍歷整個目錄
<Directory "/">
Require all denied
</Directory>
2)、禁止映射至系統根目錄
打開註釋 LoadModule userdir_module modules/mod_userdir.so
文檔末尾加入:UserDir disabled root
禁用不安全的請求方法
HTTP1.0定義了三種請求方法: GET、POST、HEAD,HTTP1.1新增了五種請求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT,其中常用的爲http1.0定義的GET和POST方法,建議禁用除此兩種方法以外的所有方法。
參考配置:
打開註釋:LoadModule allowmethods_module modules/mod_allowmethods.so
文檔末尾加入:
<Location "/">
AllowMethods GET POST HEAD
</Location>
禁止目錄列出
目錄列出會在請求的資源不存在的情況下,將此目錄下的文件以列表形式列出
參考配置:
options -Indexes FollowSymLinks
防止點擊劫持
web上點擊劫持主要是通過iframe嵌套方式實現的,所以,預防的主要辦法也就是通過請求頭限制iframe的嵌套
#X-Frame-Options 這個請求頭可以有三個可選值:DENY 拒絕所有當前頁面加載任何iframe嵌套
#SAMEORIGIN:iframe頁面的地址只能爲同源域名下的頁面
#ALLOW-FROM origin:允許iframe加載的頁面地址
參考配置:
Header always append X-Frame-Options SAMEORIGIN
自定義錯誤頁面
配置參考:
#http段中加入如下信息
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html