全网最全安全加固指南之中间件加固
中间件加固
IIS加固
IIS安装及版本的选择
在IIS安装过程中,根据具体的业务需求,只安装必要的组件,以避免安装其他一切不必要的组件带来的安全风险。如网站正常运行只需要ASP环境,那我们就没必要安装.net组件。
对于IIS版本,至少要在6.0以上,IIS5.0存在严重的安全漏洞,不过现在运行IIS5.0的服务器已经非常少了,对于这一点不用太过担心。
删除默认网站
把IIS默认安装的站点删除或禁用掉
禁用不必要的Web服务扩展
打开IIS 管理器看是否有不必要的“Web服务扩展”,如果有则禁用掉。,检查是
删除不使用的应用程序扩展
在IIS管理器中,右击网站“属性”,点击主目录选项卡,点击“应用程序设置”的配置按钮。
根据网站的实际情况,只保留必要的应用程序扩展,其他的一律删除,尤其是像cer、asa这样极其危险的扩展,而且一般网站也不需要它。
IIS访问权限配置
如果IIS中有多个网站,建议为每个网站配置不同的匿名访问账户。
方法:
a. 新建一个账号,加入Guests组
b. “网站属性”—>“目录安全性”—>“身份验证和访问控制”,把“启用匿名访问”处,用刚新建的账户代替默认账户。
正确设置网站目录的权限和IIS权限
网站分区为NTFS分区。网站目录出system和administrator组有完全控制权限外,其他用户只需要有读取权限。
IIS6管理器中设置:
- 只选择“读取、记录访问、索引资源”
- 禁止“写入”和“脚本资源访问”,避免IIS Put上传攻击。
- 禁止“目录浏览”,避免目录遍历攻击。
正确设置网站目录的权限和IIS权限
应用程序设置中的执行权限设置为“纯脚本”
原则
- 目录有写入权限,一定不要分配执行权限
- 目录有执行权限,一定不要分配写入权限
- 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限
- 其他目录一般只分配“读取”和“记录访问”权限即可。
设置IP访问限制
正确设置IIS日志
在IIS管理器中,右击网站“属性”,点击网站选项卡,确定已经选择“启用日志记录”,活动日志格式为“W3C扩充日志文件格式”
接着修改IIS日志文件保存路径,默认保存在“C:\WINDOWS\system32\LogFiles”目录下,这里修改为自定义路径。
建议保存在非系统盘路径,并且IIS日志文件所在目录只允许Administrators组用户和SYSTEM用户访问。
自定义IIS返回的错误信息
禁止向客户端发送详细的ASP错误信息
在IIS管理器中--->“属性”--->“主目录”--->“配置”--->“调试”,选择“向客户端发送下列文本错误消息”项,自定义出错时返回的错误信息
Apache安全加固
隐藏Apache banner信息
vim /etc/httpd/conf/httpd.conf
#在出现错误页的时候不显示服务器操作系统的名称
ServerTokens OS 修改为:ServerTokens Prod
#不回显apache版本信息
ServerSignature On 修改为:ServerSignature Off
禁止目录浏览
Options Indexes FollowSymLinks
修改为:
vim /etc/httpd/conf/httpd.conf
Options FollowSymLinks
限制IP访问
<Directory "/var/www/html/aa/">
Options Indexes MultiViews FollowSymLinks
AllowOverride AuthConfig
AuthType Basic
AuthName "testuser's paasword"
AuthUserFile /usr/local/etc/passwd.httpd
Require user testuser
Order allow,deny
Allow from 172.16.1.0
</Directory>
service httpd restart
停止 httpd:[确定]
启动 httpd:[确定]
限制禁止访问的文件夹,例如后台目录
<Directory "/var/www/html/33">
Deny from all
</Directory>
防止Apache的解析漏洞
Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止,因此;如果web目录下存在以类似webshell.php.test这样格式命名的文件,Apache在解析时因为不认识.test这个文件类型,所以会一直往前解析,当解析到.php时,它认识了,因此会将它解析为PHP文件。
Apache的这种解析特性经常被用来绕过Web应用的文件上传检测。当Web应用的文件上传功能在检测上传文件的合法性时,如果仅通过检测上传文件的扩展名来判断文件是否合法,就可以利用Apache的这种文件名解析特征绕过Web应用的检测。
禁止httpd解析文件
禁止httpd解析index.php.jpg文件
可以在httpd.conf配置文件中添加以下内容来阻止Apache解析这种文件。
修改后配置:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
错误页面重定向
在.htaccess 文件中加入如下内容即可:
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 为要设置的错误页面。
重新启动 Apache 服务生效
日志设置
编辑 httpd.conf 配置文件,设置日志记录文件、记录内容、记录 格式。其中,错误日志:
LogLevel notice #日志的级别
ErrorLog logs/error_log #日志的保存位置(错误日志)
访问日志:
LogFormat %h %l %u %t \”%r\” %>s %b “%{Accept}i\”%{Referer}i\” \”%{User-Agent}i\””
combined
CustomLog logs/access_log combined (访问日志)
在Apache httpd 中将在这个文件中存放诊断信息和处理请求中出现的错误。 若要将错误日志送到 Syslog,则设置: ErrorLog syslog。
CustomLog 指令设置访问日志的文件名和位置。 访问日志中会记录服务器所处理的所有请求。LogFormat 设置日志格式。 LogLevel 用于调整记录在错误日志中的信息的详细程度,建议设置为 noti判定条件
查看 logs 目录中相关日志文件内容,记录完整。
拒绝服务防范
根据业务需要,合理设置 session 时间,防止拒绝服务攻击
vim httpd.conf 配置文件
Timeout 10 #客户端与服务器端建立连接前的时间间隔
KeepAlive On
KeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒
注:此处为一建议值,具体的设定需要根据现实情况。
禁用CGI
如果服务器上不需要运行 CGI 程序,建议禁用 CGI
修改配置vim /etc/httpd/conf/httpd.conf,把 cgi-bin 目录的配置和模块都注释掉
#LoadModule cgi_module modules/mod_cgi.so
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
防止SQL注入及远程包含
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。
php.ini中有一个设置:
magic_quotes_gpc = Off 改为 magic_quotes_gpc = On
在远程文件包含漏洞中,攻击者可以通过访问外部地址来加载远程代码,所以一定要设置:
allow_url_fopen = off
nginx服务器安全加固
禁用autoindex
确保nginx.conf配置文件上禁用autoindex,即autoindex off或者没有配置autoindex
关闭服务器标记
如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息。nginx.conf配置如下:
http{
include naxsi_core.rules;
include mime.types;
default_type application/octet-stream;
sendfile on;
server_tokens off;
... ...
同时修改/usr/local/nginx/conf/fastcgi_params
将里面的fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
修改为:fastcgi_param SERVER_SOFTWARE nginx;
自定义缓存
设置自定义缓存以限制缓冲区溢出攻击。nginx.conf配置如下:
http{
... ...
server{
... ...
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 1m;
large_client_header_buffers 4 8k;
注:上述的参数不是最优参数,仅供参考。
timeout设置
设置timeout设低来防御DOS攻击,nginx.conf配置如下:
http {
... ...
client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30 30;
send_timeout 10;
配置日志
鉴于日志的输出格式还未确定,目前暂时先使用Nginx默认的日志格式nginx.conf
配置如下:
http {
......
log_format main '$remote_addr - $remote_user [$time_local]"$request" ''$status $body_bytes_sent "$http_referer"''"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/ access.log main;
限制访问
在目前的应用系统中值使用到POST和GET方法,所以除了它们之外,其他方式的请求均可拒绝。
Nginx.conf
配置如下:
server{
... ...
if($request_method !~ ^(GET|HEAD|POST)$) {
return404;
}
... ...
限制访问IP
模块 ngx_http_access_module 允许限制某些IP地址的客户端访问。
如下范例:
location/ {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
注:规则按照顺序依次检测,直到匹配到第一条规则。
在这个例子里,IPv4的网络中只有 10.1.1.0/16 和 192.168.1.0/24允许访问,但 192.168.1.1除外
对于IPv6的网络,只有2001:0db8::/32允许访问。
集成Naxsi模块
Naxsi模块是一个开放源代码、高效、低维护规则的Nginx web应用防火墙模块。Naxsi的主要目标是加固web应用程序,以抵御SQL注入、跨站脚本、跨域伪造请求、本地和远程文件包含漏洞。
第一步:下载naxsi
https://github.com/nbs-system/naxsi
注:如果不能上网可以事先下载,再上传到服务器中。
开源waf首选,怎么配置和使用,网络教程铺天盖地,这里就不造轮子啦!