全网最全安全加固指南之中间件加固

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 全网最全安全加固指南之中间件加固

全网最全安全加固指南之中间件加固

中间件加固

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首选,怎么配置和使用,网络教程铺天盖地,这里就不造轮子啦!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
APP安全加固怎么做?加固技术、加固方法、加固方案
102 3
|
7月前
|
存储 移动开发 安全
如何实现APP安全加固?加固技术、方法和方案
如何实现APP安全加固?加固技术、方法和方案
616 0
|
7月前
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
APP安全加固怎么做?加固技术、加固方法、加固方案
193 0
|
7月前
|
安全 Ubuntu Linux
linux|奇怪的知识---账号安全加固,ssh安全加固
linux|奇怪的知识---账号安全加固,ssh安全加固
603 0
|
7月前
|
安全 Java Android开发
Android App开发之安全加固中反编译、代码混淆、第三方加固以及重签名的讲解及实战(图文解释 简单易懂)
Android App开发之安全加固中反编译、代码混淆、第三方加固以及重签名的讲解及实战(图文解释 简单易懂)
434 0
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
前面的文章中我们为大家介绍了移动应用安全检测的测试依据、测试方法、和测试内容,本文我们着重分享App安全加固的相关内容。
|
安全 Unix Linux
全网最全安全加固指南之linux系统加固
全网最全安全加固指南之linux系统加固
1819 0
|
存储 缓存 安全
全网最全安全加固指南之windows系统加固
全网最全安全加固指南,呕心沥血总结本篇文章,可能技术含量不高,但也是极其耗费精力。安服道友们,直接`Ctrl + F` 哪里忘了搜哪里。
5602 0
|
SQL 存储 安全
全网最全安全加固指南之数据库加固
全网最全安全加固指南之数据库加固
962 0
|
安全 Unix Linux
系统加固之Linux安全加固
系统加固之Linux安全加固
335 0
系统加固之Linux安全加固