Apache加固参考及操作规范

注:最近部门领导要求梳理一份常用工具的安全加固参考手册,基于此需求,针对工作中经常遇到的被漏扫发现的问题,进行了梳理,参考了官网内容,不足之处,还望指正,版本环境为Apache2.4.34 若有参数不能正常使用,请参考Apache官网。

Apache安全加固及规范参考

    • Apache操作规范
      • 部署规范
      • 配置规范
    • Apache安全加固
      • 服务信息泄露加固
      • 防Dos攻击加固
      • 目录权限加固
      • 服务端接口(CGI)加固
      • 默认访问功能加固
      • 禁用不安全的请求方法
      • 禁止目录列出
      • 防止点击劫持
      • 自定义错误页面

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

你可能感兴趣的:(web服务那些事,运维那些事,linux,apache,运维,centos)