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;
}