zoukankan      html  css  js  c++  java
  • 提高 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

      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;
  • 相关阅读:
    Linux下如何确认磁盘是否为SSD
    Nginx
    求两个Linux文本文件的交集、差集、并集
    DB磁盘满导致Zabbix Server Crash一例
    配置SSH Forward提升安全性
    更新ffmpeg
    linux系统日志__ratelimit: N callbacks suppressed
    servlet本质
    session与cookie的区别与联系
    Leetcode 19——Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/qinxu/p/14200949.html
Copyright © 2011-2022 走看看