以下是我的实验室中使用的一些基本配置:
1.配置nginx进行负载均衡器
2.配置备份服务器
3.隐藏黑客的nginx版本信息
4.验证申请前的nginx.conf配置
5.重新加载nginx.conf而不重新启动服务
6.域重写
7.禁用过时的SSL / TLS协议
8.启用HTTPS.
9.添加黑白清单
10.限制请求方法
11.拒绝用户代理
12.图片防盗链
13.控制并发连接的数量
14.缓冲区溢出攻击
15.标题设置
16.反向代理基本配置

1.配置nginx进行负载均衡器

如果您有多个站点,则可以在多个服务器之间配置Nginx来加载平衡。
您需要改变两个文件:


[email protected]:/# cat /etc/nginx/nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {  upstream mysec {
ip_hash;
    server 3.81.70.239:30000 weight=3;
    server 34.73.78.142:80 weight=2;
  }

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
[email protected]:/#

[email protected]:/# cat /etc/nginx/conf.d/wordpress.conf服务器 {
    listen       80;
    server_name  www.51sec.org;

location / {
    proxy_pass       http.://mysec;
    proxy_redirect             off;
    proxy_http_version         1.1;
    proxy_set_header Upgrade   $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}
}
[email protected]:/#
另一个简单的nginx负载余额配置/etc/nginx/nginx.conf

http. {
  upstream project1 {
    服务器 127.0.0.1:8000 weight=3;
    服务器 127.0.0.1:8001 weitht=2;
    服务器 127.0.0.1:8002;
  }

  服务器 {
    listen 80;
    服务器名称 万维网.51sec.org;
    location / {
      proxy_pass http.://project1;
    }
  }
}

如果是Ubuntu系统,则启用/ etc / nginx /站点存在默认文件。如果您已经在此文件夹下定义了WordPress配置文件,则可能需要删除此默认文件。

在Debian和Ubuntu系统上,您需要删除 默认 来自的象征性链接 启用站点 文件夹。
sudo rm /etc/nginx/sites-enabled/default
CentOS主机不使用相同的链接,而只是重命名 默认.conf.Conf.Conf. in the conf.d /目录不结尾 .conf., 例如:
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
然后使用以下内容重新启动nginx。
sudo systemctl restart nginx
sudo /etc/init.d/nginx restart
sudo /etc/init.d/nginx重装
2.配置备份服务器

ip_hash参数不使用backup命令。在以下配置中,在Server 34.73.78.142不可用之前,将不会击中服务器3.81.70.239。
IP_Hash Balancer不支持备份服务器和权重。

[email protected]:/# cat /etc/nginx/nginx.conf
.....

