提高 nginx 服务器 安全性,稳定性、性能 –经验总结-持续更新详解程序员

在日常工作中使用nginx遇到的问题总结:

  • 保持Nginx的及时升级

    因为通过查看官方的release note会发现修复了很多bug,不及时更新在生产环境会有更大的风险

  • 去掉不用的Nginx模块
    #在编译安装时,执行./configure方法时加上以下配置指令,可以显式的删除不用的模块 
    #配置指令是由模块提供的。确保禁用的模块不包含需要使用的指令!在决定禁用模块之前,需要检查Nginx文档中每个模块可用的指令列表 
     
    ./configure --without-http_dav_module --withouthttp_spdy_module

  • 在Nginx配置中禁用server_tokens

    server_tokens在打开的情况下会使404页面显示Nginx的当前版本号
    不法者会利用此信息尝试相应Nginx版本的漏洞,需要在nginx.conf中http模块设置server_tokens off,然后重启nginx提高 nginx 服务器 安全性,稳定性、性能 --经验总结-持续更新详解程序员

    server { 
        listen 192.168.10.10; 
        Server_tokens off; 
        .....省略 
    }

  • 禁止非法的HTTP User Agents
    if ($http_user_agent ~* (curl) ) { 
        return 404; 
    }

    user agent:用户代理是指浏览器,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好,通知服务器当前使用的是什么浏览器、工具等等,例如火狐、谷歌chrome、wget、curll;因为是HTTP协议中对浏览器的一种标识,所以禁止非法的User Agent可以阻止爬虫和扫描器的一些请求,防止这些请求大量消耗Nginx服务器资源

    #编辑nginx配置文件,以下内容放在http配置段,那么整个nginx都生效,如果放到server里,只对一个有效 
    #禁止一个 
    if ($http_user_agent ~* (curl) ) { 
        return 404; 
    } 
    #禁止多个URL 
    if ($http_user_agent ~* (curl) )     return 404; 
    } 
     
    #禁止非法的User Agent,将如下语句放入配置文件的server模块内: 
    map $http_user_agent $blockedagent { 
        default 0; 
        ~*malicious 1; 
        ~*bot 1; 
        ~*backdoor 1; 
        ~*crawler 1; 
        ~*bandit 1; 
    } 
    include /etc/nginx/blockuseragents.rules; 
    #并加入if语句设置阻止后进入的页面: 
    server { 
        if($blockuseragents){ 
           return 403; 
        } 
        .....省略 
    }

  • 禁掉不需要的 HTTP 方法

    在web站点和应用中,有的方法只支持GET、POST和HEAD,在配置文件中的server模块中就可以加入如下方法可以阻止一些欺骗攻击

    if ($request_method !~ ^(GET|HEAD|POST)$) { 
        return 444; 
    }

  • 设置缓冲区容量上限(可以阻止缓冲区溢出攻击(同样是Server模块))
    #设置后,不管多少HTTP请求都不会使服务器系统的缓冲区溢出了 
    client_body_buffer_size 1k; 
    client_header_buffer_size 1k; 
    client_max_body_size 1k; 
    large_client_header_buffers 2 1k;

  • 限制最大连接数
    #在http模块内,server模块外设置limit_conn_zone,可以设置连接的IP  
    #在http,server或location模块设置limit_conn,可以设置IP的最大连接数 
    limit_conn_zone $binary_remote_addr zone=addr:5m; 
    limit_conn addr 1;

  • 设置日志监控(access_log、error_log)
  • 阻止图片外链自你的服务器

    有一个img目录用来存储图片,IP是192.168.10.10,加入如下配置可以防止外链.来减轻服务器的带宽压力

    location /img/ { 
        valid_referers none blocked 192.168.10.10; 
            if ($invalid_referer) { 
                return 403; 
          } 
    }

  • 禁止 SSL 并且只打开 TLS(在Server模块 添加:ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 做证书加密(HTTPS)(生成密钥和整数)
    # openssl genrsa -aes256 -out tecmintlovesnginx.key 1024 
    # openssl req -new -key tecmintlovesnginx.key -out tecmintlovesnginx.csr 
    # cp tecmintlovesnginx.key tecmintlovesnginx.key.org 
    # openssl rsa -in tecmintlovesnginx.key.org -out tecmintlovesnginx.key 
    # openssl x509 -req -days 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.key -out tecmintlovesnginx.crt 
    #配置Server模块 
    server { 
          ....省略 
          ssl_certificate /etc/nginx/sites-enabled/certs/tecmintlovesnginx.crt; 
          ssl_certificate_key /etc/nginx/sites-enabled/certs/tecmintlovesnginx.key; 
          ....省略 
    }

  • 重定向HTTP请求到HTTPS
    #在server中添加 
    return 301 https://$server_name$request_uri;

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/1507.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论