详解nginx服务器中的安全配置

2019-10-17 19:15:35丽君

十、如何拒绝一些User-Agents?

你可以很容易地阻止User-Agents,如扫描器,机器人以及滥用你服务器的垃圾邮件发送者。

## Block download agents ##
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
  return 403;
}

阻止Soso和有道的机器人:

## Block some robots ##
if ($http_user_agent ~* Sosospider|YodaoBot) {
  return 403;
}

十一、防止图片盗链

图片或HTML盗链的意思是有人直接用你网站的图片地址来显示在他的网站上。最终的结果,你需要支付额外的宽带费用。这通常是在论坛和博客。我强烈建议您封锁,并阻止盗链行为。

# Stop deep linking or hot linking
location /images/ {
  valid_referers none blocked www.example.com example.com;
  if ($invalid_referer) {
    return  403;
  }
}

例如:重定向并显示指定图片

valid_referers blocked www.example.com example.com;
 
if ($invalid_referer) {
  rewrite ^/images/uploads.*.(gif|jpg|jpeg|png)$ http://www.examples.com/banned.jpg last
}

十二、目录限制

你可以对指定的目录设置访问权限。所有的网站目录应该一一的配置,只允许必须的目录访问权限。

通过IP地址限制访问

你可以通过IP地址来限制访问目录/admin/:

location /docs/ {
  ## block one workstation
  deny  192.168.1.1;
  ## allow anyone in 192.168.1.0/24
  allow  192.168.1.0/24;
  ## drop rest of the world
  deny  all;
}

通过密码保护目录,首先创建密码文件并增加“user”用户

mkdir /usr/local/nginx/conf/.htpasswd/
htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd user

编辑nginx.conf,加入需要保护的目录

### Password Protect /personal-images/ and /delta/ directories ###
location ~ /(personal-images/.*|delta/.*) {
  auth_basic “Restricted”;
  auth_basic_user_file  /usr/local/nginx/conf/.htpasswd/passwd;
}

一旦密码文件已经生成,你也可以用以下的命令来增加允许访问的用户

htpasswd -s /usr/local/nginx/conf/.htpasswd/passwd userName

十三、Nginx SSL配置

HTTP是一个纯文本协议,它是开放的被动监测。你应该使用SSL来加密你的用户内容。
创建SSL证书,执行以下命令:

cd /usr/local/nginx/conf
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

编辑nginx.conf并按如下来更新:

server {
  server_name example.com;
  listen 443;
  ssl on;
  ssl_certificate /usr/local/nginx/conf/server.crt;
  ssl_certificate_key /usr/local/nginx/conf/server.key;
  access_log /usr/local/nginx/logs/ssl.access.log;
  error_log /usr/local/nginx/logs/ssl.error.log;
}