目录
运维安全配置
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