Nginx 安全加固方案总结

965 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

1. 在Nginx中禁用server_tokens指令

该server_tokens指令告诉nginx的错误页面显示其当前版本。 这是不可取的,因为您不想与世界共享这些信息,以防止在您的Web服务器由特定版本中的已知漏洞造成的攻击。要禁用server_tokens指令,设定在关闭服务器块内:

server {
    listen       192.168.0.25:80;
    Server_tokens        off;
    server_name  howtoinglovesnginx.com www.howtoinglovesnginx.com;
    access_log  /var/www/logs/howtoinglovesnginx.access.log;
    error_log  /var/www/logs/howtoinglovesnginx.error.log error;
    root   /var/www/howtoinglovesnginx.com/public_html;
    index  index.html index.htm;
}

2. 在Nginx中禁用不需要的HTTP方法

对于一般的网站和应用程序,你应该只允许GET,POST,和HEAD并禁用所有其他人。为此,将以下行代码放在服务器块中。 444 HTTP响应指空响应,并经常在Nginx的用来愚弄恶意软件攻击:

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

3. 在Nginx中设置缓冲区大小限制

为了防止对您的Nginx Web服务器的缓冲区溢出攻击,坐落在一个单独的文件以下指令(创建的文件名为/etc/nginx/conf.d/buffer.conf为例):

client_body_buffer_size  1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

上面的指令将确保对您的Web服务器的请求不会导致系统中的缓冲区溢出。然后在配置文件中添加一个include指令:

include /etc/nginx/conf.d/buffer.conf;

4. 屏蔽互联网爬虫

如果做SEO的话,需要关闭这个 创建的文件名为/etc/nginx/conf.d/ua.conf为例

#forbidden Scrapy
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}

  #forbidden UA
  if ($http_user_agent ~ "Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|python-requests|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {

    return 403;
  }

上面的指令屏蔽了常见的爬虫客户端,在需要引入的配置文件中添加下面片段

include /etc/nginx/conf.d/ua.conf;

安全是相对的,上面这些方法只能防君子不防小人