Apache服务安全加固及Apache优化_apache扩展名解析加固


将Options Indexes FollowSymLinks中的Indexes去掉,就可以禁止 Apache 显示该目录结构。Indexes的作用就是当该目录下没有 index.html 文件时,自动显示目录结构。


重新启动 Apache 服务。


## 六、错误页面重定向


Apache 错误页面重定向功能可以防止敏感信息泄露。


1、修改 httpd.conf 配置文件:



ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html


**注意:** Customxxx.html 为要设置的错误页面。


2、重新启动 Apache 服务。


注意: 此项配置需要应用系统设有错误页面,或者不在 httpd 中设置,而完全由业务逻辑实现。


## 七、拒绝服务防范


根据业务需要,合理设置 session 时间,防止拒绝服务攻击。


1、修改 httpd.conf 配置文件:



Timeout 10 #客户端与服务器端建立连接前的时间间隔
KeepAlive On
KeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒 注:此处为一建议值,具体的设定需要根据现实情况。


2、重新启动 Apache 服务。


**注意:** 默认值为Timeout 120,KeepAlive Off,KeepAliveTimeout 15,该项设置涉及性能调整。


## 八、隐藏 Apache 的版本号


隐藏 Apache 的版本号及其它敏感信息。


修改 httpd.conf 配置文件:



ServerSignature Off ServerTokens Prod


## 九、关闭 TRACE功能


关闭 TRACE 功能,防止 TRACE 方法被访问者恶意利用。


在 /etc/httpd/conf/httpd.conf 配置文件中添加以下设置参数:



TraceEnable Off


注意: 该参数适用于 Apache 2.0 以上版本。


## 十、禁用 CGI


如果服务器上不需要运行 CGI 程序,建议禁用 CGI。


如果没有CGI程序,可以修改 /etc/httpd/conf/httpd.conf 配置文件,把 cgi-bin 目录的配置和模块都进行注释。



#LoadModule cgi_module modules/mod_cgi.so
#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”

#AllowOverride None

Options None

#Order allow,deny
#Allow from all


## 十一、绑定监听地址


服务器有多个 IP 地址时,只监听提供服务的 IP 地址。


执行以下命令查看是否绑定 IP 地址。



cat /etc/httpd/conf/httpd.conf|grep Listen


修改 /etc/httpd/conf/httpd.conf 配置文件。



Listen x.x.x.x:80


监听功能默认监听所有地址,如果服务器只有一个 IP 地址可不修改该项设置,如果有多个 IP 可根据需要进行设置。


## 


十二、删除缺省安装的无用文件  
 删除缺省安装的无用文件。


* 删除缺省 HTML 文件:



