zoukankan      html  css  js  c++  java
  • 运维安全配置

    运维安全配置

    Nginx安全

    1、隐藏Nginx版本号

    在 nginx.conf 的 http 段中加入:

    server_tokens off;
    

    修改 fastcgi.conf:

    找到:
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    改为:
    fastcgi_param  SERVER_SOFTWARE    nginx;
    

    2、禁用目录列出

    在 http 段中加入:

    autoindex off;
    

    3、禁止不安全的HTTP方法(如DELETE、HEAD、TRACE、OPTIONS)

    在对应server段修改:( if 不能用于http段)

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

    4、缩减权限

    缩减日志、配置文件的权限,不能让无关用户访问到
    指定普通用户作为Nginx服务的启动用户

    5、禁止特定IP访问

    5.1、没有挂CDN

    在 conf 目录新建 blockips.conf:

    deny xxx.xxx.xxx.xxx;
    deny xxx.xxx.0.0/16;
    

    在 http 段添加:

    include blockips.conf;
    

    集中在 blockips.conf 禁止IP

    5.2、挂上CDN

    http 段中添加:

    # 获取用户真实IP(x_forwarded_for的第一个IP),并赋值给变量$clientRealIP
    map $http_x_forwarded_for  $clientRealIp {
            ""      $remote_addr;
            ~^(?P<firstAddr>[0-9.]+),?.*$  $firstAddr;
    }
    

    对应的 server 段中添加:

    # 如果匹配了真实IP,那么返回403
    if ($clientRealIp ~* "xxx.xxx.xxx.xxx") {
            return 403;
            break;
    }
    

    6、限制蜘蛛抓取频率

    http 段配置:

    limit_req_zone $anti_spider zone=anti_spider:60m rate=200r/m;
    

    某个server段:

    limit_req zone=anti_spider burst=5 nodelay;
    
    if ($http_user_agent ~* "baiduspider|bingbot|Yahoo! Slurp|msnbot") {
         set $anti_spider $http_user_agent;
    }
    

    参数说明:

    linit_req_zone 中的rate=200r/m 表示每分钟只能处理200个请求。
    limit_req 中的burst=5 表示允许超过频率限制的请求数不多于5个
    limit_req 中的nodelay 表示当已经达到burst值时,再来新请求时,直接返回503
    IF部分 用于匹配蜘蛛名。匹配上,则对变量$anti_spider赋值,使得限制规则生效。
    

    7、禁止特定UA访问

    在 conf 目录中,新建 agent_deny.conf:

    # 禁止特定UA访问
    # ~ "Lua" :表示用户UA匹配"Lua"字符串,区分大小写
    # 当用户UA被匹配成功,则返回403错误,不给予访问。
    if ($http_user_agent ~ "Lua"){
         return 403;
    }
    
    #禁止Scrapy等工具的抓取
    if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
    	return 403;
    }
    
    #禁止空agent访问
    if ($http_user_agent ~ ^$) {
    	return 403;
    }
    

    在相应的 server 或 location 段添加:( if 不能用于http段)

    include  agent_deny.conf;
    

    8、既禁止UA为空的访问,又要放行内网ip不做禁止

    nginx的配置中不支持if条件的 逻辑与、逻辑或 的运算 ,并且不支持if的嵌套语法,但我们可以使用变量达到想要的效果。

    #白名单:192.168.1
    #禁止UA为空的访问
    
    set $flag 0;
    
    if ($remote_addr !~ "^(192.168.1)"){
    set $flag "${flag}1";
    }
    
    if ($http_user_agent ~ "^$"){
    set $flag "${flag}2";
    }
    
    if ($flag = "012"){
    return 403;
    }
    
    

    注意:以下的写法是错误的!

    if ($remote_addr !~ "^(192.168.1)" && $http_user_agent ~ "^$") { 
        return 403; 
    }
    

    php-fpm安全

    1、隐藏php-fpm版本

    编辑php.ini,修改或加入:

    expose_php = Off
    

    2、php 安全设置

    • 禁用特定函数

    编辑php.ini,修改:

    disable_functions=dl,eval,assert,exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open
    
    • 关闭错误信息输出

    在生产环境中,应该关闭在网页上显示错误信息,改为用错误日志记录

    display_errors = Off
    
  • 相关阅读:
    demo_14 更多卡片视图实现
    demo_13 基础卡片视图实现
    demo_10_06 云数据库聚合_lookup_02
    demo_10_06 云数据库聚合_lookup_01
    demo_12 子组件选项卡切换及事件传递
    demo_11 封装数据请求
    demo_10_05 云数据库聚合_limit
    demo_10_04 云数据库聚合_group_02
    sed 过滤和替换文本函数
    curl 参数
  • 原文地址:https://www.cnblogs.com/hjqjk/p/ops_security.html
Copyright © 2011-2022 走看看