http {  upstream mysec {
##ip_hash;
##  server 3.81.70.239:30000 weight=3;
    server 34.73.78.142:80 weight=2;
    server 3.81.70.239:30000 backup  }

.....

3.隐藏黑客的nginx版本信息
某种版本的nginx通常存在安全漏洞。隐藏nginx版本号已成为主要的安全优化方法之一。当然,最重要的是,以及时升级和修复漏洞。  在改变之前:

vi /etc/nginx/nginx.conf.

http. {
服务器_tokens关闭;
}

启用server_token后:

4.申请之前有效的nginx.conf配置
nginx. -t.

5.重新加载nginx.conf而不重新启动服务
nginx. -s重新加载

/etc/init.d/nginx重装

6.域重写

如果您拥有现有域名www.test.com,您想将其更改为Blog.51sec.com。目的是保持所有内容没有变化,只有域名将自动更改。
例如,如果用户访问www.test.com/a/b/1.html,它将自动重定向到blog.51sec.com/a/b/1.html页面。 

方法1:

方法2:

7.禁用过时的SSL / TLS协议

ssl_protocols TLSv1.1 TLSv1.2;

8.启用HTTPS.

服务器 {
听443;
服务器名称 ops-coffee.cn;


SSL on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
SSL_CIPHERS高:! Anull :! MD5;
}

SSL ON:启用HTTPS
ssl_certificate:配置nginx ssl证书路径
ssl_certificate_key:配置nginx ssl证书密钥的路径
SSL_PROTOCOLS:指定客户端使用的SSL协议版本以建立连接。如果它与TSLV1不兼容,请删除它
SSL_CIPHERS:指定客户端连接时使用的加密算法,您可以在此处配置更安全的算法

9. 添加黑色和白色列表


白名单配置:


位置/ admin / {
允许192.168.1.0/24;
否认所有;
}
以上表示只允许访问192.168.1.0/24网络段的主机访问,并且所有其他网段都被拒绝


它也可以作为黑名单写入禁止一些地址并允许所有其他地址,例如


位置/ ops-coffee / {
否认192.168.1.0/24;
允许所有;
}
更常见的是,客户端请求通过代理层。我们需要通过$ http_xforworded_for来限制它们,可以像这样写得


设置$允许false;
如果($ http_x_forword_for =“211.144.204.2”){set $ vally;}
如果($ http_xforword_for〜“108.2.66。[89]”){设置$ vally;}
如果($ allow = false){返回404;}
添加帐户身份验证


服务器 {
地点 / {
auth_basic“请输入用户& passwd”;
auth_basic_user_file键/ auth.key;
}
}

10. 限制请求方法


如果($ equest_method!〜^(get | post)$){
返回405;
}
$ equest_method可以获得请求nginx的方法


配置只允许GetPost方法访问,其他方法返回405





11.拒绝用户代理


如果($ http_user_agent〜* lwp :: simple | bbbike | wget |卷曲){
返回444;
}
可能存在一些禁止我们的网站使用Wget / Curl等工具,我们可以通过禁止相应的用户代理程序来防止它


nginx.的444状态特殊。如果返回444,则客户端不会收到服务器返回的信息,就像网站无法连接一样。

12. 图片防盗链


位置/图像/ {
Valid_Referers没有阻止www.ops-coffee.cn ops-coffee.cn;
如果($ damine_referer){
返回403;
}
}
vigw_Referers:验证EXPER,其中NONE允许EXPERER为空,并且阻止允许未经协议的请求。除了上述两种类型之外,允许在www.ops-coffee.cn或ops-coffee.cn返回403时仅允许推荐访问图像下的图像资源


当然,您还可以将不符合引用规则的请求重定向到默认图像,例如以下内容


位置/图像/ {
vigw_Referers阻止www.ops-coffee.cn ops-coffee.cn
如果($ damine_referer){
重写^ /图像/**。 (gif | jpg | jpeg | png)$ /static/qrcode.jpg最后;
}
}


13.控制并发连接的数量


您可以通过ngx_http_limit_conn_module模块限制IP的并发连接数


http. {
limit_conn_zone $ binary_remote_addr区域= ops:10m;


服务器 {
听80;
服务器名称 ops-coffee.cn;


root / home / project / webapp;
index index.html;


地点 / {
LIMIT_CONN OPS 10;
}


Access_log /tmp/nginx_access.log main;
}
}
limit_conn_zone:设置共享内存空间的参数,保存每个密钥的状态(例如$ binary_remote_addr),zone = space name:size


尺寸的计算与变量有关。例如,$ binary_remote_addr变量的大小为4个字节,用于录制IPv4地址,16个字节用于录制IPv6地址。存储状态在32位平台上占用32或64字节。在64位平台上占用64个字节。 1M共享内存空间可以节省约32,000个32位状态和16,000 64位状态


limit_conn:指定一组共享内存空间(例如,具有名称操作的空间)以及每个给定键值的最大连接数


上面的示例显示,仅在同一IP的同时允许仅允许10个连接


配置多个Limit_Conn指令时,所有连接限制都将生效


http. {
limit_conn_zone $ binary_remote_addr区域= ops:10m;
limit_conn_zone $ server_name zone =咖啡:10m;


服务器 {
听80;
服务器名称 ops-coffee.cn;


root / home / project / webapp;
index index.html;


地点 / {
LIMIT_CONN OPS 10;
LIMIT_CONN咖啡2000;
}
}
}
上面的配置不仅将来自单个IP源的连接数限制为10,还将与单个虚拟服务器的总连接数限制为2000


14.缓冲区溢出攻击


缓冲区溢出攻击是通过将数据写入缓冲区边界和重写存储片段之外的缓冲区来实现。限制缓冲尺寸可以有效地防止


client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
sally_client_header_buffers 2 1k;
client_body_buffer_size:默认值为8k或16k,表示客户端请求身体占用缓冲区大小。 如果连接请求超过缓存中指定的值,则所有或部分请求实体都将尝试写入临时文件。


client_header_buffer_size:表示客户端请求标头的缓冲区大小。 在大多数情况下,请求标头将不会大于1k,但如果WAP客户端有大型cookie,则可能大于1K。 nginx将为它分配更大的缓冲区。此值可以设置为learing_client_header_buffers。


client_max_body_size:表示客户端请求的最大可接受的身体大小。它显示在请求标头的内容长度字段中。如果请求大于指定值,则客户端将接收“请求实体太大”(413)错误,通常在将文件上载到服务器时受限


sally_client_header_buffers表示一些大请求标头使用的缓冲区的数量和大小。默认缓冲区大小是操作系统中分页文件的大小,通常为4k或8k。请求字段不能大于缓冲区大小。如果客户端向大标题发送比较,则Nginx将返回“请求URI太大”(414)。请求标头中的最长字段不能大于缓冲区,否则服务器将返回“错误请求”(400)


需要同时修改几个超时的配置


client_body_timeout 10;
client_header_timeout 10;
Keepalive_Timeout 5 5;
send_timeout 10;
client_body_timeout:表示读取请求正文的超时。如果连接超过此时间并且客户端没有响应,Nginx将返回“请求超时”(408)错误


client_header_timeout:指示读取客户端请求标头的超时。如果连接超过此时间并且客户端没有响应,Nginx将返回“请求超时”(408)错误


LeepAlive_Timeout:参数的第一个值指示客户端和服务器之间的长连接的超时时间。此后,服务器将关闭连接。可选的第二个参数参数表示保持活动的值:超时=时间该值可以使某些浏览器能够知道何时关闭连接,以便服务器不需要重复关闭。如果未指定此参数,则nginx不会在响应标题中发送保存活信息。


send_timeout:表示响应发送到客户端后的超时。超时指的是它尚未进入完全建立的状态,只完成了两个握手。如果客户在此之后没有响应,则nginx将关闭连接。


15.标题设置


以下设置可以有效地防止XSS攻击


Add_Header X-Frame-Options“amotorigin”;
add_header x-xs-protection“1; mode =块“;
add_header x-content-type-options“nosniff”;
X-Frame-Options:响应标题指示是否允许浏览器加载帧和其他属性。有三种配置。拒绝禁止任何网页嵌入。同性蛋白只允许嵌套这个网站,并允许 - 允许允许嵌套指定地址。


X-XSS保护:表示启用了XSS过滤(禁用X-XS-Protection:0),Mode =块表示如果检测到XSS攻击,则页面将停止呈现


X-Content-Type Options:响应标题用于指定未指定或错误指定的内容类型资源的浏览器的猜测行为。 NoSniff表示没有允许猜测。


在通常的请求响应中,浏览器将基于内容类型区分响应的类型,但是当未指定或指定响应类型时,浏览器将尝试启用MIME-Sniffing以猜测响应类型资源,这是非常危险的。


例如,一个.jpg映像文件是恶意嵌入有可执行的JS代码。使用资源类型猜测已打开,浏览器将执行嵌入式JS代码,可能具有意外的后果。


此外,还有几种关于需要注意的请求标头的安全配置。


内容 - 安全策略:定义页面上可以加载哪些资源,


Add_Header内容 - 安全策略“默认SRC”自我 '”;
上面的配置将限制所有外部资源,只能从当前域名加载。 Default-SRC定义了所有类型资源的默认加载策略,并且自允许来自同一源的内容。


严格传输安全性:告诉浏览器使用HTTPS协议而不是HTTP来访问目标网站


Add_header严格运输 - 安全“Max-age = 31536000;包括管制“;
上面的配置指示当用户首次访问时,将返回包含严格传输安全响应头的字段。此字段将告诉浏览器,在接下来的31536000秒内,所有对当前网站的请求将使用HTTPS协议访问,该参数包含Ubdomains是可选的,这意味着所有子域也将采用相同的规则

16. nginx用作反向代理

Nginx反代配置,直接添加到配置即即可。
#在配置文件里添加
location / {
     proxy_pass http://127.0.0.1:5000;
     proxy_redirect off;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

经过 jonny.

发表评论