Linux服务器下Nginx的安全配置(3)

2、常见的方式
1. 让木马上传后不能执行:针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php
2. 让木马执行后看不到非网站目录文件:取消php-fpm运行账户对于其他目录的读取权限
3. 木马执行后命令不能执行:取消php-fpm账户对于sh的执行权限
4. 命令执行后权限不能过高:php-fpm账户不要用root或者加入root组

3、具体的配置
1、禁止php文件的访问及执行
 location ~  /(attachments|upload)/.*\.(php|php5)?$ {
    deny all;

2、禁止IP的访问

//禁止的写法
deny 10.0.0.0/24;
 
//允许的写法
allow 10.0.0.0/24; 
deny all; 

3、根据用户的真实 IP 做连接限制

## 这里取得原始用户的IP地址
map $http_x_forwarded_for  $clientRealIp {
    ""  $remote_addr;
    ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;
}
 
## 针对原始用户 IP 地址做限制
limit_conn_zone $clientRealIp zone=TotalConnLimitZone:20m ;
limit_conn  TotalConnLimitZone  50;
limit_conn_log_level notice;
 
## 针对原始用户 IP 地址做限制
limit_req_zone $clientRealIp zone=ConnLimitZone:20m  rate=10r/s;
#limit_req zone=ConnLimitZone burst=10 nodelay;
limit_req_log_level notice;
 
## 具体服务器配置
server {
    listen  80;
    location ~ \.php$ {
                ## 最多 5 个排队, 由于每秒处理 10 个请求 + 5个排队,你一秒最多发送 15 个请求过来,再多就直接返回 503 错误给你了
        limit_req zone=ConnLimitZone burst=5 nodelay;
 
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index  index.php;
        include fastcgi_params;
    } 
 
}

4、 经过多层CDN之后取得原始用户的IP地址,nginx 配置

map $http_x_forwarded_for  $clientRealIp {
        ## 没有通过代理,直接用 remote_addr
    ""  $remote_addr; 
        ## 用正则匹配,从 x_forwarded_for 中取得用户的原始IP
        ## 例如  X-Forwarded-For: 202.123.123.11, 208.22.22.234, 192.168.2.100,...
        ## 这里第一个 202.123.123.11 是用户的真实 IP,后面其它都是经过的 CDN 服务器
    ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;
}
 
## 通过 map 指令,我们为 nginx 创建了一个变量 $clientRealIp ,这个就是 原始用户的真实 IP 地址,
## 不论用户是直接访问,还是通过一串 CDN 之后的访问,我们都能取得正确的原始IP地址

5、隐藏版本信息

server_tokens  off;
proxy_hide_header        X-Powered-By;
//或者编译的时候修改源代码

6、禁用非必要的方法

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

7、禁用扩展名

location ~* .(txt|doc|sql|gz|svn|git)$ {
  deny all;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cfc577495a52b4a0319c11189f408a5a.html