中间件的安全加固-----apache、nginx的安全配置
前⾔:Web 服务器是 Web 应⽤的载体,如果这个载体出现安全问题,那么运⾏在其中的 Web 应⽤程序的安全也⽆法得到保障。因此Web 服务器的安全不容忽视。
纵观 Apache 的漏洞史,它曾经出现过许多次⾼危漏洞。但这些⾼危漏洞,⼤部分是由 Apache 的 Module 造成的,Apache 核⼼的⾼危漏洞⼏乎没有。Apache 有很多官⽅与⾮官⽅的 Module,默认启动的 Module 出现过的⾼危漏洞⾮常少,⼤多数的⾼危漏洞集中在默认没有安装或 enable 的 Module 上。
apache安全配置
⾸先来看看apache的运⾏原理
Apache是基于模块化设计的,各个模块在系统启动的时候按需载⼊。Apache对于php的解析,就是通过众多Module中的php Module来完成的。
所以,php加载成为了apache的⼀个模块,可以把apache和php当成⼀个整体看待。
当浏览器请求⼀个php⽂件时,我们可以理解为apache直接处理返回给浏览器结果,服务器上也只会
有httpd进程,⽽不会有php进程。
apache的⼀些配置主要是通过f来实现的,但是可以在f中开启对.htaccess的⽀持,然后在.htaccess中进⾏配置。不过⼀般情况下,不应该使⽤.htaccess⽂件,除⾮你对主配置⽂件没有访问权限。.htaccess⽂件应该被⽤在内容提供者需要针对特定⽬录改变服务器的配置⽽⼜没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许⽤户通过.htaccess⽂件⾃⼰修改配置。
Apache安全配置⽅案
1.选择漏洞较少的apache版本,并打上安全补丁
查看apache版本号:httpd -v
然后在sebug上搜索该版本号有什么漏洞,可根据提⽰提升版本或者打上补丁
2.关闭⼀些不使⽤的模块及功能
可在LoadModule前加#,来注释掉⼀些不使⽤的模块
3.隐藏banner信息
ServerTokens OS 修改为:ServerTokens Prod (在出现错误页的时候不显⽰服务器操作系统的名称)ServerSignature On 修改为:ServerSignature Off(不回显apache版本信息)
4.删除默认⽹站及页⾯
删除默认的页⾯,防⽌泄露服务器信息
5.可修改banner信息
6.配置f禁⽌⽬录浏览
将Options Indexes FollowSymLinks 改为 Options -Indexes FollowSymLinks
7.配置f设置默认⽂档
DirectoryIndex index.html
nginx和apache区别
8.合理配置apache的运⾏账户
为apache单独建⽴⼀个运⾏账户及账户组,并在f配置
User apache
Group apache
9.合理控制apache运⾏账户对磁盘的写⼊,执⾏权限
取消apache运⾏账户对⽹站⽬录的写⼊权限,上传⽬录除外,其他⾮⽹站⽬录尽量不给权限
10.合理控制apache运⾏账户对sh等的执⾏权限
取消掉了运⾏账户对sh等的执⾏权限后能够防⽌webshell通过默认的sh执⾏命令
11.配置f取消对上传⽬录的php执⾏权限
<Directory "/var/www/html/aaa">
<FilesMatch ".(php|php5)$">
Deny from all
</FilesMatch>
</Directory>
12.配置f限制禁⽌访问的⽂件夹,例如后台⽬录
<Directory “/var/www/html/aaa”>
Deny from all
13.配置f限制⼀些特殊⽬录的特定ip访问,如内部接⼝等。
<Directory "/var/www/html/aaa">
Order Deny,Allow
Deny from all
Allow from 192.168.1.111
</Directory>
14.配置f限制⼀些⽂件类型的访问,如txt的⽇志
<Files ~ ".txt$">
Order allow,deny
Deny from all
</Files>
15.配置f修改修改监听端⼝来防⽌⼀些内部系统被扫描
这样可以防⽌⼀些直接扫描80端⼝的⿊客
Listen 12345
16.关闭对.htaccess的⽀持 AllowOverride All 改为 AllowOverride None
17.配置f记录访问⽇志
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
<;
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.记录⽇志
最后,当⿊客已经光顾之后,我们也只能通过⽇志来分析,看问题出在哪⾥了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。