作者归档:佛山企业网站设计

Nginx之负载均衡 :两台服务器均衡(填坑)

第一步,两台服务器都要安装好Nginx和Tomcat,我这边的安装的是Nginx 1.16.1 Tomcat9;

第二步,安装完成之后,选择你要做均衡的那台服务器,,打开其Nginx 配置文件,在server代码块上面添加代码;

    #增加upstream代码块
upstream mydemo{
server 47.106.113.206:8080;
server 212.60.5.234:8080;
ip_hash;
}
server{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /www/server/phpmyadmin;
location / {
#重点在下面
proxy_pass http://mydemo;
}

第三步,测试

在每个服务器的Tomcat-WebApps的文件夹中,新建一个demo文件夹,然后新建文件index.html,可以把每个服务器的ip地址写上去,能区分出服务器的不同即可。

第四部,测试成功

第五步,填坑

如果你的服务器部署了宝塔面板,那么你可能遇到设置完成之后,怎么刷新都无法成功的情况。

在宝塔面板打开Nginx的配置文件,你会在最下面发现这样一行代码:#include /www/server/panel/vhost/nginx/*.conf;

这行代码是在网站设置的时候出现的,注释掉之后就可以成功负载均衡了,不注释能不能解决呢,我想是可以的,目前还在探索,有大佬能告知我一下也是非常感谢的。

必看!必看!必看!解决登录阿里云官网显示:您的登录IP不在管理员配置的登录掩码范围内相关问题

有的朋友在租了阿里云的服务器ESC,在进行一系列的操作以后再次登录阿里云官网会显示如下界面:

在网上搜索了很多文章,发现最后还是不能成功登录,就在脑袋昏昏沉沉、苦于无奈的时候,突然看到这篇文章,您放心,解决问题的步骤我都帮您树梳理好了,跟着步骤来操作,问题迎刃而解。
原因分析:
无法登录是因为你在之前的操作中不小心输入了登录掩码,所以是登录掩码在作怪。
解决方案:
1.下载阿里云客户端APP(在阿里云官方网站底部)

我给大家把二维码粘出来了,可直接扫码下载,也可以在手机上的应用商店里面下载(如应用宝等)

2.app下载完成,输入账号+密码,登录成功(app中登录不需要掩码登录)

3.在阿里云APP首页中搜索:登录掩码

4.点击搜索出来的第一个相关文档:为云账号设置登录掩码

5.点击操作步骤中的第一项:云账号登录阿里云控制台

6.点击app右上角头像处(头像有点小,但可以点击)

7.点击倒数第二项,登录掩码中的修改(全部删除,保留为空白,点击保存)

8.这个时候我们再次来到PC端登录阿里云官网,输入账号和密码,显示如下界面,登录成功

————————————————

宝塔官方的教程使用的是阿里云的主账号 AccessKeyId。本文所讲述的是通过 RAM 访问管理新建子帐号 AccessKey,对官方教程进行一定的补充。

定时备份到 OSS 的好处:异地容灾备份,一旦机器出现毁灭性故障,网站数据不会丢失。
阿里云 OSS:提供高可用的数据储存服务。

宝塔官方的教程(https://www.bt.cn/bbs/thread-1061-1-1.html)使用的是阿里的主账号 Ac­cessKeyId。而主账号的 Ac­cessKeyId 具有账户的完全控制权限,如果泄露了有很大的安全问题。本文所讲述的是通过 RAM 访问管理新建子帐号 Ac­cessKey,对官方教程进行一定的补充。

一、阿里云的配置

登陆主账号,前往 OSS 资源管理平台。

1.1 新建一个Bucket

名称随便写,地域最好选择离你服务器最近的节点
Tips: 阿里 OSS 储存的费用:
1, 中国大陆无免费额度,按量计费,可以买储存包抵扣。
2, 中国大陆以外地区总共有 5GB 免费储存额度,超出部分按量计费,可以买储存包抵扣。
3, 只是用于备份的话不会产生公网流量的计费。
注意 OSS 的访问权限为私有,落地加密最好开启一下,聊胜于无也不收费。其他功能都不需要开启。

新建储存桶
新建储存桶
私有设置
私有设置

1.2 新建用户组

鼠标移动到头像处,在展开菜单中打开 RAM 访问管理页面:

访问管理的位置
访问管理的位置

新建一个用户组:

新建用户组
新建用户组

创建成功后点击新增用户组后面的“添加权限”,并在系统策略中搜索OSS,添加AliyunOSSFullAccessAliyunOSSReadOnlyAccess权限,并保存。

添加用户组权限
添加用户组权限

1.3 创建用户

创建一个用户,记得勾选编程访问!!!!

创建一个用户,记得勾选编程访问!!!!

创建一个用户,记得勾选编程访问!!!!

创建用户
创建用户

创建成功后保存展示的子用户AsscessKey IDAccessKey Secret到安全的地方,然后将这个用户添加到我们上一步新建的用户组中。如果您有多台服务器需要开启OSS备份功能,请为每一台机器建立一个子用户,并加入到我们建立的用户组中。

至此,阿里云的子用户和用户权限已经配置完成。

二、宝塔面板设置

1. 登陆宝塔面板,在软件管理中安装阿里云 OSS(免费)
2. 点击程序末尾的 “设置”,在如下页面填写您的 OSS 信息。
OSS 信息的填写可以参考宝塔官方教程,这里的 AccessKey ID 和 AccessKey Secret 我们填写刚才所记录的子用户密钥。
如果你有多台服务器需要备份,保存路径建议重命名一下,让每台路径不相同,方便后续的文件查找与管理。

3.最后在每台服务器的计划任务中配置定时备份网站到阿里云OSS即可。
建议的网站备份时间: 每三天一次,深夜进行。保留2份及以上。
建议的数据库备份时间:每天一次,深夜进行。保留5份及以上。

以后每当某台服务器不再计划使用时,您应该前往阿里云控制台停用相关的 Ac­cessKey 或者删除相关的子账户。这样做既能保证安全,也不会影响其他机器自动备份的进行。

某个js启蒙写法

$(document).ready(function() {
// 兼容菜单
$(".head .nav_xl_a").click(function () {
    if ($(".nav_xl_a").hasClass("a1")) {
        $(".nav_xl_a").removeClass("a1");
        $(".nav_xl").css("height","0px");
        $(".nav_xl ul").removeClass("l1");
    } else {
        $(".nav_xl_a").addClass("a1");
        $(".nav_xl").css("height","100vh");
        $(".nav_xl").css("background","black");
        $(".nav_xl ul").addClass("l1");
    }
    return false;
});
$(".head .nav_xl .ceng").click(function () {
    $(".nav_xl").css("height","0%");
    $(".nav_xl_a").removeClass("a1")
    $(".nav_xl ul").removeClass("l1");
    $(".page_nav_xl").removeClass("page_nav_hover").find('ul').stop(true,true).slideUp();
});

// 兼容菜单下拉
$('.page_nav_xl').click(function() {
    if($(this).hasClass("page_nav_hover"))
    {$(this).removeClass("page_nav_hover").find('ul').stop(true,true).slideUp();}
    else
    {$(this).addClass("page_nav_hover").find('ul').stop(true,true).slideDown();}
});

//底部二维码
$('.footer .media .wx').hover(function(){
    $(this).find('.code').stop(true,true).fadeIn();
},function(){
    $(this).find('.code').stop(true,true).fadeOut();
});
});

CSS Transform让百分比宽高布局元素水平垂直居中

很早以前了解过当元素是固定宽度和高度的时候,水平垂直高居中的方法可以设置margin的负值来使其居中,这个负值是元素的宽和高的一半,比如宽高是100px,那么就用margin-left:-50px;margin-top:-50px这样的写法。但如果这个元素的宽高是用百分比表示呢?

如果使用百分比来设置宽高的话,以前哪个负值方法已经用不上了,这个我们发现在一个小的窍门,就是使用CSS3中的transform的translate转换属性。下面来看代码实例:

HTML代码

<div class="center">您可以尝试改变浏览器大小,这个元素依然是水平垂直居中的哦!</div>

CSS代码

.center{
position: absolute;
top: 50%;
left: 50%;
width:50%;
height:30%;
padding:20px;
text-align:center;
background:#393;
color:#fff;
transform: translate(-50%, -50%);
}

查看演示

如果你直接复制代码无法使用,请添加-webkit-transform或-moz-transform前缀,案例中我使用了-prefix-free这个插件,插件作用就是不需要输入-moz-和-webkit-这些前缀。

通过宝塔面板计划任务自动逻辑备份 RDS MySQL 数据库到 OSS 对象存储

前言

今年双十一我在阿里云买了 ECS 云主机 2H4G3M(三年664.2大洋)和 RDS MySQL 5.7 数据库 1H1G(一年19.9大洋),当然这个活动价格是针对新用户的老用户与狗不得参与。

步骤

如何安装系统和宝塔面板我这里就不多说了,只简单介绍一下我 ECS 主机部署的系统环境:
主机系统:Centos 8.2
管理系统:宝塔面板 7.4.5
网站环境:Nginx 1.19.4 、PHP 7.4 、Redis 6.0.9 、本机无需安装 MySQL 数据库(因为有 RDS MySQL 5.7 数据库站库分离)

部署好主机环境以后把网站迁移到 ECS 新主机跑起来看看,速度还可以。因为主机带宽只有 3M 所以建议套一层 CDN 做个动静分离,把静态资源都缓存到 CDN 边缘节点就近访问。

再来说说如何定时自动备份网站数据,宝塔面板后台软件商店找到阿里云 OSS 插件安装,然后去阿里云官网开通 OSS 对象存储服务,用阿里云 OSS 的内网地域节点添加到宝塔面板刚刚安装到阿里云 OSS 插件中。

阿里云 OSS 插件设置截图

此时我们就可以通过宝塔面板计划任务创建自动备份任务了,但是由于我们的数据库是用的阿里云 RDS MySQL ,所以在宝塔计划任务中只能添加网站文件的备份无法添加 RDS 数据库的备份计划。这时我们需要一个脚本通过 ECS 主机内网把 RDS 数据库备份到 ECS 主机上,然后再通过阿里云 OSS 插件把备份好的 RDS 数据库存储到阿里云 OSSS。

dnf install git -y
cd /www/wwwroot/www.shuohi.com
git clone https://github.com/daniloaz/myphp-backup.git
cd /myphp-backupvi /myphp-backup.php //填写RDS数据库中的连接信息

我把脚本下载到了网站根目录中,编辑 /www/wwwroot/www.shuohi.com/myphp-backup/myphp-backup.php 文件,填写 RDS 数据库的相关信息。
注意:网站根目录下的 /myphp-backup 文件夹此时前台是可以访问的,我们需要设置网站配置文件添加 Nginx 规则禁止前台访问。

#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|myphp-backup)
{
    return 404;
}

最后添加两条宝塔计划任务,时间相隔1分钟目的是为了先把 RDS 数据库备份到网站根目录 /myphp-backup 文件夹内,然后再打包备份网站整体数据并通过 ECS 内网上传到 OSS 存储。

宝塔面板计划任务截图
//第一条宝塔面板计划任务
//任务类型:Shell脚本,
//任务名称:备份数据库[www_shuohi_com]
//执行周期:每天 3时 59分
//脚本内容:
rm -rf /www/wwwroot/www.shuohi.com/myphp-backup/myphp-backup-files && cd /www/wwwroot/www.shuohi.com/myphp-backup; php myphp-backup.php
//第二条宝塔面板计划任务
//任务类型:备份网站
//任务名称:备份网站[www.shuohi.com]
//执行周期:每天 4时 00分
//备份网站:www.shuohi.com 备份到:阿里云OSS 保留最新:30份
//排除规则:可以不填写

最后

不要忘记修改站点配置文件禁止前台访问 /myphp-backup 文件夹,否则你打包的数据库是有可能被前台访客下载的,当然你也可以把 /myphp-backup 文件夹放在站点根目录之外的其他地方这样更安全。

Github项目地址:https://github.com/daniloaz/myphp-backup

缓慢的Http拒绝服务攻击漏洞的验证(slowhttptest的安装)

目录

0x01 前言

主要记录缓慢的Http拒绝服务攻击漏洞的验证过程。

0x02 什么是Http拒绝服务攻击?

缓慢的http拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成了拒绝服务。
慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。以Slow headers为例,Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每40秒才向服务器发送一个HTTP头部,而Web服务器再没接收到2个连续的rn时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。

0x02 如何验证(检测)Http拒绝服务攻击?

需要的是slowhttptest这个工具,网上有安装教程,但是安装过程中老是出问题,最后解决,记录一下,过程如下。
首先安装libssl-dev

sudo apt-get install libssl-dev

然后

git clone https://github.com/shekyan/slowhttptest.git
cd slowhttptest
sudo ./configure
sudo make install

到这里时,遇到了问题:
1.png
折腾了半天也没有解决,后来使用官方WIKI(WIKI)的提示安装,依旧出现如下错误:
2.png
提示是缺少OpenSSL-devel,可是确信我是已经安装了的。
到这里想到前一种方法是编译成功了,就是执行编译的时候出错,所以想到一个方法。
直接把slowhttptest-1.7(官方方法)里面的所有内容复制粘帖在slowhttptest(git方法)里面,有重复的全部替换。
最后slowhttptest文件的内容如下:
3.png

然后进入该文件夹内,执行命令

sudo make install

4.png
成功安装。
尝试使用:
5.png

最后白帽子验证该漏洞的语句如下:
slowhttptest -c 1000 -X -g -o -slow_read_stats -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u http://blog.cnpanda.net -p 3

效果如下:

6.png
相关参数还是在附加下吧,虽然网上很多。

—a —开始开始值范围说明符用于范围头测试
-b 将字节限制的范围说明符用于范围头测试

  • c 的连接数限制为65539
  • d proxy host:port 用于指导所有流量通过web代理
  • e proxy host:port 端口用于指导只有探针交通通过web代理
  • h,B,R或x 指定减缓在头部分或在消息体,- R 允许范围检验,使慢读测试- x
  • g 生成统计数据在CSV和HTML格式,模式是缓慢的xxx。csv / html,其中xxx是时间和日期
  • i seconds 秒间隔跟踪数据在几秒钟内,每个连接
  • k 管道因子次数重复请求在同一连接慢读测试如果服务器支持HTTP管道内衬。
  • l 在几秒钟内,秒测试时间
  • n 秒间隔从接收缓冲区读取操作
  • o 文件定义输出文件路径和/或名称,如果指定有效- g
  • p 秒超时等待HTTP响应在探头连接后,服务器被认为是不可访问的
  • r seconds 连接速度
  • s 字节值的内容长度标题详细说明,如果指定- b
  • t verb 自定义
  • u URL 目标URL,相同的格式键入浏览器,e。g https://host[:port]/
  • v level 冗长等级0 – 4的日志
  • w 字节范围广告的窗口大小会选择从
  • x 字节最大长度的跟踪数据结束
  • y 字节范围广告的窗口大小会选择从
  • z 字节从接收缓冲区读取字节与单一的read()操作

0x03 修复建议

针对不同的Server其对慢速http拒绝服务攻击防范方法也不同,建议使用以下措施防范慢速http拒绝服务攻击:

【WebSphere】

1、限制 HTTP 数据的大小
在WebSphere Application Server 中进行如下设置:

任何单个 HTTP 头的默认最大大小为 32768 字节。可以将它设置为不同的值。
HTTP 头的默认最大数量为 50。可以将它设置为不同的限制值。

另一种常见的 DOS 攻击是发送一个请求,这个请求会导致一个长期运行的 GET 请求。WebSphere Application Server Plug-in 中的 ServerIOTimeoutRetry 属性可限制任何请求的重试数量。这可以降低这种长期运行的请求的影响。
设置限制任何请求正文的最大大小。

2、设置keepalive参数

打开ibm http server安装目录,打开文件夹conf,打开文件httpd.conf,查找KeepAlive值,改ON为OFF,其默认为ON。
这个值说明是否保持客户与HTTP SERVER的连接,如果设置为ON,则请求数到达MaxKeepAliveRequests设定值时请求将排队,导致响应变慢。

【Weblogic】

1、在配置管理界面中的协议->一般信息下设置 完成消息超时时间小于400
2、在配置管理界面中的协议->HTTP下设置 POST 超时、持续时间、最大 POST 大小为安全值范围。

【Nginx】

1、通过调整$request_method,配置服务器接受http包的操作限制;
2、在保证业务不受影响的前提下,调整client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout的值,必要时可以适当的增加;
3、对于会话或者相同的ip地址,可以使用HttpLimitReqModule and HttpLimitZoneModule参数去限制请求量或者并发连接数;
4、根据CPU和负载的大小,来配置worker_processes 和 worker_connections的值,公式是:max_clients = worker_processes * worker_connections。

【Apache】

建议使用mod_reqtimeout和mod_qos两个模块相互配合来防护。
1、mod_reqtimeout用于控制每个连接上请求发送的速率。配置例如:

请求头部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slowloris型的慢速攻击。

RequestReadTimeout header=10-40,minrate=500

请求正文部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slow message body型的慢速攻击。

RequestReadTimeout body=10-40,minrate=500
需注意,对于HTTPS站点,需要把初始超时时间上调,比如调整到20秒。
2、mod_qos用于控制并发连接数。配置例如:

当服务器并发连接数超过600时,关闭keepalive

QS_SrvMaxConnClose 600

限制每个源IP最大并发连接数为50

QS_SrvMaxConnPerIP 50
这两个数值可以根据服务器的性能调整。

【IHS服务器】
先安装最新补丁包,然后启用mod_reqtimeout模块,在配置文件中加入:
LoadModule reqtimeout_module modules/mod_reqtimeout.so
为mod_reqtimeout模块添加配置:
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=10-40,MinRate=500 body=10-40,MinRate=500
</IfModule>
对于HTTPS站点,建议header=20-40,MinRate=500。
参见:http://www-01.ibm.com/support/docview.wss?uid=swg21652165

【F5负载均衡修复建议】
F5负载均衡设备有相应的防护模块,如无购买可参考附件中的详细配置过程。
关于F5的慢速攻击防护配置,请参考以下链接:
https://support.f5.com/kb/en-us/solutions/public/10000/200/sol10260.html
https://devcentral.f5.com/articles/mitigating-slow-http-post-ddos-attacks-with-irules-ndash-follow-up

其他参考资料:
[*] Slowhttptest Github
[*] HTTP Dos攻击压力测试工具-Slowhttptest 1.5
[*] SlowHTTPTest安装出问题与解决
[*] 怎么装openssl-devel

等保3级-实施手段参考-阿里云 MFA双因素认证设置

阿里云 MFA双因素认证设置

公司内部的网站,都启用的MFA认证,就是你输入你自己登录的密码后,还会弹出一个框,让你输入6位数字。这次自己设置一次MFA。

我是对着这个视频来操作。

https://www.youtube.com/watch?v=QfOFhQb8Wyk

企业MFA,实物就是一个u盘,打开一次,就更改一次数字

MFA

物理安全。现在大家都使用pc端或者手机端。这次我并不是用google的,而是自己搞了一个:keepassXC

https://keepassxc.org/

MFA (also called two-factor authentication or 2FA) is the practice of requiring additional authentication factors beyond the standard username-password combination most authentication mechanisms require.

TOTP (Time-based, One-Time Password) is a form of MFA that uses a randomly generated code as an additional authentication token. TOTP MFA codes are generally created via a smartphone app (e.g. Google Authenticator), so it falls under the “something you have” classification.

我的理解MFA就是TOTP协议的一个实现。

主账号登录阿里云

aliyun-安全设置

找到MFA

MFA

设置

mfa-step1

选择手机验证,其实这块选择人脸识别,也是可以,麻烦一点。

mfa-step2

输入短信的校验码就可以,这个步骤大家很熟悉。

mfa-steop3

直接下一步就可以。后续我们通过keepassXC来实现。

MFA-inputpassword

我是使用keepassXC

KeepassXC启动后,会初始化一个数据库,这个数据库存放的位置,需要注意。

创建一个新的项目,用来实现阿里云的MFA认证

KeepassXC启动后,会初始化一个数据库,这个数据库存放的位置,需要注意。

创建一个新的项目,用来实现阿里云的MFA认证

keepassxc

直接OK就可以,不需要填写任何内容。

TOTP-password

把密钥复制。填入上面的地方。

MFA-toker

搞定。我们现在就需要第一次使用KeepassXC,生成6位的一次性密码,输入到上面。

show-toker

看到我们需要的东西

动态密码

把这个六位数字,复制,粘贴到上面的6位数字的方框。就完成设备绑定。

这个时候,你在阿里云网站登录,输入用户名和密码后,会提示你输入动态密码,并且有一个选项,7天本机登录,也就是7天就只需要一次就可以。

解绑设备,你也是需要输入动态密码。如果你的keepassXC的数据库出现问题,那么你就只能后台找客服,才能搞定。