问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Nginx安全防护实战:DDoS、XSS攻击防御与SSL配置

创作时间:
作者:
@小白创作中心

Nginx安全防护实战:DDoS、XSS攻击防御与SSL配置

引用
CSDN
20
来源
1.
https://blog.csdn.net/sunyuhua_keyboard/article/details/138139943
2.
https://blog.csdn.net/sunyuhua_keyboard/article/details/138139930
3.
https://blog.csdn.net/qq_24251323/article/details/137377196
4.
https://blog.csdn.net/Mrxiao_bo/article/details/137504300
5.
https://blog.csdn.net/m0_38134608/article/details/136079426
6.
https://blog.csdn.net/qq_34556414/article/details/138190241
7.
https://blog.csdn.net/qq_36918149/article/details/139218583
8.
https://blog.csdn.net/qq_52712762/article/details/139238608
9.
https://blog.csdn.net/henrry818/article/details/138442628
10.
https://opswill.com/articles/nginx-anti-ddos-setting.html
11.
https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers
12.
https://www.cnblogs.com/cheyunhua/p/18024948
13.
https://help.aliyun.com/zh/ecs/user-guide/security-groups-for-different-use-cases
14.
https://www.cnblogs.com/wjsqqj/p/18042982
15.
https://www.enuoidc.com/help/16851.html
16.
https://www.cnblogs.com/fengjian2016/p/18285155
17.
https://www.cnblogs.com/windysai/p/18326410
18.
https://www.cnblogs.com/live2learn/p/18011265
19.
https://cloud.tencent.com/document/product/400/35244
20.
https://juejin.cn/post/7349410786816376866

随着网络攻击日益猖獗,服务器安全已成为每个开发者和运维人员必须重视的问题。Nginx作为一款高性能的Web服务器和反向代理服务器,提供了丰富的安全配置选项,可以帮助我们有效抵御各种网络威胁。本文将详细介绍如何通过Nginx配置,打造坚不可摧的服务器防线。

01

防御DDoS攻击

分布式拒绝服务(DDoS)攻击是当前最常见的网络攻击之一,其特点是分布式、高流量,主要针对服务器的带宽和服务。DDoS攻击可以分为四层流量攻击和七层应用攻击。对于七层应用攻击,我们可以通过Nginx的配置来进行有效防御。

Nginx提供了http_limit_conn和http_limit_req模块,可以用来限制单个IP的连接数和每秒请求数。通过这些限制,可以相对有效地防御CC攻击。

限制每秒请求数

ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数。一旦单位时间内请求数超过限制,Nginx就会返回503错误。配置需要在两个地方设置:

  • 在nginx.conf的http段内定义触发条件
  • 在location内定义达到触发条件时Nginx所要执行的动作

例如:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求
    ...
    server {
        ...
        location  ~ \.php$ {
            limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应
               }
           }
     }

参数说明:

$binary_remote_addr  二进制远程地址
zone=one:10m    定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话
rate=10r/s;     限制频率为每秒10个请求
burst=5         允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。
nodelay         超过的请求不被延迟处理,设置后15个请求在1秒内处理。

限制IP连接数

ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503
                }
           }
     }

白名单设置

http_limit_conn和http_limit_req模块限制了单ip单位时间内的并发和请求数,但是如果Nginx前面有lvs或者haproxy之类的负载均衡或者反向代理,nginx获取的都是来自负载均衡的连接或请求,这时不应该限制负载均衡的连接和请求,就需要geo和map模块配合使用,设置白名单。

02

防御SQL注入和XSS攻击

SQL注入和跨站脚本(XSS)攻击是常见的应用层攻击手段。虽然Nginx本身不处理应用层的数据逻辑,但可以通过配置增强HTTP头来提高安全性。

增强HTTP头

  • 设置X-XSS-Protection:这个HTTP头指示浏览器启用他们的跨站脚本过滤器。这个头已经在现代浏览器中弃用,但它可能被绕过。
add_header X-XSS-Protection "1; mode=block";
  • 设置Content-Type Options:阻止浏览器从执行由服务器推断出的MIME类型,而非服务器声明的内容类型。
add_header X-Content-Type-Options nosniff;
  • 实施CSP:通过Nginx设置CSP头可以大大增加防御XSS的能力。
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.example.com";

限制请求大小

通过限制请求的大小,可以减少大型恶意载荷的风险。

client_max_body_size 10K;
03

黑白名单设置

Nginx的deny指令可以用来拒绝特定IP地址或地址段的请求。以下是一个简单的配置示例:

# 在 http 块中定义黑名单
http {
    # 定义一个名为 blacklist 的 key 来存储黑名单
    geo $blacklist {
        default 0;  # 默认为不在黑名单中
        10.1.1.0/24 1;  # 把10.1.1.0/24网段加入黑名单
        192.168.0.100 1;  # 把单个IP地址加入黑名单
    }

    # 定义一个名为 blocked 的 location 来拒绝黑名单中的请求
    server {
        location / {
            # 如果客户端IP在黑名单中,返回403 Forbidden
            if ($blacklist) {
                return 403;
            }
            # 其他情况下,继续正常处理请求
            ...
        }
    }
}

配置解释:

  • 使用geo指令定义了一个名为$blacklist的变量,用来存储黑名单信息。
  • 在server块中的location /中,使用if指令检查客户端的IP地址是否在黑名单中,如果在黑名单中,则返回403 Forbidden,拒绝请求。
04

数据传输加密

使用SSL/TLS加密数据传输是保护服务器安全的重要措施。以下是在Nginx中配置SSL证书的基本步骤:

  1. 下载SSL证书:登录数字证书管理服务控制台,下载适用于Nginx的SSL证书。

  2. 上传证书文件:将下载的证书文件上传到Nginx服务器的适当目录,例如/usr/local/nginx/conf/cert。

  3. 配置Nginx:编辑Nginx配置文件,添加SSL相关的配置:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /usr/local/nginx/conf/cert/cert-file-name.pem;
    ssl_certificate_key /usr/local/nginx/conf/cert/cert-file-name.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://your_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  1. 重启Nginx:应用更改并重启Nginx服务。

通过以上配置,你可以确保数据在传输过程中的安全性,防止中间人攻击和数据泄露。

服务器安全是一个系统工程,需要从多个层面进行防护。通过合理配置Nginx,我们可以有效抵御DDoS攻击、SQL注入、XSS攻击等常见威胁。同时,结合应用层的安全措施和定期的安全审计,可以进一步提升系统的整体安全性。记住,安全配置不是一劳永逸的工作,需要根据实际情况不断调整和优化。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号