nginx防攻击
1、限制请求率:
只能发出一个请求。允许单个客户端IP地址每2秒尝试登录(相当于每分钟30个请求):
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;#此句要写在http段不能写在server段内
server {
# ...
location /login.html {
limit_req zone=one;
}
}
该 limit_req_zone 指令配置一个名为“one”的共享内存区域,用于存储指定密钥的请求状态,在本例中为客户机IP地址($binary_remote_addr)
2、限制连接数:
limit_conn_zone $binary_remote_addr zone=addr:10m;#此句要写在http段不能写在server段内
server {
# ...
location /store/ {
limit_conn addr 10;
# ...
}
}
3、关闭慢连接:
server {
client_body_timeout 5s;
client_header_timeout 5s;
# ...
}
4、列入IP黑名单:
location / {
deny 123.123.123.5;
}
注:个人感觉不如加入hosts.deny或者系统防火墙
5、禁用所有不需要的 HTTP 方法
禁用所有不需要的 HTTP 方法,下面设置意思是只允许 GET、HEAD、POST 方法,过滤掉 DELETE 和 TRACE 等方法。
location / {
limit_except GET HEAD POST { deny all; }
}
另一种方法是在 server 块 设置,不过这样是全局设置的,要注意评估影响
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
6、 防止Host头攻击
添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
server {
listen 80 default;
server_name _;
location / {
return 403;
}
}
7、防止图片盗链
图片或HTML盗链的意思是有人直接用你网站的图片地址来显示在他的网站上。最终的结果,你需要支付额外的宽带费用。这通常是在论坛和博客。我强烈建议您封锁,并阻止盗链行为。
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
}
8、配置合理响应头
为了进一步加强 Nginx web 的性能,可以添加几个不同的响应头 X-Frame-Options 可以使用 X-Frame-Options HTTP 响应头指示是否应允许浏览器在 <frame> 或 <iframe> 中呈现页面。 这样可以防止点击劫持攻击。 配置文件中添加:
add_header X-Frame-Options "SAMEORIGIN";
Strict-Transport-Security HTTP Strict Transport Security,简称为 HSTS。它允许一个 HTTPS 网站,要求浏览器总是通过 HTTPS 来访问它,同时会拒绝来自 HTTP 的请求,操作如下:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
CSP Content Security Policy (CSP) 保护你的网站避免被使用如 XSS,SQL注入等手段进行攻击,操作如下:
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
服务用户提供的内容时, 包含 X-Content-Type-Options: nosniff 头选项,配合 Content-Type: 头选项, 来禁用某些浏览器的 content-type 探测.
add_header X-Content-Type-Options nosniff;
X-XSS-Protection: 表示启用XSS过滤(禁用过滤为X-XSS-Protection: 0),mode=block表示若检查到XSS攻击则停止渲染页面
add_header X-XSS-Protection "1; mode=block";
|