如何使用Nginx实现限制各种恶意访问

dafenqi
2023-12-29 / 0 评论 / 10 阅读 / 正在检测是否收录...

如何使用Nginx实现限制各种恶意访问

恶意访问是指某些攻击者针对某个网站或网络服务进行的一系列攻击,以获得非法的访问或攻击目标服务器,从而影响其正常运行。为了保护我们的服务器网络安全,我们需要限制这些恶意访问。Nginx 是一款优秀的开源 Web 服务器,它能够通过灵活的配置来防止各种恶意访问,下面将详细介绍如何使用 Nginx 实现限制各种恶意访问。

使用 Nginx 限制 IP

1. 配置 IP 黑名单

可以在 Nginx 的配置文件中添加 IP 黑名单,以限制恶意访问。打开 Nginx 配置文件(/etc/nginx/nginx.conf),在 http 部分添加以下代码:

http {
    ...
    # black list
    geo $not_allowed_ip {
        default 0;
        include /etc/nginx/not_allowed_ip.txt;
    }
    ...
}

以上代码中,我们定义了一个名为“$not_allowed_ip”的变量,并通过“geo”指令配置它的默认值和变量所需的文件路径。其中,“include”指令在“not_allowed_ip.txt”中包含要禁止的 IP 列表。

2. 编辑 IP 黑名单文件

在 Nginx 的配置文件中已经包含了 IP 黑名单,现在需要编辑“not_allowed_ip.txt”文件,以添加要限制的 IP 地址。可以使用以下命令打开该文件:

sudo nano /etc/nginx/not_allowed_ip.txt

然后,将要限制的 IP 地址添加到文件中,并以分号(;)分隔多个 IP 地址。例如:

192.168.0.1;
192.168.0.2;

编辑完成后,保存文件并关闭编辑器。

3. 添加 IP 限制规则

在 Nginx 的配置文件中,可以通过“if”指令添加 IP 限制规则。打开配置文件,添加以下代码:

http {
    ...
    server {
        ...
        # access control list
        if ($not_allowed_ip) {
            return 403;
        }
        ...
    }
    ...
}

以上代码中,我们在“http”块内添加了一个名为“server”的块,并在其中使用“if”指令限制了 IP。如果来自于“$not_allowed_ip”的 IP 访问了该服务器,就会返回 403 错误。

4. 重新加载 Nginx

在保存 Nginx 配置文件之后,需要重新加载 Nginx,以使其对新配置文件生效。可以使用以下命令重新加载 Nginx:

sudo systemctl reload nginx

这就是如何使用 Nginx 来限制 IP 的方法。

使用 Nginx 防御 DDoS 攻击

1. 配置限制并发连接数

您可以通过以下配置来限制来自单个 IP 的并发连接数:

http {
    ...
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    ...
    server {
        ...
        limit_conn conn_limit_per_ip 10;
        ...
    }
    ...
}

以上代码中,我们定义了一个名为“$binary_remote_addr”的变量,以保存远程 IP的二进制表示。使用“limit_conn_zone”指令,定义了一个名为“conn_limit_per_ip”的限制连接数的共享内存区域,其大小为10M。最后,使用“limit_conn”指令在“server”块内定义了连接限制规则。

2. 配置请求速率限制

您可以通过以下配置来限制每个 IP 的请求速率:

http {
    ...
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s;
    ...
    server {
        ...
        limit_req zone=req_limit_per_ip burst=10 nodelay;
        ...
    }
    ...
}

以上代码中,我们定义了一个名为“req_limit_per_ip”的请求数速率限制共享内存区域,其大小为10M,速率为每秒1个请求。“limit_req”指令已在“server”块内定义,将请求速率限制为10次每秒,而没有延迟。

3. 配置 Body Size 限制

如果您想要限制上传的文件大小,则可以使用“client_max_body_size”指令:

http {
    ...
    # limit body size
    client_max_body_size 10m;
    ...
}

以上代码中,我们使用“client_max_body_size”指令限制了上传的文件最大大小,为10M。

使用 Nginx 防御 SQL 注入和 XSS 攻击

1. 配置防止 SQL 注入

使用 Nginx 防止 SQL 注入攻击的方法之一是禁止某些字符或字符串。可以在 Nginx 的配置文件中添加以下代码:

http {
    ...
    server {
        ...
        if ($query_string ~ "union.*select.*\(") {
            return 403;
        }
        if ($query_string ~ "cookies|document|base64") {
            return 403;
        }
        ...
    }
    ...
}

以上代码中,我们使用两个“if”指令,用于检测 query_string 是否包含一些关键字,如“union”、“select”和“cookies”等。如果其中任何一个条件得到满足,就会返回 403 错误,并禁止访问该请求。

2. 配置防止 XSS 攻击

您可以使用以下 Nginx 配置代码来防止 XSS 攻击:

http {
    ...
    server {
        ...
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Frame-Options "SAMEORIGIN";
        ...
    }
    ...
}

以上代码中,我们使用“add_header”指令配置了三个 header。这三个 header 分别为:

  • X-Content-Type-Options:将值设置为“nosniff”,禁止浏览器读取匹配响应各种可能的 MIME 类型的响应数据。
  • X-XSS-Protection:将值设置为“1; mode=block”,启用 XSS 保护,并向浏览器发送阻止呈现页面的指令。
  • X-Frame-Options:将值设置为“SAMEORIGIN”,限制页面嵌入到同源或空源网页中。

以上就是使用 Nginx 防御 SQL 注入和 XSS 攻击的方法。

总结

本文讲解了如何使用 Nginx 实现限制各种恶意访问攻击,包括限制 IP、防御 DDoS 攻击、防御 SQL 注入和 XSS 攻击等。通过实现这些安全性措施,可以帮助您的 Web 服务更加安全,避免被网络攻击者攻击。希望本文能够对您有所帮助。

拓展

Nginx如何通过使用应用程序防火墙模块( WAF)防范Web攻击

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消