实用技巧一
13. IP 白名单
如果您的网站或应用只允许从一个或多个特定的客户端IP地址集或范围进行访问,您可以同时使用allow和deny指令,只允许这些地址访问站点或应用:
location / {
allow 111.111.111.4;
deny all;
}
您可以将访问限制仅限于特定本地网络上的地址。在这里,deny all指令会阻止不在allow指令指定范围内的所有客户端IP地址。
14. 阻止访问文件或位置
您可以使用Nginx完全阻止对文件或位置的访问。例如,如果您注意到register.php文件是攻击的目标,您可以完全阻止对该文件的访问:
location /register {
deny all;
return 444;
}
这将阻止所有试图访问此文件的请求。代码444会在不返回响应的情况下关闭连接。
15. 启用基于sysctl的保护
启用基于sysctl的保护。我们可以调整服务器上的内核和系统变量。编辑/etc/sysctl.conf文件,并将这两行设置为1,如下所示:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
第一个设置启用了IP地址欺骗保护,第二个设置启用了TCP SYN cookie保护。
16. 将Nginx用作负载均衡器
当Nginx用作负载均衡器时,可以配置设置来限制每个服务器的连接数:
upstream domain {
server 111.111.111.4:80 max_conns=100;
server 111.111.111.5:80 max_conns=100;
queue 20 timeout=10s;
}
在这里,max_conns指令指定Nginx可以打开到服务器的连接数。queue指令限制了在该组中的所有服务器达到连接限制时排队的请求数。最后,timeout指令指定请求在队列中可以保持多长时间。
17. 阻止特定用户代理
您可以轻松阻止用户代理,即爬虫、机器人和滥发者,这些可能在滥用您的服务器:
## 阻止下载代理 ##
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
## 阻止一些机器人 ##
if ($http_user_agent ~* msnbot|scrapbot|PxBroker) {
return 403;
}
18. 阻止引荐垃圾信息
引荐垃圾信息是危险的。通过网络日志(如果已发布),可以通过引荐字段链接到他们的垃圾站点来损害您的SEO排名。使用以下行,您可以阻止对引荐垃圾信息的访问:
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
return 403;
}
19. 阻止图像盗链
图像盗链或HTML意味着有人在他们的站点上链接到您的图像,但在他们的站点上显示它。
您最终将支付带宽费用,并使内容看起来像站点的一部分。这通常在论坛和博客上完成。我强烈建议您在服务器的同一级别上阻止和停止图像盗链:
location /images/ {
valid_referers none blocked www.domain.com domain.com;
if ($invalid_referer) {
return 403;
}
}
20. 在防火墙级别限制每个IP地址的连接数
Web服务器必须监控连接并限制每秒连接数。这为101提供了服务。无论在访问Nginx服务器之前,pf和iptables都可以阻止最终用户。
Linux Iptables:每秒节流Nginx连接。
在以下示例中,如果IP在60秒内在端口80上进行了超过15次的连接尝试,则传入连接将被丢弃:
/sbin/iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set && \
/sbin/iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 15 -j DROP && \
service iptables save
21. 在某些浏览器中禁用内容类型嗅探
如果响应指定了错误的内容类型,浏览器可能会以意外的方式处理响应。
如果内容类型被确定为可呈现的基于文本的格式,则浏览器通常会尝试将响应解释为该格式,而不考虑实际响应内容。
此外,由
于特定浏览器的怪癖,某些其他指定的内容类型有时可能会被解释为HTML。这可能会导致"安全"内容(如图像)被呈现为HTML,从而在某些条件下启用了跨站脚本攻击。添加以下内容到您的配置:
add_header X-Content-Type-Options nosniff;
22. 启用跨站脚本(XSS)过滤器
将以下内容添加到您的配置文件中,以在您的Nginx Web服务器上启用X-XSS-Protection头。完成后,请保存更改并重新加载Nginx:
add_header X-XSS-Protection "1; mode=block";
23. 配置HTTP/2支持
HTTP/2是HTTP 1.x网络协议的继任者。HTTP/2广泛用于降低延迟,减少协议开销,添加请求优先级支持以及加快Web应用程序加载速度。
因此,与性能优化技术和策略保持最新状态是至关重要的。HTTP/2的主要重点是减少网页的总加载时间,从而优化性能。它还关注于使用网络和服务器资源,以及提高安全性,因为在使用HTTP/2时,SSL/TLS加密是强制性的。
作为前提条件,确保Nginx版本为1.9.5或更高,因为它是内置的。否则,您将不得不手动添加它,服务器必须启用SSL/TLS。您的HTTPS服务器块现在应该如下所示:
server {
listen 443 ssl http2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
}
24. 添加内容安全策略(CSP)
CSP是一种额外的安全层,有助于检测和缓解特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击。这些攻击用于数据窃取、网站损坏和恶意软件分发:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
25. 监控Nginx
必须始终监控服务器的状态。您可以定期向服务器发送请求来查看服务器返回的内容,例如通过第三方付费服务。或者您可以对一切进行微调,有许多方法可以实现这一点,更多详细信息可以在Nginx博客中找到。
总结
对于每种情况,都需要灵活发展配置是至关重要的。
本文介绍了如何通过Nginx配置实现IP白名单控制、访问权限管理、安全防护措施(如XSS过滤、CSP)、负载均衡、防火墙限制及内容安全策略,强调灵活配置和持续监控的重要性。
4104





