运维安全配置

运维安全配置

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
posted @ 2017-06-01 10:47  hjqjk  阅读(476)  评论(0编辑  收藏  举报