Nginx 安全

分享收藏的安全配置。

No。1 加载 黑名单 的文件

...
http {
 ...
 #### include blacklist config file ####
 include blacklist.conf;


 # your domains
 include domain1.tld.conf;
 include domain2.tld.conf;
 include domain3.tld.conf;

 ...
}
nginx

blacklist.conf

IP 黑名单

geo $bad_IP {
    127.0.0.1          0; # loopback
    192.168.1.0/24     0; # local

    101.101.101.101    1; # single bad ip address
    101.101.101.0/18   1; # ip range in CIDR form
}
nginx

阻止全部,但是让一些 IP 通过

geo $admin {
    default            1; # block all
    123.123.123.123    0; # unblock my ip
}
nginx

Method

HTTP 主要分为 GET, POST, UPDATE, DELETE …

我们可以通过配置封锁一些无聊的电脑扫描

# 允许 HEAD, GET
map $request_method $get_method_only {
   default   1;
   GET       0;
   HEAD      0;
}
nginx

geoip

类似 IP 一样,不过是通过读取 IP 地区资料。使用2位国家字母。默认没安装。

map $geoip_country_code $bad_referer {
     default       0;
     US            1; ## block US
}
nginx

限制请求 rate limit

例如限制 POST 发送资料到伺服器。

map $request_method $limit {
     default         "";
     POST            $binary_remote_addr;
}

limit_req_zone $limit zone=twotwo:10m rate=1r/s;
nginx

User-agent

还用 IE 6?古董应该升级一下机器或者游览器了。同样方法可以过滤扫描机器人。

map $http_user_agent $ancient_ua {
    default                     0; ## allow all
    "~MSIE\ [0-6]{1}\."         1; ## old IE
    "~Java"                     1; ## Java scanning my sh*t ??
    "~Transmission"             1; ## BT?
}
nginx

伺服器配置

server {
    listen 80;
    server_name ...;
    root ...;

    ## ip-based
    if ( $bad_IP ) {
        return 444; # close connection immediately
    }

    ## method
    if ( $get_method_only ) { return 444; }

    ## geoip
    if ( $bad_referer ) { return 444; }

    ## limit post
    limit_req zone=twotwo burst=5;

    ## bad user-agent 提醒用户升级游览器
    if( $ancient_ua ) {
        return 301 http://domain.tld/upgrade.html;
    }


    location / {
       ...
    }
}
nginx

外部链接