rm -rf /usr/local/apache2/htdocs/*


* 删除缺省的 CGI 脚本:



rm –rf /usr/local/apache2/cgi-bin/*


* 删除 Apache 说明文件:



rm –rf /usr/local/apache2/manual


* 删除源代码文件:



rm -rf /path/to/httpd-2.2.4*


* 删除 CGI。  
 可根据实际情况删除,一般情况下 /var/www/html /var/www/cgi-bin 默认就是空的。


**注意:** 根据安装步骤不同和版本不同,某些目录或文件可能不存在或位置不同。


## 十三、禁用非法 HTTP 方法


禁用 PUT、DELETE 等危险的 HTTP 方法。


修改 httpd.conf 配置文件,只允许 get、post 方法。



Order Allow,Deny Deny from all

您可根据需要进行设置,如果需要用到 PUT 或 Delete 等 HTTP 方法的话,在 /etc/httpd/conf/httpd.conf 配置文件中相应添加即可。


## apache日志分析


1.查看apache的进程数



ps -aux | grep httpd | wc -l


2.分析日志查看当天的ip连接数



cat default-access_log | grep “10/Dec/2010″ | awk ‘{print $2}’ | sort | uniq -c | sort -nr


**3.查看指定的ip在当天究竟访问了什么url**



cat default-access_log | grep “10/Dec/2010″ | grep “218.19.140.242″ | awk ‘{print $7}’ | sort | uniq -c | sort -nr


**4.查看当天访问排行前10的url**



cat default-access_log | grep “10/Dec/2010″ | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head -n 10


**5.看到指定的ip究竟干了什么**



cat default-access_log | grep 218.19.140.242 | awk ‘{print $1″\t”$8}’ | sort | uniq -c | sort -nr | less


**6.查看访问次数最多的几个分钟(找到热点)**



awk ‘{print $4}’ default-access_log |cut -c 14-18|sort|uniq -c|sort -nr|head


## 十四、Apache解析漏洞(换行解析+多后缀解析)复现


**Apache两个解析漏洞环境在httpd目录下:**


一个是换行解析漏洞(CVE-2017-15715),另一个是多后缀解析。(ssi的rce本次不复现)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072410333521.png)


## 复现一:换行解析


## 一、原理


**Apache可以通过mod\_php来运行PHP网页。**


其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,解析到下面例子时候:



1.php\x0A


将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。(%0a即编码中的换行符,于是这个解析漏洞叫换行解析)


## 二、复现过程


首先进入到换行解析漏洞环境目录下开启环境:



service docker start

docker-compose build

docker-compose up -d


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724103420479.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 接着访问虚拟机ip:8080即可:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072410343635.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 先上传一个简单的小马看看:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724103459633.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)


被拦了,开始尝试下换行符后缀:


在Hex编码下查看,该处插入(insert byte)0a作为换行符  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724103510843.png)  
 放包,访问 ip/2.php%0A:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072410352368.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 **phpinfo():**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724104606782.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 退出docker环境:  
 docker-compose down


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724104616274.png)


## 复现二:多后缀解析


## 一、原理


Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:



AddType text/html .html
AddLanguage zh-CN .cn


其中,.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。


以上就是Apache多后缀的特性。


如果运维人员给.php后缀增加了处理器:



AddHandler application/x-httpd-php .php


那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。


## 二、复现过程


同上,进入多后缀解析漏洞的目录,开启环境:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724104659292.png)  
 访问 虚拟机ip:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724104708830.png)  
 先上传小马:被拦。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/202007241047389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 接着利用多后缀解析的漏洞,修改文件后缀名:.php.jpg


成功,并返回文件的路径  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724104743860.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)  
 访问ip/路径,并输入phpinfo:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072410475058.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTA3OTc3,size_16,color_FFFFFF,t_70)


## Apache优化方法


**1、控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换。**


进程间的数据交换会占用很大内存,数据交换产生的滞后使用户总感觉”不够快”,所以用户就可能去按”停止”和”刷新”,从而带来更大的负载。一般建议小网站将MaxClients设置为12~24。


**2、选择更好的硬件,CPU、内存、硬盘等等**


这句很鸡肋啦,如果有更多的银子,谁不愿意换更好的呢?


**3、定期更新操作系统,打上系统补丁;如果你的操作系统支持sendfile()系统调用,则务必安装带有此功能的版本或补丁**


在支持sendfile的系统中,Apache2可以更快地发送静态内容而且占用较少的CPU时间。


**4、HostnameLookups设置为off**


尽量较少DNS查询的次数。如果你使用了任何”Allow from domain”或”Deny from domain”指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以,为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)。


**5、为Directory加上FollowSymLinks**


如果网站空间中没有使用 Options FollowSymLinks ,Apache就必须执行额外的系统调用以验证符号连接。例如:在请求”/index.html”时,Apache将对”/www”、”/www/htdocs”、”/www/htdocs/index.html”执行lstat()调用。而且lstat()的执行结果不被缓存,因此对每一个请求都要执行一次。


**6、将AllowOverride设置为None**


对于使用虚拟主机的朋友可能会觉得不方便,这样设置将会使.htaccess中的设置失效,如果实在需要,并且在有条件的情况下,请在conf配置文件中直接写入rewrite规则


**7、禁用内容协商**


尽管在实践中,内容协商的好处大于性能的损失,如果你很在意那一点点的性能损失,则可以禁止使用内容协商。但是仍然有个方法可以提高服务器的速度,就是不要使用通配符。


**8、MaxRequestsPerChild设置为非0以防止内存泄漏**


MaxRequestsPerChild用于控制apache子进程在何时销毁,默认为0,代表永不销毁子进程,这可能会存在内存泄漏的风险,建议设置为10000


**9、KeepAlive与KeepAliveTimeOut**


如果你使用的使mpm\_prefork模式(apache默认安装),那么建议你将KeepAlive设置为off;因为,开启keepalive会为每个客户端建立一个连接,prefork不会创建线程,估计100个用户同时访问你的网站,apache就会挂了~,如果你实在想开启,那么请将KeepAliveTimeOut 时间设置更短些,例如5,默认是60秒呢


**10、不要静态编译apache**


尽管会有很多人和你说静态编译的好处,同时,你自己也想自己编译一把,以体验乐趣~但是,将模块已静态方式编译进apache绝对不是一个好选择,尤其是对于缺银子的站长们来说,一个配置不当,apache会在启动时就占用光你所有的内存,最后拖垮服务器。


参考链接 :


Apache服务安全加固 :https://help.aliyun.com/knowledge\_detail/52981.html


apache日志分析 :https://www.jianshu.com/p/02ac1efd5adb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值