中间件的安全加固-----apache、nginx的安全配置

前言:Web 服务器是 Web 应用的载体,若是这个载体出现安全问题,那么运行在其中的 Web 应用程序的安全也没法获得保障。所以 Web 服务器的安全不容忽视。
在这里插入图片描述
纵观 Apache 的漏洞史,它曾经出现过许屡次高危漏洞。但这些高危漏洞,大部分是由 Apache 的 Module 形成的,Apache 核心的高危漏洞几乎没有。Apache 有不少官方与非官方的 Module,默认启动的 Module 出现过的高危漏洞很是少,大多数的高危漏洞集中在默认没有安装或 enable 的 Module 上。php

apache安全配置
首先来看看apache的运行原理
Apache是基于模块化设计的,各个模块在系统启动的时候按需载入。Apache对于php的解析,就是经过众多Module中的php Module来完成的。
在这里插入图片描述
因此,php加载成为了apache的一个模块,能够把apache和php当成一个总体看待。html

当浏览器请求一个php文件时,咱们能够理解为apache直接处理返回给浏览器结果,服务器上也只会有httpd进程,而不会有php进程。nginx

apache的一些配置主要是经过httpd.conf来实现的,可是能够在httpd.conf中开启对.htaccess的支持,而后在.htaccess中进行配置。不过通常状况下,不该该使用.htaccess文件,除非你对主配置文件没有访问权限。.htaccess文件应该被用在内容提供者须要针对特定目录改变服务器的配置而又没有root权限的状况下。若是服务器管理员不肯意频繁修改配置,则能够容许用户经过.htaccess文件本身修改配置。web

Apache安全配置方案
1.选择漏洞较少的apache版本,并打上安全补丁shell

查看apache版本号:httpd -v
而后在sebug上搜索该版本号有什么漏洞,可根据提示提高版本或者打上补丁

2.关闭一些不使用的模块及功能apache

可在LoadModule前加#,来注释掉一些不使用的模块

3.隐藏banner信息浏览器

ServerTokens OS  修改成:ServerTokens Prod (在出现错误页的时候不显示服务器操做系统的名称)
ServerSignature On 修改成:ServerSignature Off(不回显apache版本信息)

4.删除默认网站及页面安全

删除默认的页面,防止泄露服务器信息

5.可修改banner信息服务器

6.配置httpd.conf禁止目录浏览ide

将Options Indexes FollowSymLinks 改成 Options -Indexes FollowSymLinks

7.配置httpd.conf设置默认文档

DirectoryIndex index.html

8.合理配置apache的运行帐户

为apache单独创建一个运行帐户及帐户组,并在httpd.conf配置
User apache
Group apache

9.合理控制apache运行帐户对磁盘的写入,执行权限

取消apache运行帐户对网站目录的写入权限,上传目录除外,其余非网站目录尽可能不给权限

10.合理控制apache运行帐户对sh等的执行权限

取消掉了运行帐户对sh等的执行权限后可以防止webshell经过默认的sh执行命令

11.配置httpd.conf取消对上传目录的php执行权限

<Directory "/var/www/html/aaa">     
 <FilesMatch ".(php|php5)$">     
     Deny from all     
 </FilesMatch> 
</Directory>

12.配置httpd.conf限制禁止访问的文件夹,例如后台目录

<Directory “/var/www/html/aaa”>
Deny from all

13.配置httpd.conf限制一些特殊目录的特定ip访问,如内部接口等。

<Directory "/var/www/html/aaa">     
 Order Deny,Allow
 Deny from all
 Allow from 192.168.1.111    
</Directory>

14.配置httpd.conf限制一些文件类型的访问,如txt的日志

<Files ~ ".txt$"> 
 Order allow,deny 
 Deny from all 
</Files>

15.配置httpd.conf修改修改监听端口来防止一些内部系统被扫描
这样能够防止一些直接扫描80端口的黑客

Listen 12345

16.关闭对.htaccess的支持 AllowOverride All 改成 AllowOverride None

17.配置httpd.conf记录访问日志

Nginx 近年来出现的影响默认安装版本的高危漏洞却比 Apache 要多,所以多多关注 Nginx 的漏洞信息,并及时将软件升级到安全的版本,是很是有必要的一件事情。
就软件安全自己来看,Nginx 与 Apache 最大的区别在于,检查 Apache 安全时更多的要关注 Module 的安全,而 Nginx 则须要注意软件自己的安全,及时升级软件版本

nginx安全配置
1.禁止一个目录的访问
示例:禁止访问path目录

location ^~ /path { 
deny all; 
}

能够把path换成实际须要的目录,目录path后是否带有"/",带“/”会禁止访问该目录和该目录下全部文件。不带"/"的状况就有些复杂了,只要目录开头匹配上那个关键字就会禁止;注意要放在fastcgi配置以前。

2.禁止php文件的访问及执行 示例:去掉单个目录的PHP执行权限

location ~ /attachments/.*\.(php|php5)?$ { 
deny all; 
}

示例:去掉多个目录的PHP执行权限

location ~  
/(attachments|upload)/.*\.(php|php5)?$ { 
deny all; 
}

3.禁止IP的访问
示例:禁止IP段的写法:

deny 10.0.0.0/24;

示例:只容许某个IP或某个IP段用户访问,其它的用户全都禁止

allow  
x.x.x.x;  
allow 10.0.0.0/24;  
deny all;

须要解决的常见问题

1.让木立刻传后不能执行 针对上传目录,在nginx配置文件中加入配置,使此目录没法解析php。

2.让木马执行后看不到非网站目录文件 取消php-fpm运行帐户对于其余目录的读取权限。

3.木马执行后命令不能执行 取消php-fpm帐户对于sh的执行权限。

4.命令执行后权限不能太高 Php-fpm帐户不要用root或者加入root组。

最后总结:
其实一个web服务器的保护是分几个层次的(暂不考虑程序的漏洞):

1.隐藏本身
要保护一个web服务器首先得学会隐藏本身,对于一些内部系统,如后台,内部接口等,咱们能够经过改端口,限制ip等方式来不让黑客发现。

2.隐藏身份
对于多数web系统来讲,都是提供给外面的访问的,因此想隐藏本身实际上是很难的。可是咱们仍是要学会隐藏身份,能够经过改banner,该返回信息来隐藏身份来加大黑客攻击的难度。

3.选用安全的版本及修补一些已知的漏洞
其实前面两步都是很容易突破,而后获知一个web系统所使用的web服务器版本的,此时咱们能作的就是选择一个少漏洞的版本,及打上安全补丁。

4.作好安全配置
作好基础的安全配置,禁止目录浏览,设定默认文档,上传目录限制php执行等等,来阻挡黑客的入侵。

5.合理配置web服务进程帐户的权限
当黑客已经经过程序漏洞上传了一个webshell而且已经成功执行了,此时,就只能很好的配置服务进程的帐户权限,包括磁盘的读取写入,特殊程序如sh的执行,等等,这样能够讲危害降到最低。

6.记录日志 最后,当黑客已经光顾以后,咱们也只能经过日志来分析,看问题出在哪里了。